Ja, då var man 15st bluetooth-moduler (class 2) rikare
-
- Inlägg: 2360
- Blev medlem: 16 september 2003, 17:18:13
- Ort: Dubai, United Arab Emirates
- Kontakt:
30 BGA punkter varav 10 st inte används till något.PatrikB skrev:Misstänkte att det var BGA, någon som vet hur många anslutningspunkter det är ?
Dom är 0.89 mm stora och sitter med 1.25 mm CC, dvs 0.35 mm avstånd mellan dom.
Dom sitter i två grupper. En grupp med 2x6 st och en grupp med 3x6 st.
Dom dom sitter i 2x6-gruppen kan man nog lösa på kablar på - virtråd är praktiskt tror jag i detta fallet. Men att komma år och löda på mittenraden i 3x6-gruppen blir inte kul. Som tur är så är det bara en eller två punkter i mittenraden som är viktiga.
Här är en del av koden, vet inte om den säger speciellt mycket men den fungerar iaf. Detta är taget ur ett större program som jag gjort så det kan saknas kod. Kan även tillägga att det är ingen lektion i att skriva bra C ; )
Kod: Markera allt
#byte ADCON0 = 0x1F // Kontrollregister 0 till ADC
#byte ADCON1 = 0x9F // Kontrollregister 1 till ADC
#byte ADRESH = 0x1E // Resultatregister H till ADC
#byte ADRESL = 0x9E // Resultatregister L till ADC
#byte RCSTA = 0x18 // Receiver status reg
#byte RCREG = 0x1A // Receiver reg
#byte TCREG = 0x19 // Transmitter reg
byte BTADR[6]; // Slave Adr
byte BTMADR[6]; // Master Adr
byte HANDLE[2];
//-----------------------RS232----------------------------------------------
// Circulär buffer för mottagna tecken kanal 0
byte FInRB0; // Pekar först i bufferten
byte LInRB0; // Pekar sist i bufferten
byte const NumInRBuf0 =16; // OBS 2^n
byte RxBuf0[NumInRBuf0 ]; // Bufferten
byte const RBMask0 = NumInRBuf0-1; // OBS 2^n-1
// Circulär buffer för att sända tecken kanal 0
byte FInTB0; // Pekar först i bufferten
byte LInTB0; // Pekar sist i bufferten
byte const NumInTBuf0 =16; // OBS 2^n
byte TxBuf0[NumInTBuf0 ]; // Bufferten
byte const TBMask0 = NumInTBuf0-1; // OBS 2^n-1
#int_tbe // Avbrottsrutin för sändning av data
tbe_isr() { // Async Serial Data Transmitted
if(FInTB0==LInTB0) {
disable_interrupts(INT_TBE);
} else {
TCREG=TxBuf0[FInTB0=(++FInTB0) & TBMask0];
}
}
void SendC0(byte b){ // Lägger en byte i databufferten för sändning
TxBuf0[LInTB0=(++LInTB0) & TBMask0]=b;
enable_interrupts(INT_TBE);
}
#INT_RDA // Avbrottsrutin för mottagning av data
ReceiveInt() {
RxBuf0[LInRB0=(++LInRB0) & RBMask0]=RCREG;
if (BIT_TEST(RCSTA,1)) { // check and clear overrun error
BIT_CLEAR(RCSTA,4);
BIT_SET(RCSTA,4);
};
}
byte NumInRB0(){ // Returnerar antalet byte i mottagningsbufferten
return (LInRB0-FInRB0) & RBMask0;
}
byte GetC0() { // Hämtar en byte ur mottagningsbufferten
return RxBuf0[FInRB0=(++FInRB0 & RBMask0)];
}
void EmptyBuffer(){ //Tömmer inbufferten
byte tmp;
while(numinrb0())
tmp=getc0();
}
//------------------------BT---------------------------------------------
short WaitForBTReply(byte n, long t){ //Väntar t ms på n byte i inbufferten
while(t && numinRb0()<=n){
delay_ms(1);
t--;
}
if(numinrb0() == n)
return 1;
while(numinrb0())
getc0();
return 0;
}
void ResetBTModule(){//Gör reset på BT-modulen
short ok=0;
byte i=0;
byte a[7] = {0x04,0x0e,0x04,0x01,0x03,0x0C,0x00};
for(i=3;i<7;i++)sendc0(a[i]);
if(waitforbtreply(7,100))
for(i=0,ok=1;i<7;i++)
if(getc0() != a[i]) ok = 0;
if(ok)
return 1;
return 0;
}
short GetBTDevAdr(){ //Hämtar BT:ns adress
short ok=0;
byte i=0;
byte a[7] = {0x04,0x0e,0x0a,0x01,0x09,0x10,0x00};
for(i=3;i<7;i++)sendc0(a[i]);
if(waitforbtreply(13,100))
for(i=0,ok=1;i<7;i++)
if(getc0() != a[i]) ok = 0;
if(ok){
for(i=0;i<6;i++)
BTADR[i]=getc0();
return 1;
}
for(i=0;i<6;i++)
BTADR[i] = 0x00;
return 0;
}
short SetBTEventFilter(){//Sätter upp eventfilter för kommunikation med mastern
short ok=0;
byte i=0;
byte a[7] = {0x01,0x05,0x0c,0x03,0x02,0x00,0x02};
byte b[7] = {0x04,0x0e,0x04,0x01,0x05,0x0c,0x00};
for(i=0;i<7;i++)sendc0(a[i]);
if(waitforbtreply(7,100))
for(i=0,ok=1;i<7;i++)
if(getc0() != b[i]) ok = 0;
if(ok)
return 1;
return 0;
}
short BTWriteScanEnable(){//Gör writescan enable för kommunikation med mastern
short ok=0;
byte i=0;
byte a[5] = {0x01,0x1A,0x0c,0x01,0x03};
byte b[7] = {0x04,0x0e,0x04,0x01,0x1a,0x0c,0x00};
byte c[4] = {0x04,0x03,0x0b,0x00};
for(i=0;i<5;i++)sendc0(a[i]);
if(waitforbtreply(7,100))
for(i=0,ok=1;i<7;i++)
if(getc0() != b[i]) ok = 0;
if(!ok) return 0;
if(waitforbtreply(14,10000)){
for(i=0,ok=1;i<4;i++)
if(getc0() != c[i]) ok = 0;
if(!ok) return 0;
HANDLE[1]=getc0();
HANDLE[0]=getc0();
for(i=0;i<6;i++)
BTMADR[i]= getc0();
return 1;
}
else return 0;
}
short ConnectToRemoteMasterAsSlave(){ //Kör hela uppkopplingen mot mastern
if(!resetbtmodule())
return 0;
if(!GetBTDevAdr())
return 0;
if(!SetBTEventFilter())
return 0;
if(!BTWriteScanEnable())
return 0;
return 1;
}
byte WaitForACLReply(){ //Väntar på svar efter att ha sänt ett ACL paket
short Ok=0;
long i=0xFFFF;
byte a[9] = {0x02,0x00,0x20,0x05,0x00,0x01,0x00,0x00,0x00};
a[1] = HANDLE[1];
while(i && !ok){
if(numinrb0() == 10){
Ok = 1;
}
i--;
}
if(Ok){
for(i=0,ok=1;i<9;i++)
if(getc0() != a[i]) ok = 0;
if(ok)
return getc0();
else
getc0();
}
else
emptybuffer();
return 0;
}
void SendACLByte(byte d){ //Skickar ett ACL paket med en data byte
byte i,j=1;
byte a[10] = {0x02,0x00,0x20,0x05,0x00,0x01,0x00,0x00,0x00,0x00};
a[9] = d;
a[1] = HANDLE[1];
do{
emptybuffer();
for(i=0;i<10;i++)sendc0(a[i]);
i = WaitForACLReply();
j--;
} While(j && !i);
emptybuffer();
}
Er som klagar på att det bara är 10m räckvid kan jag bara råda att ni ska modda dom för längre räckvidd 
PatrikB:
Vilkan BT-modul använder du?
Och för er andra som har frågar så säger jag: RTFM!
(Tankar upp all info jag hittat på min webserver och drar en edit med adress här så fort jag får tid/orkar)

PatrikB:
Vilkan BT-modul använder du?
Och för er andra som har frågar så säger jag: RTFM!

(Tankar upp all info jag hittat på min webserver och drar en edit med adress här så fort jag får tid/orkar)
-
- Inlägg: 3663
- Blev medlem: 11 september 2004, 09:30:42
- Ort: gbg
- Kontakt: