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


von Dirk Wiebel (Gast)


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

von crazy horse (Gast)


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.

von Dirk Wiebel (Gast)


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

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.