Atmel AVR Studio Projekt anlegen

Dieser Aufsatz entsteht aus "gegebenem Anlass", d.h. ich wurde darauf hingewiesen, dass das
Weiterarbeiten mit einer vorhandenen oder downgeloadeten (was für ein Deutsch) Assemblerdatei
doch nicht ganz so einfach ist wie ich mir das vorstelle.
Zudem ändert sich auch die Software, sodass z.B. meine Anleitung in "Decoder 1" nicht mehr ganz
aktuell ist, denn aus Version 4.12 wurde bis September 2008 4.14. Auch die Firmwareversion des
STK500 hat sich seit Mai 2007 geändert.
Die aktuelle Version steht immer zum Download in www.atmel.com bereit. Wenn die Studio-Software bereits
installiert ist, gibt es unter "Help" die Funktion "Check for Program Update". Sofern die Internetverbindung
besteht, erfährt man ob es eine neuere Version gibt.

AVR Studio stellt auch fest, ob die Firmware des STK zur aktuellen Version passt und fordert ggf. zum Update
auf. Diese Prozedur ist in "Help -> AVR Tools User Guide -> STK500 -> STK500 Firmware Upgrade Procedure"
genau beschrieben und tunlichst zu befolgen.

AVR Studio ist eine Entwicklungsumgebung, d.h. Editieren, Assemblieren oder Compilieren, Linken und ggf.
Debuggen geschieht in einer Anwendung (Programm) Dabei sind ggf. verschiedene Dateien zu bearbeiten bzw.
zu erzeugen.
AVRStudio ist für die (fast) komplette AVR-Prozessorfamilie, vom Zwerg bis zum "Schlachtschiff" verwendbar
und mit einer Reihe von Programmiergeräten, wovon das STK500 nicht mehr das aktuellste ist.
Wegen dieser Unzahl von Kombinationen und Betriebsmöglichkeiten muss Studio vom Benutzer erfahren
"Was er Wie" vorhat. Genau dafür ist ein "Projekt" notwendig, bzw. die Projektdatei. In der oder den Quellprogrammen
sind zwar einige Informationen enthalten, die aber nicht automatisch in die Projektdefinition einfließen.


Vorbereitung des Projekts:

Nach meiner Erfahrung ist es sinnvoll für die eigenen AVR-Projekte einen speziellen Ordner anzulegen und nicht
die default-Einstellungen des Studio zu verwenden. Das vereinfacht auch die Datensicherung. Bei mir ist das der
Ordner "avr" auf meinem Datenlaufwerk.
Wenn man nicht von "Null" weg arbeitet, und das ist eigentlich nie der Fall, weil man immer eine "Basis" hat, muss
als erstes die Zielhardware (Target) bekannt sein. Bei einem "geerbten" Programm kann man nachlesen für
welchen AVR-Typ geschrieben wurde und welche Taktfrequenz wie erzeugt wird.
Studio muss auch lernen welches Programmiergerät verwendet werden soll.
Ach ja, einen Namen sollte das Projekt auch bekommen!

Für das Beispiel gilt:

Zielordner:            avr
Target:                  ATMega8
Frequenz:             8 MHz
Takterzeugung:    Interner Osillator, kein Quarz
Prog.Gerät:          STK500
Name:                    testprojekt
Quelldatei:            SX-Zentrale2.asm


Erzeugen des Projekts:

Nach Start AVRStudio hat man den Startdialog vor sich sofern er nicht abgeschaltet ist. Der Startdialog ist der
Project-Wizzard in dessen Fenster auch die "recent" projekts angezeigt werden. Mit dem Button "NewProject"
(oder über das Menu Project -> New Project) offnet sich das 1. Fenster:



Der "Project type" kann entweder ein AVR Assemblerprogramm sein, oder für den "GNU C-Compiler".
Mit Click auf "Atmel AVR Assembler" werden die Eingabefelder aktiv. Die beiden Haken lasse ich immer
gesetzt, denn ich möchte sowohl die Ursprungsdatei als auch den passenden Unterordner erzeugen lassen
der später alle Projektdateien beinhaltet. Studio schlägt eine Filenamen vor, der aber überschrieben
werden kann. Lassen wir ihn mal stehen und wählen über den "..." Browserbutton unseren Zielordner.

Mit "Next>>" öffnet sich ein neues Dialogfenster, das nach der Debugplattform und dem Target-Device
frägt:



Weil ich keine spezielle Debug und Simulatorhardware habe wähle ich den integrierten "AVR Simulator"
und scrolle bis zu meinem Prozessortyp, dem "Mega8" der angeclickt werden muss.

Wenn das "Device" nicht korrekt gewählt ist können "hinterhältige" Programmreaktionen auftreten,
die z.T. schwierig zu entdecken sind. Dies Auswahl MUSS stimmen !!

Nach "Finish" erzeugt Studio das Grundgerüst und es geht an das "Eingemachte".

Die erzeugte "testprojekt.asm" ist komplett leer und zum Editieren bereit. Zur Übernahme einer existierenden
Datei gibt es natürlich "tausend" Möglichkeiten, von denen ich nur zwei verwende:
1. Direkt in den Ordner kopieren und umbenennen (rename) auf den akt. Namen. (quick and dirty)
2. Textübernahme per Editor -> alles markieren ->copy und paste in "testprojekt.asm

Methode 1 erfordert, das leere Projekt zu speichern und Studio zu beenden. Nach dem Kopieren der
Quellfile und umbenennen hat man 2 Dateien mit gleichem Namen und es muss die ursprüngliche gelöscht
werden. Mit Doppelclick auf die Projectdatei "testprojekt.aps" startet studio und stellt fest, dass die
zugehörige .asm Datei fehlt (obwohl sie vorhanden ist!) bietet aber freundlicherweise an "try to locate?"
und schon ist alles wieder in Ordnung. Deswegen "dirty", diese Methode.

Für die Übernahme per Editor kann auch der interne Studio-Editor mit "Datei-Öfnen" verwendet werden.
Die sonst übliche Funktion "Alles markieren" fehlt leider, geht aber per Mouse oder "shift-bild" auch rasch.
nach "copy" "Datei close" und im Editierfenster "paste" einfügen und den aktuellen Zustand mit "Datei save"
sichern.

Das Programm oder Programmfragment kann nun sofort "gebuildet" werden, per Menu "Build" oder mit
Taste "F7".
Das Meldungsfenster gibt wichtige Auskunft.

Gleichzeitig wurde die Programmierdatei im Intel-Hex-format erzeugt und das STK500 kommt zum Einsatz.

 

STK500 Vorbereitung:

Um das Studium der STK500 Dokumentation im Help des Studio kommt man nicht herum.
Und nur diese ist aktuell! Die Bedienungsanleitung, Papier oder .pdf wird schon lange nicht
mehr gepflegt!

Einige Hinweise:

Die Verbindung zum PC wird mit einem, NICHT gedrehten, 1:1  RS232 Kabel hergestellt.
Der verwendete COM-Port ist egal, Studio findet das STK500 automatisch, der Port muss aber
die 115Kbd hergeben.
Zur Stromversorgung reicht ein Steckernetzteil mit 15 bis 20 Volt und einigen Hundert Milliampere.
Die Polarität des Powersteckers ist egal!

Für die diversen AVR's sind IC-Sockel vorhanden die farblich markiert sind. Der zugehörige
Programmierstecker hat die gleiche Farbe.
Der Mega8 kommt in den grünen Sockel, das 6-plg. Programmier-Flachbandkabel auch.

Wichtig sind die Jumper:

VTARGET:        in
AREF:                open
RESET:              in
XTAL1.               in
OSCSEL:           open

BSEL2:               open
PJUNP:               open


Im STK500 Programmieren:

Das STK wird von Studio natürlich nur gefunden, wenn es eingeschaltet ist. Aufrufen der "Connect"
Funktion mit dem "AVR" Button oder per Menu "Tools -> Program AVR".

Die folgenden Einstellungen sind entscheidend wichtig und müssen sorgfältig ausgeführt werden

Der AVR-Dialog hat diverse Register-Karten:



In "Main" ist unbedingt das richtige "device" zu wählen. Mit dem Button "Read Signature" prüft
Studio ob der Device-Code mit dem gewählten Mikroproz übereinstimmt und meldet das
Ergebnis. Das MUSS passen !!
Unter Programming mode ist "ISP mode" zu wählen. Ich habe noch nie was anderes gebraucht.
Die "In System Program" Methode ist auch praktisch in Endgeräten, weil das Umstecken des
Mikro's entfällt. Der Hardwareaufwand ist nur der 6-plg. Pfostenstecker.

Wichtig ist auch die ISP-Frequenz. Meistens stelle ich 57,6 kHz ein, bei sehr großen Programmen
habe ich schon 460,8 kHz verwendet, damit's nicht "ewig" dauert. Einzustellen über "Settings",
aber "Write" nicht vergessen!



Dieser Dialog erscheint per default als erster nach dem Aufruf.

Das Register "Program" definiert die Programmierdateien und den Ablauf. Die Haken für
Erase und Verify UNBEDINGT gesetzt lassen!
Das Einstellen der Dateinamen per "browse" ist problemlos. In jedem Fall ist eine
Flash Input HEX Datei notwendig, denn das ist das eigentliche Programm.
Zum Programmieren reicht der Button "Program", Verify ist automatisch, wegen Haken!!



Auch hier ist Sorgfalt geboten.
RSTDISBL:            Reset disable ist NICHT gefragt
WTDON:                Der Watchdog darf nur eingestellt sein wenn er softwaremäßig behandelt wird!
SPIEN:                    Muss natürlich gesetzt sein !
EESAVE:             Ohne
BOOTSZ:                Bootflashsize kann default bleiben.
BOOTRST:            Nein
CKOPT:                Nein, die Clock-Options sind eine "heiße" Funktion
BODLEVEL:        Kann default bleiben
BODEN:                BrownOutDetection Enable Nein
SUT_CKSEL:        "Oberwichtig" ist die richtige Wahl der Frequenz und der Takterzeugung

Nach Änderung einer Fuse UNBEDINGT "Program" clicken, sonst keine Wirkung!

Die Haken bei AutoRead, Warnings und Verify stehenlassen !



Eine ganz "heiße" Sache sind die lock-Bit's mit denen man das zukünftige Programmieren sperren
kann. Das gibt eigentlich nur bei kommerziellen Anwendungen Sinn. Normal bleibt NoLock. Auch
weil das Zurücknehmen eines Sperrbits nur mit Tricks möglich ist.



Der interne Takt-Oscillator kann lt. Beschreibung über das Calibrationbyte in der Genauigkeit
verbessert werden. Der Wert wird bei der Herstellung festgelegt und kann mit "Read"
gelesen werden. Das Schreiben in den Flash-Speicher kann hier oder im Programm
erfolgen.
Die Speicheradresse kann man im Register-Summery des AVR nachlesen, beim Mega8 ist
es die 0x31und hat den Namen OSCCAL.

In den Hardwaresettings werden die STK-Spannungen eingestellt. Das ist
besonders praktisch wenn eine spezielle Referenzspannung (AREF) verwendet
werden soll. Allerdings muss dann der Jumper AREF gesetzt werden.

Der Clockgenerator liefert NICHT die Taktfrequenz sondern kann optional
verwendet werden.



Nur zur Information.



Hier kann ein Ablauf definiert und gestartet werden. Habe ich noch nie verwendet.


Nun sollte eigentlich einem erfolgreichen AVR-Studio-STK500 Projekt nichts mehr fehlen!!

Steinhart, im September 2008