OpenDCC - Zentrale für DCC - Bauanleitung

Vorbemerkungen

Löthinweise

    Zuerst mal der übliche Sums: Elektroniklötkolben (nicht über 300W;-), geeignetes Lötzinn (kein Tiffany-Bleilot), Dioden und Kondensatoren richtig polen (kleiner Strich oder + im Layout), ICs sind statisch gefährdet, kurzum: wer's nicht kann, soll nicht mit dieser Schaltung das Üben anfangen.

    Andererseits gibt es bis auf den USB-Chip auch keine nennenswerten Schwierigkeiten. Die Werte der Widerstände und C's sind in der Regel unkritisch, im Schaltplan finden sich Hinweise zur Dimensionierung. (Ausnahmen: R37 (wird nur für den PTH Schaltregler gebraucht) muß 1% sein: 348 Ohm, R32 und R10 müssen Metallfilm sein). Bei LED's ist der lange Anschluß Anode (+) und der kurze Kathode (-).

    Die IC1 (H-Bridge) sollte nicht gesockelt werden, da die Wärmeableitung im wesentlichen durch die Pins auf die Platine erfolgt.

    Der USB-Chip FT232RL kommt im 28-poligen Gehäuse mit 0,65mm Pitch. Hier wird zuerst nur ein Eckpin auf der Leiterplatte verzinnt, dann wird der Chip darüber gelegt. Nun kann dieses Pad und Pin erhitzt werden und der Chip exakt auf die Pads ausgerichtet werden. Nun kann man alle anderen Pins verlöten - feine Lötspitze und 0.5mm Lötzinn sind hilfreich ;-). Keine Panik, wenn zwei Pins zusammenkleben! Nicht lang rumbrutzeln, sondern abkühlen lassen und dann einfach mit dünner Lötsauglitze das überschüssige Zinn aufnehmen. Am Ende alle Lötstellen nochmal mit der Lupe kontrollieren. (<- Wichtig)

    Bei der Montage des Quarzes kann fallweise ein Kurzschluss der SMD-Pads über das Metallgehäuse entstehen. Hier entweder einen Klebestreifen unterlegen oder mit etwas Abstand montieren. Tipp: ruhig den SMD-Typ kaufen, dort dann die Beinchen wieder nach unten biegen und einlöten - das Unterlegscheibchen ist dann gleich an Ort und Stelle.

Vorbereitung

    Vor Beginn der Bestückung muss die Europlatine entlang der Fräslinien (im Bild lila) in fünf Teilplatinen zerlegt werden:

      Grundplatine: 120mm * 100mm
      S88-Platine: 70*38 mm
      Tastaturplatine: 38 * 23mm
      2 LED-Platinchen: 17 * 5mm

    Die Tastaturplatine bildet zusammen mit den 2 LED-Platinchen die Frontplatine, diese ist wie folgt angeordnet:

    Nun werden mit kleinen Drahtstücken die Lötpad entsprechend der Buchstaben miteinander verbunden (also A-A, B-B, C-C, D-D), wobei darauf zu achten ist, dass das Raster einer möglichen Versteifungsschiene (blaue Linie) durchgehend ist. Als Montagehilfe kann die Grundplatte oder eine Lochrasterplatine verwendet werden. (LEDs jetzt noch nicht verlöten!) Dann ergeben sich identische Abstände für die LEDs. Diese Frontplatine wird später senkrecht im Gerät montiert (A-B = hinten, C-D = vorne). Wer will, kann das noch versteifen.

Grundplatine

    Es sollten zuerst die SMD-Bauteile für den USB-Anschluß bestückt werden. Dann werden die Widerstände, Dioden, und Fassungen bestückt.

    Anschließend werden IC's, Stecker und Kondensatoren bestückt. Die Rückwandstecker sollten zuvor an der Rückwand ausgerichtet werden. Beim RS232 Treiber kann sowohl Max232 als auc LT1080 bestückt werden. Wenn Max232 bestückt ist, auf die richtige Lage von Pin 1 achten (um eins verschoben).

    Komplett bestückte Platine, Ansicht von hinten. Hinweis: hier sind beide PC-Schnittstellen bestückt, normalerweise ist nur eine Schnittstelle bestückt. Die jeweilige Schnittstelle wird per Jumper JP5 und JP6 ausgewählt. Diese Jumper haben drei Positionen und sind auf der Platine beschriftet. (Die beiden roten Markierung zeigen die Stellen der Lötbrücken bei der V1.3. Hier dargestellt: Betrieb über RS232).



    Komplett bestückte Platine, Ansicht von vorne (die fehlenden Bauteile sind nur für ponyprog-Betrieb erforderlich). (Hinweis: der RS485-Treiber wird nicht benötigt, der war für DMX in der Zentrale)

Frontplatine (Tasten, LED)

    Zuerst wird die Frontplatine vorne aus ihren Teilplatinen zusammengelötet. An die Tastenplatine werden wie oben beschrieben links und rechts die kleinen LED-Platinen angelötet. Damit liegen alle LEDs auch im Raster von 22.86mm. Am besten diese Montage auf einem Stück Lochraster durchführen oder z.B. die Versteifung mit einer durchgehenden Stiftleiste (Bild) machen.
    Diese Frontplatine wird vorne mittig senkrecht montiert. Hierzu werden 5-polige Winkelstifte (oder auch Drahtreste von den Widerständen) verwendet; diese werden nur eingesteckt, noch nicht verlötet.

    Auf der Frontplatte werden zuerst nur die Tasten bestückt, alle anderen Bauteil bleiben noch lose. Die Frontplatte wird nun mit einem Gewindewürfel (Bürklin, Best.Nr. 17H912) mit der Grundplatte verschraubt. Wenn man sich vergewissert hat, dass die Tasten genau zur Frontplatte ausgerichtet sind, dann können die Winkelstifte verlötet werden.
    Tipp von Alex: statt des Gewindewürfels kann nach dem Ausrichten der Platine auch ein dicker Draht schräg durch die beiden Schraublöcher gelötet werden. Und der Würfel ist auch als "GB4xM3" für 0,50 bei http://www.qrpshop.de/ erhältlich.
    Frontplatine, die LEDs stecken noch lose in ihren Bohrungen. Erst bei einer Probemontage im Gehäuse werden die LED in die Bohrlöcher der Frontplatte geschoben und verlötet. Die Frontplatine könnte gegen Durchbiegen mit einem Blech- oder Platinenstreifen entlang der blauen Linie versteift werden. So werden die Platinen zusammengesetzt. So fügt sich der Aufbau ins Gehäuse ein.
    Hinweis: die Widerstände R34, R36 und die Kondensatoren C37, C38 werden nicht bestückt.

Komplette Platine

    Ansicht von vorn Ansicht von rechts Ansicht von links Ansicht von hinten

Rückwand:

    An der Rückwand sind RS232 zum PC, Powereingang, USB, DCC Ausgang und Ctrl In-Out direkt auf der Platine bestückt. Auch hier sollte eine gebohrte Rückwand als Lehre zum genauen Ausrichten der Bauteile verwendet werden. Die S88 Schnittstellenplatine wird als Huckepackplatine mit Schraubbolzen M3*20mm montiert. Die Verbindung zum Grundboard erfolgt mittels 14-poligen DIL-Verbindern in Schneidklemmtechnik.

    Ab der Platinenversion 1.4 ist S88 gemäß S88-n verdrahtet. Hierbei ist es auch möglich, RAILDATA mit zu übertragen. Nur dann müssen die Widerstände R41, R43, R44, R45 bestückt werden (sie schaden aber auch nicht). Im Normalbetrieb ist dies nicht nötig, dann muß SJ2 (auf der Unterseite der S88-Platine geschlossen werden).


    Achtung:
    Es gibt zwei verschiedene Ausführungen dieser Stecker: Einmal ist der Pin 1 identisch zur Kabelader 1, bei der anderen Variante ist der Pin 14 auf die Ader 1 gelegt. Es ist egal, welcher Stecker verwendet wird, es muß nur beide mal der gleiche Typ sein. Sollte ein 14-poliger Stecker nicht verfügbar sein, so kann auch eun 16-poliger Stecker verwendet werden, es sind entsprechende Leerlöcher in der Platine vorgesehen.
    Tipp zum Verpressen dieser Stecker: auf die Anschlußpins einen verlöteten Stapel von 3 Lochrasterplatinen legen und dann im Schraubstock verpressen.

Gehäuse

    Die Platine samt montierten Huckepackplatinen kann in das Fischergehäuse eingeschoben werden bzw. beim Tekogehäuse auf die vorhandenen Schraubsockel montiert werden. Die Front- und Rückplatten werden gemaß Skizzen gebohrt und montiert. Seitlich müssen Lüftungslöcher vorgesehen werden.
    Sollte die Platine auch als DMX-Schnittstelle verwendet werden, so ist der XLR-Stecker mittels Kabel an die dreipolige Schraubklemme anzuschliessen. Die Anschlußnummmer auf der Platine ist identisch zur Pinnummer der XLR-Buchse.
    Hinweis: bei geplanter Lichtsteuerung für die Modellbahn empfehle ich eher den Decoder. Ev. entfällt in zukünftigen Softwareversion der DMX-Support. IC3 wird nicht bestückt.

Kühlrippe

    Ich habe zur besseren Wärmeableitung eine Einlötkühlrippe neben dem L6206 vorgesehen. Normalerweise wird der Baustein nicht nennenswert warm. Speziell wenn ein Booster nachgeschaltet ist kann diese Rippe entfallen. Alternativ zum Blechstreifen kann man sich aber auch mit einem kleinen Stück Leiterplatte behelfen, welches mit Drähten senkrecht aufgelötet wird.

Test, erstes Einschalten

    Nach dem Bestücken alles nochmal genau optisch kontrollieren und Flußmittelreste mit Alkohol abwaschen. Der Prozessor wird einstweilen noch nicht bestückt.

    Nun wird zum ersten Mal Spannung angelegt (aus einem geregelten Labornetzteil, Strombegrenzung auf 50mA).

    Die 5V kontrollieren, dann kann ein erster Test der LEDs erfolgen: Hierzu einen Widerstand 220 Ohm mit Masse verbinden und mit dem anderen Ende nacheinander die Pins 28, 29, 35, 36 des Sockels für den Atmel auf GND ziehen. Die LED müssen leuchten. Nun werden die weiteren Bausteine bestückt.

    Wenn alles bestückt ist, dann kann nochmal Spannung angelegt werden; die Ruhestromaufnahme bei nicht programmierten Prozessor sollte etwa 30mA sein, bei programmierten Prozessor etwa 50mA; Die Ruhestromaufnahme ist höher, wenn ein Längsregler für die 5V verwendet wird und wenn der DCC-Ausgang mit RC-Tiefpässen beschaltet ist (+60mA).

Prozessor erstmals programmieren

    Nachdem die Hardware fertig aufgebaut ist, muß der Prozessor noch passend konfiguriert und mit der Firmware geladen werden. Dies erfolgt in drei Schritten:
    1. Fuses setzen
    2. Bootloader einspielen
    3. Firmware-Update durchführen
    Als erstes müssen die Fuses gesetzt werden.
    Der Atmel ATmega32 verfügt über mehrere Möglichkeiten der Taktung und verschiedene Bootmodi. Diese werden mit sog. Fuses gesetzt. Für den in OpenDCC eingesetzten Prozessor sind folgend Fusebits zu setzen:
    Fusebits
     CKSEL3...0   = 1111   keine Häkchen, bedeutet Crystal mit 16MHz
     CKOPT  = 0  Häkchen gesetzt, bedeutet voller Hub an XTAL2
     SUT1..0  = 0 1  Häkchen bei SUT1, kein Häkchen bei SUT0 (Power Up Delay)
     BOOTSZ1..0  = 0 1  Häkchen bei BOOTSZ1, kein Häkchen bei BOOTSZ0); Start bei 0x7800
     BOOTRST  = 0  Häkchen gesetzt, bedeutet, das der Bootloader verwendet werden soll -> siehe FW-Update
     BODLEVEL  = 0  Häkchen gesetzt, bedeutet, dass der Brown-Out Detector bei 4V anspricht.
     BODEN  = 0  Häkchen gesetzt, bedeutet, dass der Brown-Out eingeschaltet ist.
    Es gibt drei Wege, um den ATmega zum ersten Mal zu programmieren: JTAG, ISP (6-polig) und Ponyprog. Hier wird nur der Bootloader eingespielt, das eigentliche Programm wird wie auch später ein eventueller Programmupdate über die normale Schnittstelle (USB oder RS232) eingespielt.
    Wenn man über Ponyprog oder ISP programmiert, dann muß der Jumper JP4 gezogen sein, weil sonst der RS232-Baustein und der Programmieradapter gegeneinander treiben. Nachfolgend ist die (Erst-)Programmierung mit ponyprog beschreiben.
    Man kann den auf der Platine vorbereiteten Ponyprogadapter verwenden oder einen separaten Adapter für die ISP-Schnittstelle leicht selber bauen (vielleicht will man ja noch andere Projekte machen):
    ponyprog adapter
    Hinweis: Bei diesem Adapter ist der Reset in der Ponyprog-Configuration als invertiert zu markieren.
    Dieser Adapter wird an der 6-poligen ISP-Schnittstelle angeschlossen und dann wird der Prozessor programmiert; anschließend kann der Adapter wieder abgezogen werden. Der Adapter kann auch andere Prozessoren programmieren.

    Zuerst muß die Schaltung der ISP-Pins ponyprog bekannt gemacht werden. Für OpenDCC ist in den Einstellungen des Adapters der Reset als invertiert zu markieren.


    So werden die Fusebits (bei aktiviertem Bootloader) geschrieben. Ich empfehle folgende Reihenfolge: Lesen, Ändern, Programmieren.

    Zum Laden des Bootloader wird das bootloader.hex-file geöffnet und dann mit write program an den Atmel übertragen. Ein Eprom-File ist für den Bootloader nicht erforderlich.

    Hinweis: Wenn kein Bootloader gewünscht ist, dann muß der Haken bei BOOTRST entfallen. Das Programm und EEPROM kann dann direkt mit ponyprog eingeladen werden. (der Update funktioniert dann aber auch nicht ...)

    Fuses für den Atmega644P (für Xpressnet)
    Atmega644P Fuses
    Bitte beachten: die offizielle Version von ponyprog kann den atmega644P nicht, siehe FAQ.
    Fuses für ATmega644PWertBedeutung
    Lock Bit Byte
    76543210  
    111111110xFFnot locked
    Extended Fuse Byte
    76543210  
    -----BOD2BOD1BOD0  
    111111000xFC100 = 4.3V
    Fuse High Byte
    76543210  
    OCDENJTAGENSPIENWDTONEESAVEBOOTSZ1BOOTSZ0BOOTRST  
    100111000x9Center boot @0x7C00 (words)
    Fuse Low Byte
    76543210  
    CKDIV8CKOUTSUT1SUT0CKSEL3CKSEL2CKSEL1CKSEL0  
    110101110xD7no div, crystal, BOD enabled
    Der Bootloader ist 2048 Bytes bzw. 1024 Words groß.

USB programmieren

    Zum Betrieb des USB-Chips muss dieser zuerst konfiguriert werden. (Dieser Schritt ist natürlich nur erforderlich, wenn die USB-Schnittstelle verwendet wird)

OpenDCC laden

    Wenn jetzt soweit alles fertig ist, dann kann die Applikation geladen werden. Hierzu wird genauso wie beim normalen Einspielen der Software verfahren:
    1. Während des Startens die STOP-Taste gedrückt.
    2. Die gelbe LED leuchtet auf und der Bootloader in OpenDCC wartet auf den Download des Programms und des EEPROM Speicherinhalts.
    3. Hinweis: Bei USB-Betrieb muss aber zuvor noch der USB-Chip konfiguriert werden, sonst gibt es die Verbindung PC-OpenDCC für den Update noch nicht.

OpenDCC konfigurieren

    Als letzter Schritt können (müssen aber nicht) jetzt noch persönliche Einstellungen vorgenommen werden. Diese sind in internen Konfigurationsvarablen abgelegt.
    Es gibt mehrere Möglichkeiten, diese zu lesen und zu schreiben. Besonders komfortabel geht es mit Rocrail, aber es gibt auch eine Lösung für Trainprogrammer.

Achtung, Fehlerhinweise zur alten Hardware Version 1.2 (gilt nicht für aktuelle Platinen)

  1. In der Platinenversion V1.2 sind die RJ45-Buchsen zum S88-Anschluß mit Ethernetkabeln für stehende Buchsen verdrahtet. Liegende Buchsen (die dann auch durch die Rückwand von außen steckbar sind) haben ein um 180 Grad gedrehtes Anschlußschema :-( Sollen diese Buchsen bestückt werden, so sind *alle* Anschlüsse zu den RJ45-Buchsen vor dem Bestücken mit einem Fräser durchzutrennen und mit Wrap- oder Fädeldraht um 180 Grad verdreht wieder herzustellen. Bitte auch darauf achten, dass Masse und VCC über der gesamten Adapterplatine verbunden bleibt. Leider ist das eine üble Bastelei ... (Diese Änderung ist nicht notwendig bei S88-Anschluß an den Pfostensteckern)
  2. Wertänderungen:
    S88-Clockausgang: alle Widerstände 33 Ohm, C25, C28, C29 1nF -> 10nF
    Kondensatoren beim Quarz: C4, C5: 33pF -> 18pF
    zusätzlicher Kondensator (C44) 10nF zwischen IC6 (LM393) Pin 2 und Pin 3
    R19 und R20 ändert sich von 10k auf 2k2. Grund: schnellere Erholung der Ausgangsstufe bei Abschalten nach Polaritätwechsel durch die Kapazität der Anlagenverdrahtung (war aufgetreten ab etwa 40m verdrillte Leitung)
  3. Die obigen Änderungen sind in der Version 1.3 oder höher bereits eingearbeitet.

Was tun, wenn es nicht funktioniert?

    Zuerst mal Ruhe bewahren :-)

    Dann folgende Dinge kontrollieren:
    1. Kontrolle der Bauelemente, ob überall das richtige Bauteil mit der richtigen Polung steckt.
    2. Kontrolle aller Steckbrücken (JP...) und Lötbrücken (SJ...). (Auch SJ2 auf der S88-Platine)
    3. Sichtprüfung der Lötstellen und der Leiterbahnen - am besten mit der Optikerlupe. Aus gegeben Anlaß: Die Platine wirklich genau kontrollieren, ist auch alles verlötet? Beim geringsten Zweifel absaugen, nochmal nachlöten.
    4. Kontrolle der 5V und der Ruhestromaufnahme.
    5. Kontrolle ob die Signatur des Atmel gelesen werden kann: Atmega644P: 1E 96 0A; Ist es auch wirklich ein 644P?
    6. Kontrolle ob das Programmieren geht - und falls ja, mit Ponyprog wieder zurücklesen.
    7. Kontrolle von Reset und des Taktoszillators; an XTAL2 müssen 16MHz anliegen.
    8. Wenn nach dem Programmieren des Bootloaders der Firmware-Update nicht funktioniert, dann die Firmware mal direkt laden und den Testmode aktivieren. Sind .hex und .eep geladen?
    9. Stimmt die Position von Jumper 4? (für Programmierung mit Ponyprog entfernen, für den Betrieb stecken)
    10. Tipp von Jan: Bei einem ersten Test lief der Prozessor mit Quarz nicht an, als Fehler stellte sich hier ein Kurzschluss der SMD-Pads über das Metallgehäuse des normalen Quarzes heraus. Bitte einen Klebestreifen unterlegen.
    11. Einschalten Testmode: Hierzu beide Jumper (JP1 und JP2) einstecken, es muß nun ein Lauflicht der 4 LEDs leuchten; Im Testmode sendet OpenDCC das empfangene Byte (mit 19200Baud) einfach wieder zurück - dies kann man mit einem Terminalprogramm (wie z.B. realterm) überprüfen. Dieser Testmode funktioniert auch bei USB! (ist aber leider nicht mehr in der OpenDCC_XP enthalten)
    12. Kontrolle, ob der RS232-Baustein auch die +/- 8-10V erzeugt. Ich hatte schon mal den Fall, dass ein Kondensator ab Tüte defekt war.
    13. Kontrolle, ob das verwendete serielle Kabel auch die Handshake-Leitungen enthält.
    14. Im Download ist ein Testprogramm für die serielle Schnittstelle - dieses laden und Testen.
    15. Wenn die Tasten nicht gehen: richtig rum eingebaut und nicht um 90° verdreht?
    16. Wenn Rückmelder nicht gehen: Kontaktiert das interne Flachbandkabel sicher?
    Falls Sie beim Nachbau einen Fehler gemacht haben und diesen selbst gefunden haben, bitte trotzdem mitteilen, damit ev. andere diesen Fehler vermeiden können.

Testprogramm für serielle Schnittstelle?

    Manchmal weiß man nicht so genau - woran liegt es: Fuses, Lötfehler, USB, Bootloader? Um hier den Test zu erleichtern gibt es ein ganz simples Testprogramm für den Atmega644P, dieses kann man mit ISP oder mit dem Bootloader einspielen. Das Testprogramm verändert keinen EEPROM-Inhalt.

    Mit dem Testprogramm serial_test passiert folgendes:
  • Die Prog-LED blinkt exakt im Sekundenrhythmus. Wenn das nicht passt, sind die Fuses oder der Quarz falsch.
  • Der Zustand der RTS-Leitung wird auf der rechten LED (PC) gespiegelt: man kann mit einem geeigneten Programm (z.B. realterm) diese Leitung am PC setzen und rücksetzen: das muß sich so in LED widerspiegeln.
  • Mit dem Tasten STOP und GO leuchtet jeweils die zuhörige LED auf: wenn sich das nicht umschalten läßt, sind die Taster nicht korrekt angeschlossen.
  • Zusammen mit dem Umschalten der LED wird die CTS-Leitung zum PC gesetzt bzw. rückgesetzt. Dies kann man mit realterm wieder am PC kontrollieren.
  • Jede Sekunde wird eine Testausgabe zum PC gesendet - dies erfolgt mit 19200 Baud, 8 Bit, 1 Stopbit, keine Parity (und auch keine Handshake).(19200, 8N1)
  • Es erfolgt keinerlei Aktion am DCC-Ausgang oder am Xpressnet.

Links