DCC Servo Decoder

Aus Digital Modellbahn
Version vom 29. Mai 2020, 10:38 Uhr von Administrator (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „For each servo x=[1..4] you can set the following values: :* CV# x0 - Switchaddress (high) :* CV# x1 - Switchaddress (low) :* CV# x2 - Position 1 (0..180) :* C…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Eigenbau | Allgemein | Railcom | DCC-Dekoder | Servo-Dekoder | Spezialdekoder

Sprachen:
Deutsch • ‎English

mini 4x Servo Dekoder

Attiny85 Servo Dekoders
Arduino DCC 4x Servo Decoder schematic (Eagle)

Mini Servodecoder is based on Attiny85 chip that can be also programmed with the Arduino IDE (Arduino programming). Before the first programming the fuse on the Tiny need to set to use the internal 16 MHz PLL frequency. The configuration of the servo end points is done only by CV-Direct programming.

Advice: Chip has to have the following fuse settings: 
* HFuse:D5 LFuse:F1 EFuse:FF (without RST: HFuse:55 LFuse:F1 EFuse:FF)

DCC CV-Programming

Servo config:

  • CV# 5 - "1" as value will shift the address by "4" to use with IntelliBox (default 255)
  • CV# 6 - Milliseconds Servo PWM min (default 54 = 540ms)
  • CV# 7 - Milliseconds Servo PWM max (default 240 = 2400ms)

For each servo x=[1..4] you can set the following values:

  • CV# x0 - Switchaddress (high)
  • CV# x1 - Switchaddress (low)
  • CV# x2 - Position 1 (0..180)
  • CV# x3 - Position 2 (0..180)
  • CV# x4 - Active time for servo power on; If this is set to zero the servo will never power off! (0..255)
  • CV# x5 - Speed to position 1 (0..255)
  • CV# x6 - Speed to position 2 (0..255)
  • CV# x7 - Invert the position setting

Eine Programmierung des DCC Tiny Servo Dekoders kann über DCC direct am Programmiergleis erfolgen. Damit ein unabsichtliches Ändern der Werte durch die Programmierung eines anderen Dekoders verhindert wird, kann diese Funktion in der Software nach dem Programmieren deaktiviert werden.

Ein Auslesen der programmierten CV# Werte, ist nur mit dem DCC-Tiny-Programmer (Lesebaustein) und 
einer vorherigen Hochspannungsprogrammierung (High-Voltage-Programming) möglich!

Download

Tiny Dekoder Programmer

Programmer für Attiny85 Dekoders
Schaltplan des Programmers (Eagle)

Um ein einfache Handhabung bei der Programmierung der Servos bereitzustellen habe ich einen Arduino UNO in der breadboard Variante, ein I2C Display und 4x Taster als Konfigurierlösung ethabliert.

Als Display wird ein 0,96" OLED SSD1306, welches eine Auflösung von 128x64 hat und per I2C gesteuert wird, genutzt. Mittels der 4x Taster für hoch (UP), runter (DOWN), Okay und Umschalten (SWITCH) können alle CV#s des Dekoders geändert werden. Der Programmer erkennt dabei den Typ des Dekoder und stellt die Konfigurationsvariablen je Ausgang übersichtlich dar. Über ein separates Menü kann aber auch jede einzelne CV# individuell gelesen und geschrieben werden. Mittels der Tasten hoch(+) und runter(-) können die Variablen in schritten oder durch langes Drücken "schnell" geändert werden.

Als Prozessor wird ein Arduino UNO in der "breadboard" Variante eingesetzt. Hierbei arbeitet der ATmega328p, nicht wie üblich beim Arduino, mit dem internen Quarz von 8Mhz, was einen platzsparenden Aufbau ermöglicht. Der ATmega328p muss dazu vorher mit einem speziellen Bootloader beschrieben werden. Das kann mittels eines Arduino UNO und dem Sketch "Arduino as ISP" durchgeführt werden.

Schnittstelle

Der Tiny Dekoder Programmer nutzt zur Kommunikation mit dem Dekoder das DCC Protokoll. Die gesamte Kommunikation arbeitet mit DCC Befehlen und die Rückmeldung erfolgt mittels Bestätigen (Acknowledge) durch den Dekoder. Beim Lesen ist es dabei notwendig jedes einzelne Bit abzufragen. Weil der ATTiny45/85 nur über 6 I/O Ports verfügt (4x Ausgang, 1x DCC, 1x Ack[Reset]) und einer davon standardmäßig als Reset genutzt wird, ist es notwendig den Dekoder mittels Hochspannungsprogrammierung (High-Voltage-Programming) zu programmieren. Nur so kann der Reset-Pin als Ausgabe (I/O) für die Bestätigung (Ack) genutzt werden!

Download

Weichendekoder 6x Servo

Arduino DCC 6x Servo Dekoder schematic (Eagle)

Als MCU arbeitet ein Arduino UNO welcher sechs Servos ansteuert. Programmiert werden die Endlagen und Stellgeschwindigkeiten mittels drei Knöpfen auf der Schaltung.


Programmierung

Ablauf für die Programmierung in vier Schritten. Für die Programmierung stehen drei Tasten (PROG, LINKS, RECHTS) zur Verfügung. Es können dabei je Servo zwei Endlagen und die Geschwindigkeit der Bewegung eingestellt werden.

  1. Zum Starten die PROG-Taste drücken. Dann beginnt die LED, zuerst für Servo 1 an zu blinken.
  2. Durch mehrfaches Drücken der PROG-Taste kann der gewünschten Servo (LED blinkt) ausgewählt werden. Um den ausgewählten Servo zu programmieren muss jetzt die zugehörige Zubehöradresse über DCC gesendet werden. Wenn schon eine Adresse für diesen Servo programmiert ist, kann dieser Vorgang durch ein drücken der LINKS-Taste oder RECHTS-Taste übersprungen werden.
  3. Im folgenden wird mit der LINKS-Taste oder RECHTS-Taste die gewünschte Position für die Endlage justiert. Zum Umschalten auf die andere Endlagenposition den Servo mittels seiner DCC Adresse umschalten. Beendet wird die Positionseinstellung durch ein Drücken der PROG-Taste.
  4. Nun kann die Geschwindigkeit mit der LINKS-Taste oder RECHTS-Taste, für die Bewegung, erhöht oder gesenkt werden. Dabei pendelt der Servo in der jeweiligen Geschwindigkeit, bis zum Beenden der Programmierung, zwischen seinen zwei Endlagen. Zum Abschluss muss die PROG-Taste erneut gedrückt werden. Alle vorgenommenen Einstellungen werden für den Servo jetzt gespeichert.


Download


Weichenantrieb mit Servo

Servoantrieb für Weiche mit Herzstückumschaltung

Hier dargestellt ist ein Servo Weichenantrieb mit Herzstückumschaltung. Der Servo dreht sich für ein Umschalten der Weiche um 180 Grad. Als Stelldraht wurde 1,3mm Messing verwendet. Das mittlere Bild zeigt die Mittelstellung. Mit dieser lässt sich der Servoantrieb sehr leicht unter der Weiche (in Mittelposition) justiert befestigen.