Dieser ArtikelBenutzerSuche |
Pony-Prog TutorialDiese Anleitung beschreibt, wie vom Assembler (z.B. AVR-Studio) oder C-Compiler (z.B. avr-gcc/winavr) erzeugte HEX-Dateien auf einen Atmel AVR-Mikrocontroller übertragen werden. Die vorgestellte Lösung basiert auf freier oder kostenloser Software und low-cost-Hardware. Anfänger sollten sich bevor sie loslegen zuerst einmal das AVR-Tutorial zu Gemüte führen. Die Ponyprog - Homepage ist http://www.lancos.com/prog.html Das Ponyprog - Diskussionsforum ist http://ponyprog.sourceforge.net/phorum/list.php?2 Hinweis auf den Quellcode
[bearbeiten] Benötigte Ausstattung
Um schon in der Anfangsphase Probleme zu vermeiden, sollte der Controller beim Einsatz eines STK200-Programmierers mit 5 Volt betrieben werden. Geringere Spannungen werden nicht von allen Programmieradaptern unterstützt. Höhere Spannungen zerstören möglicherweise den Controller oder den Parallelport des PCs. [bearbeiten] PonyProg installieren und einrichtenPronyprog kommt mit einem Installationsprogramm, einfach starten. Einstellung der Programmierhardware (STK200 ISP DONGLE) in PonyProg unter Setup/Interface-Setup nach folgender Abbildung: Im Anschluss PonyProg die Zeitschleifen kalibrieren lassen (Menüpunkt Setup/Calibration). PonyProg unterstützt die automatische Erkennung von AVR-Controllern, um Probleme zu vermeiden, sollte man den Controllertyp jedoch manuell einstellen. Für einen ATmega16 z.B. so: [bearbeiten] Hardwareverbindung herstellenAuf der Controller-Platine (Controllerboard) ist ein Anschluss für den Programmieradapter erforderlich. Überlicherweise wird dazu eine 10-polige "Pfostenwanne" (andere Bezeichnung: Wannenstecker, Wannen-Stiftleisten) (5 Pole in 2 Reihen, "WSL 10G" bei Reichelt) genutzt (siehe Abbildung). Dieser Anschluss ist auch kompatibel zum ATMEL AVRISP Programmiergerät. Die Anschlussbelegung (entnommen aus der AVRISP Online-Benutzeranleitung) siehe folgende Abbildung. Pin 1 ist an Wannensteckern üblicherweise mit einem Pfeil markiert.
Der ISP Anschluss wird zur Programmierung mit dem Programmieradapter verbunden, der PC-seitige Anschluss erfolgt an die Druckerschnittstelle (Parallelport, LPT). Es empfiehlt sich, die Stomversorgung des Controllerboards beim an- und abstecken abzuschalten. [bearbeiten] Programmierung des Controllers[bearbeiten] Schritt 1: Hex-Datei in Ponyprog ladenIn PonyProg Menü: File/Open-Device-File... wählen, im Dialog die HEX-Datei auswählen und mit [OK] in PonyProg laden.. [bearbeiten] Schritt 2: Daten zum Controller übertragenIn PonyProg Menü: Command/Write All 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-Flash-Speichers 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 EEPROM-Speichers im AVR werden auf $FF gesetzt. [bearbeiten] FusesMit Ponyprog kann man auch die Fuses bei den AVRs setzen, muss 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, muss man diese selbst nochmals invertieren. Wo im Datenblatt eine 0 steht muss 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 ([1]): 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 AVR HV-Programmer (z.B. STK500) ist der Chip dann wertlos. Siehe auch: Vergleich der Fuses bei verschiedenen Programmen [bearbeiten] Programmierung über den seriellen PortModische Laptops haben nicht immer ein Parallelport. Dann können die 3 Ausgangsleitungen des seriellen Ports COM1 von Ponyprog angesteuert werden. Es werden dabei keine Daten seriell herausgeschickt, sondern die 3 Leitungen werden durch entsprechende Befehle High und Low geschaltet. Eine Warnung: Es gibt im Handel diverse USB-Seriell Wandler. Ihre Aufgabe ist es am USB-Port eine serielle Schnittstelle zur Verfügung zu stellen. Da PonyProg den seriellen Port aber nicht wie einen standardmässigen seriellen Port benutzt, funktioniert die Programmierung über so einen USB Wandler in den seltesten Fällen. [bearbeiten] Schaltbild(Auch als Tinycad-Quelle verfügbar: Bild:Sercon2m.zip - Tinycad gibt es bei http://tinycad.sourceforge.net ) Die Spannungsversorgung für den MAX238 erfolgt von der Schaltung. Deswegen ist der Programmieradapter nur für Schaltungen brauchbar, die mit 5 V +-5% versorgt werden. Ähnliche Adapter, die mit Dioden, Z-Dioden und Widerständen aufgebaut sind, sind unter dem Namen "sercon programming adapter" im Internet zu finden. Diese benötigen dann andere Einstellung der Invertierungs-bits! Siehe hierzu [[2]] [bearbeiten] Vorgehensweise
(o) Serial [ SI Prog I/O ] (o) COM1 [ ] Invert Reset [v] Invert D-in [v] Invert SCKL [v] Invert D-Out
Damit lassen sich die Konfigurationsbits auslesen. Und damit lässt sich ATmega8535, ATmega32 programmieren. Hinweis: Der MAX238 invertiert die RS232-Signale (das wird für RS232-Verbindungen so gebraucht.) Deswegen die Invertierungsbits im Ponyprog entsprechend setzen. Das muss bei jedem Start von Ponyprog (2.07a Beta) neu eingestellt werden. [bearbeiten] avrdude unter LinuxFor diesen sercon2m muss 'root' in /etc/avrdude.conf noch einfügen: programmer id = "sercon2m"; desc = "An serial port, mikrocontroller.net Pony-Prog_Tutorial"; type = serbb; reset = ~3; sck = ~7; mosi = ~4; miso = ~8; ; Dann kann ein atmega32 programmiert werden mit avrdude -p atmega32 -P /dev/ttyS0 -c sercon2m -U flash:w:dateiname.hex
[bearbeiten] I2C - EEPROM programmieren am ParallelportSchaltplan eines Adapters für die Druckerschnittstelle (Parallelport) Diese Schaltung ist nachgebaut nach der Schaltung, die Claudio Lanconelli in http://www.lancos.com/prog.html#easyi2c veröffentlicht hat. Die Transistoren invertieren das Signal: Ausgabe von 1 führt dazu, dass die entsprechende Leitung (SDA SCL) nach LOW gezogen wird. Die Transistoren schützen das Parallelport vor Überlastung oder Kurzschluß (Ich tausche nach einem Unfall lieber zwei Transistoren als das Mainboard meines Laptop ;-) . Diese Schaltung verwende ich auch, um aus Turbo-C heraus EEPROM auszulesen und andere TWI (I²C, I2C) - Experimente zu machen. Anwendung:
Der WP - Pin muss Low sein, um schreiben zu können. [bearbeiten] I2C - EEPROM programmieren am COM1-PortR5,R6 = 10 kOhm geht nicht. Muss 3.3 kOhm sein. Wenn die Steckbrücken 1-2 und 3-4 fehlen (kein Pull-Up), dann zeigt Ponyprogr die Fehlermeldung an: I2CBus Stop condition error (bad timing ?) (-20) Der Aufbau eines dritten Inverters mit einem Transistor (würde das Invertieren von D-IN sparen) erwies sich als zu problematisch. - Vermutlich war der verwendete Transistor zu langsam. Die Einstellungen in Ponyprog: (o) Serial SI Prog I/O (o) COM1 [ ] Invert Reset [v] Invert D-IN [ ] Invert SCKL [ ] Invert D-OUT Nach jedem Start von Ponyprog muss das [v] Invert D-IN neu gesetzt werden. Die Zeitcalibrierung nicht vergessen! [bearbeiten] SonstigesPonyprog kann noch viel mehr, als nur AVR in-system programmieren. So können beispielsweise auch serielle I2C EEPROMS (24Cxx) programmiert werden.
|