XBee Modul FF als erstes empfangenes Zeichen

#3899052
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?
#3899079
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?
Gast #3899099
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.
#3899133
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...

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