29.03.2013

Atmel AVR Praxistipps (2)

Nachdem die Hardware zum Programmieren der Bausteine im letzten Beitrag vorgestellt wurden, widmen wir uns nun der Software und, viel wichtiger, den Programmen zu Erstellung der Software, welche die Bausteine erst zum Leben erweckt. Auch da gibt es im Netz unzählige Anleitungen. Meine ist nur wieder eine von vielen.



Das von mir empfohlene Gesamtpaket besteht aus:
Da stellt sich schnell die Frage, wieso denn alles auf einmal?! Die Antwort ist einfach. Man beginnt selten auf Seite 1 einer Anleitung. Man will Ergebnisse sehen. Ich gebe zu, ich bin auch so ein ungeduldiger Geselle, welcher lieber erst einmal etwas von woanders ausprobiert, um dann Schritt für Schritt dahinterzusteigen, wie das Teil tickt. Aller Anfang ist eine der berüchtigten LED-Blinkschaltungen, welche einen schnellen ersten Erfolg bereitet aber auf Sicht eher langweilig ist. Trotzdem sind diese Programme für den Anfang wichtig, alleine um die Schritte von Programmierung über Compilieren, dem Erstellen einer HEX-Datei, welche in den Baustein einprogrammiert wird und nicht zuletzt das Geheimnis der "Fuses"  zu ergründen.

Am Einfachsten für Anfänger ist natürlich die BASCOM-Sprache. Jemand, welcher allerdings aus der Programmiererszene kommt, will möglicherweise sein C++ weiterverwenden. Alles kein Problem. Nun findet man irgendwo ein Schnipsel, sei es in BASCOM oder in den leicht unterschiedlichen Dialekten von C++ zwischen WinAVR und Atmel Studio 6.

Und jetzt verrate ich auch ein kleines Problemchen mit dem Programmieradapter ;) :
Unter BASCOM funktioniert mit dem Teil nur das reine Programmieren des Adapters. Das Setzen der Fuses verweigert er in der aktuellen Programmversion. Problem gelöst. Die Bedienung ist nur etwas murkelig. Unter Atmel Studio wird er nicht einmal als Auswahl angezeigt. Da ist man doch erstmal leicht geschockt. ;) Und wenn ich jetzt noch sage, macht das mal alles schön brav auf der Kommandozeile, will man mir vermutlich direkt an die Gurgel.

Natürlich gibt es verschiedene GUIs (grafische Oberflächen) zum Bearbeiten der Bausteine. Allerdings musste ich feststellen, die mir bekannten Hilfsprogramme haben nicht alle die Bausteine hinterlegt, welche ich am Lager habe. Anscheinend gibt es da auch keinen großen Drang bei den Profis, dieses zu ändern. Muss man also zurück zu der guten alten Kommandozeile. Hört sich schlimmer an als es ist.

Nun zur Praxis. Wir haben obige Software alle brav installiert. Der Adapter wird soweit hoffentlich erkannt. Hinweis: Bei WinAVR ist zwar auch eine Version von AVRDude enthalten. Diese ersetzen wir inkl. der conf-Datei mit der selbst gezogenen Version von AVRDude, weil diese aktueller ist.

Als allererstes empfehle ich, von dem im Guloshop gekauften, bereits programmierten Baustein eine Kopie zu erstellen. Weil beim Basteln geht schnell mal etwas kaputt. Und meist dann, wenn man es nicht gebrauchen kann. Also ist ein Ersatzbaustein immer von Vorteil. Dazu geht man wie folgt vor:
  • Den Sourcecode des Bausteins laden (USBASP von Fischl, angepasst von Guloshop)
  • Entpacken in ein leeres Verzeichnis
  • Auf die Kommandozeile gehen und in das Verzeichnis tauchen
  •  Dort eingeben make main.hex
  • Die Ausgabezeilen des Compilers prüfen ob alles fehlerfrei durchgelaufen ist
  • Wenn ja, findet sich im Verzeichnis eine Datei main.hex welche noch in den Baustein programmiert werden muss
  • Jetzt wirds ernst. Den frischen Baustein auf das Steckbrett stecken und die 5 farbigen Kabel passend anschliessen. Jetzt den Programmieradapter mit der USB-Schnittstelle verbinden. Unter Win-Betriebssystem sollte das "PalimPalim" die Verbindung erfolgreich quittieren.
  • Die Datei main.hex wird in den Baustein "geflasht":
    avrdude -c usbasp -P usb -B 10 -p attiny85 -U flash:w:main.hex
  • Die Bildschirmausgabe zeigt hoffentlich eine erfolgreiche Übertragung an
  • Nun müssen noch die Fuses programmiert werden. Dazu schauen wir in die Datei makefile und finden dort in Zeile 18 und 19 die Daten, welche in die Fuses gesetzt werden müssen. Hierbei ist zu beachten: Aufgrund der begrenzten Anzahl von Pins mussten Tricks durchgeführt werden, welche den Chip für weitere Programmierversuche bzw. späteres Auslesen blockiert. Quasi ein Kopierschutz ;) Daher muss man bei dem Programmieren der Fuses sorgfältig arbeiten, sonst hat man den Baustein insoweit zerstört, dass er nur noch durch Tricks wieder zum Leben zu erwecken ist. Trotzdem bitte keine Schweisspfoten bekommen. Ein Tiny85 kostet weniger als 1€.
  • Nun die in Makefile gefundenen Daten in die Fuses programmieren:
    avrdude -c usbasp -P usb -B 10 -p attiny85 -U lfuse:w:0xf1:m
    avrdude -c usbasp -P usb -B 10 -p attiny85 -U hfuse:w:0x5d:m
  • Auch hier die Ausgaben von AVRDdude überprüfen
  • Nun alles abstöpseln, den Originalbaustein aus dem Steckbrett entfernen und durch den eben programmierten ersetzen. Kurz überprüfen, ob alle Bauteile weiterhin stecken und keine Kurzschlüsse verursachen. Dann an die USB-Schnittstelle stecken und hoffentlich das erwartete "PalimPalim" hören. ;) Fertig!
  • Jetzt kann man beruhigt weiterbasteln mit der Sicherheit, im Falle des Falles Ersatz parat zu haben. Das Original sicher verstauen, wo man es nach einem Unfall wiederfindet. Weil wenn der Programmierer erstmal kaputt ist, kann man keinen Ersatz mehr brennen. ;)
Wer jetzt genauer in die Datei Makefile geguckt hat sagt vermutlich, wieso wurde es so umständlich erklärt? Wäre doch mit den in der Hilfe ab Zeile 31 vorgegebenen Befehlen viel einfacher gewesen. Ja, stimmt, aber so hätte man nicht das Prinzip verstanden.

Im übrigen unterscheiden sich die Befehle gar nicht so sehr. Wer Spaß an Batchprogrammierung hat, kann sich die Sache schnell vereinfachen. Die Zeile avrdude -c usbasp -P usb -B 10 -p attiny85 -U ist, abgesehen vom verwendeten Baustein immer gleich. Die vorgegebenen Bausteine lassen sich in der Datei avrdude.conf finden. Aber avrdude meckert auch, wenn dort etwas nicht passt.
Zu den Fuses nochmal etwas. Zum einen ist es normalerweise eher selten, dass man einen Baustein sperrt und schreibschützt. Meist wird nur der Teiler deaktiviert oder eine bestimmte Quarzfrequenz vorgegeben. Allerdings sind die Fuses bei jedem Baustein etwas anders belegt. Dazu sollte man immer das Datenblatt des besagten Bausteins parat haben. Aber es gibt auch eine feine Webseite, welche einem diese Arbeit abnimmt und sogar mundgerecht für avrdude die Schnipsel bereitstellt:
 http://www.engbedded.com/fusecalc/