ubuntuusers.de

LED Laufschrift über RS232 ansteuern

Status: Gelöst | Ubuntu-Version: Ubuntu 10.10 (Maverick Meerkat)
Antworten |

arnohr

Avatar von arnohr

Anmeldungsdatum:
18. Januar 2008

Beiträge: 589

Hallo Forum!

Ich habe hier vom Bekannten eine LED Laufschrift liegen, die ich über ne RS232 Schnittstelle ansteuern soll. Ziel ist es, nen kleines Programm zu basteln, welches jede Sekunde eine Int-Zahl um 1 erhöht. Jetzt wollte ich testweise einfach mal Daten manuell übertragen um rauszufinden wie das generell funktioniert. Nur ich werde hier gleich noch Wahnsinnig. Entweder kann ich Google nicht bedienen oder die Dokumentationslage ist einfach nur Sch***e.

Ich hatte ganz simpel per putty versucht auf die Schnittstelle zu schreiben, da passiert aber nüscht.

Das Panel scheint prinzipiell zu funktionieren, denn mit diesem prop. Windows-Tool kann ich eine neue Laufschrift übertragen: http://led-movingsign-2007.software.informer.com/

Das Einzige, was ich an Dokumentation zu dem Teil habe: http://dl.dropbox.com/u/858685/WL-Simple-Protokoll-einzeilig.pdf

Vom Produkt weiß ich auch nur, das es 24 LED Segmente a drei Farben hat und der Hersteller WeTelCo heißt...

auchfrager

Avatar von auchfrager

Anmeldungsdatum:
18. Juli 2007

Beiträge: 1293

Wohnort: Euskirchen

Ich habe mir mal ein Programm in Pascal geschrieben, mit dem man Sonderzeichen per Programm-Befehl writeln(); an einen Nadeldrucker schicken konnte. Das PDF sieht so aus wie die Tabelle zu meinem Drucker und zeigt wahrscheinlich Steuerzeichen. Wie wäre es, wenn Du Dein Skript man hier zum Lesen bereit stellst ?

posti

Anmeldungsdatum:
30. März 2009

Beiträge: 2087

Hi

Das Programm habe ich, da ich den Software-Informer (schon unter Win) nicht haben wollte, mal nicht angeschaut.

Die Dokumentation ist etwas mager, vor Allem bescheiden Kommentiert.

Funktioniert die Abfolge vom PDF auf einem anderen Rechner mit dem verlinktem Programm?

Wie viele Zeichen werden dort ausgegeben und Welche? Vll kann man daraus schließen, was der letzte Absatz im PDF für einen Hintergrund hat und auf die eigene Ausgabe anpassen.

Denke, bis zum 'Text als String' wird eine Art Initialisierung sein, Ausrichtung und Display-ID sollten aber angepasst sein.

arnohr

(Themenstarter)
Avatar von arnohr

Anmeldungsdatum:
18. Januar 2008

Beiträge: 589

Ich habe noch bisher noch nichts geschrieben, da ich derzeit total hänge...

Ich weiß nur, das ich irgendwie Daten über die RS232 Schnittstelle übertragen kann/muss. Aber in welcher Form, da bin ich noch auf der Suche nach. Ärgerlich ist, das ich nur diese eine Seite zu dem Produkt habe...

Deswegen war mein erster (leider erfolglose) Versuch die Daten per Terminal zu übertragen.

Alles was ich bisher weiß, ist das (und da korrigiere mich bitte!):

  • Zeichen für Zeichen übertragen wird.

  • die Zeichenfolgen offensichtlich als HEX vom Panel erwartet werden. So z.B. 000001FF, damit das Panel in den Empfangsmodus gesetzt wird.

  • WriteChar(); nach meinen Recherchen eine Funktion der Windows-API ist.

Ich habe bisher noch nie wirklich Hardware angesteuert und die RS232-Schnittstelle habe ich früher lediglich zum zocken mit Kollegen und heute für die Administration von Cisco-Hardware genutzt. In meinem Wahnsinn bin ich davon ausgegangen, das ich einfach ein Zeichen bzw. Zeichenfolge auf die serielle Konsole von /dev/ttyUSB0 gebe und das Panel bei Empfang das restliche erledigt.

arnohr

(Themenstarter)
Avatar von arnohr

Anmeldungsdatum:
18. Januar 2008

Beiträge: 589

Ähm...

Das fertige prop. Tool funktioniert WYSIWYG. D.h. gibst nen Text-String ein, sagst welche Farbe und schiebst das dann einfach (unter Angabe der seriellen Schnittstelle) auf das Panel. Das wars...

Also scheint die Schnittstelle wohl irgend einem Standard zu folgen, da das Tool wohl nicht ausschließlich für diesen Hersteller gedacht ist

gothic_mike

Avatar von gothic_mike

Anmeldungsdatum:
13. Juli 2006

Beiträge: 119

Wohnort: Olbernhau

Moin, versuch doch mal folgendes:

1
2
3
4
5
6
7
8
echo 0 > /dev/ttyUSB0
echo 0 > /dev/ttyUSB0
...
echo B > /dev/ttyUSB0
echo "Dein Text" > /dev/ttyUSB0
echo 3 > /dev/ttyUSB0
...
echo 4 > /dev/ttyUSB0

die drei punkte stehen für die weiteren befehlszeichen, war nur zu faul alles zu tippen. als displayID würd ich zum testen auf alle fälle 00 = alle nehmen!

viel erfolg noch!

arnohr

(Themenstarter)
Avatar von arnohr

Anmeldungsdatum:
18. Januar 2008

Beiträge: 589

Geht nicht, das hatte ich auch schon probiert.

Hatte mir dafür ein verdammt simples Script gebastelt: http://pastebin.com/3GDUxZRj

Habe jetzt auch endlich eine ordentliche Quelle gefunden: http://www.mikrocontroller.net/articles/Ports_benutzen_%28GCC%29#Serielle_Schnittstelle

posti

Anmeldungsdatum:
30. März 2009

Beiträge: 2087

Hi arnohr

Bei Deinem Bash-Script hast Du die Reihenfolge beim echo falsch, das > gehört hinter die Zeichen, die gesendet werden sollen.

MfG

arnohr

(Themenstarter)
Avatar von arnohr

Anmeldungsdatum:
18. Januar 2008

Beiträge: 589

Peinlich!

Wird geändert, wenn ich wieder daheim bin.

vinho

Anmeldungsdatum:
10. September 2010

Beiträge: 91

Du solltest beachten, dass 0 nicht das selbe ist wie '0'. Das erste ist ein Byte mit dem Wert 0, das zweite ist das ASCII-Zeichen '0' (also Byte mit dem Wert 48 bzw. Hexadezimal 30).

Am besten, du installierst das Paket python-serial und probierst folgendes Python-Skript:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python

import serial
import time

LEFT = '1'
RIGHT = '2'
CENTER = '3'

def show(ser, display_id, text, adjustment):
    ser.write('\x00\x00\x00\x00\x00\x01FF' + display_id + '\x02A0C207F00002359000' + adjustment + '\xFEE\xFDB' + text + '\x03\x00929\x04')

ser = serial.Serial('/dev/ttyUSB0')    # open first serial port at "9600,8,1,N", no timeout
id = '01'

show(ser, id, 'Willkommen', LEFT)
time.sleep(1)
for i in range(1, 20):
    show(ser, id, str(i), CENTER)
    time.sleep(1)

ser.close()

arnohr

(Themenstarter)
Avatar von arnohr

Anmeldungsdatum:
18. Januar 2008

Beiträge: 589

Haben wir dann auch festgestellt.

Ich habe den String, den das frei Tool auf die Serielle Konsole gibt, einfach mal aufgezeichnet und mit nem HEX-Editor angeschaut. Den dann mit der Doku verglichen.

Mit HTerm dann ein wenig rumgespielt, ASCII-Tabelle konsultiert und jetzt läuft es! Die Checksum hat uns dann zwar noch ein wenig in die Suppe gespuckt. Aber in der Doku ist anscheinend eine vorgegeben, welche aus Sicht des Panles immer "true" ist.

Danke für die Hilfestellungen und Anregungen!

Antworten |