Forum: Mikrocontroller und Digitale Elektronik XBee Modul FF als erstes empfangenes Zeichen


von Tino K. (blumengiesser)


Lesenswert?

Ich habe einen Atmega 168PA der an ein XBee S1 verbunden ist (Rx, Tx). 
Dieser schickt periodisch Daten an ein anderes XBee Modul, welches per 
hterm an einem PC Hängt. Dasklappt super! Ich verusche nun den Rückkanal 
zu implementieren, sprich von hterm etwas zu schicken um darauf zu 
reagieren. Klingt nicht kompliziert, ist es auch nicht nur tritt das 
Phänomen auf, das der ankommende String als erstes Zeichen ein FF 
enthält oder nur aus einem FF besteht. Ersteres ist deutlich häufiger 
als zweiteres. Ich habe implementiert, dass einfach der rx-string wieder 
zurück geschickt wird. Jetzt habe ich ewig nach dem Fehler gesucht und 
keine Ahung warum es auftritt. Ich schicke vom hterm-Modul per Broadcast 
an alle Module (DL=FFFF). Daran sollte es doch nicht liegen, oder?

von Tino K. (blumengiesser)


Lesenswert?

ISR(USART_RX_vect) {

    static uint8_t uart_rx_cnt;     // Zähler für empfangene Zeichen
    uint8_t data;

    // Daten auslesen, dadurch wird das Interruptflag gelöscht
    data = UDR0;

    // Ist Puffer frei für neue Daten?
   if (uart_rx_flag==0) {
        // ja, ist Ende des Strings (RETURN=CR) erreicht?
        if (data=='\r') {
        uart_rx_buffer[uart_rx_cnt]='\0';
            // Flag für 'Empfangspuffer voll' setzen
            uart_rx_flag=1;
            // Zähler zurücksetzen
            uart_rx_cnt=0;
        }
        else if (uart_rx_cnt<(uart_buffer_size-1)) {     //wenn anzahl 
der zeichen kleiner sind als gesamtbuffergröße...
            // Daten in Puffer speichern
            // aber durch if() Pufferüberlauf vermeiden
      if (data != 0xFF) {
              uart_rx_buffer[uart_rx_cnt]=data;
              uart_rx_cnt++; // Zähler erhöhen
      }
        }
    }
}

So konnte ich das "Problem" umgehen, die Lösung ist mir aber immernoch 
fern. Hat jemand Ideen?

von Harald (Gast)


Lesenswert?

Oft ein Hardwareproblem bzw. ein fehlender Pullup. Stelle dir vor, dass 
XBee Modul ist auf der Seriellen schon empfangsbereit und aus 
irgendwelchen Gründen wird ein kurzer Low-Impuls erkannt bzw. der 
Eingang ist noch Low. Diese High-Low Flanke gilt als Beginn des 
Startbits und das Byte wird eingelesen. Inzwischen könnte der serielle 
Eingang wieder auf High sein, jetzt wird 8x High gelesen (FF) und das 
abschließende Stopbit (1) ist auch OK.

von Tino K. (blumengiesser)


Lesenswert?

Harald schrieb:
> Oft ein Hardwareproblem bzw. ein fehlender Pullup. Stelle dir vor, dass
> XBee Modul ist auf der Seriellen schon empfangsbereit und aus
> irgendwelchen Gründen wird ein kurzer Low-Impuls erkannt bzw. der
> Eingang ist noch Low. Diese High-Low Flanke gilt als Beginn des
> Startbits und das Byte wird eingelesen. Inzwischen könnte der serielle
> Eingang wieder auf High sein, jetzt wird 8x High gelesen (FF) und das
> abschließende Stopbit (1) ist auch OK.

Ohh, dann kann es an meiner Schaltung liegen? Ich habe den µC direkt an 
zwei AA Batterien und das XBee Modul per Step-Up Wandler an 3,2 Volt. 
Ohne Pullups... Je weiter die Batteriespannung absinkt, je höher wird 
die Differenz aber bis 0,7 * 3,2V sollte es doch gehen. Aktuell ist die 
Batteriespannung noch super...

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
Noch kein Account? Hier anmelden.