AVRs programmieren: Unterschied zwischen den Versionen

Aus Dario's Home
Wechseln zu: Navigation, Suche
K (Bootloader)
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
== Wie kommt das Programm da rein? ==
 
== Wie kommt das Programm da rein? ==
 
[[Bild:usbprog.jpg|thumb|250px|usbprog]]
 
[[Bild:usbprog.jpg|thumb|250px|usbprog]]
 +
[[Bild:AVR-JTAG.jpg|thumb|250px|AVR-JTAG]]
 
[[Bild:AVR-ISP.jpg|thumb|250px|AVR-ISP]]
 
[[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.
Zeile 6: Zeile 7:
 
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.
  
{|{{prettytablecenter}}
+
{| class="wikitable"
|-----
+
|-  
 
!width="290"|10-Poliger ISP Stecker
 
!width="290"|10-Poliger ISP Stecker
!width="220"|6-Poliger ISP Stecker
+
|-
|-----
 
 
|align=center|
 
|align=center|
{| {{prettytablecenter}}
+
{| class="wikitable"
 
|-----
 
|-----
 
| 2: VCC  || 4: GND || 6: GND    || 8: GND || 10: GND
 
| 2: VCC  || 4: GND || 6: GND    || 8: GND || 10: GND
Zeile 18: 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|
{| {{prettytablecenter}}
+
{| class="wikitable"
 
|-----
 
|-----
 
| 2: VCC  || 4: MOSI || 6: GND     
 
| 2: VCC  || 4: MOSI || 6: GND     
Zeile 25: 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 40: Zeile 46:
 
* [http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2726 AVR ISP]
 
* [http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2726 AVR ISP]
 
* [http://www.olimex.com/dev/avr-jtag.html AVR JTAG ICE Klon]
 
* [http://www.olimex.com/dev/avr-jtag.html AVR JTAG ICE Klon]
* [http://www.embedded-projects.net/index.php?page_id=135 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 48: Zeile 55:
  
 
== JTAG ==
 
== JTAG ==
In der Liste oben steht ja auch in JTAG Adapter. Der JTAG ist eigentlich zum debuggen des Controllers und der angeschlossenen  
+
In der Liste oben steht auch ein JTAG Adapter.  
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.
+
Der JTAG dient eigentlich zum debuggen des Controllers und der angeschlossenen  
Normalerweise komme ich ohne JTAG aus, aber bei dem Heizkörperthermostat HR-20 ist der ISP nicht nach aussen gelegt, dafür aber der JTAG, hier hat sich der JTAG sehr gelohnt.
+
Hardware, aber er kann auch genutzt werden um den Controller zu programmieren.  
Ich habe keinen Originalen JTAG, sondern einen Nachbau, der soll kompatibel sein mit dem originalen und bis jetzt funktioniert er einwandfrei. Und das bei Betriebsspannungen von 3.3V bis 5V.
+
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 haben die möglichkeit sich selbst zu Programmieren. Das bedeutet, dass ein Programm in dem Atmel  
+
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, er befindet sich immer am Ende des Flash-Speichers. Zusätzlich können der Reset-Vektor und die Interrupt-Tabelle in diesen Bereich am Ende des Flash verbogen werden.  
+
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 startet bei einem Reset immer der Bootloader und dieser kann dann die Applikation starten. Wichtig dabe ist, dass die Applikation unverändert bleiben kann. Sie liegt immer in dem selben Adressraum, es ist für die Applikation also egal, ob sich hinten noch ein Bootloader befindet oder nicht.
+
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 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 vorher der Bootloader gestartet wird, also einen Reset auslösen.
+
Ich setze gerne den [http://avrubd.googlepages.com/avrub.htm Bootloader] von Shaoziyang ein.
Das kann man über einen Befehl über die Programmierschnittstelle machen (muss dann Teil der alten Applikation sein) oder über einen Resettaster, oder wenns gar nicht anders geht über Aus- und Einschalten des Gerätes.
+
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.
  
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?

usbprog
AVR-JTAG
AVR-ISP

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
2: VCC 4: GND 6: GND 8: GND 10: GND
1: MOSI 3: LED 5: /Reset 7: SCK 9: MISO
6-Poliger ISP Stecker
2: VCC 4: MOSI 6: GND
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. 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.