Knipperende LED

Om te beginnen, zo ongeveer de meest simpele schakeling die met een microcontroller te maken is, de knipperende LED.

De Code

Het programma begint met een main methode. AVRGCC verwacht altijd een main methode. Dit is ook de methode die de AVR direct gaat uitvoeren waneer deze onder spanning komt te staan. Vanuit de main methode kunnen weer andere methodes aangeroepen worden. De knipperende LED is zo eenvoudig dat we alleen een main methode gebruiken.

AVR libc

AVR libc is de C library voor de AVR en is standaard onderdeel van het WinAVR pakket. Deze library voorziet in standaard C functies en specifieke AVR functies.

Registers

Een AVR kent diverse registers waarmee poorten aangestuurd en uitgelezen kunnen worden. En waarmee ook allerlei instellingen in de AVR beinvloed kunnen worden. In de datasheet staat een complete beschrijving van alle registers en bijbehorende functies. Door "avr/io.h" te includen zijn alle io registers beschikbaar binnen het programma.

C Code

Onderstaand de C code. Het toegevoegde commentaar maakt veel duidelijk.

C code / knipperende LED op PORTA.0
   
#include <avr/io.h>
#include <util/delay.h>

// knipperende LED op PORTA.0 (PA0)
int main()
{
  // PA0 als output
  DDRA = (1 << PA0);  
  
  // oneindige lus
  while(1)
  {
    // 0.5 sec delay
    _delay_ms(500);
    
    // PA0 hoog niveau
    PORTA |= (1 << PA0);
    
    // 0.5 sec delay
    _delay_ms(500);
    
    // PA0 laag niveau
    PORTA &= ~(1 << PA0);
  }
  
  return 0;
}

Compileren

Om de code nu te compileren naar een HEX bestand. Selecteer je de optie "build" (F7) van het build menu. Onderin de editor zie je het resultaat van de build. Het zou er zoals onderstaande afbeelding uit moeten zien.

Build resultaat

Programmeren

Heb je een Atmel STK500 ontwikkelbord dat kan je direct vanuit AVR Studio programmeren. Gebruik je de programmeerschakeling van deze site dan kan je AVRDUDE gebruiken voor het programmeren.

Programmeren met AVRDUDE gaat als volgt. Open een command prompt (een zogenaamde DOS box). Type vervolgens "avrdude -p t2313 -c sp12 -E noreset -U flash:w:circuit1.hex" Vervang circuit1.hex door de volledig padnaam. Gebruik je de circuitsonline programmer, vervang dan "-c sp12" door "-c stk200"

Wil je weten waar alle commando parameters van AVRDUDE voor staan zoals "-p t2313", dan kan je deze terug vinden in de handleiding van AVRDUDE. De handleiding van AVRDUDE wordt als PDF meegeleverd in de doc directory van de WinAVR installatie.

Op NT versies van Windows zoals Windows 2000, XP, Vista en Windows 7 krijgen programma's geen directe toegang meer tot de hardware van de PC. Om er voor te zorgen dat AVRDUDE toch de parallele poort kan gebruiken moet je een driver installeren. Deze driver 'giveio.sys' kan je installeren met het commando (ook vanaf de command prompt) 'install_giveio'. Onder Vista en waarschijnlijk ook Windows 7 is het belangrijk dat dit als Administrator gedaan wordt en dus niet als standaard gebruiker. Vooralsnog werkt deze driver niet met de 64bits versie van Windows. Aangezien deze Windows versies meestal op een PC worden gebruikt worden die toch niet meer over een parallele poort beschikt zal dit waarschijnlijk nooit opgeslost worden.

AVRDUDE

Schema

schema

De opgebouwde schakeling zie je hieronder.

op breadbord