Programmierung Tiny45 für DCC Lokdecoder Hier eine Beschreibung, der Programmierung des Tiny45 für den Lokdecoder. Zur Erstprogrammierung ist ein Programmer für Atmels AVR Mikrokontroller nötig (AVRISP mk II, parallel Dongel, STK200/500/600 Dongel oder ähnliches) und eine Programmiersoftware. Ich werde es hier an Hand von Atmels AVRStudio und einem AVRISP mk II erläutern. Anstelle des original mk II kann auch ein Funktionsgleicher Nachbau verwendet werden. Das AVRStudio kann man bei Atmel downloaden. Für die spätere Bootloader Programmierung ist ein serieller Adapter nötig, der sich mit wenig Aufwand selbst zusammenbauen lässt. Benötigte Programmierausstattung: 1. AVR Programmer siehe hier: http://www.mikrocontroller.net/articles/avr_in_system_programmer#programmer- Varianten 2. AVRStudio von Atmel siehe: http://www.mikrocontroller.net/articles/avr-studio 3. 1-wire Adapter siehe hier: 4. AVRootloader.exe (ist anbei) Die Programmierung erfolgt in 3 Phasen. Als erstes schreiben wir einen Bootloader in unseren Tiny45. Das ist eine kleine Software, die es uns später ermöglicht, unser eigentliches Decoderprogramm mit einfachen Mitteln (eine Signalleitung und GND) in den Tiny45 zu bekommen. Das hat den Vorteil, dass wir später den fertigen Decoder auch auf diese einfache Weise (ohne Programmieradapter mit nur 2 Leitungen) jederzeit mit einer neuen Programmversion versehen können. Bei unserem Tiny45 mit seinen acht Beinchen hat das den weiteren Vorteil, dass wir dann den RESET - Pin nicht mehr zur Programmierung benötigen (der AVR Programmieradapter braucht ihn) und ihn als weiteren I/O Pin verwenden können. Der zweite
Schritt ist somit, die Decodersoftware per AVRloader.exe in den Tiny45 zu schreiben. Als drittes und letztes müssen wir noch die Fuse-Bits des Tiny45 setzen. Das sind Konfigurationsschalter mit dem man bestimmte Funktionen des Tiny45 setz (z.b. Taktquelle, Resetpin, mindest Betriebsspannung ). Der AVR sollte vor dem auflöten auf die Decoderplatine in einer passenden Umgebung programmiert werden (siehe auch: http://www.mikrocontroller.net/articles/avr- Tutorial:_Equipment). Wir benötigen für unseren Tiny45 nur die absolute minimal Version: 5V Betriebsspannung mit 100nF abgeblockt, ein 10kohm Widerstand von 5V an den Resetpin (Pin1) und die Verbindungen zum Programmieradapter. Los geht s: Als erstes öffnen wir das AVRStudio und die Datei T45lockdec-2.aps
Das sollte dann so aussehen: Jetzt überprüfen wir ob die richtige Motorendstufe ausgewählt ist:
Als nächstes verbinden wir uns mit unserm Programmer (bei mir mk II): Jetzt wählen wir auf der Mainseite den Tiny45 aus:
Und unter Settings 250 khz ISP Takt: Im Auslieferungszustand läuft der Tiny45 mit 1MHz Takt und ¼ davon müssen wir als ISP Frequenz einstellen. Jetzt auf Read Signature klicken und es muss links Signature matches selected device stehen!
Wenn das so hinhaut, haben wir unseren Tiny45 richtig über den AVR Programmer mit dem PC verbunden und können weitermachen. Sollt dort aber etwas von Warning Signature falsch stehen, bitte noch einmal den Programmieraufbau überprüfen und die Links oben durcharbeiten! Alles ok weiter geht es, wir schreiben zuerst einmal einen Grundzustand in die Fuse-Bits. Diesen habe ich in der T45lokdec-2.asm (siehe Bild grüne Schrift) dokumentiert. Man kann direkt bei EXTENDED/HIGH/LOW die Werte eintragen (FE/D4/C2). ÜBERPRÜFEN! Dann bitte 1x auf Program klicken. Die Fuse-Bits werden jetzt geschrieben und überprüft. Im hellgrauen Fenster sollte überall ok stehen. Wir haben jetzt die Taktquelle unseres Tiny45 auf 8 MHz umgestellt, das ist der Takt den der Decoder später verwendet. Wir müssen nun aber für die weitere Programmierung den ISP Takt wieder anpassen, bitte jetzt 1 oder 2 MHz einstellen:
Wir betreiben den Tiny45 mit dem internen RC Taktgeber, dieser kann zur Erhöhung der Genauigkeit abgeglichen werden. Atmel speichert dazu einen Referenzwert im EEPROM und im Programmspeicher ab. Diesen kann man auslesen und seinem Programm zur Verfügung stellen, was ihn nach dem Start in ein Korrekturregister speichern kann. Bei meiner aktuellen Decodersoftware ist es nicht nötig, dass der Tiny45 mit genau 8 MHz Takt läuft. Ich möchte trotzdem beschreiben wie man diesen Wert holt und wo er in der Decodersoftware abgelegt wird. Als erstes den Wert auslesen, im Reiter Advanced für 8 MHz auf Read klicken und Wert merken:
Jetzt in der T45lokdec-2.asm in der letzten Zeile den Wert eintragen ($ Zeichen davor): Nun auf das blau eingerahmte Symbol klicken und damit die Files für den Tiny45 neu erstellen:
Wir öffnen nun den Bootloader im AVR Studio (Reiter Programm Programmfile): Datei AVRootloader.hex öffnen und dann auf Programm klicken zum schreiben in den Tiny45: Das dann bitte noch einmal mit Verrify überprüfen! Damit ist der erste Teil fertig. Wir haben die Fuse-Bits gesetzt und den Bootloader programmiert.
Nun bitte die 1-wirre Verbindung mit Pin3 (PB4) herstellen und die AVRootloader.exe öffnen: Port auswählen und bei Flash die T45lokdec-2.hex und bei EEPROM die T45lokdec-2.eep auswählen. Jetzt auf Connect to device klicken und es sollte folgendes erscheinen: Es gibt teilweise Probleme mit USB/seriell Wandler, deswegen neu: Baudrate auf 9600 ändern!
Sollte das nicht so aussehen, bitte Eurer 1-wire Kabel und die serielle Verbindung noch einmal überprüfen! Es geht auch problemlos mit einem USB to seriell Wandler (wie bei mir COM8). Dann bitte einmal auf Program klicken. Das Programmieren geht sehr schnell, in einer Sekunde ist alles fertig. Wer mag kann jetzt noch im Reiter EEPROM Content sich den EEPROM Inhalt ansehen, hier sind unsere CV Variablen und der OSCCAL Wert abgelegt. Man könnte den auch hier in Speicherstelle 64 (da steht gerade b1) direkt eintragen.
Zum verlassen bitte auf Dissconnect device klicken. Achtung man kann sich danach NICHT wieder mit dem Bootloader verbinden -> warum siehe Decodersoftware wechseln. Zum Schluss müssen wir noch den RESET Pin abschaltet um einen weiteren Pin für die Fahrtrichtungsbeleuchtung frei zu haben. Wir hätten das auch schon nach dem programmieren des Bootloader machen können, aber dann hätten wir im Fehlerfall mit unserem ISP Programmer den Tiny45 nicht noch einmal neu beschreiben können. Jetzt zum Schluss wissen wir, dass alles läuft und wir machen das jetzt mit der Sicherheit über unseren Bootloader eine neue Software einspielen zu können. Wir wählen wieder den Fuses Reiter und ändern die High Fuse auf $54, dann auf Program, wir werden jetzt noch einmal gefragt, ob wir das wirklich wollen.
Fertig! Der Tiny45 ist jetzt programmiert und kann eingebaut werden. Er hört auf die kurze Lokadresse 1 (ab Softwareversion4 Lokadresse 3) Decodersoftware wechseln Wenn wir später einmal die Software in unserem Lokdecoder wechseln wollen, müssen wir folgendermaßen vorgehen: Als erstes muss in die CV55 eine 1 geschrieben werden. Nur dann ist es möglich sich mit der AVRootloader.exe erneut mit dem Decoder zu verbinden. Damit soll verhindert werden, dass im normalen Betrieb aus dummem Zufall die Decodersoftware gelöscht bzw. überschrieben wird (z.b. bei schlechten Schienenkontakt). Nach dem Wechsel der Software sollte die CV55 wieder auf 0 gesetzt werden! Es sei den man schreibt auch ein neues EEPROM File (da ist das dann schon richtig). Man kann auch im Reiter EEROM Contet die CV Werte ändern. In Adresse 0x0000 steht
CV1 und dann geht es fortlaufend weiter, so das bei 0x0036 CV55 steht. Nach dem ändern mit Write to device zurück schreiben!