Programmierung der Focuser-Firmware mittels Pony-Prog

Programmierung der Focuser-Firmware
mittels Pony-Prog
Einleitung
1
Benötigte Ausstattung
1
PonyProg installieren und einrichten
2
Hardwareverbindung herstellen
3
Programmierung des Controllers
5
Fuses
5
Einleitung
Diese Anleitung beschreibt, wie die Focuser-Firmware auf den ATMEL AVRMikrocontroller übertragen wird. Die vorgestellte Lösung basiert auf freier oder kostenloser
Software und low-cost-Hardware.
Benötigte Ausstattung
1. Programmier-Software „PonyProg 2000“ von www.lancos.com. Für diese Anleitung
wurde PonyProg 2000 Version 2.0f beta genutzt.
2. STK200-kompatible Programmier-Hardware (Programmieradapter).
Ich habe mir den nachfolgenden preiswerten Programmieradapter (ISP-Programmierkabel) im
Internet unter
http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=73&products_id=
41
bestellt. Es ist mit 12.80 Euro recht preiswert, erfüllt aber trotzdem seine Aufgabe voll und
ganz. Bei diesem Kabel ist allerdings das Anschlusskabel zu lang, so dass es beim
programmieren oft zu Fehlern kam. Eine Kürzung des Kabels auf etwa 15cm schaffte sofort
Abhilfe. Der Programmieradapter ist voll STK200-kompatibel.
Um den Microcontroller auf der Platine programmieren zu können, muss das Netzteil
angeschlossen sein!
PonyProg installieren und einrichten
Pronyprog kommt mit einem Installationsprogramm daher und wird einfach durch Starten des
selbigen installiert einfach starten. Einstellung der Programmierhardware (STK200 ISP
DONGLE) in PonyProg unter Setup/Interface-Setup nach folgender Abbildung:
Im Anschluss PonyProg die Zeitschleifen kalibieren lassen (Menüpunkt Setup/Calibration).
Dies ist wichtig, da PonyProg sonst eventuell Programmierfehler liefert.
PonyProg unterstützt die automatische Erkennung von AVR-Controllern, um Probleme zu
vermeiden, sollte man den Controllertyp jedoch manuell einstellen. Auf der Platine des
Focusers ist ein ATMega8 eingebaut. Dieser ist auch auszuwählen. Das folgende Bild zeigt
die Parametrierung für einen ATMega16.
Hardwareverbindung herstellen
Auf der Focuser-Platine ist ein Anschluss für den Programmieradapter vorhanden
(Kennzeichnung: ISP). Es handelt sich hierbei um einen 10-poligen Pfostenstecker. Dieser
entspricht von seiner Beschaltung dem Standard ATMEL-ISP. Er ist damit auch kompatibel
zum ATMEL AVRISP-Programmiergerät.
Die Anschlussbelegung ist in der folgenden Abbildung dargestellt. Diese Info ist für Besitzer
eines STK200-kompatiblen Programmers nur rein informativ. Wer sich einen Programmer
selbst bauen will muss die entsprechende Beschaltung einhalten. Die Pins sind auf der Platine
mit Ziffern beschriftet.
Signal
Pins
E/A (aus "Sicht" des Beschreibung
Programmieradapters)
(Eingang)
Stomversorgung des Programmiergeräts, mit
+5V Versorgung des Controllerboards
verbinden
VTG
2
GND
3,4,6,8,10 (Eingang)
Masse, Ground, mit Ground des
Controllerboards verbinden
MOSI
1
Ausgang
Datenleitung vom Programmieradapter zum
Controller, mit MOSI des AVR verbinden
MISO
9
Eingang
SCK
7
Ausgang
RESET 5
Ausgang
Datenleitung vom Controller zum
Programmieradapter, mit MISO des AVR
verbinden
Programmier-Takt-Leitung (PA->AVR), mit
SCK des AVR verbinden
Resetleitung, wird durch das
Programmiergerät bei der Programmierung
auf "LOW gezogen", mit RESET des AVR
verbinden
Der ISP Anschluss wird zur Programmierung mit dem Programmieradapter wie in der
nachfolgenden Abbildung verbunden, der PC-seitige Anschluss erfolgt an der
Druckerschnittstelle (Parallelport, LPT). Es empfiehlt sich, die Stromversorgung des Focusers
beim an- und abstecken abzuschalten.
Programmierung des Controllers
Nun geht es ans Eingemachte. Die Firmware soll in den Atmel AVR (ATMega8) gebrannt
werden. Ist der Controller im Werkszustand, so sollte sein Flash ROM komplett mit dem Wert
$FF beschrieben sein. Dies kann man leicht austesten indem man den Flash ROM einfach mal
ausliest. Man kann den Atmel auch über den Menüpunkt Command/Erase (Ctrl-E) auch
einfach löschen und so sicher sein, dass er leer ist. Sollte ein Programmiervorgang mal
daneben gehen, so sollte man einfach alles löschen und es noch mal versuchen. Den Atmel
kann man nahezu unbegrenzt neu programmieren.
Nun aber zur eigentlichen Vorgehensweise bei der Programmierung.
Schritt 1: Hex-Datei in Ponyprog laden
In Menü: File/Open Program (Flash) File... wählen, im Dialog die HEX-Datei (z.B.
SF2_ROBO_311.hex) auswählen und mit [OK] in PonyProg laden.
Schritt 2: Firmware zum Controller übertragen
In Menü: Command/Write Program (Flash) wählen. PonyProg überträgt die Daten aus der
HEX-Datei dann auf den Controller ("flashen") und verfiziert im Anschluss, ob dieser
Schreibvorgang fehlerfrei durchgeführt wurde, indem der Inhalt des Controller-FlashSpeichers gelesen und mit dem Inhalt der HEX-Datei verglichen wird. Der Inhalt des
EEPROM wird bei der Programmierung gelöscht, d.h. alle Speicherstellen des EEPROMSpeichers im AVR werden auf $FF gesetzt.
Schritt 3: EEPROM Inhalt laden
In Menü: File/Open Data (EEPROM) File... wählen, im Dialog die EEP-Datei (z.B.
SF2_ROBO_311.EEP) auswählen und mit [OK] in PonyProg laden.
Schritt 4: EEPROM Inhalt zum Controller übertragen
In Menü: Command/Write Data (EEPROM) wählen. PonyProg überträgt die Daten aus der
EEP-Datei dann auf den internen EEPROM des Controllers und verfiziert im Anschluss, ob
dieser Schreibvorgang fehlerfrei durchgeführt wurde, indem der Inhalt des ControllerEEPROM-Speichers gelesen und mit dem Inhalt der EEP-Datei verglichen wird.
Fuses
Mit Ponyprog kann man bzw. muss man auch in unserem Falle die Fuses bei den AVRs
setzen, muß dabei aber sehr aufpassen: Die Fuses sind im AVR invertiert, d.h. 0 = ein und 1 =
aus. Das steht auch so im Datenblatt. Ponyprog invertiert das wieder (steht auch da, allerdings
in dunkelgrau auf hellgrauem Grund), d.h. 0 = aus und 1 = ein. Jetzt scheint wieder alles
normal zu sein.
Allerdings steht im Datenblatt nicht immer ein und aus, sondern manchmal (z.B. bei den
Clock Sources) steht da auch einfach 0 und 1. Da Ponyprog dieses Fuses ebenfalls invertiert,
muß man diese selbst nochmals invertieren. Wo im Datenblatt eine 0 steht muß man in
Ponyprog ein Häkchen setzen, bei einer 1 im Datenblatt das Häkchen löschen.
Verwirrt? Tja, hier hilft nur sorgfältiges arbeiten. Ganz wichtig: Erstmal die bisherigen
Einstellungen auslesen. Und dann nur das ändern, was unbedingt nötig ist. Finger weg von
RSTDSBL. Wenn man diese ändert, dann kann man den AVR nicht mehr über das STK200
programmieren. Ohne alternativen Bootloader oder einem Parallelprogrammer (z.B. STK500)
ist der Chip dann wertlos und muss wieder ausgelötet werden!
Die folgende Abbildung zeigt die Belegung der Fuses bei einem „jungfräulichen“ ATMEGA8
mit aktiviertem internen RC-Oszillator mit 1MHz.
Da unser Focuser einen Externen Quarz als Taktgeber verwendet, weil dieser genauer arbeitet
als der interne und im Gegensatz zum internen auch temperaturstabiler ist, werden die Fuses
wie folgt gesetzt und gebrannt.
Es wird also bei den Fuses CKSEL3, CKSEL2, CKSEL1 die Häkchen entfernt und bei
CKSEL0 das Häkchen gesetzt. Alle anderen Fuses bleiben unangetastet.
Dann wird mit Klick auf Write die Einstellung Programmiert und somit der externe Quarz
aktiviert. Nun ist der Focuser Betriebsbereit und sollte sich über das Robofocus-Protokoll
ansprechen lassen.