Nun das wichtigste: Die Software für die Matrix - diese ist in Assembler geschrieben, jedoch auch für Anfänger geeignet, da Ihr daran ja nichts machen müsst (also an der Steuer-SW selbst).
Das einzige, was man als Anwender machen "muss" (das ist ja kein Zwang, macht ja Spaß), ist die Animationen zu erstellen, also nach vorgegebenem Muster Zahlen eintippen

- evtl. erbarmt sich ja jemand mal und schreibt einen Editor für den PC (so in der Art wie bei dem Cube) und stellt ihn hier rein - so würde ich mir so ein Forum wünschen, dass da auch ein Austausch stattfindet...
Unten anbei mal die SW als AVR-Studio-(gibt's bei Atmel.com)-Projekt, das kann man öffnen, dann stimmen schon alle Einstellungen. Bearbeiten (für eigene Animationen) müsst Ihr nur die "Beispiel.inc" - die Steuer-SW selbst belegt nur 324 Byte im Tiny, da ist also schon noch Platz....
Nicht durch den Namen irritieren lassen, die SW wurde ursprünglich für so eine Säule nach der Idee von Raimund entwickelt (die bei mir "Schneeflocke" heisst), geht aber für die Matrix genauso, weil elektrisch gesehen ist die Säule auch ne 5x8-Matrix...
Die .hex-Datei könnt Ihr dann gleich draufflashen (das ist die Beispielanimation) um mal zu sehen, was die Daten so bewirken, und ob die Matrix elektrisch OK ist...
Ansonsten nach Bearbeitung der Animationsdatei einfach F7 drücken ("Build") und die entstandene .hex-Datei mit Euren eigenen Animationen auf den Tiny schreiben (Ponyprog o.ä.).
Da es hier schon Probleme gab (Danke an Fightclub für's helfende Einspringen) noch mal der Hinweis: damit das korrekt läuft, muss der Tiny auf 8 MHz eingestellt werden (egal ob Ihr ne eigene Animation erstellt, oder nur für die Testdatei) - hier die entsprechende Einstellung der Fusebits in PonyProg:
Für andere Programme bitte anhand dessen selbst rausklamüsern, wie Ihr das einstellen müsst...
Zu beachten: Immer zuerst die Fusebits *lesen*, dann ändern (bei einem neuen Tiny muss eigentlich nur der CKDIV8 weggeklickt werden), und *dann erst* schreiben - ansonsten kann es sein, dass der Tiny unbrauchbar wird! - das kann ebenso passieren, wenn Ihr noch irgendwas anderes falsch anklickt, also hier bitte aufpassen!
Das Prinzip der Animationsdatei ist "dreistufig", und zwar wie folgt (in der Beispiel.inc von unten nach oben, evtl. diese dazu ansehen zum Verständnis):
1. Bilder
Es sind Bilder im Flash gespeichert, max. sind 256 verschiedene möglich - ein Bild besteht aus 5 Byte - die Bytes sind dabei die Spalten von links nach rechts, die Bits in den Bytes sind die Zeilen, dabei ist das MSB (Bit 7) unten - 5 Bytes untereinander kann man sich also wie die Matrix um 90° nach links gedreht vorstellen (man kann seine Bilder natürlich auch so machen, muss ja nicht Hochformat sein).
Diese 5 Byte hintereinander im Speicher:
|
Quellcode
|
1
2
3
4
5
|
00100000
01000000
11111111
01000000
00100000
|
wäre also ein Pfeil, der nach links zeigt (Matrix im Querformat) bzw. nach oben (Matrix im Hochformat).
Natürlich muss man das so reinschreiben, dass der Assembler das versteht - und ausserdem will er immer eine gerade Anzahl Bytes in einer Zeile, man kann also leider nicht einfach eine Zeile Zahlen pro Bild machen - ich habe daher immer 2 Bilder zusammengefasst, hier ein Beispiel:
|
Quellcode
|
1
2
|
.db 0b00000000, 0b00000000, 0b00000000, 0b00000000 ; 000 - LEER
.db 0b00000000, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b11111111 ; 001 - Full On
|
Im ersten Beitrag ist auch ein Thread verlinkt, in dem ein Matrixeditor zu finden ist (bitte selbst danach suchen!), den kann man auch verwenden, den Text den der ausgibt muss man dann so bearbeiten, dass er in obiges Schema passt.
Wichtig: jedes Bild muss nur einmal abgelegt werden - auch wenn in einer Animation z.B. 5x ein Kreuz vorkommt, muss dieses Kreuz nicht 5x im Speicher abgelegt werden, sondern nur einmal - das ist eine speichersparende Verbesserung gegenüber der ganz simplen Cube-SW, bei der stur Bilder nacheinander abgespielt werden.
2. Animationen
Diese Bilder werden nun zu Animationen zusammengefügt. Pro Bild/Frame ein Steuerbyte und die Bildnummer - Schema wie folgt (Beispiel):
|
Quellcode
|
1
|
.db 0b11100001, 1 ; Full On Up langsam
|
Funktioniert so: zuerst kommt ein Steuerbyte, dann die Nummer des Bildes - soll z.B. das erste Bild der Animation ein Kreuz sein, und dieses Kreuz hat die Nummer 2 (wäre dann das 3. Bild im Speicher, das erste Bild hat "computertypisch" die Nummer 0), also ".db -Steuerbyte-, 2"
Das Steuerbyte ist so aufgebaut:
yyyyyxxx
Die grünen Bits sind dabei für die Anzeigedauer - je größer die Zahl, die sich aus diesen 5 Bits ergibt, desto länger die Dauer... schaut Euch mal die Zahlen an und die Animation dazu, um ein Gefühl dafür zu bekommen...
die roten Bits steuern die Helligkeit - dabei bedeutet:
000 = normal, volle Helligkeit
001 = Fade up, Helligkeit steigt während der Anzeigedauer von 0 auf max.
010 = Fade down, Helligkeit sinkt während der Anzeigedauer von 0 auf max.
011 = *nicht verwendet*, da könnt Ihr Euch was überlegen....
100 = gedimmt, Helligkeit 1/5
101 = gedimmt, Helligkeit 2/5
110 = gedimmt, Helligkeit 3/5
111 = gedimmt, Helligkeit 4/5
Auch mit diesen 5 Stufen kann man schon was anfangen, im Video z.B. wo dieser "Sublime"-Schriftzug durchläuft und dabei pulsiert, das sind nur diese 5 Dimmerstufen... bei fade up und down werden jeweils 64 Stufen durchlaufen.
Wenn das Steuerbyte "0" ist, dann weiß die Steuer-SW, dass die Animation zu Ende ist... vor die Animation muss noch ein Name (darf keine Sonderzeichen enthalten ausser _), damit man diese dann auch ansprechen kann - auch hier wieder ein Beispiel:
|
Quellcode
|
1
2
3
4
5
|
atmen:
.db 0b11100001, 1 ; Full On Up langsam
.db 0b11100010, 1 ; Full On Down langsam
.db 0, 0 ; *** Ende Animation ***
|
Eine Animation kann beliebig viele Schritte haben, so viel, wie der Speicher hergibt...
Hierzu auch interessant: die Bilder aus dem Speicher können auch mit verschiedenen Effekten verschieden "zusammengebaut" werden: so greift z.B. die Animation "Geflimmer" (Beispieldatei) auf die selben Bilder wie die Animation "Geblubber" zu, nur halt in anderer Reihenfolge und mit anderen Effekten....
3. Programm (Ablauf)
Das Programm ist dann nur noch eine Aneinanderreihung von Aufrufen der Animationen - diese können beliebig oft in beliebiger Reihenfolge aufgerufen werden (nur durch den Speicher begrenzt)... vor dieser Liste muss "Programm:" stehen!
Die Animationen bekommen Namen (Adresslabel), mit diesen wird ein Zeiger geladen - daher rührt das "Animationsname*2", weil die Adresse ein Word ist, der Zeiger das aber in Bytes haben will...
Hier bedeutet das Word 0xFFFF (eine Adresse, die es im Tiny nicht gibt) dann das Ende des Programms, es beginnt wieder von vorne.
Hier noch die komplette Beispielanimation (nächster Beitrag, sonst zu lang, wären über 10.000 Zeichen

)
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Pesi« (9. April 2009, 19:04)