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?
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.
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