Freitag, 20. Dezember 2019

Arduino UNO R3 / ATtiny - Sketch für Faller 120120 Stellwerk

Faller H0 120120 - Stellwerk "Mittelstadt"

In meinem Post zum Faller Stellwerk 120120 Klick hier! habe ich das beleuchtete Stellpult gezeigt. Es werden diverse Weichenstellungen und Fahrstrassen simultan angezeigt. Die Steuerung der LED´s übernimmt ein ATtiny84, den ich mit dem Arduino UNO R3 programmiert habe. Eine Anleitung dazu habe ich hier gepostet: ATtiny 84 mit dem Arduino UNO R3 programmieren.

ATtiny84 Ports vs. SMD LED´s!


Die Schaltung habe ich auf eine Streifenrasterplatine aufgebaut. Zu sehen sind auf der Platinenoberseite der ATtiny84A, ein Spannungsregler 12V für die direkte Ansteuerung der SMD LED - Aussenlampe und der Spannungsregler 5V für die Spannungsversorgung des ATtiny84A und die daran angeschlossenen SMD LED´s. Auf der Platinenunterseite (nicht im Bild) befinden sich die benötigten SMD Widerstände. Damit die Ausleuchtung nicht so hell ist habe ich für die SMD LED´s 0604 Orange je 1kOhm und für die 0604 Warmweiß je 4,7kOhm verwendet.


Die Funktion zeige ich als kleines Video auf YouTube:


Nachfolgend veröffentliche ich den Sketch, gültig für den ATtiny 84A, programmiert mit dem Arduino UNO R3.
Anmerkung: Port 6 ist für die dimmbare Innenbeleuchtung (SMD LED´s)!

// ATtiny84 Stellwerk/Tableau
// Programming by https://meine-modelleisenbahn-digitalisiert.blogspot.com
// © 2019
//
// An dieser Stelle noch der Hinweis:
// der Nachbau geschieht auf eigene Gefahr.
// Ich übernehme keine Haftung für eventuell entstandene Schäden!
//

const byte InnenLED = 6; //LED für Innenbeleuchtung

int ledPins[8] = {10, 9, 8, 7, 2, 3, 5, 4};

int Stellwerkphasen[24][8] = {
  {1, 0, 0, 0, 0, 0, 1, 0}, // state 1   5000
  {1, 0, 1, 0, 0, 0, 1, 0}, // state 2   2000
  {1, 0, 1, 1, 0, 0, 1, 0}, // state 3   6000
  {0, 1, 1, 1, 0, 0, 1, 0}, // state 4   4000
  {0, 1, 1, 1, 1, 0, 1, 0}, // state 5   2000
  {0, 1, 1, 1, 1, 1, 1, 0}, // state 6   6000
  {0, 1, 1, 1, 1, 1, 0, 1}, // state 7   4000
  {0, 1, 0, 1, 1, 1, 0, 1}, // state 8   3000
  {0, 1, 0, 0, 1, 1, 0, 1}, // state 9   5000
  {0, 1, 0, 0, 1, 1, 1, 0}, // state 10  5000
  {0, 1, 0, 0, 0, 1, 1, 0}, // state 11  2500
  {0, 1, 0, 0, 0, 0, 1, 0}, // state 12  6000
  {0, 1, 0, 0, 0, 0, 0, 1}, // state 13  5000
  {0, 1, 0, 1, 0, 0, 0, 1}, // state 14  2000
  {0, 1, 1, 1, 0, 0, 0, 1}, // state 15  5000
  {1, 0, 1, 1, 0, 0, 0, 1}, // state 16  6000
  {1, 0, 1, 0, 0, 0, 0, 1}, // state 17  2000
  {1, 0, 0, 0, 0, 0, 0, 1}, // state 18  6000
  {0, 1, 0, 0, 0, 0, 0, 1}, // state 19  3000
  {0, 1, 0, 0, 1, 0, 0, 1}, // state 20  2500
  {0, 1, 0, 0, 1, 1, 0, 1}, // state 21  2500
  {0, 1, 0, 0, 1, 1, 1, 0}, // state 22  3000
  {0, 1, 0, 0, 0, 1, 1, 0}, // state 23  2000
  {0, 1, 0, 0, 0, 0, 1, 0}  // state 24  2000
};

int wartezeiten[24] = {5000, 2000, 6000, 4000, 2000, 6000, 4000, 3000, 5000, 5000, 2500, 6000, 5000, 2000, 5000, 6000, 2000, 6000, 3000, 2500, 2500, 3000, 2000, 2000};

int myState = 0;

void setup() {

pinMode(InnenLED, OUTPUT); //LED am Ausgang PB6 deklariert

  for (int i = 0; i < 8; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}

void zeigeStellwerkphase() {
  for (int i = 0; i < 24; i++) {
    digitalWrite(ledPins[i], Stellwerkphasen[myState][i]);
  }
  delay(wartezeiten[myState]);
}

void loop() {

analogWrite(InnenLED, 100); //gedimmte Innenbeleuchtung

  zeigeStellwerkphase();
  myState++;
  if (myState >= 24) myState = 0;
}

An dieser Stelle noch der Hinweis:
der Nachbau geschieht auf eigene Gefahr.
Ich übernehme keine Haftung für eventuell entstandene Schäden!


Mittwoch, 18. Dezember 2019

Faller 120120 Stellwerk "Mittelstadt" - mal ganz anders!

Nachdem ich mich in letzter Zeit viel mit dem Einbau von SMD LED´s in Modellautos beschäftigt habe, wollte ich zur Abwechslung mal wieder einen H0 Gebäudebausatz zusammenbauen. Als passendes Objekt fand ich den ungebauten Bausatz eines Stellwerkes von Faller in meinem Modellbahnsortiment.

Faller H0 120120 - Stellwerk "Mittelstadt"


Da das Endergebnis nicht ein "normales" Stellwerk sein sollte, begann ich im Vorfeld mir Gedanken über mögliche Verbesserungen zu machen. Als erstes musste am Gebäude die Kunststoffoberfläche nachbearbeitet werden, also patinieren. Ich wählte eine relativ einfache Methode:
- Revell Aqua Color Farbe verdünnt auf die Oberfläche streichen, nach kurzer Trockenzeit mit einem fusselfreien Tuch die Farbe oberflächlich wegwischen und voilá, in den Vertiefungen und leicht auf der Oberfläche war die Farbe noch vorhanden, so habe ich es gewollt. Vor dem Zusammenkleben sollte die Farbe komplett durchgetrocknet sein!

Sonntag, 1. Dezember 2019

ATtiny 84 mit dem Arduino UNO R3 programmieren

Der ATtiny45/85 reicht mit seinen fünf PIO für größere Projekte nicht immer aus, als Alternative nutze ich einen ATtiny84A-PU. Dieser stellt elf PIO zur Verfügung (P0 bis P7, P9 bis P10), P5 bis P8 unterstützen zusätzlich noch PWM (Pulse Width Modulation). Der ATtiny84 arbeitet wie sein Bruder ATiny85 mit einer Geschwindigkeit von 20Mhz, die Speichergröße ist 8kByte, der EEPROM und der RAM haben 512Byte.


ATtiny84A-20 PU - DIP-14!


Für die Programmierung benutze ich wie auch schon in meinem Post zum ATtiny85 Click here! beschrieben, einen Arduino UNO R3.


ELEGOO UNO R3, voll kompatibel zum Arduino UNO R3!

Der ATtiny84A wird am Arduino UNO R3 wie folgt angeschlossen:
(HINWEIS: es werden hier die Pins genannt. nicht die Ports!)

ATtiny84A - Pin: Arduino - Pin:
1 ==> VCC 5V
4 ==> 10
7 ==> 11
8 ==> 12
9 ==> 13
14 ==> GND

Zwischen den Arduino Pins "RESET" und "GND" ist noch ein ELKO 10uF/25V anzuschliessen. Der Kondensator sorgt dafür, dass der Arduino beim Upload nicht resettet.


Schematische Darstellung der Verdrahtung!