Hallo, ich bin gerade am Zweifeln meiner Arbeit. Mittlerweile kann ich mit meinen RFM12 Modulen kommunizieren. Soweit gut. Aber, ich möchte ein Modul dazu verwenden, die Daten von zwei anderen Modulen zu sammeln. Modul1 = Auswerter Modul1 sendet an Modul2 und Modul 3 einen Wert auf den diese reagieren. OK! Modul 2 empfängt. Funktioniert! Modul 3 empfängt. Funktioniert! Modul1 wartet auf Empfang. Funktioniert. Modul 2 sendet ("A\n"). Funktioniert. Modul 1 empfängt und vergleicht ob es sich um ("A\n") handelt. hier hakt's Modul 1 empfängt zwar etwas, aber dieses ist der Meinung, dass es sich hierbei nicht um ("A\n") handelt. Modul 3 sendet("B\n) Funktioniert. Modul 1 empfängt und vergleicht ob es sich um ("B\n") handelt. hier hakt's Eswird zwar ebenfalls etwas empfangen, aber laut Modul 1 kein ("B\n"). Ich bin mir aber sicher, dass ("A\n") bzw. ("B\n") ausgesandt wird. Wenn ich nämlich folgendes mach funktioniert es: Modul 1: sendet an Modul2 dessen Startwert. Funktioniert! Modul 2 erkennt diesen, und sendet ("A\n") aus. Funktioniert! Modul 3 ist auf Empfang eingestellt. Funktioniert. Modul 3 empfängt das ("A\n). somit funktioniert es und ich kann sicher sagen, dass das richtige gesendet wird. Zusammengefasst lässt sich sagen, wenn ich etwas sende, und dann auf empfang umstelle, wird das empfangene nicht richtig erkannt. Was kann daran schuld sein? Noch einen schönen Abend
Zeig doch mal deinen Quellcode. Haben die Module 2 und 3 bis auf den unterschied, das sie jeweils auf einen anderen "Startwert" reagieren den gleichen Code?
So sieht der Sende & EmpfängerCode aus void rf12_txdata( char *data, unsigned char number) { unsigned char i; rf12_trans(0x8238); // TX on rf12_ready(); rf12_trans(0xB8AA); rf12_ready(); rf12_trans(0xB8AA); rf12_ready(); rf12_trans(0xB8AA); rf12_ready(); rf12_trans(0xB82D); rf12_ready(); rf12_trans(0xB8D4); for (i=0; i<number; i++) { rf12_ready(); rf12_trans(0xB800|(*data++)); } rf12_ready(); rf12_trans(0x8208); // TX off } void rf12_rxdata( char *data, unsigned char number) { unsigned char i; rf12_trans(0x82C8); // RX on rf12_trans(0xCA81); // set FIFO mode rf12_trans(0xCA83); // enable FIFO for (i=0; i<number; i++) { rf12_ready(); *data++=rf12_trans(0xB000); } rf12_trans(0x8208); // RX off }
Marian S. schrieb: > for (i=0; i<number; i++) > { rf12_ready(); > rf12_trans(0xB800|(*data++)); > } > rf12_ready(); > rf12_trans(0x8208); // TX off Da fehlen noch zwei Dummy Bytes. Der RFM12 hat einen 16 Bit breiten FIFO,du schaltest den Sender aus, aber es können noch Daten im FIFO sein, die noch nicht gesendet sind. daher:
1 | for (i=0; i<number; i++) { |
2 | rf12_ready(); |
3 | rf12_trans(0xB800|(*data++)); |
4 | }
|
5 | rf12_ready(); |
6 | rf12_trans(0xB800); // Dummy 1 |
7 | rf12_ready(); |
8 | rf12_trans(0xB800); // Dummy 2 |
9 | rf12_ready(); |
10 | rf12_trans(0x8208); // TX off |
Siehe meinen Beitrag hier: Beitrag "Re: Checksumme RFM12" Was passiert denn wenn du zuerst B abfragst, und dann A. Vielleicht schaltet B nicht schnell genug wieder in den Empfangsmodus um, nach dem es die Nachricht von A bekommen hat, die nicht für ihn bestimmt war.
:
Bearbeitet durch User
Schönen Dank, habe die Änderung so wie vorgeschlagen gemacht. Keine Veränderung. Dass zuerst B und dann A senden ist egal, ich merke ja dass etwas ankommt. Überhaupt geht mittlerweile etwas nicht. Zur Zeit ist es so, dass ich bei der Empfängerplatine genau einmal etwas empfange und es ist dass, was es sein soll. Ab dem zweiten mal empfangen, bekomme ich zwar etwas, aber wenn ich es dann mit dem Soll vergleiche, stimmt es nicht! Irgendwo muss da ja ein größerer Fehler liegen. Bitte um Mithilfe!
Hallo, Christian K. schrieb: > Da fehlen noch zwei Dummy Bytes. Der RFM12 hat einen 16 Bit breiten > FIFO,du schaltest den Sender aus, aber es können noch Daten im FIFO > sein, die noch nicht gesendet sind. es hat sich zwar mit den Dummy Bytes irgendwie eingebürgert, richtig wäre aber, abzufragen, ob der Sender fertig ist, müßte Bit 6 im Statusbyte sein, FIFO Empty. Gruß aus Berlin Michael
Michael U. schrieb: > es hat sich zwar mit den Dummy Bytes irgendwie eingebürgert, richtig > wäre aber, abzufragen, ob der Sender fertig ist, müßte Bit 6 im > Statusbyte sein, FIFO Empty. Und genau das habe ich in meinem verlinkten Beitrag auch erwähnt.
Ich meine, den schuldigen gefunden zu haben. Die Empfängerplatine dürfte an einem Defekt leiden. Diese ist etwas anders aufgebaut, sie hat weitere Anschlüsse. Unter anderem an eine serielle Schnittstelle. Danke für die Hilfe
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.