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.
© Copyright 2025 ExpyDoc