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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.