Monday, February 15, 2021

Ein ATTiny85 als Funktionsdecoder

Warum?

In den Anfangszeiten unserer Anlage habe ich ein paar alte BTTB Personenwagen gekauft, die ich jetzt einmal mit einer Beleuchtung ausstatten wollte. Da wir ja bereits digital fahren, wurde nach einigem hin und her die Idee geboren, vor die LED-Beleuchtung auch noch einen (Funktions-)Decoder zu setzen, der zwischen Wagenbogen und Boden der Inneneinrichtung passen könnte. Da einfache Funktionsdecoder vergleichsweise teuer sind und den Preis pro Wagen weit übersteigen würden, habe ich mich nach einer Selbstbaualternative umgeschaut.
Neben den doch eher großen Arduino-Nano-Verschnitten kam dafür ein Digispark-Board in Frage, welches zumindest in der Variante als chinesischer Nachbau vertretbar ist.
Der Digispark besitzt einen einzigen Eingang mit Interrupt (als Eingang für das DCC-Signal; ein Interrupt wird benötigt, damit nicht immer der Status des Eingangs gelesen werden muss, sondern bei Veränderung des Eingangs automatisch eine Funktion aufgerufen werden kann) und 4 oder 5 Ausgänge (die ich aber erstmal einmal nicht alle brauche - ich will maximal 3 Ausgänge für die Innenbeleuchtung und die Wagenschlussbeleuchtung in beide Richtungen).

Der Bauplan

Als Grundlage habe ich also folgenden Bauplan gewählt:



Auf der linken Seite können wir den Gleichrichter sehen; im Gegensatz zur Skizze habe ich da einen S40 SMD Gleichrichter benutzt. Weiterhin kann man an der Unterseite der Skizze die Eingangsdiode erkennen, die zusammen mit der Spannungsteilerschaltung[1] R1/R2 auf Pin 2 des Digispark gelegt wurde (Pin 2 ist der Pin auf dem der Interrupt liegt). Links vom Digispark kann man den 7805 Spannungsregler[2] erkennen, der aus der Gleichspannung von ungefähr 14-16V die 5V Versorgungsspannung für den Digispark erzeugt. Direkt rechts neben dem Gleichrichter ist nun beispielhaft sowohl der Stützkondensator (C1) zu sehen, als auch ein BC547 Transistor mit Vorwiderstand R3 und die zu schaltende LED mit Vorwiderstand. Dieser letzte Teil würde für jede zu schaltende LED (Beleuchtung, Schluss- und Frontbeleuchtung) wiederholt, ich habe dies aber der Einfachheit halber weggelassen.

[1] Die Spannungsteilerschaltung habe ich später jedoch mit höheren Widerständen mit 2kOhm und 8kOhm verbessert um den Stromfluss zu verringern.
[2] Der 7805 ist relativ ineffizient und wird relativ schnell warm - deshalb habe ich ihn später durch einen Buck-Converter ersetzt - die kleinsten Buck-Converter die ich finden konnte waren in vergleichbarer Größe aber mit einem vielfach verringerten Stromverbrauch.

Die Software

Der Digispark wird nun mit der Arduino IDE mit dem source code aus diesem repo bespielt:

https://github.com/sengels/nagf2rpi-functiondecoder/blob/master/nagf2rpi-functiondecoder.ino

Dieser Code benutzt die Bibliothek nmradcc, die entweder direkt von github oder aus der Arduino-Bibliotheksübersicht benutzt werden kann.
Ein paar Änderungen müssen hierbei gemacht werden, die Funktion digitalPinToInterrupt existiert nicht für den Attiny85, deshalb muss dann auch eine andere Initialisierungsroutine aufgerufen werden als in dem ursprünglichen Beispiel.

Auf meinem Testgleis sieht das ganze nun folgendermaßen aus:

Test

Und nun?

Nachdem ich soweit war, habe ich mich nun doch entschlossen, nicht weiter mit dem Attiny85 zu arbeiten, die Nachteile sind nämlich relativ hoch:
  • Der Stromverbrauch des Digispark boards ist ziemlich hoch, ich habe im laufenden Betrieb deutlich über 30mA gemessen. Die LEDs für die Beleuchtung benötigen nur einen Bruchteil. Bei diesem hohen Stromverbrauch ist auch der Stützkondensator keine Hilfe mehr. Außerdem hatte ich zwischenzeitlich einen Arduino pro mini clone bestellt und diesen bei 3,3V mit ungefähr 2mA betreiben können.
  • Der Attiny/Digispark muss deutlich aufwendiger bespielt werden, der Standard-Kernel hat eine 6-sekündige Einschaltdauer, die halt bei jedem Kontaktverlust an der Schiene auftreten würden.
  • Der Preis für einen digispark ist immer noch sehr hoch und unterscheidet sich nicht von einem arduino pro mini (ungefähr 3-4€ pro Stück)
  • Ich habe leider mehrere Digisparks in Rauch aufgehen lassen (wenn man beim decoder halt die Anschlüsse vertauscht), werde aber keine weiteren Digisparks mehr kaufen.

Ich hoffe, diese Ausführungen helfen jemandem, vielleicht mache ich tatsächlich noch einmal ein youtube-Video dazu.


No comments:

Post a Comment