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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.