mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Daten via UART


Autor: Jürgen Berger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Morgähn,
ich möchte 3 Datenbyte via UART periodisch (alle 10s) an einen AVR via
UART senden.
Wie kann man sicherstellen, dass die Bytes dort korrekt ankommen.
Sollte man z.B. zuerst ein Byte mit 0x00 zur Synchronisation und dann
die 3 Datenbytes senden, oder welche Möglichkeiten gibt es noch?

Gruß
Jürgen

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die 3 bytes vom AVR zurückschicken und vergleichen.

Autor: FireFox (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jürgen,

ich denke am einfachsten wird es sein, wenn Du die Daten in ein kleines
Telegramm verpackst und eine Checksumme mit anhängst. Wenn die
Checksumme falsch ist, forderst Du das Telegramm einfach neu an.

Das Diagramm könnte z.B. so aussehen:

Byte1 Byte2 Byte3 Byte4 Byte5 Byte6
STX    DB1   DB2   DB3   Chk   ETX

Als STX (oder das Byte zur Synchronisation wie du es nennen würdest),
nimm aber kein 0x00, sondern irgend ein ASCII Zeichen, genauso für das
ETX.

Die einfachste Berechnung einer Checksumme ist die XOR Verknüpfung der
Datenbytes. Das machst Du dann einfach wieder am Empfänger und
vergleichst den gesendeten und den berechneten Wert.

Autor: Jürgen Berger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
erstmal Danke für die Antworten.
Die Datenverbindung soll nur in eine Richtung gehen (wie DMX)
und das wichtige Kriterium ist, dass die Reihenfolge der Bytes
DB1-DB2-DB3 immer richtig am Empfänger ankommt.

Gruß
Jürgen

Autor: Detlef Wilken (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Offensichtlich suchst Du eine sichere Möglichkeit zur Synchronisation.
Wie wärs mit Verwendung des Adressbis ? Ich habe für mein Projekt immer
das erste und das letzte Byte einer Botschaft mit dem 9. Bit (Adressbit)
versehen. Damit habe ich immer den Beginn und das Ende im Griff. Der
Vorteil dabei: Es wird kein Interrupt ausgelöst, wenn es sich nicht um
ein Byte mit Adressbit handelt

Es wird besonders dann interessant, wenn mehrere Controller an einem
Netzwerk arbeiten

Vielleicht kannst Du das Adressbit in dieser Hinsicht nutzen.

Gruß
Detlef

Autor: Jürgen Berger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Detlef,
das hört sich schon mal gut an.

Heisst das, wenn ich im Empfänger RXB8 enable wird solange
kein UART Interrupt ausgelöst, bis ein Byte mit TXB8 übertragen
wird?


Gruß
Jürgen

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.