Start mit AVR
Vom Quellcode bis zum Programmspeicher im AVR Chip sind mehrere Stufen zu durchlaufen.
Dazu kommen noch Einstellungen in sogenannten Fuses, wie Taktfrequenz usw, welche auch der Device programmer einstellt.
Chip Programmierung mit verschieden Compilern für die eigene Hardware
- BASCOM (Editor, Compiler) erzeugt Hexfile für AVR STudio Device programmer) DEMO GRATIS
- AVR Studio (Editor, Compiler, Device programmer) GRATIS
- Progammer Hardware AVR ISP mkII kompatibles board wie Diamex ALl AVR ca. 25.- Euro
- IC Sockel Modul mit Nullkraft Sockel (Diamex Schwenkhebel) optional ca. 25.- Euro
Das Thema Arduino, Arduino Boards und Arduino Programmierumgebung, werde ich noch hier in einem eigenen Beitrag besprechen.
Die IDE AVR Studio Compiler erzeugt aus dem Quellcode und den Libraries ein Hexfile, welches dann zusammen mit den Fuse Einstellungen in die Ziel CPU geflasht wird.
Das Hexfile muss nicht vom AVR-Studio erzeugt worden sein, es kann natürlich auch
von einem anderen Quelle (Compiler) stammen.
Ich verwende den "DIAMEX ALL AVR welcher als ""AVR ISP mkII" erkannt wird.
Diese Hardware ist von vielen Händlern erhältlich.
AVR Studio und AVR ISP mkII ist eine solide Basis um diese CPUs zu flashen, also das Programm in den Programmspeicher zu bringen. Der Nullkraftsockel
ist komfortabel, wenn man eine größere Stückzahl an CPUs zu behandeln hat. Der AVR ISP mkII hat einen ISP Stecker als Ausgang, der sollte auf der
Ziel Hardware vorhanden sein, oder einen Adapter IC Sockel zu ISP Stecker löten. Das Schwenkhebel Modul ist ideal um CPUs einzeln flashen zu können.
Die Programmierspannung lt. Datenblatt der Atmel CPU muss hier per Jumper eingestellt werden.
Siehe auch Diamex Anleitung über den All Avr.
Es gibt natürlich am Markt viel Hardware zum Flashen von AVR Chips. Ein wichtiger Parameter für diese Hardware ist, dass diese mit dem Atmel Studio funktionieren.
Wenn diese Unterstützung nicht gegeben ist, dann muss über BASCOM, Arduino IDE, Avrdude oder andere Programme der Flash vonstatten gehen. Aufwand und viele Fehlerquellen (Treiberprobleme) entstehen.
Die Foren sind voll mit Meldungen zu Problemen, welche man sich alle ersparen kann.
Es muss bei der Hardware explizit angegeben sein "Fuktioniert mit Atmel Studio 7", wenn er
dann nicht funktioniert - Rücksenden - fertig.
Zum Flashen einer CPU brauche ich ein Werkzeug, welches diese Aufgabe ohne Aufwand schnell erledigt.
Diese Komponenten müssen zum Flashen von CPUs vorhanden sein.
- Atmel Cpus
- Programm Code als Hexfile für die Cpus
- Optional: File mit Inhalt des EEproms
- Fuse Beschreibung vom Programmierer der Programm Codes
- Atmel Studio mit Programmier Hardware
Atmel Studio starten und über "Tools" zu "Device programming" gehen. Wenn der Progammer per USB angesteckt ist sollte er unter
"Tool" auszuwählen sein. Wenn hier nur der "Simmulator" steht, dann wird die Hardware nicht erkannt.
also bei "Tool" den erkannten Programmer auswählen, bei "Device" die Atmel Ziel CPU auswählen, "Interface" ist hier immer ISP, "Apply" drücken.
wichtig - "Interface Settings" auf 125kHz belassen.
"Tool Informaton" zeigt Versionen Programmer Hardware auf
"Device information" liest Infos über den verbunden CPU Chip an.
"Oscillator calibration" belassen
wichtig - "Memories" damit kann der Chip programmiert werden, aber auch der EEprom Bereich.
wichtig - "Fuses" Fuse Einstellungen. Mit Vorsicht...
wichtig - "Lock bits" hier kann das programmieren und auslesen verhindert werden. Mit Vorsicht...
"Production file" Nur notwendig wenn man große Anzahl von CPUs produzieren will.
Die Anliegende Programmierspannung ist hier unter "Target Voltage" zu sehen. Je nach Jumperstellung siehe oben.
Im Datenblatt der Atnel Cpus findet man die Angabe dazu. Die gängigen Atmegas und Attinys können mit 5V programiert werden.
nun mit "Memories" den Dialog zur Programmierung aufrufen.
Hier kann abgesehen vom Löschen, das Programm vom Hexfile in den Programmspeicher geladen werden.
Der Programmiervorgang inkl. Verifikation dauert hier ca. 5 Sekunden.
Wenn Notwendig kann auch der EEProm Bereich aus einer Datei, vorbelegt werden.
Das Setzen der Fuses (Konfigurationseinstellungen des Chips) hat mit Umsicht zu erfolgen.
Das Programmieren des Programmspeiches oder des Eprom Bereiches haben keine Auswirkung auf die Fuse Register.
Die Fuses wird man eher einmal bei Inbetriebnahme setzten, den Programmbereich öfter
Mit falschen Einstellungen kann man sich vom Chip aussperren.
Der Chip kann dann nicht mehr verwendet werden.
Entsperren ist dann
nur mit zusätzlicher Hardware möglich.
Die Anzahl und Möglichkeiten der Fuses varieren je nach CPU Type. Ein Attiny45 hat weniger Fuses als ein Atmega328.
- BODLEVEL = Brownoutdetection - Keine - 1.8V - 2.7V - 4.3V - Cpu HALT bei VCC unter Spannung X
- RSTDISBL = Reset PC6 als I/O PIN - Finger Weg, Die CPU kann dann so nicht mehr programmiert werden - IMMER AUS
- DWEN = Debug Wire enable - Finger Weg, Die CPU kann dann so nicht mehr programmiert werden - IMMER AUS
- SPIEN = SerialPogrammdownload Enabled SPI - IMMER EIN
- WDTON = Watchdogtimer enabled
- EESAVE = Schutz von EEprom bei Chip Erase
- BOOTSZ = Boot Flash Size, Start Adresse auswählen.
- BOOTRST = Boot Reset Vector enabled
- CKDIV8 = Taktfreqenz / 8
- CKOUT = Clock Out Port B0
- SUT_CKSEL= Taktquelle intern-OSz oder extern-Quarz (intern 128kHz, 8MHz, Xtal 8Mhz, + anzahl Zyklen bis Start)
Die Register für die Fuses werden hier auch noch Bitweise angezeigt. Das sieht man auf einen Blick die Settings (FF, D9, 62)
VORSICHT: SUT_CKSEL
intern RC ist kein Problem, bei "Interface Settings" die ISP Clock beachten. Bei Programmierung über den 10 poligen
ISP Stecker liegt ein 500Khz Oszillator Signal an. Das trifft auf die Verwendung mit dem Schwenkhebel Modul zu. Wenn Extern Takt angewählt, dann hat
man hier noch die 500Khz für die Programmierung. Bei ISP über den 6pol Stecker sollte in der Zielschaltung ein Quarz vorgesehen sein, sonst ist kein
Oszillator vorhanden bei Anwahl extern Takt. Keine Programmierung möglich in dem Falle. Abhilfe: Chip in Schwenkhebel Modul einbauen.
ACHTUNG: RSTDISBL immer AUS, DWEN immer AUS, SPIEN immer EIN,
sonst ist der Chip nicht mehr nutzbar, und die Fuses müssen mit einer anderen Methode zurückgesetzt werden.
Hier werden die Fuses für einen Atmega328 wie er in einem Arduino UNO eingebaut ist, programmiert. Im UNO ist BrownOut auf Disabled
aber das ist aber hier nicht von Belang
Fuses vorbereiten
Fuses programmieren mit Button "programmieren". Eine Warnung erscheint, siehe SUT_CLKSEL, wenn kein Oszillator vorhanden wäre.
Die Fuses sind nun erfolgreich gesetzt.
Die Lockbits am besten nicht setzen, sonst sperrt man sich vom Chip aus. Ist für den Anfang nicht notwendig. Damit kann das Auslesen des Programmspeichers
verhindert werden, oder auch nicht;.)
Damit sind die wichtigsten Themen bezgl. Flashen eines Atmel Chips besprochen worden.