AVR und Linux
Was ist zu beachten, wenn man mit einer Linux-Distribution AVRs programmieren möchte? Hier ist eine offene Liste von verschiedenen Tipps dazu...
Toolchain beschaffen
Evtl. sind die benötigten Pakete schon in der Distribution enthalten. Es sollte unbedingt geprüft werden, ob sie aktuell sind, es hat sich einiges geändert.
- Debian: einfach mal in der Paketliste nach "avr" suchen (apt-cache search avr), da ist alles dabei, was man für den Anfang braucht
Alternativ:
- AVR Cross Development Kit - http://cdk4avr.sourceforge.net/
- wird offenbar nicht mehr gewartet, die Versionen der enthaltenen Software sind teilweise ziemlich veraltet (insbesondere das "Herzstück", der Compiler)
- Selbst kompilieren -
- http://www.nongnu.org/avr-libc/user-manual/install_tools.html
- http://www.roboternetz.de/wissen/index.php/Avr-gcc_und_avrdude_installieren
- http://www.linuxfocus.org/Deutsch/November2004/article352.shtml#352lf
- http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=42631
- http://www.mikrocontroller.net/topic/130972 (2009)
Editor
Der Editor sollte das Bearbeiten vom Programm einfach machen. Evtl. nützlich sind Features, um z.B. per Knopfdruck zu kompilieren und das Programm auf den AVR zu übertragen. Ansonsten: Editoren sind Geschmackssache, d.h. ausprobieren.
- gedit [gnome]
- kate [kde]
- Eclipse [1] [Java]
- Emacs bzw. XEmacs [Textterminal oder X]
- Vim bzw. GVim [Textterminal oder X]
- Codeblocks [gtk]
- Kontrollerlab [KDE]
Es lassen sich aber Programme auch in 'fremden' Desktopumgebungen ausführen.
C-Compiler: avr-gcc
Macht aus dem C-Code den vom AVR ausführbaren binären Programmcode.
Siehe auch:
Laufzeitbibliothek: avr-libc
Enthält Makros und Hardwaredefinitionen wie Registernamen für (die meisten) AVRs. Man muss sich deswegen um die echten Adressen in der Prozessor-Logik nicht mehr selbst kümmern, sondern kann direkt die Namen und Werte aus dem Datenblatt benutzen.
http://www.nongnu.org/avr-libc/user-manual/index.html
Makefile
Enthält Informationen zum Kompilieren. Das Programm make startet damit den angegeben Compiler. Im einfachsten Fall muss man also nur make all im entsprechenden Projektverzeichnis aufrufen, der Rest läuft automatisch. Die Datei heisst einfach nur Makefile.
Hier ein Skript, mit dem man die Einstellungen zusammenklicken kann (benötigt aber auch wieder anderes, z.B. TCL/TK, ..): http://www.sax.de/~joerg/mfile/ Dessen Aufruf erfolgt dann z.B. mit
$ wish mfile.tcl
Über ein Menü kann man dann die Einstellungen zusammenklicken. Das Editieren des Makefiles für Spezialanpassungen lässt sich aktivieren.
Wer sie von Windows kennt und sucht: Die Definition F_CPU der Taktfrequenz ist in der aktuellen Linux-Version nicht vorgesehen. Macht nichts, siehe dazu http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Taktfrequenz
Programmierprogramm
Schreibt mit entsprechender Hardware auf den Controller bzw. liest ihn aus.
Mit mfile lässt sich auch im Makefile gleich das Programmierprogramm zur Übertragung auf den Controller festlegen (AVRDUDE, uisp): http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmierger.C3.A4t_einstellen
Eine Grafische Benutzerschnittstelle (GUI) für AVRDUDE steht mit avr8-burn-o-mat zur Verfügung.
Fuses, Lockbits
Wer bislang Atmels AVR Studio unter Windows zum Programmieren der AVR_Fuses benutzt hat, kann das z.B. mit AVRDUDE machen, allerdings über die Shell. Wer die Dokumentation sucht, findet sie mit Sicherheit im gepackten Programmpaket. Ein aktuelles PDF
Z.B. bekommt man als Resultat folgenden Aufrufes den Hexwert der lfuse eines Tiny13 über einen AVR-ISP mit aktueller Firmware, der an einem USB-Seriell-Wandler angeschlossen ist.
Durch die Option -v (verbose) wird aber noch viel mehr angezeigt.
avrdude -p t13 -c avrispv2 -P /dev/ttyUSB0 -v -U lfuse:r:-:i
Das - anstelle von FILENAME leitet die Ausgabe auf <stdout> (Bildschirm) um.
Frontend? Shellbefehl, um die Werte binär anzuzeigen?
Eine Anleitung zum Umgang: http://www.mikrocontroller.net/forum/read-1-152502.html
Eine 0 steht für eine gesetzte Fuse.
Die Bedeutung der Bits findet sich im Datenblatt unter "Memory Programming -> Fuse Bytes" (tiny13).
Program/Burn Flash
Der Mikrocontroller wird wie beim Kompilieren mithilfe von make und der eingestellten Programmiersoftware mit dem Befehl make program geflasht
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Anwendung
Konfiguration, Probleme, Erfahrungen
Debian
Etch (Netinst)
- Installation: gcc-avr, libc-avr, avrdude aus Standardquellen
- Emacs21 als Editor
- Makefile
... läuft problemlos.
Gentoo
Gentoo bietet mit dem Shellscript "crossdev" eine einfache automatisierte Möglichkeit die Toolchain zu erstellen. Genauere Versionen von binutils/gcc/libc können via parameter übergeben werden.
emerge crossdev crossdev --target avr
Falls 'crossdev --target avr' nicht fehlerfrei durchlaufen sollte mit 'crossdev -t avr --without-headers' versuchen (2009-01-28).
Mandrake
- Toolchain-Build: http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=42631
- 2007: benötigt "texinfo" Package
openSUSE
- Seit Version 10.0 sind die Pakete avr-libc, cross-avr-gcc, cross-avr-binutils und avrdude in der Download-Version von openSUSE enthalten und können einfach über YaST bzw. zypper installiert werden.
- Bericht über Misserfolg bei Opensuse 11.1: http://www.mikrocontroller.net/topic/83283#1585707
Ubuntu 6.06
- Pakete veraltet; ist bereits als bug gemeldet
- Toolchain selbst kompilieren:
- default system path steht in /etc/environment
- Toolchain-Build: http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=42631
Ubuntu 7.04
Ubuntu 8.04
- einfach eine universe-Paketquelle von Ubuntu 8.10 (Intrepid Ibex) hinzufügen. Dort gibt es dann aktuelle AVR-Pakete (gcc 4.3, libc 1.6.2 usw.). Anleitung hier: http://packages.ubuntu.com/de/intrepid/i386/gcc-avr/download
AVR-SLax
- Einfach zu benutzende AVR-Live-CD
- Keine installation notwendig
- ISO brennen und von CD booten
Zu finden unter: http://www.lost-byte.de/avrslax.php
RCOS LiveCD
Die RCOS LiveCD ist eine angenehm schlanke Debian-LiveCD mit etlichen Toolchains (AVR, ARM, ?) extra für die µC Arbeit. Auf der LiveCD befindet sich auch ein AVRDUDE v5.5.