Amtega644a und RFM12

OP #4109640
Lesenswert?
• ▲
▼
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
OP #4110040
Lesenswert?
• ▲
▼
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
}
#4110150
Lesenswert?
• ▲
▼
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.
OP #4110376
Lesenswert?
• ▲
▼
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!
#4110382
Lesenswert?
• ▲
▼
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren