Hello guys.
Is somebody here who meet with RFM12b tranceiver module for wireless communication between devices?
I am doing program in C language for wireless communication and I have got a problem with recognization of bytes what i sent over.
This is side of transmitter:
I think that here is no problem{I apologize for czech language comments}
if (otocit==1)
{
writeCmd(0x8239); //stan se VYSILACEM
//zakazani vsech preruseni {ani citac neprerusi}
//_delay_ms(2000); //pauza pred vysilanim, nechapu proc, ale dulezita, bez ni to neslo
for(i=0;i<1000;i++) // prasacke, ale musim i tu nejak kontrolovat vstupy, cili misto delay 2000
for(j=0;j<300;j++)
{
if (bit_is_clear(PIND,0))
checkC1O(); //testuje otevreni dratu porad, kazdou vterinu odesle data na pager
if (bit_is_clear(PIND,1))
checkC2C(); //testuje spojeni dratu porad, kazdou vterinu odesle data na pager
} end of delay
writeCmd(0x0000);
cli();
rfSend(0xAA); // PREAMBLE
rfSend(0xAA);
rfSend(0xAA);
rfSend(0x2D); // SYNC
rfSend(0xD4);
rfSend(0x31); // dato o spojeni, tzv ACK
rfSend(c2c); //dato o spojeni okruhu
rfSend(c1o); //dato o rozspojeni okruhu
rfSend(0xAA); // DUMMY Bytes
rfSend(0xAA);
rfSend(0xAA);
for(i=0;i<1000;i++)
for(j=0;j<123;j++); //pauza po vysilanim, nechapu proc, ale dulezita, bez ni to neslo
otocit=0; // dont send data again
writeCmd(0x8299); //stan se PRIJIMACEM
sei(); //povoleni vsech preruseni {pro povoleni casovace}
if (citac==0) // zapnuti casovace
{
TCCR1B |= (1<<CS10);//|(1<<CS11); //nastaveni preddelicky na 64. Zakladni cas je cca 4,2s
TIMSK1 |= (1<<TOIE1); //pro vector preteceni v ISR
citac=1; //aby neinicializoval casovac pokazdem odeslani dat
}
}
This is side of Receiver:
and here I dont know how I can recognize each bytes (31h, c2c, c1c) what i sent over from transmitter.
…
writeCmd(0x8299); //BUD PRIJIMACEM
FIFOReset();
while(1)
{
//tu opet testuju, zda jse
BATERRY_PAGER_LED_ON; //tuto ledku si jen roziham, abych vedel, ze se to dostalo az sem
//ze BY MEL prijmat data a je aktivnim prijimacem
//V TOMTO whilu je asi problem, nevim jak prijmout dva bajty, jeden je od toho c2c
//druhy od c1o
//ten tranceiver ma fifo pro 16bytu. asi, takze to mosi staci, rozhodne jej tim prikazem
//fifo reset nesmim mazat mezi prijmem, ale to asi delam,
//no a kdyz se mi ty data rovnaji tak BY se meli rozit prislusne LED, jenze se
//roznou nekdy, aniz by sem zpusobil vyslani na druhe srane {rozpojil c1o, nebo spojil c2c}
data = rfRecv()
{
if (data==0x88)
{
C2C_LED_ON;
}
if (data==0x34)
{
C1O_LED_ON;
}
}
FIFOReset();
The function for rfRecv():
unsigned char rfRecvData() {
unsigned int data;
while(1) {
data = writeCmd(0x0000);
if ( (data&0x8000) ) {
data = writeCmd(0xB000);
return (data&0x00FF);
}
}
}
I add a tranceiver datasheet.
Thanks a lot. Luka
RF12B_code.pdf (332 KB)