www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART-Empfang von 0x00-0xff


Autor: Dirk Wiebel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich versuche zur Zeit, ein 128x64er LCD mit Daten zu befuellen, die
ueber den UART auf meine AVR/LCD-Platine geschaufelt werden.

Dazu will ich die 8 Zeilen des KS0108-basierten Displays byteweise
beschreiben. Das funktioniert AVR-intern auch ganz gut. Wenn ich
allerdings die Daten vom PC (Linux) aus schicke, kommt nicht immer das
richtige an: von 0x00-0x0a kommt gar nix rueber, und ab 0x80 auch nicht
mehr so ganz das richtige.

Zum Versenden verwende ich das /dev/tty... -Interface; zur
Zeichengenerierung habe ich mir eine simple C-Schleife gestrickt, die
via putc Zeichen von 0x00-0xff and stdout ausspuckt. Der stdout wird
dann einfach umgeleitet.

Im AVR verwende ich einen einfachen (Ring-)Puffer mit einem Lese- und
einem Schreibzeiger. Die Daten werden in der Interruptroutine in den
Puffer geschrieben, der Schreibzeiger erhoeht. Im Hauptprogramm liest
der AVR die Daten aus und erhoeht den Lesezeiger. Overflows sind
ausgeschlossen.

Hat jemand eine Idee, was da schieflaufen koennte? Meine Grundannahme
Byte(PC) -> /dev/ttyUSB0 -> UDR -> Buffer -> Display scheint irgendwie
nicht so zu laufen.

Gruss,
Dirk

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dein Problem wird auf der PC-Seite liegen, die Software filtert
offensichtlich die Steuerzeichen unter 0x20 und unterstützt wohl nur
den 7bit-Zeichencode.
Lösung: auf PC-Seite ein anderes device benutzen, welches komplette
8bit-Binär-Übertragung unterstützt (mit Linux kenne ich mich gar nicht
aus), alternativ Ascii-Hex-Codierung benutzen, verdoppelt die
Übertragungsmenge, funktioniert aber garantiert.
Hat auch den Vorteil, dass du ordentliche Frames basteln kannst, da
nicht alle Zeichen benutzt werden. Also Startzeichen, Datenbytes,
Ende-Zeichen, evtl. noch Anzahl der zu sendenden Bytes, Checksumme
usw.
Also wenn du z.B. 0x0a übertragen willst, sendest du 0x30 (Ascii
"0"),0x41 (Ascii "A"). Auf der Gegenseite puzzelst du das wieder
auseinander.

Autor: Dirk Wiebel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Crazy Horse,

super, das ist der Hinweis, den ich gebraucht habe. Die Frames kommen
naemlich als naechstes dran, ich wollte aber vorher mal schauen, dass
die Uebertragung an und fuer sich klappt.

Weisst du, ob es da schon integrierte Sachen in der avr-libc oder
anderswo gibt? Vielleicht liesse sich das ganze ja auch mit irgendeiner
LZ-Kompression verbandeln, dann waere auch der Flaschenhals UART
umgangen.

Gruss und danke,

Dirk

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.