Strom fließt auch durch krumme Drähte !
Der Datasheet der RGBDIGITs entspricht genau dem Datasheet der
offensichtlich dort verbauten hintereinandergeschalteten intelligenten
RGB-LEDs, darum ist korrekt, dass für die Ansteuerung eines Digits
8x24 BITs gebraucht werden. Das Protokoll für eine 8-stellige Anzeige
besteht also in 64 Datenpaketen - Dauer mit Pause knapp 100 Mikro-
sekunden - also insgesamt für die Komplette Anzeigenaktualisierung
weit weniger als 10 ms. Die Interuptroutine von 1250ns muss reichen,
einen einzigen Spike zu senden und Longvariable um eine Stelle in
einen Ausgangspin zu schieben. Die 50 Mikrosekunden-Pause dient
dazu, die Longvariable (obwohl nur 3 Byte benötigt werden) neu
zu beschreiben. und einen Zeiger zu incrementieren.
Alle anderen Berechnungen befinden sich in der Hauptroutine.
Als Chip ist ein ATMega162 vorgesehen, wo genügend Speicher-
arrays etabliert werden können.
VG Micha
- - - Aktualisiert - - -
PS. In die Interruptroutine muss natürlich die Timervoreinstellung
noch rein. Ansonsten kann ich natürlich die Taktfrequenz noch
erhöhen, der genaue Wert ist für die im Projekt genutzten 2 UARTs
jeweils nur 1200 BAUD für RS232 und RS485.
VG Micha
Was brauche ich für Werkzeug - in dieser Reihenfolge seht ihr es:
Vorschlaghammer, Notebook, BASCOM, Lötequipment, Rohrzange, Bolzenschneider ...
Da gibt es aber keine Pause. Die 192 Bits müssen am Stück raus. Kommt da eine Pause drin vor, wird wieder die erste LED angesteuert.
Wenn man die Digits einzeln ansteuert, sind es 8 Datenpakete, eins pro Digit, mit einer Länge von 192 Bits.Das Protokoll für eine 8-stellige Anzeige besteht also in 64 Datenpaketen
Eigentlich macht man das aber anders. Man schaltet die Digits einfach hintereinander. Es sind ja "nur" 64 LEDs für die 8 Digits. In anderen Projekten werden 100 oder auch 200 LEDs so gesteuert. Ich hab eine Matrix mit 144 (12*12) LEDs in Betrieb, aber mit einer fertigen Library, deren innere Funktion ich nicht kenne. Das entspricht einer Anzeige mit 18 Digits.
Auf einem 8-Bitter werden aus einem Shift eines Longs 4 Shifts eines Bytes. Dazu braucht man noch einen Zähler, der die 24 Bit abzählt. Und da es diese "50 Mikrosekunden-Pause" nicht gibt, muß man sich in den 1250ns alle 24 Bits noch um das Nachladen kümmern. Dazu werden am Anfang des Interrupts noch einige Register gerettet, die am Ende wieder hergestellt werden müssen. Die Neopixel-Libraries schieben 1000 und mehr Bits in einem Rutsch raus.Die Interuptroutine von 1250ns muss reichen, einen einzigen Spike zu senden und Longvariable um eine Stelle in einen Ausgangspin zu schieben. Die 50 Mikrosekunden-Pause dient dazu, die Longvariable (obwohl nur 3 Byte benötigt werden) neu zu beschreiben. und einen Zeiger zu incrementieren.
MfG Klebwax
Strom fließt auch durch krumme Drähte !
Ich sehe - bis jetzt - im Datasheet immer noch die Pause
alle 24 BITs. Die einzelnen Segment-RGB-LEDs müsste
daher schaltungstechnisch als Einzelbauelemente
betrachtet werden. Also 64 Sendeprozeduren bei
8 DIGITs. Offensichtlich erfolgt die Adressierung so,
dass jede LED nur das erste 24 BIT-Datenpaket auswertet,
dann ausblendet und nur die restlichen weitersendet usw .
Meine neue Idee währe jetzt, während der Displayansteuerung
sämtliche Interrupts abzuschalten und wie folgt zu verfahren:
DIM IMPULS AS BIT(24)
.
FOR SEGMENT = 1 TO 24
PORTA.1 = BIT(SEGMENT) : Ausgabe der H/L-Torsteuerung
NOP : oder mehrere NOPs
TOGGLE PORTA.0 : Spike für die MMVs
TOGGLE PORTA.0 : gibt wohl dafür einen extra Befehl
NOP : oder mehrere NOPs
NEXT SEGMENT
VG Micha
werde
Was brauche ich für Werkzeug - in dieser Reihenfolge seht ihr es:
Vorschlaghammer, Notebook, BASCOM, Lötequipment, Rohrzange, Bolzenschneider ...
Muss leider zugestehen, dass BIT-Arrays nicht compiliert werden.
Das variablenbezoge Auslesen von LONG-BIT akzeptiert jedoch
der Compiler. Um die die og FOR-NEXT-Schleife umzuschreiben,
wollte ich im Vorfeld mittels Bascom-Simulator, die notwendigen
Taktzeiten ermitteln. Leider weiss ich nicht, wie das dort lösbar
ist, irgendwelche "clocks" zeigen 0 an, laufen jedoch biem Bewegen
des Mauszeigers auch nach dem Ende der Simulatin weiter.
Gibts da einen Trick? Im BASCOM-Help wurde ich nicht fündig.
VG Micha
- - - Aktualisiert - - -
Hab jetzt versucht, die Realtimevorgänge im BASCOM-Simulator
mit Auslesen des TIMER1 in etwa rauszukriegen. Scheint für
Zeitsimulationen ungeeignet zu sein. Wird wohl für weitere
Aussagen hierzu die Hardware besser entscheiden, sprich,
das ATMega8-Experimentier-Board.
VG Micha
Was brauche ich für Werkzeug - in dieser Reihenfolge seht ihr es:
Vorschlaghammer, Notebook, BASCOM, Lötequipment, Rohrzange, Bolzenschneider ...
Ohne Programmänderung hat bei meinem BASCOM-Simulator heute plötzlich
die Timerfunktion funktioniert. Leider war die Wiederholgenauigkeit teilweise
nicht akzeptabel. Heraugekommen sind jedenfalls Werte, welche eine viel
zu hohe Taktzahl für alle bisher avisierten Lösungen zur Ansteuerung der
RGB-DIGITs zur Folge haben (Jenseits von Gut und Böse). Ich verzichte aus
Zeigründen daher auf einen Hardwaretest und die Nutzung (trotz anfänglicher
Euphorie) der RGB-DGITs. Werde eine andere effektvolle Anzeigenform finden
VG Micha
Was brauche ich für Werkzeug - in dieser Reihenfolge seht ihr es:
Vorschlaghammer, Notebook, BASCOM, Lötequipment, Rohrzange, Bolzenschneider ...
Wenn du selber mit dem Timing nicht zurechtkommst, dann würde ich mir mal die Rainbow-Lib (RB_...) ab Bascom Version 2.0.8.0 ansehen. Die ist von einem cleveren Programmierer genau für die WS2812 Chips gemacht worden.
Ist zwar eigentlich für RGB Stripes gedacht, wird aber mit deinen RGB Digits genau so funktionieren.
Lesezeichen