AVRs programmieren: Unterschied zwischen den Versionen
Dario (Diskussion | Beiträge) |
Dario (Diskussion | Beiträge) K (→Bootloader) |
||
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | == Wie | + | == Wie kommt das Programm da rein? == |
+ | [[Bild:usbprog.jpg|thumb|250px|usbprog]] | ||
+ | [[Bild:AVR-JTAG.jpg|thumb|250px|AVR-JTAG]] | ||
+ | [[Bild:AVR-ISP.jpg|thumb|250px|AVR-ISP]] | ||
Die Mikrocontroller der Atmel AVR-Familie können über verschiedene Arten programmiert werden. | Die Mikrocontroller der Atmel AVR-Familie können über verschiedene Arten programmiert werden. | ||
− | Normalerweise werden sie über das ISP-Interface | + | Normalerweise werden sie über das ISP-Interface (In System Progamming) programmiert. |
Dazu braucht man ein spezielles Programmiergerät und muss dieses mit den Leitungen verbinden. | Dazu braucht man ein spezielles Programmiergerät und muss dieses mit den Leitungen verbinden. | ||
− | {| | + | {| class="wikitable" |
− | | | + | |- |
!width="290"|10-Poliger ISP Stecker | !width="290"|10-Poliger ISP Stecker | ||
− | + | |- | |
− | |||
|align=center| | |align=center| | ||
− | {| | + | {| class="wikitable" |
|----- | |----- | ||
| 2: VCC || 4: GND || 6: GND || 8: GND || 10: GND | | 2: VCC || 4: GND || 6: GND || 8: GND || 10: GND | ||
Zeile 16: | Zeile 18: | ||
| 1: MOSI || 3: LED || 5: /Reset || 7: SCK || 9: MISO | | 1: MOSI || 3: LED || 5: /Reset || 7: SCK || 9: MISO | ||
|} | |} | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | !width="220"|6-Poliger ISP Stecker | ||
+ | |- | ||
|align=center| | |align=center| | ||
− | {| | + | {| class="wikitable" |
|----- | |----- | ||
| 2: VCC || 4: MOSI || 6: GND | | 2: VCC || 4: MOSI || 6: GND | ||
Zeile 23: | Zeile 31: | ||
| 1: MISO || 3: SCK || 5: /Reset | | 1: MISO || 3: SCK || 5: /Reset | ||
|} | |} | ||
+ | |- | ||
|} | |} | ||
− | |||
Es gibt Programmieradapter die an Pin 3 des 10-poligen Steckers eine LED ansteuern, um den Programmierung zu signalisierten. | Es gibt Programmieradapter die an Pin 3 des 10-poligen Steckers eine LED ansteuern, um den Programmierung zu signalisierten. | ||
Diese Funktion wird aber kaum genutzt, daher wird der Pin auch von Atmel als N/C (not connected) definiert. | Diese Funktion wird aber kaum genutzt, daher wird der Pin auch von Atmel als N/C (not connected) definiert. | ||
Zeile 33: | Zeile 41: | ||
Leitung die Zielhardware mit Spannung zu versorgen. Zu diesem Zweck gibt es oft Jumper auf dem Programmiergerät. | Leitung die Zielhardware mit Spannung zu versorgen. Zu diesem Zweck gibt es oft Jumper auf dem Programmiergerät. | ||
Ich habe Erfahrungen gesammelt mit folgenden Geräten: | Ich habe Erfahrungen gesammelt mit folgenden Geräten: | ||
− | * Kabel an LPT-Port | + | * [http://s-huehn.de/elektronik/avr-prog/avr-prog.htm Kabel an LPT-Port] |
− | * STK-200 Nachbau | + | * [http://www.mikrocontroller.net/articles/STK200 STK-200 Nachbau] |
− | * STK-500 | + | * [http://www.mikrocontroller.net/articles/STK500 STK-500] |
− | * AVR ISP | + | * [http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2726 AVR ISP] |
− | * AVR JTAG ICE Klon | + | * [http://www.olimex.com/dev/avr-jtag.html AVR JTAG ICE Klon] |
− | * usbprog | + | * [[usbprog|Usbprog]] |
+ | |||
Die besten Erfahrungen habe ich gemacht mit dem STK-500 und dem usbprog. | Die besten Erfahrungen habe ich gemacht mit dem STK-500 und dem usbprog. | ||
Zeile 46: | Zeile 55: | ||
== JTAG == | == JTAG == | ||
− | In der Liste oben steht | + | In der Liste oben steht auch ein JTAG Adapter. |
− | Hardware, aber er kann auch genutzt werden um den Controller zu | + | |
− | Famile über ein JTAG Interface. | + | Der JTAG dient eigentlich zum debuggen des Controllers und der angeschlossenen |
− | Normalerweise komme ich ohne JTAG aus, aber bei dem Heizkörperthermostat | + | Hardware, aber er kann auch genutzt werden um den Controller zu programmieren. |
− | Ich habe keinen Originalen JTAG, sondern einen Nachbau, der | + | Jedoch verfügen nicht alle Controller der AVR Famile über ein JTAG Interface. |
+ | Normalerweise komme ich ohne JTAG aus, aber bei dem [[HR20 - Heizkörperthermostat|HR20 - Heizkörperthermostat]] | ||
+ | ist der ISP nicht nach aussen gelegt, dafür aber der JTAG, hier hat sich der | ||
+ | JTAG sehr gelohnt. | ||
+ | |||
+ | Ich habe keinen Originalen JTAG, sondern einen Nachbau, der is kompatibel mit | ||
+ | dem originalen und bis jetzt funktioniert er einwandfrei. | ||
+ | Und das bei Betriebsspannungen von 3.3V bis 5V. | ||
== Bootloader == | == Bootloader == | ||
− | Fast alle Atmel Controller | + | Fast alle Atmel Controller bieten die Möglichkeit sich selbst zu programmieren. |
− | Teile des internen Flash löschen und neu beschreiben kann. Ein solches Programm wird Bootloader genannt | + | Das bedeutet, dass ein Programm in dem Atmel Teile des internen Flash löschen |
+ | und neu beschreiben kann. Ein solches Programm wird Bootloader genannt. | ||
+ | |||
+ | Diser befindet sich immer am Ende des Flash-Speichers. | ||
+ | Zusätzlich werden der Reset-Vektor und die Interrupt-Tabelle in diesen | ||
+ | Speicherberichbereich verbogen. | ||
+ | |||
+ | So startet bei einem Reset immer der Bootloader, dieser kann die Applikation starten, | ||
+ | wenn nicht programmiert wird. Wichtig dabei ist, dass die Applikation unverändert | ||
+ | bleiben kann. Sie liegt immer in demselben Adressraum, es ist für die Applikation | ||
+ | also egal, ob sich hinten noch ein Bootloader befindet oder nicht. (Bis auf die maximal mögliche Größe) | ||
− | So | + | So braucht man kein Programmiergerät und kann praktisch über jede beliebige Schnittstelle |
+ | (RS232, CAN, SPI, 2-WIRE) den Mikrocontroller programmieren. Man muss nur dafür sorgen, | ||
+ | dass der Bootloader gestartet wird, also einen Reset auslösen. | ||
+ | Das kann man über einen Befehl über die Programmierschnittstelle machen | ||
+ | (muss dann Teil der alten Applikation sein) oder über einen Resettaster, | ||
+ | oder wenn es gar nicht anders geht über Aus- und Einschalten. | ||
− | So braucht man | + | Ich setze gerne den [http://avrubd.googlepages.com/avrub.htm Bootloader] von Shaoziyang ein. |
− | + | Dieser nutzt die serielle Schnittstelle. So braucht man nur noch ein USB-Handyprogrammierkabel | |
+ | um den Atmel neu zu programmieren, davon habe ich mit mal eine Handvoll auf dem Flohmarkt gekauft. | ||
− | + | Auch braucht man keine spezielle Software, da das Programmieren mit jedem Teminalprogramm geht, | |
+ | welches die serielle Schnittstelle nutzt und XMODEM Upload beherscht. |
Aktuelle Version vom 28. Oktober 2008, 23:49 Uhr
Wie kommt das Programm da rein?
Die Mikrocontroller der Atmel AVR-Familie können über verschiedene Arten programmiert werden. Normalerweise werden sie über das ISP-Interface (In System Progamming) programmiert. Dazu braucht man ein spezielles Programmiergerät und muss dieses mit den Leitungen verbinden.
10-Poliger ISP Stecker | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
6-Poliger ISP Stecker | ||||||
---|---|---|---|---|---|---|
|
Es gibt Programmieradapter die an Pin 3 des 10-poligen Steckers eine LED ansteuern, um den Programmierung zu signalisierten. Diese Funktion wird aber kaum genutzt, daher wird der Pin auch von Atmel als N/C (not connected) definiert.
Bezüglich VCC ist es angedacht, dass das Programmiergerät darüber aus der Schaltzung mit Strom versorgt wird. In letzter Zeit werden die Programmiergeräte über USB mit dem PC verbunden und somit ist die Stromversorgeung des Programmierers nicht mehr nötig. Stattdessen bieten einige Programmiergeräte an den Spieß umzudrehen und über diese Leitung die Zielhardware mit Spannung zu versorgen. Zu diesem Zweck gibt es oft Jumper auf dem Programmiergerät. Ich habe Erfahrungen gesammelt mit folgenden Geräten:
Die besten Erfahrungen habe ich gemacht mit dem STK-500 und dem usbprog.
Wenn man seine Schaltung richtig designed, kann man die Ausgänge, an denen der ISP liegt auch in der Applikation nutzen. Folgendes sollte man beachten:
- Wenn man die Pins als Ausgabe konfiguriert ist es für das Programmieren unproblematisch, jedoch sollte die angschlossene Hardware dann keine Zicken machen, wenn sich der Pegel beim Programmieren dauernd ändert.
- Wenn man die Pins als Eingabe konfiguriert muss die angschlossene Hardware sich beim Programmieren hochohmig verhalten.
JTAG
In der Liste oben steht auch ein JTAG Adapter.
Der JTAG dient eigentlich zum debuggen des Controllers und der angeschlossenen Hardware, aber er kann auch genutzt werden um den Controller zu programmieren. Jedoch verfügen nicht alle Controller der AVR Famile über ein JTAG Interface. Normalerweise komme ich ohne JTAG aus, aber bei dem HR20 - Heizkörperthermostat ist der ISP nicht nach aussen gelegt, dafür aber der JTAG, hier hat sich der JTAG sehr gelohnt.
Ich habe keinen Originalen JTAG, sondern einen Nachbau, der is kompatibel mit dem originalen und bis jetzt funktioniert er einwandfrei. Und das bei Betriebsspannungen von 3.3V bis 5V.
Bootloader
Fast alle Atmel Controller bieten die Möglichkeit sich selbst zu programmieren. Das bedeutet, dass ein Programm in dem Atmel Teile des internen Flash löschen und neu beschreiben kann. Ein solches Programm wird Bootloader genannt.
Diser befindet sich immer am Ende des Flash-Speichers. Zusätzlich werden der Reset-Vektor und die Interrupt-Tabelle in diesen Speicherberichbereich verbogen.
So startet bei einem Reset immer der Bootloader, dieser kann die Applikation starten, wenn nicht programmiert wird. Wichtig dabei ist, dass die Applikation unverändert bleiben kann. Sie liegt immer in demselben Adressraum, es ist für die Applikation also egal, ob sich hinten noch ein Bootloader befindet oder nicht. (Bis auf die maximal mögliche Größe)
So braucht man kein Programmiergerät und kann praktisch über jede beliebige Schnittstelle (RS232, CAN, SPI, 2-WIRE) den Mikrocontroller programmieren. Man muss nur dafür sorgen, dass der Bootloader gestartet wird, also einen Reset auslösen. Das kann man über einen Befehl über die Programmierschnittstelle machen (muss dann Teil der alten Applikation sein) oder über einen Resettaster, oder wenn es gar nicht anders geht über Aus- und Einschalten.
Ich setze gerne den Bootloader von Shaoziyang ein. Dieser nutzt die serielle Schnittstelle. So braucht man nur noch ein USB-Handyprogrammierkabel um den Atmel neu zu programmieren, davon habe ich mit mal eine Handvoll auf dem Flohmarkt gekauft.
Auch braucht man keine spezielle Software, da das Programmieren mit jedem Teminalprogramm geht, welches die serielle Schnittstelle nutzt und XMODEM Upload beherscht.