Hallo,
warum sendet man nach den Datenwörtern noch drei Dummybytes (0xAA) bei
der Senderoutine des RFM12B. Sende ich gar kein Dummybyte hinterher,
werden scheinbar Zufallswörter empfangen. Sende ich ein oder mehr
Dummybytes mit funktioniert es. Was passiert da genau? Muss da ein
Puffer gefüllt werden?
Gruß
Olli
Nein
Die Dummybytes dienen dazu, das sich das RFM Modul Synchronisieren kann.
Durch Bittoggeling also Abwechselnd 0 und 1 kann es sich perfekt ein
Tunen.
Alles was danach kommt wird somit korrekt empfangen...
Kannst du mir mal deine Initialisierung Posten?
Ich beschäftige mich derzeit auch mit den RFM12 Modulen.
Bei mir hapert es jedoch mit dem empfang.
Siehe hier: Beitrag "RFM12 Beispiel funktioniert nicht"
Hallo Claudio,
was die Synchronisation betrifft habe ich in der Initialisierungsphase 2
Synchronisationsbytes eingestellt. 0x2D ist standard und 0xD4 ist das
zweite Synchronisationsbyte. Beim Senden schicke ich drei 0xAA
Dummybytes voraus und mindestens eines nach den Datenbytes hinterher.
Von den 0xAA-Bytes ist im Datenblatt soweit ich es gelesen habe nicht
die Rede - wohl aber tauchen sie im Beispielcode auf: (Seite 16 -
RFM12B_code)
1
RF12_SEND(0xAA);//PREAMBLE
2
RF12_SEND(0xAA);//PREAMBLE
3
RF12_SEND(0xAA);//PREAMBLE
4
RF12_SEND(0x2D);//SYNC HI BYTE
5
RF12_SEND(0xD4);//SYNC LOW BYTE
6
RF12_SEND(0x30);//DATA BYTE 0
7
ChkSum+=0x30;
8
RF12_SEND(0x31);//DATA BYTE 1
9
ChkSum+=0x31;
10
RF12_SEND(0x32);
11
ChkSum+=0x32;
12
RF12_SEND(0x33);
13
ChkSum+=0x33;
14
RF12_SEND(0x34);
15
ChkSum+=0x34;
16
RF12_SEND(0x35);
17
ChkSum+=0x35;
18
RF12_SEND(0x36);
19
ChkSum+=0x36;
20
RF12_SEND(0x37);
21
ChkSum+=0x37;
22
RF12_SEND(0x38);
23
ChkSum+=0x38;
24
RF12_SEND(0x39);
25
ChkSum+=0x39;
26
RF12_SEND(0x3A);
27
ChkSum+=0x3A;
28
RF12_SEND(0x3B);
29
ChkSum+=0x3B;
30
RF12_SEND(0x3C);
31
ChkSum+=0x3C;
32
RF12_SEND(0x3D);
33
ChkSum+=0x3D;
34
RF12_SEND(0x3E);
35
ChkSum+=0x3E;
36
RF12_SEND(0x3F); //DATA BYTE 15
37
ChkSum+=0x3F;
38
RF12_SEND(ChkSum); //send chek sum
39
RF12_SEND(0xAA);//DUMMY BYTE
40
RF12_SEND(0xAA);//DUMMY BYTE
41
RF12_SEND(0xAA);//DUMMY BYTE
Meinen die anderen auch, dass es sich um Synchronisation handelt?
Grüße
Olli
Die Dummy-Bytes werden verschickt, damit man den Sender nicht zu zeitig
abschaltet und damit das letzte Byte abwürgt. Wenn der Schreibpuffer
wieder beschreibbar ist, heißt das ja noch nicht, dass der Sender schon
mit dem Versand des letzten Bytes auch wirklich fertig ist.
Man braucht übrigens, wenn ich mich recht erinnere, nur ein Dummy-Byte.
@ Gastino :
Ja, die Erfahrung, dass man nur ein Dummybyte braucht habe ich auch
gemacht.
@ Claudio :
Ich poste hier den Code, allerdings läuft der in einem Picoblaze ab und
ist per Hardware-SPI an das Modul gepappt. Ich schreibe demnächst auch
eine kleine Doku dazu, wenn ich daran denke poste ich dann noch den Link
hier.
Viel Erfolg damit:
Olli schrieb:> Ich poste hier den Code, allerdings läuft der in einem Picoblaze ab und> ist per Hardware-SPI an das Modul gepappt
Danke für den Code
Ich hab deine Initialisierung 1:1 Übernommen.
Auch das senden habe ich genau so gemacht.
Jedoch klappt es nicht :(
Meine Module liegen 5 cm voneinander entfernt.
Nach dem ich gesendet habe, lese ich beim empfanger Modul das
Statusregister aus. Diese zeigt merkwürdigerweise bei nach jedem senden
un auslesen etwas anderes an :S
Nach dem ich das Statusregister ausgelesen habe, springt nIRQ auf High
Die solange bis ich den RX Deaktiviere.
Sehr merkwürdig oder?
Olaf schrieb:> warum sendet man nach den Datenwörtern noch drei Dummybytes (0xAA) bei> der Senderoutine des RFM12B. Sende ich gar kein Dummybyte hinterher,> werden scheinbar Zufallswörter empfangen. Sende ich ein oder mehr> Dummybytes mit funktioniert es. Was passiert da genau? Muss da ein> Puffer gefüllt werden?
Richtig, wenn du den Sendepuffer des RFM12 verwendest, musst du an Ende
noch 2 (Dummy)Bytes in den Puffer schieben. Damit werden deine letzten 2
Datenbytes auch aus dem Puffer noch gesendet. Sonst bekommst du wie
beobachtet diese Zufallswörter, da die Daten im Puffer stecken bleiben.
Ob es 0xAA ist oder etwas anderes ist letztendlich egal.
Zu Beginn der Übertragung brauchst du die Dummybytes eigentlich auch
nicht zu übertragen, da der RFM 2 Dummybytes automatisch erzeugt. Bei
et=0 wird der Sendepuffer automatisch auf 0xAA gesetzt. Diese werden
dann beim Übertragen der Sync bytes gesendet.
Sörn schrieb:> Schonmal darüber nachgedacht eine fertige library dafür zu nehmen?
Kann man machen, muss man aber nicht. Manche haben auch den Anspruch,
detailliert zu verstehen, wie das funktioniert. Und das geht nun mal am
besten, wenn man es selber macht. Vom sportlichen Gedanken mal ganz
abgesehen...