Nachbau OpenDCC-Decoder2

Beschreibung

Der Opendecoder in Hardware Variante 2 als großen Bruder des einfachen Opendecoder hat einen Atmel ATMega8515 8bit RISC-Prozessor mit 8k Flash und damit viel mehr Speicherplatz als der einfache OpenDekoder Variante mit ATtiny2313, dessen Nachbau ich hier beschrieben habe. Somit sind auch ausgefeilte Anwendungen mit dieser Hardware möglich. Auf den Seiten von OpenDCC findet sich eine erstaunliche Anzahl von verschiedenen Applikationen und immer mit Sourcecode (in C für WinAvr), so dass auch eigene Anpassungen möglich sind. So habe ich statt des ATMega8515 einen pincompatiblen ATMega162 eingesetzt und brauchte dafür im Quellcode nur ein paar Zeilen ändern.

Das Layout setzt auf SMD-Bauteile, der Treiber-IC ist aber immer noch gesockelt. Für diesen Decoder werden professionelle 2seitige Platinen über Rail&Road angeboten,die mit 4,90Eur(2009) auch sehr günstig sind. Zusätzlich sind für die Bestellung der einzelnen Bauelemente Warenkörbe des Versenders Reichelt und detailierte Aufbauanleitungen verfügbar sowie, so das einem einfachen Nachbau nichts mehr entgegen steht.
Wie ich aber selbst erfahren mußte, sind die freundlicherweise bereitgestellten Warenkörbe mit Vorsicht zu verwenden. Das hängt aber mehr mit dem Verhalten des Shops zusammen. Beispielsweise Artikel, die nicht lieferbar sind, fallen ohne jeglichen Hinweis aus dem Korb. Will man weitere Warenkörbe hinzufügen, addiert Reichelt nicht die Stückzahlen der Artikel, sondern ersetzt sie. Will man mehrere Dekoder bauen, muss man die Stückzahlen manuell korrigieren. Auf Grund dessen habe ich mehrere Einzelbestellungen (incl. Versandkosten) gebraucht, bis ich alle Bauteile zusammen hatte.

In Abhängigkeit zum Einsatzzweck kann man auf einige Dinge verzichten. Ich möchte zunächst die Variante "Weichen und Schaltdekoder" aufbauen. Da die angebotene Funktionalität der Weichenrückmeldung nur mit einer OpenDCC-Zentrale funktioniert und ich auch kein DMX einsetze, habe ich mir die dafür benötigten Bauelemente gespart. Den Ack-Ausgang habe ich über die Lötbrücken mit dem DCC-Signal verbunden (SJ1 und SJ2 geschlossen) und deshalb die Schraubklemme nicht bestückt. Desweiteren schliesse ich SJ3, damit ich die Positive Versorgungssannung zur Verfügung habe. Die Gesamtkosten für Platine und Bauelemente betragen damit in etwa unschlagbare 10 Euro.

Daneben wird ein (bei mir ohnehin vorhandenes) Programmiergerät und ein SMD-tauglicher Lötkolben sowie Lötzinn (möglichst 0.5mm, als Privatnutzer muss es nicht Bleifrei sein) benötigt. Bei mir z.B. ist der Lötkolben ein einfacher Ersa Multitip 260 mit Dauerlötspitze.
Für die Weichenlage-Rückmeldung habe ich mir etwas Eigenes gebaut, was ich in meinen vorhandenen S88-Bus einbinden kann.

Aufbau

Beim Aufbau sollte man sich an die sehr detailierte Aufbauanweisung halten. Nachfolgend beschreibe ich mein Vorgehen:

Zuerst den Prozessor, dann die übrigen SMD-Bauelemente. In der beschriebenen Ausbaustufen sind das auf der Vorderseite der 10k Widerstand am ISP-Header, auf der Rückseite der 100nF-Kondensator in der Mitte und die beiden Dioden+Transistor für ACK.
Bei den SMDs sollte man sich angewöhnen, immer nur die gerade benötigten Bauelemente eines Wertes gleichzeitig zu löten und auch nur diese kurz vorher aus dem Gurt zu nehmen. Diese entwickeln ein beachtliches Eigenleben und sind RuckZuck auf Nimmerwiedersehen weggesprungen, weggerutscht oder sonst wie verschwunden. Die kleinen SMD-Kondensatoren sind überhaupt nicht, alle anderen Dioden und Transistoren nur als "Microcode" gekennzeichnet. Wenn man nicht ständig nachmessen oder Datenblätter suchen möchte, sollte man rausnehmen und verlöten in einem Arbeitsgang bündeln.

SMDs löte ich, in dem ich bei einfachen Bauelementen ein Pad verzinne, dann das Bauelement mit einer Pinzette in das heisse Lötzinn reinschiebe. Damit ist es erstmal fest. Dann drücke ich auf das Bauelement und mache die Lötstelle noch einmal kurz warm, damit das Baulement plan auf der Leiterplatte zu liegen kommt. Dann erst wird das anderen Ende ebenfalls gelötet.

Der Prozessor wird vor dem Löten sorgfältig auf den Pads positioniert und mit einer Modellbauklammer, Kleber oder einem (ruhigen) Finger fixiert, so das eine optimale Auflage aller Pins erreicht wird. Dabei unbedingt die vorgeschriebene Einbaulage (Ecke mit Punkt) beachten. Macht man was hier falsch, kann man nach dem Löten die Platine incl. Prozessor meistens wegwerfen, weil man den Prozessor nur selten ohne spezielle Hilfsmittel zerstörungsfrei wieder ausgelötet bekommt.

Nachtrag: zum Auslöten ein Tipp von Wolfgang Kufer

"Ganz einfach: 
1. Lötzinn erst soweit wie möglich absaugen, 
2. Lackdraht unter Baustein durchfädeln und an einem Ende fixieren
3. nun der Reihe nach Pins warmmachen und Draht untendurch mit Gefühl herausziehen 
... geht auf wie Reißverschluß"
Jetzt mit dem Lötkolben zwei diagonale Pins kurz anlöten, so das der Chip auf der Platine fest sitzt. Zur Not kann man jetzt noch etwas korigieren. Wenn alles passt, dann auf die übrigen Pins etwas Lötzinn geben. Es macht nichts, wenn dabei Pins zusammen kleben, solange es nicht zuviel Zinn ist. Anschliessend wird auf jede Seite nacheinander Entlötlitze aufgelegt, mit dem Lötkolben erhitzt und dabei das überschüssige Lötzinn aufgesagt. Durch den Kapilareffekt bleibt das Lötzinn zwischen Pin und Pad erhalten, wenn der Chip plan auf der Platine gelegen hat. So bekommt man fast optimale Ergebnisse. Nun ist mit einer Lupe und im Duchlichtverfahren zu prüfen, ob wirklich alle Pins sauber voneinander getrennt sind. Manchmal bleibt auch noch ein Stück der Entlötlitze hängen, was entfernt werden muss. Erst wenn dass alles geprüft ist, sollte man mit den restlichen Bauelementen in der Reihenfolge erst niedrig, dann hoch weitermachen.

Falls keine 6pol Fassung für den Optokoppler zur Verfügung steht, kann man einfach eine andere Fassung aufschneiden. Ganz würde ich auf die Fassung nicht verzichten. Bei den LEDs, Dioden, Elkos und den ICs muss man die Einbaulage beachten. Die Minus-Seite hat in der Regel eine Markierung oder einfach ein kürzeres Anschlussbeinchen, bei den ICs ist eine Kerbe oder ein Punkt die Markierung. Der Spannungsregler muss mit der Metallseite zum Treiberbaustein eingebaut werden, sonst geht gar nichts. Die Schraubklemmen sollte man mit reichlich Lötzinn bedenken, da diese Verbindung durch das Schrauben eine mechanische Belastung ertragen müssen. Ich hatte das Problem bei mehreren Bausteinen von LDT, die so knapp gelötet waren, dass schon wenige Schraubvorgänge zu schwer zu lokalisierenden Kontaktproblemen geführt hatten.

Nach einer selbstkritischen Kontrolle aller Lötstellen und Bauelemente kann nun zum ersten Mal über ein Labornetzteil mit Strombegrenzung auf ca. 100mA eine Spannung von 15V eingespeist werden. Da der Prozessor noch keine Software hat, passiert erstmal nichts. Die Stromaufnahme sollte unter 50mA liegen und es sollte nichts warm werden. Schlägt die Strombegrenzung zu oder fängt es an zu riechen oder wird etwas warm, sofort Spannung abschalten und den Fehler suchen !!!
Nun noch kurz die Spannungen mit einem Voltmeter prüfen. Über dem kleineren Elko(Lötseite) sollten 5V angezeigt werden. Zwischen dem Masseanschluss und den 4 mittleren Schraubklemmen an der Längsseite sollten ca. 12-15V Gleichspannung anliegen. Ist diese am Gleichrichter da, aber fehlt an den mittleren Schraubklemmen, ist wahrscheinlich SJ3 nicht geschlossen.

Software anpassen

Die Software des Opendekoder2 ist modular in der Sprache C geschrieben. Die passende Firmewareversion für "Weichen und Schaltdekoder" kann man von unter Downloads beziehen.
Allerdings sind vor dem Programmieren noch einige Änderungen notwendig, woduch die Software anschliessend neu übersetzt werden muss. Für den Einsatz des Atmega162 muß z.B. dieser Typ erst in hardware.h,Section OPENDECODER2 definiert werden.

     	
=======
49  #elif (__AVR_ATmega162__)
50  // if changed: check timings, timer settings, baudrate
51  // atmega162: 1024 Byte SRAM, 512 Byte EEPROM
52  #define SRAM_SIZE 1024
53  #define EEPROM_SIZE 512
54  #define EEPROM_BASE 0x810000L
=======

Anschliessend sind die gewünschten Module in config.h die '#defines' zu Prüfen.
Wichtig: Die originale Version des OpenDekoder2 Version V0.11 aus dem Download war als DMX-Dekoder konfiguriert, d.h. die Portausgänge waren disabled. Für einen Weichen- oder Signaldekoder sind die Ports aber frei zu geben. Ich hatte diesen Teil übersehen und mich später gewundert, das trotz korrekter Adressvergabe die Weichen nicht schalten wollten. Aber Dank der Hilfe von Wolfgang konnte das Problem entdeckt werden.

#define PORT_ENABLED TRUE // TRUE: PortEngine does control the outputs
// FALSE: PortEngine only does the timers

Jetzt muss die Software noch für den Atmel übersetzt werden. Dazu wird jeweils das aktuelle WinAvr und AVRStudio (Für Download ist eine Registrierung erforderlich) installiert. Jetzt kann man das schon im OpenDCC-Download vorhandene Projektfile (Opendecoder2.aps) aufrufen, wodurch sich das AVRStudio mit dem C-Code öffnen sollte.
Dann in den Projektoptionen den richtigen Prozessor definieren und mit "Rebuild All" neu erstellen.
CPUtyp einstellen
Software übersetzen

Software in den Prozessor laden

Ich verwende dazu einen AVRISP von Atmel. Dieser wird vom AVRStudio direkt unterstützt. Es gehen natürlich auch die anderen Programmer. Das 6pol Adapterkabel vom AVRISP wird auf den ISP-Header auf dem Board gesteckt, die rote Markierung für Pin 1 muss zum Taster zeigen. Jetzt muss das Board mit Spannung versorgt werden, da der AVRISP seine Betriebsspannung vom Board erhält und sonst nicht arbeiten kann. Die LED am AVRISP muss grün leuchten. Die Stromaufnahme liegt jetzt bei ca. 45mA, max 80mA.
Opendecoder2 Prog

Im AVRStudio ist mit dem Connect-Button der richtige Brenner-Typ und Port einzustellen.
Wenn alles geklappt hat, öffnet sich ein neues Fenster. Dort sollte man noch einmal den richtigen CPU-Typ einstellen und dessen Signatur prüfen. Wenn die Signatur passt, sollten als erstes die Fuses eingestellt werden.
Signatur prüfen
Foto aus der Programmierphase

Fuses setzen
Als erstes sind die Fuses zu programmieren.Hier sind die zu ändernden Werte markiert. Wichtig ist, das der Haken bei "CKDIV8" entfernt ist und der interne Oszillator aktiv ist. Das Aktivieren des Brown-out (ganz oben) ist mehr eine Sicherheitsmassname. Alles andere bleibt wie abgebildet.

Im zweiten Schritt wird dann das gerade neu erstellte Dekoder .hex File ausgewählt und übertragen. Zum Schluss, nicht vergessen, auch das .eep File mit den voreingestellten Werten zu übertragen.
Programmieren
Unmittelbar danach startet der Prozessor neu und die LED auf dem Board sollte in 5er-Gruppe blinken. Damit sind dann alle Tätigkeiten in der Werkstatt beendet.

Inbetriebnahme

Der Dekoder kann nun programmiert werden. Die Details kann man ausführlich hier nachlesen. Am schnellsten geht das mit der Tastermethode (Section "Programmieren ohne CV") in der Anlage. Im eingebauten Zustand und eingeschalter Spannungsversorgung und Zentrale wird der Programmierjumper JP1 gesteckt. Durch Drücken des Taster wechselt die LED auf Dauerlicht, der Dekoder wartet jetzt auf das nächste Kommando, aus der er seine Adresse und Betriebsart ermittelt. Ich möchte Weichen mit einer Pulsdauer von 1s schalten, die Basis-Adresse der 4er Gruppe soll 69 sein. Entsprechen der angegebenen Tabelle ist das die Betriebsart "2" und ich muss dafür auf Adresse 70 den Befehl "Weichenstellung abbiegen(Rund)" absetzen. Die LED geht aus, der Dekoder ist programmiert. Den Programmierstecker kann man jetzt abziehen und die Weichen testen.

Fotos

Opendecoder2
Foto des nachgebauten Dekoders

Opendecoder2 und S88
Ansicht im eingebautem Zustand mit eigener S88-Weichenlageanzeige

OpenDCC Projekte
Home
Disclaimer
© 2009-2010 Thomas Dreßler
Alle Rechte vorbehalten
letzte Änderung 16.02.2010