Forum: Mikrocontroller und Digitale Elektronik LED Laufschrift Programmierung von "Grafiken"


von der d. (derdaani)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich versuche mich daran, die LED Laufschrift Mc Crypt 590998 per 
Processing (simple, auf Java basierende Sprache) direkt anzusteuern: 
http://www.conrad.de/ce/de/product/590998/LED-LAUFSCHRIFT-ROT

Das Ansteuern und Einspielen von Text funktioniert schon wunderbar. Die 
Laufschrift kann aber auch Grafiken ausgeben. Im beiliegenden Data Sheet 
wird der Aufbau von Grafiken beschrieben (Seite 13-14). Leider komme ich 
mit der Beschreibung überhaupt nicht zurecht.

Ich bin für jeden Tipp dankbar, in welcher Form ich Grafiken 
programmieren muss, um diese auf der Laufschrift anzeigen zu können!

von Karl H. (kbuchegg)


Lesenswert?

der daani schrieb:

> Laufschrift kann aber auch Grafiken ausgeben. Im beiliegenden Data Sheet
> wird der Aufbau von Grafiken beschrieben (Seite 13-14). Leider komme ich
> mit der Beschreibung überhaupt nicht zurecht.

Welchen Teil hast du den verstanden?
Eigentlich ist das doch ziemlich einfach aufgebaut. MIt dem Verständnis, 
wie sich Bits zu Bytes zusammensetzen und der Info aus dem Datenblatt, 
welches Bit jetzt mit welchem Pixel (und dessen Farbe) korrespondiert, 
ist das nicht weiter kompliziert.

von Christian B. (casandro)


Lesenswert?

Die typische Herangehensweise ist es, einmal Muster darstellen zu 
wollen, die man einfach wiedererkennen kann. Beispielsweise $f0 oder 
$33-Bytes, welche unterschiedlich breite Streifen ergeben. Und dann 
einfach ausprobieren. Echo hat die Möglichkeit, dass Du auch Binärdaten 
ausgibst. Probier einfach so lange bis Du das verstanden hast.

von der d. (derdaani)


Lesenswert?

Hallo Karl Heinz, danke für die prompte Antwort!

Soweit ich es verstehe, ist die gesamte Laufschrift in Blöcke von 
jeweils 8x8 Pixeln aufgeteilt (aufgrund der Breite der Laufschrift in 
meinem Fall nicht 4 Blöcke, sondern 10).

Danach wird es aber ziemlich dunkel. Die Pixel sind nach dem Schema D0 
bis D255 benannt, wobei 4 Pixel in einem Byte repräsentiert werden. 
Einerseits verstehe ich das nicht so recht und andererseits weiß ich 
damentsprechend natürlich nicht, wie ich das in Code umsetzen soll.

Vielleicht hilft es, mein Grundlagenverständnis hier kurz abzugleichen:
Ein Bit kann 0 oder 1 sein. Ein Byte besteht aus 8 Bits. Im Data Sheet 
wird allerdings von 4 Bit pro Byte gesprochen!?

Bitte entschuldige, falls das dumme Fragen sind. Ich habe erst vor 
einigen Tagen damit begonnen, mich mit dem Thema Mikrocontroller 
auseinanderzusetzen (aber schon wahnsinnig Spaß daran gefunden!).

von Andreas B. (andreas_b77)


Lesenswert?

4 Pixel pro Byte. Jedes Pixel besteht aus 2 Bit für die 4 Zustände.

von Christian B. (casandro)


Lesenswert?

(Ahh ich glaube ich verstehe das Problem. Da es schwierig ist beliebige 
Bytes über eine serielle Schnittstelle zu übertragen beschränken die 
sich anscheinend auf druckbare Zeichen aus ASCII, die gehen immer.

Entweder die Übertragen das Bitmuster Hexadezimal, oder die werten 
einfach nur die 4 untersten Bits aus.)

Mist, DX sind wirklich Pixel. Andreas hat Recht.

von Karl H. (kbuchegg)


Lesenswert?

der daani schrieb:
> Hallo Karl Heinz, danke für die prompte Antwort!
>
> Soweit ich es verstehe, ist die gesamte Laufschrift in Blöcke von
> jeweils 8x8 Pixeln aufgeteilt (aufgrund der Breite der Laufschrift in
> meinem Fall nicht 4 Blöcke, sondern 10).

Davon kann ich im Datenblatt nichts sehen.
Das Datenblatt sagt, dass es Graphic-Blöcke gibt, von denen jeder 32*8 
Pixel gross ist, organisiert in 8*8 Einheiten.

Ein Graphic-Block ist wohl eher sowas wie ein Gestaltungselement und 
umfasst keineswegs den kompletten 'Bildschirm'

> Danach wird es aber ziemlich dunkel. Die Pixel sind nach dem Schema D0
> bis D255 benannt

D steht einfach für Daten

> Einerseits verstehe ich das nicht so recht und andererseits weiß ich
> damentsprechend natürlich nicht, wie ich das in Code umsetzen soll.

Schau dir die Zeichnung an
Da ist ganz klar durchnummeriert, wie die einzelnen Dxx sich auf die 
Pixel aufteilen. Wenn jetzt noch dazukommt, dass jedes Dxx aus 2 Bit 
besteht (wegen der Farbe), dann ist doch ganz klar, wie sich eine 
Abfolge von Bytes auf die Pixel aufteilt.


In Code setzt du das erst mal gar nicht um, sondern man fängt damit an, 
dass man sich auf karriertem Papier ein entsprechendes Raster 
aufzeichnet und dort markiert, welche LED in welcher Farbe leuchten 
soll. Und dann geht man, so wie in der Zeichnung gezeigt, die einzelnen 
Kästchen durch und fügt die Bits entsprechend ihrer Farbe aneinander. 
Noch in 8 Bit Blöcke (wegen der Bytes) aufteilen und schon hat man die 
Hex-Codes der 64 Bytes, die nach dem Block-Kommando gesendet werden 
müssen und so einen Graphic Block definieren.
Und dann programmiert man das, dass genau diese Hex-Codes gesendet 
werden.

So wie ich das verstehe, ist damit der Block aber nur definiert. 
Spannender ist jetzt die Frage, wie man ihn zur Anzeige bringt. Dazu ist 
ja ein Beispiel im Datenblatt angegeben.

von Karl H. (kbuchegg)


Lesenswert?

Christian Berger schrieb:
> (Ahh ich glaube ich verstehe das Problem. Da es schwierig ist beliebige
> Bytes über eine serielle Schnittstelle zu übertragen beschränken die
> sich anscheinend auf druckbare Zeichen aus ASCII, die gehen immer.

Woraus schliesst du das?

> Entweder die Übertragen das Bitmuster Hexadezimal, oder die werten
> einfach nur die 4 untersten Bits aus.)

Auch das nicht.
Jedes Pixel kann 4 Farben haben. Daher 2 Bit pro Pixel. Daher passen in 
1 Byte 4 Pixel hinein. Und die sind einfach zeilenweise hintereinander 
gestellt, so wie in der Zeichnung gezeigt. Die ersten 2 Byte sind die 8 
Pixel in der ersten Zeile, die nächsten 2 Byte die 8 Pixel in der 
nächsten Zeile usw. Bis man in der 8. Zeile angelangt ist, dann geht das 
Spiel mit den nächsten 8 Pixelspalten wieder von vorne los. 4-mal 
insgesamt.

von Christian B. (casandro)


Lesenswert?

Karl Heinz Buchegger schrieb:

> Woraus schliesst du das?

Das war ein Irrtum.
Inzwischen habe ich den Text auf Seite 14 gesehen, in dem Dx als Pixel 
definiert ist, nicht als Datenbit.

Das habe ich aber eigentlich korrigiert und den Text in Klammern 
gesetzt, und unten korrigiert.

von der d. (derdaani)


Lesenswert?

Hallo Andreas, Christian und Karl Heinz,

erstmal vielen Dank für die schnellen und geduldigen Antworten für einen 
überforderten Anfänger!

Wenn ein Graphic Block aus 8x8 Pixeln aufgebaut ist (das Bild mit dem 
"Gestaltungselement hat mir sehr geholfen), entspricht dann ein Pixel 
einer LED im Laufband?

Bezüglich der Farbe: Mein Laufband "kann" nur rot. Stelle ich dann eine 
leuchtende LED mit 10 10 10 10 dar?

Danke für den Tipp bezüglich des Vorgehens. Um die Funktionsweise zu 
verstehen würde ich zunächst gerne ein ganz einfaches Muster 
(abwechselnd eine LED an - eine aus) realisieren.

von der d. (derdaani)


Lesenswert?

Ich habe zwischenzeitlich - abgesehen vom Versuch, mit Hilfe Eurer 
Antworten den prinzipiellen Aufbau zu verstehen - einen weiteren Versuch 
gemacht: mit der Laufschrift kam das Editor-Programm "NewSign 03127 or 
03128". Per USB Port Monitor habe ich die Kommunikation zwischen dem 
Tool und der Laufschrift mitgeloggt.

Bei der Übertragung an die Laufschrift finden sich an der Stelle, an der 
die Informationen bezüglich Grafik auftachen sollten, diese 
Informationen:
1
¨ ¨*(((*(*        ¨ª¨ª  ª ª ª
Wisst Ihr was es damit auf sich hat?

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.