Start

Diese Schrittanleitung zeigt, was alles für einen erfolgreichen Start notwendig ist und wie es geht. Bei diesem How-To geht es nur darum, die ersten Schritte vorzubereiten und mit einem einfachen Beispiel zu beginnen.

  1. Hardware
  2. Software
  3. LED blinken lassen
  4. Literatur

Hardware

Neben einer Cognasse EmkA Platine benötigen Sie noch folgende Teile:
  • ISP Adapterkabel Cognasse - 10-polige Buchsenleiste
    ISP Kabel
  • USB Programmieradapter USBasp, ggf. inkl. USB Kabel zum PC. Bei ebay gibt es Angebote ab ca. € 5,-. Benutzen Sie am besten einen, bei dem per Jumper zwischen 5 V und 3,3 V gewählt werden kann.
  • Micro USB Kabel zur Spannungsversorgung Emka über eine PC USB-Buchse oder ein Netzteil.

Software

Installation Programmierumgebung

In diesem Beispiel wird das kostenlose Atmel Studio 7 (früher AVR Studio) benutzt. Diese Entwicklungsumgebung (IDE) basiert auf Microsoft Visual Studio und bietet eine Projektentwicklungsumgebung mit Editor, Debugger und C/C++ Compiler (auch Assembler möglich). Das Installationspaket ist ca. 880 MB groß und kann bei Atmel herunter geladen werden. Alternative wird es auch beispielsweise im Mikrocontroller-Forum als Direktdownload angeboten.

Nach dem Download wird die Software installiert. Eventuelle Warnhinweise zur Version können ignoriert werden (Continue). Es können die Standardvorgaben benutzt werden. Nach der Installation ist ein Neustart des PCs notwendig und die Installation wird fortgesetzt.

Installation ISP Programmer

Damit der USBasp vom Windows PC erkannt wird, wird ein Treiber benötigt. Diesen gibt es beim Entwickler: usbasp-windriver.2011-05-28.zip. Dort gibt es auch eine (englischsprachige) Anleitung, wie man den Treiber installiert, sollte dies nicht klar sein.

Wird der USBasp an den PC angeschlossen, wird der Treiber installiert. Anschließend kann im Geräte-Manager (Systemsteuerung) geprüft werden, ob der USBasp korrekt installiert ist.

Geräte-Manager

Als nächstes wird AVRDUDE benötigt. Dies ist die Software, welche den erzeugten Maschinencode an den USBasp sendet und damit auf den ATmega überträgt. Für Windows wird die Datei avrdude-6.1-mingw32.zip benötigt. Diese wird in ein beliebiges Verzeichnis ausgepackt. Tips zu AVRDUDE bei mikrocontroller.net.

In AVRStudio muß nun AVRDUDE eingebunden werden:
  • AVRStudio starten
  • Menü Extras/Externe Tools
  • Titel vergeben
  • Bei Befehl auf die ausgepackte Datei avrdude.exe verweisen
  • Argumente: -e -P usb -c usbasp -p atmega1284p -U flash:w:"$(ProjectDir)Debug\$(TargetName).hex":a
  • Ausgabefenster verwenden aktivieren
  • OK
AVRDUDE in AVR Studio

Anschließend gibt es im Menü Extras den Eintrag USBasp.

LED blinken lassen

Die hello world Applikation der Mikrocontrollerwelt ist eine blinkende LED. Dazu wird eine Standard LED über einen Vorwiderstand an PB0 (Pin 40 des ATmega und Pin JP2.2 auf dem Emka-Board) angeschlosse und mit Masse verbunden (z. B. JP2.1). Der Vorwiderstand ist Abhängig von der gewählten Betriebsspannung und der LED. Bei 5 V und einer Standard LED mit ca. 2,0 V/20 mA ergibt sich ein Widerstand von R=U/I = (5-2) V/0,02 A = 150 Ω. Die abgeflachte Seite der LED muß Richtung Masse/GND weisen.

LED am EmkA

  • Der Schalter S2 zur Spannungswahl muß auf 5 V eingestellt werden.
  • Am USBasp muß die Spannung ebenfalls auf 5 V (per Jumper) eingestellt werden.
  • Anschließend kann die Schaltung mit Spannung versorgt werden. Eine Möglichkeit besteht darin, die Micro-USB-Buchse Power mit einemm USB Kabel mit einem PC oder einem USB Netzteil zu verbinden. Solange nur wenig Strom benötigt wird, kann die Spannung sogar vom USBasp zur Verfügung gestellt werden, wenn dieser dies unterstützt. Die rote Power LED am EmkA leuchtet.
  • Der USBasp wird mit PC und EmkA verbunden.
    EmkA und USBasp
  • AVRStudio wird gestartet und ein neues Projekt erstellt: Datei/Neu/Projekt
    • Wählen Sie bei Installiert/C/C++ den Eintag GCC C Executable Project
    • Vergeben Sie einen sinnvollen Namen für das Projekt
    • Legen Sie ggf. einen anderen Speicherort fest
    • OK
    Neues Projekt
  • Wählen Sie den Mikrocontrollertyp aus: ATmega1284P. Achten Sie auf das "P" am Ende.
    Zielsystem
  • Geben Sie im Fenster main.c den folgenden Code ein:
    #define F_CPU 10000000UL    
    
    #include <avr/io.h>     
    #include <util/delay.h>  
    
    int main(void)
    {
       DDRB |= (1 << DDB0);
    	
       while (1) 
       {
          PORTB ^= (1 << PB0);
          _delay_ms (500);
       }
    }
    

    Sourcecode
  • Mit Erstellen/<Projektname> erstellen wird der Code compiliert. Im Fenster Ausgabe wird gezeigt, ob das klappt bzw. Fehler werden angezeigt.
    Ausgabe
  • War das Erstellen erfolgreich, kann der erzeugte Maschinencode auf den Prozessor übertragen werden. Dazu wählen Sie Extras/USBasp. Auch hier sieht man den Fortschritt im Fenster Ausgabe.
    Brennvorgang
Die LED sollte nun regelmäßig mit Pausen von fünf Sekunden blinken.

Eigentlich wurde im Programmcode angegeben, daß die Pause jeweils nur eine halbe Sekunde (500 ms) lang sein soll. Das diese Zeit nicht eingehalten wird, sondern um das zehnfache länger ist, liegt daran, daß die Fuse Bits noch nicht programmiert wurden. Im Auslieferzustand läuft jeder ATmega mit einer internen Taktrate von 1 MHz. Im Sourcecode wurde die Taktrate passend zum verbauten 10 MHz-Quarz angegeben. Würde dort die Taktrate 1 MHz (1000000) angegeben, würde die LED im 500 ms-Rythmus blinken, da dies die tatsächliche Taktrate ist. Damit der Quarz als Taktgenerator benutzt wird, und die Taktangabe mit 10000000 auch stimmt, müssen die Fuse Bits programmiert werden.
Zuerst müssen die richtigen Bitwerte ermittelt werden. Dazu eignet sich der Online Fuse Calculator.
  • Wählen Sie dort den passenden Prozessor: ATmega1284P
  • Stellen Sie bei Features im Listenfeld Ext. Crystal Osc.; Frequency 8.0- MHz; Start-up time: 258 CK + 4.1 ms; [CKSEL=1110 SUT=00] ein.
  • Deaktivieren Sie Divide clock by 8 internally; [CKDIV8=0]
  • Wählen Sie Brown-out detection level at VCC=2.7 V; [BODLEVEL=101] aus der Liste
  • Wichtig: Wollen Sie auch alle Pins von Port C nutzen (PC2…PC5), dann müssen Sie JTAG abstellen. Verwenden Sie dann als Wert für hfuse:0xD9
  • Parameter Fuses
  • Am Ende der Webseite werden die passenden Werte für die Fuses angezeigt und auch gleich die Parameter für AVRDUDE.
    Fuse Bits
Mit AVRDUDE werden diese Werte nun im ATmega eingestellt:
  • Starten Sie die Eingabeaufforderung (Start/Zubehör/Eingabeaufforderung)
  • Wechseln Sie in das Verzeichnis, in dem sich avrdude.exe befindet (je nachdem, wohin sie es ausgepackt haben).
  • Geben Sie den folgenden Befehl ein: avrdude -P usb -c usbasp -p atmega1284p -U lfuse:w:0xCE:m -U hfuse:w:0x99:m. Es wird auf die Option -e verzichtet, damit der bereits in den Mikrocontroller übertragene Maschinencode nicht gelöscht wird.
  • Die Bits werden geschrieben. Die LED blinkt jetzt alle 500 ms, da die Taktrate passend zum Quarz und dem Sourcecode eingestellt ist.
    Fuse Bits schreiben
  • Um die Brow-Out Erkennung zu konfigurieren, werden noch die extended Bits geschrieben: avrdude -P usb -c usbasp -p atmega1284p -U efuse:w:0xFD:m.
    Extended Fuse Bit schreiben

Jetzt kann die Verbindung zum USBasp getrennt werden.

Das war die Einführung in die Nutzung vom EmkA und wie man ein Programm erstellt und in den Mikrocontroller überträgt.

Literatur

Wenn Sie sich weiter mit der Materie befassen wollen, gibt es zahlreiche Bücher und Quellen, die geeignet sind. Hier eine kleine Auswahl: