Dies ist eine Anleitung für Einsteiger, die noch nie was mit AVR Programmierung gemacht haben. Ich programmiere alle meine AVR’s unter Mac und nutze Freeware-Tools. Diese Anleitung zeigt die kostengünstigste Variante für AVR Programmierung unter Mac.
Hardware
Beim Flashen von AVR’s kommt man ohne Programmieradapter nicht weit. Ich verwende für alle meine AVR’s den AVR ISP2 USB mk2 (http://www.atmel.com/tools/AVRISPMKII.aspx). Zusätzlich zu dem Adapter benötigt man entweder ein Programmierboard von Atmel oder man baut sich eine „Kabelpeitsche“ selber und verwendet ein handelsübliches Steckboard. In dieser Anleitung verwende ich einen Attiny13. Das ganze wird wie folgt verkabelt und mit einem 5V Netzteil versorgt…
Die Pins Reset, SCK, MISO, MOSI am Mikrocontroller gibt es bei allen AVR’s und sollten bei anderen Controllern entsprechend aus dem Datenblatt herausgesucht werden. Mit diesen Pins wird der Controller geflashed. Sobald die Programmierung auf dem Chip ist, können diese Pins (mit Außnahme des Reset-Pins) ganz normal als Eingang oder Ausgang verwendet werden. Der 100nF Kondensator gehört bei jeder AVR-Schaltung mit dazu, da er Stromschwankungen ausgleicht. Er sollte in der Nähe des Chips angebracht werden.
Der AVRISP kann jetzt mit dem Mac verbunden werden und es sollte nun die Status-LED im AVRISP leuchten.
Software
Nun muss die entsprechende Software installiert werden, um den Programmieradapter anzusteuern.
Unter http://www.obdev.at/products/crosspack/index.html das „Crosspack“ herunterladen, entpacken und installieren. Diese Software compiliert die C-Programmierung und gibt sie dem AVRISP weiter.
Als nächstes das Terminal unter Programme/Dienstprogramme/Terminal öffnen und folgenden Befehl eingeben:
sudo port install avr-libc
Sollte jetzt ein Fehler angezeigt werden, dann fehlt die Paketverwaltung „MacPorts“, sie kann unter http://www.macports.org kostenlos heruntergeladen und installiert werden. MacPorts kontrolliert und steuert Installationen von freien Entwicklersoftwaren, indem es alle zugehörigen Pakete aus dem Internet lädt und sie zusammenfassend installiert. Ist MacPorts erfolgreich installiert, muss der Befehl erneut eingegeben werden.
Nun Ihr Passwort eingeben, mit Return bestätigen und die Installation beginnt.
Das ganze kann eine Zeit dauern, da erst alle Pakete aus dem Internet geladen werden.
Ansprechen des Mikroprozessors
Die komplette Kommunikation mit dem Chip findet über das Terminal statt. Es gibt ein paar Befehle, mit denen man die wichtigsten Funktionen ausführen kann. Beim ersten Versuch empfiehlt sich eine Statusabfrage, ob alles richtig angeschlossen ist und der AVRISP mit dem Chip kommunizieren kann. Dafür muss einfach folgender Befehl ins Terminal eingegeben werden:
avrdude -c avrispv2 -P usb -p t13
Wenn alles gut läuft, sollte Folgendes danach im Terminal erscheinen:
In der „device signature“ sind grundlegende Informationen zum Chip enthalten. Der verschlüsselte Wert bestätigt, dass es sich um einen Attiny13 handelt.
Bei jedem Befehl, den man ins Terminal eingibt, muss man angeben um welchen AVR-Mikrocontroller es sich handelt. Oben geschieht dies mit der Abkürzung t13, welche für den Attiny13 steht. Dies ist komplette Liste der Abkürzungen für AVR-Typen:
t10 |
ATtiny10 |
m169 |
ATMEGA169 |
x128a4 |
ATXMEGA128A4 |
t11 |
ATtiny11 |
m16u2 |
ATmega16U2 |
x16a4 |
ATXMEGA16A4 |
t12 |
ATtiny12 |
m2560 |
ATMEGA2560 |
x192a1 |
ATXMEGA192A1 |
t13 |
ATtiny13 |
m2561 |
ATMEGA2561 |
x192a3 |
ATXMEGA192A3 |
t15 |
ATtiny15 |
m32 |
ATMEGA32 |
x256a1 |
ATXMEGA256A1 |
t2313 |
ATtiny2313 |
m324p |
ATMEGA324P |
x256a3 |
ATXMEGA256A3 |
t24 |
ATtiny24 |
m324pa |
ATmega324PA |
x256a3b |
ATXMEGA256A3B |
t25 |
ATtiny25 |
m325 |
ATMEGA325 |
x32a4 |
ATXMEGA32A4 |
t26 |
ATTINY26 |
m3250 |
ATMEGA3250 |
x64a1 |
ATXMEGA64A1 |
t261 |
ATTINY261 |
m328p |
ATMEGA328P |
x64a3 |
ATXMEGA64A3 |
t4 |
ATtiny4 |
m329 |
ATMEGA329 |
x64a4 |
ATXMEGA64A4 |
t4313 |
ATtiny4313 |
m3290 |
ATMEGA3290 |
1200 |
AT90S1200 |
t44 |
ATtiny44 |
m3290p |
ATMEGA3290P |
2313 |
AT90S2313 |
t45 |
ATtiny45 |
m329p |
ATMEGA329P |
2333 |
AT90S2333 |
t461 |
ATTINY461 |
m32u2 |
ATmega32U2 |
2343 |
AT90S2343 |
t5 |
ATtiny5 |
m32u4 |
ATmega32U4 |
4414 |
AT90S4414 |
t84 |
ATtiny84 |
m48 |
ATMEGA48 |
4433 |
AT90S4433 |
t85 |
ATtiny85 |
m64 |
ATMEGA64 |
4434 |
AT90S4434 |
t861 |
ATTINY861 |
m640 |
ATMEGA640 |
8515 |
AT90S8515 |
t88 |
attiny88 |
m644 |
ATMEGA644 |
8535 |
AT90S8535 |
t9 |
ATtiny9 |
m644p |
ATMEGA644P |
c128 |
AT90CAN128 |
m103 |
ATMEGA103 |
m645 |
ATMEGA645 |
c32 |
AT90CAN32 |
m128 |
ATMEGA128 |
m6450 |
ATMEGA6450 |
c64 |
AT90CAN64 |
m1280 |
ATMEGA1280 |
m649 |
ATMEGA649 |
pwm2 |
AT90PWM2 |
m1281 |
ATMEGA1281 |
m6490 |
ATMEGA6490 |
pwm2b |
AT90PWM2B |
m1284p |
ATMEGA1284P |
m8 |
ATMEGA8 |
pwm3 |
AT90PWM3 |
m128rfa1 |
ATMEGA128RFA1 |
m8515 |
ATMEGA8515 |
pwm3b |
AT90PWM3B |
m16 |
ATMEGA16 |
m8535 |
ATMEGA8535 |
ucr2 |
32UC3A0512 |
m161 |
ATMEGA161 |
m88 |
ATMEGA88 |
usb1286 |
AT90USB1286 |
m162 |
ATMEGA162 |
m88p |
ATMEGA88P |
usb1287 |
AT90USB1287 |
m163 |
ATMEGA163 |
m8u2 |
ATmega8U2 |
usb162 |
AT90USB162 |
m164p |
ATMEGA164P |
x128a1 |
ATXMEGA128A1 |
usb646 |
AT90USB646 |
m168 |
ATMEGA168 |
x128a1d |
ATXMEGA128A1REVD |
usb647 |
AT90USB647 |
m168p |
ATMEGA168P |
x128a3 |
ATXMEGA128A3 |
usb82 |
AT90USB82 |
Beispielscript: LED Blinker
Als Nächstes soll natürlich ein Programm auf den Chip geflashed werden. Unter folgendem Link befindet sich eine Zip-Datei mit einem C Beispielscript:
DemoScriptBlinker
(Das Script sollte normalerweise bei jedem AVR funktionieren, der Pins mit der Bezeichung PB1,PB2,PB3, etc.. besitzt. Getestet ist das Programm von mir bisher mit dem Attiny13, Attiny45 und Attiny2313)
Prinzipiell macht es Sinn, für jedes Script einen Ordner (hier DemoScriptBlinker) anzulegen, in dem sich die Scriptdatei main.c befindet. Man behält so den Überblick und der Terminal-Befehl fürs Compilen und Flashen bleibt gleich.
Anschließend wieder das Terminal öffnen und mit folgendem Befehl das Verzeichnis des Ordners auswählen.
cd /Users/(Hier den Pfad zum Ordner angeben)/DemoScriptBlinker
Einfacher gehts auch, indem man erst nur „cd “ eintippt und schließlich per Drag&Drop den Ordner ins Terminal zieht. Nun mit Return bestätigen und es sollte nun ab sofort „DemoScriptBlinker“ am Anfang jeder Terminal-Zeile stehen. Der Ordner ist jetzt dauerhaft im Terminal festgelegt und kann jederzeit mit dem cd-Befehl geändert werden. Das Verzeichnis wird nicht übernommen, wenn man ein neues Fenster öffnet oder Terminal schließt.
Nun den 5-zeiligen Terminal-Befehl eingeben und mit Return bestätigen:
avr-gcc -Wall -Os -DF_CPU=1000000 -mmcu=attiny13 -c main.c -o main.o
avr-gcc -Wall -Os -DF_CPU=1000000 -mmcu=attiny13 -o main.elf main.o
rm -f main.hex
avr-objcopy -j .text -j .data -O ihex main.elf main.hex
avrdude -c avrispv2 -P usb -p t13 -U flash:w:main.hex
Nach kurzer Zeit sollte dann das Programm auf den Chip geflashed sein. Der Verlauf im Terminal sollte dann etwa so aussehen:
Beim Compilen wurden mehrere Dateien im Ordner angelegt und er sollte nun so aussehen:
- main.c
- main.elf
- main.hex
- main.o
Was macht aber jetzt der 5-zeilige Terminal Befehl?
In den ersten 2 Zeilen wird das main.c Script compiliert und es entstehen die Dateien main.o und main.elf. Wichtig ist hier, wie beim Ansprechen/Flashen des Chips, dass der Typ angegeben wird. Allerdings wird hier der vollständige Name angegeben „attiny13“. Ebenso muss der Compiler wissen, mit welcher Taktung der Chip läuft um delay-Warteschleifen im Script zeitkorrekt ausführen zu können. Die Angabe erfolgt hierbei in Hertz. Je nachdem wie der attiny13 vom Werk her konfiguriert ist, variiert diese Angabe. Wir nehmen einfach mal an, dass er mit 1MHz getaktet ist. WICHTIG: Die Taktung wird hierbei nicht verändert und muss auch nicht mit der echten Taktung übereinstimmen! Diese Angabe ist nur für den Compiler, um Zeitschleifen in Programmen richtig zu errechnen!
avr-gcc -Wall -Os -DF_CPU=1000000 -mmcu=attiny13 -c main.c -o main.o
avr-gcc -Wall -Os -DF_CPU=1000000 -mmcu=attiny13 -o main.elf main.o
Nun wird (falls es schon eine gibt) die alte main.hex Datei gelöscht:
rm -f main.hex
Jetzt wird die main.elf Datei in eine hexfile-Datei umgewandelt:
avr-objcopy -j .text -j .data -O ihex main.elf main.hex
Dies ist schließlich der Befehl, mit dem die main.hex Datei auf den Chip geflashed wird. Wie bei der Statusabfrage muss hier der AVR-Typ, in dem Fall der Attiny13, angegeben werden. Der Ausdruck avrispv2 gibt an, dass es sich um den AVR ISP Mk2 Programmieradapter handelt.
avrdude -c avrispv2 -P usb -p t13 -U flash:w:main.hex
Das Programm bewirkt, dass an allen I/O Pins des Mikrocontrollers jetzt abwechselnd 5V und 0V anliegen. Es kann jetzt direkt eine LED mit Vorwiderstand für 5V (z.b. 220 Ohm) an dem Pin 2,3,5,6 oder 7 nach GND angeschlossen werden.
Viel Spaß damit!