www.mikrocontroller.net

Pony-Prog Tutorial

Diese 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
Ponyprog jetzt opensource

Inhaltsverzeichnis

[bearbeiten] Benötigte Ausstattung

  • Programmier-Software PonyProg 2000 von www.lancos.com. Für diese Anleitung wurde PonyProg 2000 Version 2.06 beta genutzt.


  • AVR-Controller-Board mit ISP-Anschluss (siehe weiter unten)

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 einrichten

Pronyprog kommt mit einem Installationsprogramm, einfach starten. Einstellung der Programmierhardware (STK200 ISP DONGLE) in PonyProg unter Setup/Interface-Setup nach folgender Abbildung:

bild:Pony1.jpg

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:

bild:Pony2.jpg

[bearbeiten] Hardwareverbindung herstellen

Auf 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.

Bild:Wanne10.jpg

Die Anschlussbelegung (entnommen aus der AVRISP Online-Benutzeranleitung) siehe folgende Abbildung. Pin 1 ist an Wannensteckern üblicherweise mit einem Pfeil markiert.

bild:Isp_conn.jpg

SignalPinsE/A (aus "Sicht" des Programmieradapters)Beschreibung
VTG2(Eingang)Stromversorgung des Programmiergeräts, mit +5V Versorgung des Controllerboards verbinden
GND4,6,8,10(Eingang)Masse, Ground, mit Ground des Controllerboards verbinden
MOSI1AusgangDatenleitung vom Programmieradapter zum Controller, mit MOSI des AVR verbinden
MISO9EingangDatenleitung vom Controller zum Programmieradapter, mit MISO des AVR verbinden
SS3nicht benutztReserviert für Auswahl eines Slave, wenn über diesen Stecker Master-Slave mit SPI Daten austauschen sollen. - Wird beim Programmieren nicht benutzt und ist nicht verbunden.
SCK7AusgangProgrammier-Takt-Leitung (PA->AVR), mit SCK des AVR verbinden
RESET5AusgangResetleitung, wird durch das Programmiergerät bei der Programmierung auf "LOW gezogen", mit RESET des AVR verbinden


Sogenannte "value-added" Programmieradapter unterstützen an PIN 3 den Anschluss einer LED, mit der ein Zugriff auf den Controller durch den Programmieradapter angezeigt werden kann. Weiters dazu in den Beschreibungen der Programmierhardware auf den o.g. Seiten.


Zur Programmierung mittels ISP muss der Controller mit einer "Taktquelle" ausgestattet sein, modernere AVRs sind mit einem internen Oszillator (1 MHz Takt) ausgestattet, der ab Werk aktiviert ist. Bei diesen sind keine zusätzliche externen Bauteile erforderlich. An AVRs ohne internen Oszillator (z.B. die veraltete "AT90S"-Serie) muss zur ISP-Programmierung ein externer Taktgeber (z.B. Quarz mit Kondensatoren) angeschlossen werden.

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 laden

In 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 übertragen

In 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] Fuses

Mit 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 Port

Modische 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

  • Im Ponyprog-Menü : [Setup] [Interface Setup...]
(o) Serial [ SI Prog I/O ]
(o) COM1
[ ] Invert Reset [v] Invert D-in
[v] Invert SCKL  [v] Invert D-Out
  • Zeitkalibrierung durchführen: Im Ponyprog-Menü : [Setup] [Calibration]
  • Anwahl des Mikroporzessortyps AVR und ATmega8535
  • Laden der HEX-Datei C:\home\cc\qq\avr\qqtslcd.hex
  • Verbinde Programmieradapter mit Mikroprozessor
  • Spannung an Mikroprozessor ein (5V, versorgt MAX238 )
  • Wähle an AVR und ATmega8535

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 Linux

For 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 Parallelport

Schaltplan eines Adapters für die Druckerschnittstelle (Parallelport)

Bild:pcpartwi.png

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:

  • Starte Ponyprog
  • Einsetzen eines 24C128
  • [Setup] [Interface Setup] [EASYI2C I/O] an (o) LPT1
  • Anwahl des EEPROM-Typs, z.B. [I2C Bus 16bit eeprom] [24128]
  • Versorgung durch 5V
  • Read Device

Der WP - Pin muss Low sein, um schreiben zu können.

[bearbeiten] I2C - EEPROM programmieren am COM1-Port

Bild:sertwi.png

R5,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] Sonstiges

Ponyprog kann noch viel mehr, als nur AVR in-system programmieren. So können beispielsweise auch serielle I2C EEPROMS (24Cxx) programmiert werden.



  • 1: Uli Huber hat im Forum einen Weg beschrieben, wie man mit PonyProg direkt aus AVR-Studio heraus programmieren kann, ohne einen SDK-kompatiblen Programmer zu haben.
webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net