När jag ska vill att en AVR-processor ska göra något kul, t.ex. blinka lite lysdioder eller läsa av en temperatur, så vill jag programmera den. Då använder jag:
(1) En programmeringsmiljö.
Denna brukar finnas i form av mjukvara för PC. Till exempel kan man använda Atmel Studio (Den gillar jag!), Arduino's programmeringsmiljö (vad det nu heter?), eller något annat. Man väljer den man känner sig mest bekant med och som man gillar. Så skriver man sitt program i det språk som stöds, t.ex. C. Nu är ju mikrocontrollers lite speciella då man ofta vill använda flera av deras specialfunktioner. Som t.ex. digitala eller analoga in-och utgångar, timers, UART (dvs kommunikation med en annan enhet), EEPROM (minne som inte glöms bort när man stänger av strömmen) med mera. Det är väl främst dessa saker som skrivs olika i Atmel Studio och Arduino. Man får läsa tutorials och lära sig helt enkelt. Läsa databladen till controllern skadar inte heller. Varje typ av controller skiljer sig mer eller mindre från alla andra, både i yttre funktion och i hur man skriver programmet. Så Ett program för ATmega8 funkar inte rakt av för en ATMega1284 eller tvärt om. Men det brukar inte vara några jättestora skillnader. I Atmel Studio måste man skriva in vilken modell man ska programmera.
Alltså skriver vi ett program:
Kod: Markera allt
// blinka lysdiod:
(sätt pinne B2 som utgång) // Definierar vilken pinne som ska sättas som utgång och som är kopplad till lysdioden
loop for ever:
{
(tänd lysdioden) // dvs. skicka ut en "etta" på rätt pinne.
(vänta 0.1 sekund)
(släck lysdioden) // dvs. skicka ut en "nolla" på samma pinne.
}
// the end


Vi kompilerar koden och får en hex-fil. Den innehåller den kod som ska läggas i processorns Flash-minne.

(2) Programmering av microkontrollern.
microkontrollern innehåller tre typer av minnen: Flash, RAM och EEPROM.
Flash används till själva programmet och till fasta data som programmeraren lägger in i programmet (t.ex. textfraser, tabeller).
RAM används till data som ska lagras under själva programkörningen.
EEPROM används oftast av programmet för att spara data som inte raderas efter att programmet avslutats (ungefär samma som att spara en fil på en hårddisk, men i EEPROM sparas enskilda variabler eller arrayer)
Hur ska vi då få in programmet i Flash-minnet?
Jo, med hjälp av ISP (= In System Programming). Då ansluts pinnarna MISO, MOSI, SCK och RESET till en programmerare som tar emot data från en PC via t.ex. USB eller serieporten.
AVR-minnet ser ut så här:
Efter programmering kommer det att se ut så här: När man väl har lagt in programmet i Flash-minnet så kan man alltså koppla loss controllern från programmeraren och den kan köras fristående med sitt program. Den klarar sig alltså helt utan USB eller andra anslutningar när den väl programmerats.
Men av någon anledning så vill man ibland kunna programmera sin AVR utan att använda programmeraren. Kanske man inte har någon? Då vill man ha en bootloader. Bootloadern är ett vanligt program som läggs i Flashminnet fast på en speciell reserverad plats, kallad "boot-sektorn". FÖr att få in en bootloader i flash-minnet måste man alltså programmera conrtollern på vanligt vis, dvs. via ISP med en programmerare ohh en hex-fil. Via programmeraren väljer man även att controllern ska starta i boot-sektorn och inte på adress 0000 som den annars gör.
Då ser det ut så här: Bootloadern är ett program som kan ta emot data via en anna kanal än ISP. Vanligtvis används UART, dvs. seriell kommunikation med pinnarna RX och TX. Dessa kan kopplas via en RS323-krets till serieporten på äldre datorer (RS-232), eller till en USB-krets som ansuts direkt till USB. Om controllern innehåller en egen USB-krets så kan bootloadern använda den.
Nu finns det ledig plats i Flash-minnet där bootloadern inte ligger. Där kan programmet läggas in. Du behöver ett speciellt program som kan kommunicera med bootloadern via USB/sereporten. Bootloadern tar emot data från hex-filen och lägger in det i Flashminnet: Fördelar med bootloader:
* Du kan programmera utan att använda en separat programmerare.
* Du kan programmera om controllern på distans via internet, om den är uppkopplad.
Nackdelar med bootloader:
* Det finns inte lika mycket ledig plats i Flash-minnet för det egentliga programmet.
* Du måste ha en RS232 eller USB-omvandlare eller ha en AVR med inbyggd USB.
* Ditt lysdiodprogram kan inte starta direkt när du slår på strömmen. Bootloadern startar först och väntar på instruktioner via USB. Om den inte får något inom några sekunder så startas ditt program.