Guide: Kom i gang med AVR
Lager denne guiden for alle som er interessert i å komme i gang med mikrokontrollere. Selv om jeg ikke er pro, håper jeg denne veldig enkle innføringen til AVRs hjelper noen på vei.
Kommer til å bruke WinAVR og AVR Studio 4 under windows. Setup av toolchain til
Mac og
Linux/Unix.
Hardware
Det du trenger av hardware, er en ISP-programmerer til å programmere mikrokontrolleren, og en mikrokontroller selvfølgelig.
For å gjøre det enkelt, kjøpte jeg et devboard med ATMEGA128 fra ebay. Kostet ikke mer enn rundt $30. Og med ISP-programmerer kommer du på rundt $50 (~300kr), noe de fleste har råd til.
ATMEGA128 devboard. USB for strøm, 8 LEDs, 8 push-buttons + Reset, JTAG- og ISP-kontakt, 2x RS232-porter, 16MHz krystall.
Billig AVR-ISP MK II-klone fra ebay.
Software (Windows)
Last ned og installer siste versjon av AVR Studio 4, som er IDEet vi skal bruke.
Last ned og installer siste versjon av WinAVR og installer under «C:/WinAVR». Denne inneholder bla. kompileren, GNU GCC, for C og C++.
Installer drivere for ISP-programmereren fra CDen som mest sannsynlig var med.
Så er det bare å koble ISP-programmereren til devboardet og PCen.
Skrive Kode
Start med å åpne Avr Studio 4 og velg New Project.
Om du har installert WinAVR riktig, vil du få opp AVR GCC under Project type. Velg AVR GCC, finn på et passende navn på prosjektet og trykk Next.
Velg AVR Simulator 2 og type AVR du bruker. I mitt tilfelle ATMEGA128. Trykk så Finish.
Sjekk at ISP-programmereren er koblet til skikkelig, både til PC og til devboard. Og at AVRen er tilkoblet en strømkilde. Som i mitt tilfelle er fra PCen.
Gå til Tools->Program AVR->Connect.
Velg STK500 or AVRISP under Platform, og Auto under Port. Og trykk Connect.
Under fanen Main, sjekk at rett type AVR er valgt og trykk Read Signature.
Om du får opp en signatur, har du kontakt med AVRen og kan begynne å programmere den. Hvis du får feilmelding, sjekk at ISP-frekvensen er mindre enn ¼ av klokkefrekvensen til AVRen. Du kan endre den ved å trykke Settings..
Kryss ut ISP-vinduet, for nå kan vi skrive kode. Men først litt grunnleggende om digitale innganger og utganger på AVRen. (Siden dette bare er en intro til AVR, tar jeg ikke med ADC, timers, PWM, interupts ol.)
AVRen har flere såkalte porter, som (som oftest) er en gruppe av 8 I/O-pinner.
Pinnene på en AVR er som regel både innganger og utganger. Men dette må vi fortelle AVRen i programmet. Derfor har vi 3 såkalte register for hver port. Hvert register inneholder 8 bits, som enten er av eller på. Og disse kontrollerer da egenskapene til pinnene som hører til den porten.
Hver port har en egen bokstav, og antall porter kommer an på hvilken AVR du bruker. Derfor skriver man som regel x i stedet for portbokstaven når det ikke spiller noen rolle hvilken port det er snakk om. Noen pinner kan har flere funksjoner enn digitale innganger/utganger, men det tar jeg ikke for meg nå.
Det første er DDRx. Som står for Data Direction Register, og bestemmer om pinnene skal være utganger eller innganger. For å gjøre det litt lettere å forstå, har jeg prøvd å lage en enkel illustrasjon.
0 betyr inngang, og 1 betyr utgang. Så det vil si at på tegningen her er pin 0,4,5 og 7 definert som innganger, og 1,2,3 og 6 definert som utganger.
Det neste registeret er PORTx. Om pinnen er satt som utgang i DDRx, vil du med å skrive til PORTx skru av og på utgangen. Om pinnen er satt som inngang i DDRx, vil du med å skrive til PORTx aktivere eller deaktivere de internet pull-up-motstandene.
Det siste registeret er PINx. Dette brukes til å lese av pinnen om den er satt som inngang i DDRx.
Disse registerene kan virke veldig forvirrende i begynnelsen, men man skjønner fort hva de er til og hvordan de brukes etter en kort stund.
Endelig kan vi skrive kode!
Lager denne guiden for alle som er interessert i å komme i gang med mikrokontrollere. Selv om jeg ikke er pro, håper jeg denne veldig enkle innføringen til AVRs hjelper noen på vei.
Kommer til å bruke WinAVR og AVR Studio 4 under windows. Setup av toolchain til
Mac og
Linux/Unix.
Hardware
Det du trenger av hardware, er en ISP-programmerer til å programmere mikrokontrolleren, og en mikrokontroller selvfølgelig.
For å gjøre det enkelt, kjøpte jeg et devboard med ATMEGA128 fra ebay. Kostet ikke mer enn rundt $30. Og med ISP-programmerer kommer du på rundt $50 (~300kr), noe de fleste har råd til.
ATMEGA128 devboard. USB for strøm, 8 LEDs, 8 push-buttons + Reset, JTAG- og ISP-kontakt, 2x RS232-porter, 16MHz krystall.
Billig AVR-ISP MK II-klone fra ebay.
Software (Windows)
Last ned og installer siste versjon av AVR Studio 4, som er IDEet vi skal bruke.
Last ned og installer siste versjon av WinAVR og installer under «C:/WinAVR». Denne inneholder bla. kompileren, GNU GCC, for C og C++.
Installer drivere for ISP-programmereren fra CDen som mest sannsynlig var med.
Så er det bare å koble ISP-programmereren til devboardet og PCen.
Skrive Kode
Start med å åpne Avr Studio 4 og velg New Project.
Om du har installert WinAVR riktig, vil du få opp AVR GCC under Project type. Velg AVR GCC, finn på et passende navn på prosjektet og trykk Next.
Velg AVR Simulator 2 og type AVR du bruker. I mitt tilfelle ATMEGA128. Trykk så Finish.
Sjekk at ISP-programmereren er koblet til skikkelig, både til PC og til devboard. Og at AVRen er tilkoblet en strømkilde. Som i mitt tilfelle er fra PCen.
Gå til Tools->Program AVR->Connect.
Velg STK500 or AVRISP under Platform, og Auto under Port. Og trykk Connect.
Under fanen Main, sjekk at rett type AVR er valgt og trykk Read Signature.
Om du får opp en signatur, har du kontakt med AVRen og kan begynne å programmere den. Hvis du får feilmelding, sjekk at ISP-frekvensen er mindre enn ¼ av klokkefrekvensen til AVRen. Du kan endre den ved å trykke Settings..
Kryss ut ISP-vinduet, for nå kan vi skrive kode. Men først litt grunnleggende om digitale innganger og utganger på AVRen. (Siden dette bare er en intro til AVR, tar jeg ikke med ADC, timers, PWM, interupts ol.)
AVRen har flere såkalte porter, som (som oftest) er en gruppe av 8 I/O-pinner.
Pinnene på en AVR er som regel både innganger og utganger. Men dette må vi fortelle AVRen i programmet. Derfor har vi 3 såkalte register for hver port. Hvert register inneholder 8 bits, som enten er av eller på. Og disse kontrollerer da egenskapene til pinnene som hører til den porten.
Hver port har en egen bokstav, og antall porter kommer an på hvilken AVR du bruker. Derfor skriver man som regel x i stedet for portbokstaven når det ikke spiller noen rolle hvilken port det er snakk om. Noen pinner kan har flere funksjoner enn digitale innganger/utganger, men det tar jeg ikke for meg nå.
Det første er DDRx. Som står for Data Direction Register, og bestemmer om pinnene skal være utganger eller innganger. For å gjøre det litt lettere å forstå, har jeg prøvd å lage en enkel illustrasjon.
0 betyr inngang, og 1 betyr utgang. Så det vil si at på tegningen her er pin 0,4,5 og 7 definert som innganger, og 1,2,3 og 6 definert som utganger.
Det neste registeret er PORTx. Om pinnen er satt som utgang i DDRx, vil du med å skrive til PORTx skru av og på utgangen. Om pinnen er satt som inngang i DDRx, vil du med å skrive til PORTx aktivere eller deaktivere de internet pull-up-motstandene.
Det siste registeret er PINx. Dette brukes til å lese av pinnen om den er satt som inngang i DDRx.
Disse registerene kan virke veldig forvirrende i begynnelsen, men man skjønner fort hva de er til og hvordan de brukes etter en kort stund.
Endelig kan vi skrive kode!