XBee Modul FF als erstes empfangenes Zeichen

OP #3899052
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?
OP
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
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.
OP
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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.