SX-Doppel-Led-Blinkdecoder
Wieder einmal war Dieter Sekunde der Ideengeber, weil auf seiner Anlage eine
Warn-Blinkanlage im Stil vergangener Epochen, ganz gemütlich Lichtzeichen
geben soll. In seinen Neusilber Ätz-Winzlingen hat keine Mini-Glühlampe genügend
Wohnraum, aber LED-Zwerge.
Gefragt ist nun eine Helligkeitssteuerung Im Warnzyklus von einigen Sekunden.
Also nicht nur Ein- und Ausschalten sondern "Fade in - Fade out" auf gut
Neudeutsch.
Der Warnzyklus hat 4 Abschnitte, Start bei beide LED's Aus;
LED 1 leuchtet auf, LED 2 aus;
LED 1 ist Ein, Led 2 leuchtet auf;
LED 1 wird dunkel, LED 2 ist Ein;
LED 1 ist Aus, LED 2 wird dunkel.
Zum Ende beide wieder Aus.
Für diese Aufgabe ist die Puls-Weiten-Modulation das probate Mittel und diese
Funktion
ist auch im ATTiny 2313 gleich mehrfach und in diversen Betriebsarten vorhanden.
Im einfachsten Fall, und den habe ich gewählt, ist das der Fast-PWM-Mode in
Timer0.
In dieser Betriebsart wird der Timer vom Prozessortakt mit einem Vorteiler (Prescale)
gesteuert und zählt zyklisch vor sich hin, von 0 bis 255 wie es sich für einen
8-Bit Timer
gehört, solange er eingeschaltet ist.
Für die PWM-Funktion dienen zwei Vergleichsregister, OCR0A und OCR0B. Der
Timer
kann nicht nur einen Interrupt bei Overflow (Zählwert 256) erzeugen, sondern
auch, wenn
Gleichstand zwischen dem Zählwert und einem Vergleichsregister besteht.
Im Mikro können sogar dafür vorgesehene I/O-Pins automatisch geschaltet werden,
ich habe
den "disconnected" Mode 0 gewählt und schalte die LED-Ansteuerungspins "zu Fuss"
im
entsprechenden Interrupt. So kann ich die Pins meiner Wahl nehmen, und an das
Servo-
Decoderplatinchen anpassen.
Bleibt noch die Aufgabe die OCR-Werte zeitlich so zu verändern, dass sich der
gewünschte
Helligkeitsverlauf im Warnzyklus ergibt. Als Zeitbasis verwende ich den SX-Takt
von 50uSek.
Ein 16-Bit-Zähler wird im Takt incrementiert und bei Erreichen des eingestellten
Intervalls
bekommen die OCR's einen neuen Wert.
Diese Werte sind in einer Tabelle "bltab [32]" abgelegt. Die Werte steigen aber
nicht linear,
sondern exponentiell, d.h. benachbarte Werte unterscheiden sich um einen
konstanten Faktor,
der sich aus Endwert ^ 1 / Stufenanzahl berechnet. Für den 8-Bit-Timer mit 32
Stufen ist das:
255 ^ 1/32 = 1,18906.
Das Multiplikationsergebnis wird auf eine Ganzzahl gerundet, und fertig ist die
Tabelle, mit
theoretisch passenden Werten zu der Helligkeitsempfindlichkeit unserer Augen.
Denn aus den exponentiell steigenden Lichtströmen wird die linear steigende
Helligkeit im
Kopf des Betrachters.
Leider sind aber die Kennlinien der LED's auch ein wenig "krumm", was ja
eigentlich beim
PWM-Dimmen bzw. "faden" keine Rolle spielen sollte, weil immer der gleiche Strom
fließt, nur
unterschiedlich lange, und das Auge samt Hirn, die Integration übernimmt, wie im
Kino!
Wie auch immer, dem Spieltrieb eines Modellbauers wird man nur gerecht, wenn er
selbst
die Parameter bestimmen kann, und das, wenn möglich, einigermaßen übersichtlich
und bequem.
Die PC-Programmiersoftware:

Natürlich ähneln sich die Programme zur Parameterübergabe,
denn die Aufgabe ist prinzipiell
immer die gleiche. Die Programmierung ist im Wesentlichen anpassen und kopieren
von
Codeschnippseln. Erstaunlich wie viele versteckte Fehlerteufelchen sich trotzdem
einschleichen.
Meine Programme scheinen sie besonders zu mögen! Teufel auch !!
Die Bedienung ist simpel:
Com wählen,
Start Lesen,
Helligkeitswerte abrufen.
Zu variieren sind:
Adresse, im grünen Editierfeld, Adr. Senden
Nummer des Steuerbit in der Basisadresse, sofort wirksam,
Blinkzeit, bzw. Ablaufzeit für einen Warnzyklus, sofort
wirksam,
Helligkeitswerte in der Tabelle, nach Doppelclick im Decoder
wirksam,
Bitstellen der Basisadresse, sofort auf dem SX-Bus
Speichern der aktuellen Werte im Decoder im EEPROM mit Bestätigung.
Zum Probieren die Dateien:
sx_blinki.asm
SX_Blinki.hex
SX_Blinki.eep
Für das XP-PC-Programm bitte um eine Anfrage per mail.
Winfried Steinhart, im Februar 2009