Gast
#1713249
Hallo Leute,
ich habe hier zwei RFM12 Module die für mich Daten übertragen sollen.
Codebeispiele gibt es ja genug sodass ich das auch recht schnell zum
Laufen gebracht habe.
Mein Frame ist folgendermaßen aufgebaut:
Das erste Byte teilt dem Empfänger mit, wieviel Bytes empfangen werden
sollen. Dann folgen die Datenbytes und 2 CRC16 Bytes.
Aktuell arbeite ich mit einer Baudrate von 19200Baud
Zu meiner Routine:
Ich habe unten mal meine Empfangsroutine gepostet. Diese wird quasi in
meiner Main-Funktion kontinuierlich aufgerufen. Ich habe alles
unwichtige rausgeschmissen und empfange nur das erste Byte, welches ich
über die UART an ein Terminalfenster schicke.
So kann ich immer nachvollziehen, wieviel Bytes der Empfänger in diesem
Falle empfangen möchte.
Verschicke ich über den Sender 1-11 Bytes (+erste Byte+2Bytes CRC =
4-14Bytes), macht der Empfänger alles korrekt und zeigt die richtige
Datenmenge an.
Bei 12 Bytes (gesamt 15Bytes) macht er es zu ca. 50% richtig. Zeigt also
richtigerweise eine 12 an oder fälschlicherweise eine 6.
Bei 13 (gesamt 16Bytes) oder mehr Bytes wird nichts mehr empfangen.
Ich vermute ein Timingproblem.
Kann es sein, dass ich den Fifo irgendwie überlaufe oder sowas??
Hoffe ihr könnt mir ein Denkanstoß geben :)
MFG
void rf12_rxdata() {
int i,data,crc;
rfm12_send_cmd(0x82C8); // RX on
rfm12_send_cmd(0xCA81); // set FIFO mode
rfm12_send_cmd(0xCA83); // enable FIFO
rfm12_ready();
data = (unsigned char) (rfm12_send_cmd(0xB000) & 0x00FF);
if (data != 0) {
while (!(UCSRA & (1<<UDRE)));
UDR = data;
}
rfm12_send_cmd(0x8208); // RX off
}