ubuntuusers.de

String über COM-Port

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Zaidira

Avatar von Zaidira

Anmeldungsdatum:
15. Mai 2007

Beiträge: 35

Hi

Ich möchte einen Hexadezimalen String über den COM-Port (/dev/ttyS0) meines Rechners an ein Display (eDIP240-7) schicken. Die Programmiersprache die ich benutze ist Python. Das senden klappt an sich auch schon mit dem Programm PySerial. Das Dumme ist, dass das Display die Daten in einem bestimmten Format/ Protokollrahmen haben will. Der Aufbau wird in folgendem Datenblatt erklärt (ist leider etwas zu lang um das hier zu posten):

http://www.lcd-module.de/deu/pdf/grafik/edip240-7.pdf

Der String muss beim Senden beispielsweise so aussehen:

0x11 0xa 0x1b 0x44 0x4c 0x1b 0x47 0x44 0x0 0x0 0xef 0x7f 0xda

...um eine diagonale Linie von links-oben nach rechts-unten zu "zeichnen". Hoffe ihr könnt mir helfen.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4695

Wohnort: Berlin

Du möchtest keine Hexadezimalzahlen übertragen sondern Bytes. Deren Werte sind in der Anleitung halt auch Hexadezimal angegeben.

Zeichenketten sind in Python eigentlich Byteketten, d.h. jedes "Zeichen" stellt ein Byte dar. Hexadezimal kann man die mit der Escape-Sequenz \x angeben, also Dein Beispiel sähe so aus: '\x11\x0a\x1b\x44\x4c\x1b\x47\x44\x00\x00\xef\x7f\xda'. Da die Prüfsumme vom Inhalt des Pakets abhängt, brauchst Du noch ord() und chr() um zwischen Zeichen/Bytes und Zahlen zu wandeln.

Am besten schreibst Du Dir eine Funktion, die "Rohdaten" nimmt, und diese entsprechend in Pakete verpackt.

Zaidira

(Themenstarter)
Avatar von Zaidira

Anmeldungsdatum:
15. Mai 2007

Beiträge: 35

Marc 'BlackJack' Rintsch hat geschrieben:

Du möchtest keine Hexadezimalzahlen übertragen sondern Bytes. Deren Werte sind in der Anleitung halt auch Hexadezimal angegeben.

Zeichenketten sind in Python eigentlich Byteketten, d.h. jedes "Zeichen" stellt ein Byte dar. Hexadezimal kann man die mit der Escape-Sequenz \x angeben, also Dein Beispiel sähe so aus: '\x11\x0a\x1b\x44\x4c\x1b\x47\x44\x00\x00\xef\x7f\xda'. Da die Prüfsumme vom Inhalt des Pakets abhängt, brauchst Du noch ord() und chr() um zwischen Zeichen/Bytes und Zahlen zu wandeln.

Am besten schreibst Du Dir eine Funktion, die "Rohdaten" nimmt, und diese entsprechend in Pakete verpackt.

Danke das hat geklappt! ☺ Das mit dem ord() und chr() war mir schon klar, dass Problem lag allerdings darin, dass es bis eben nicht einmal klappte den Beispielstring, den ich hier gepostet habe, zu übertragen.

Antworten |