Erste Schritte mit AVR’s unter Mac

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…

Programmieraufbau

 

belegung

 

grundschaltung platine

 

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:

 

terminal1

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:

terminal2

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.

ledblinker

Viel Spaß damit!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert


1 + = drei