User Tools

Site Tools


user:guider:etaavrguide

AVR-programmering för nybörjare

Vad är detta?

Den här texten är en introduktion till programmering för Atmel AVR mikrokontroller. Du får lära dig att kombinera programmering och elektronik på ett sätt som för den ovane öppnar upp en helt ny värld av möjligheter.

Vad behöver jag?

Mjukvara

Denna introduktion är främst riktad åt nybörjare, som använder Microsoft Windows plattformen, och visar hur man använder Atmels egna utvecklingsverktyg. Den är gratis och alla nödvändig mjukvara som du behöver medföljer i detta paket.

Linux

Källkoden och större delen av texten borde kunna användas av linuxanvändare dock med lite merarbete. Det går eventuellt att köra AVR Studio i Wine på Linux, annars är ett säkert alternativ att köra Windows XP och AVR Studio via en emulator. Dock är detta en omväg och det är det kan tyckas lite fult. En annan alternativ utvecklingsmiljö för Linux kan vara kontrollerlab

Grunden för att komma igång med AVR-programmering i linux är dessa program:

  • avr-gcc C-kompilator specifikt för AVR
  • avrdude Program för ISP-programmering av AVR
  • eclipse Grafisk editor/utvecklingsmiljö
  • avarice Interface mellan GNU Debugger & AVR JTAG ICE
  • avr-gdb GNU Debugger för AVR

Avr-gcc och avrdude är absolut nödvändigt.
Eclipse är på inget sätt nödvändigt, det är bara ett förslag på grafisk editor/utvecklingsmiljö. Är man lagd åt det hållet är vim mycket gedigen. Ett annat program är gedit som är en grafisk lättvikts-editor, förslagen är till synes oändligt många.
Avarice och avr-gdb är endast intressant om man vill debugga antingen med simulator eller med hårdvara.

Hårdvara

Vi kommer att använda oss utav vårat egna utvecklingskit som du får av oss när du bli medlem på ETA. Du kan även bygga ditt eget själv med hjälp av ritningarna. I princip skulle du även kunna bara köpa komponenterna och sätta ihop dem på ett kopplingsdäck/bredboard.

De enskilda projekten kommer innehålla enstaka komponenter så som givare, motorer, högtalare, transistorer och dylikt. De flesta komponenter finns här på ETA som du antingen kan låna eller bara plocka på dig. Om du inte har tillgång till vårat labb är det oftast frågan om komponenter som du kan rycka ut ur gamla elektronikprylar eller eller köpa för en billig peng på ELFA eller Farnell. Kom ihåg att du har rabatt på Farnell som medlem på ETA! :-)

Utöver komponenter behöver du även en programmerare för din mikrokontroller. På ETA har vi detta och drivrutinerna är redan installerade. När det väl blir dags att programmera är det bara att koppla in på utvecklingsbordet och följa instruktionerna.

Den programmerare vi använder heter AVRisp mkII (USB). Det är en s.k. “in cicrcuit programmer”. Med detta menas att man kan programmera en elektronikonstruktion som är färdigmonterad. På så vis kan du modifiera programmet även efter att du lödat fast chippet på ett kretskort. Detta är ovärdeligt när man upptäckt misstag/fel i programmet och måste korrigera den. Det enda man behöver göra är att dra fram ett par av pinnarna på mikrokontrollern till en connector så att man lätt kan ansluta till rätt

Vad behöver jag kunna?

Det är rekommenderat att du kan C/C++ eller Java. Källkoden som presenteras kommer vara i C men är du van vid Java bör du inte ha allt för svårt att hänga med då det syntaktiskt är nästan identiskt i många fall. Det är bara en fråga om att “glömma” allt som har med objektorientering att göra och se allt som en uppsättning av metoder under samma klass. Sök bara på “c for java programmers” i Google så kommer du snart hitta dokument som introducerar dig i de basala skillnaderna.

I vissa fall kommer vi även leka lite med mer maskinnära kod i form av assembler. Med assemblerprogrammering har du fördelen av att man kan ha full kontroll men det medför även du behöver ha full koll på de individuella instruktionerna och hur de förändrar tillståndet hos mikrokontrollern. Dessutom ter det sig även något kryptiskt rent språkmässigt till en början då nästan alla instruktioner består av förkortningar samt att man enbart kan utföra en instruktion per rad. En förhållandevis enkel rad i C kan vecklas ut till att bli många fler rader i assembler.

Utöver programmeringen är det givetvis även bra att ha åtminstone viss känsla för elektronik då det kommer att byggas och användas en hel del kringkomponenter förutom mikrokontrollern. Det fordras absolut inte att du är en utbildad civilingenjör men det är givetvis alltid fördelaktigt om du har någon form av insikt i hur olika elektroniska komponenter fungerar. Vill du lära dig mer om elektronik och känner att du saknar en del i den avdelningen rekommenderar jag varmt Lessons In Electric Circuits.

Vad kommer jag att lära mig?

Vi ska försöka att på ett logiskt vis gå igenom alla de olika bitarna hos vår mikrokontroller i form av små projekt. Vi ska i så stor utsträckning som möjligt skapa verkliga/vettiga applikationer som man kan tänka sig använda.

Ju längre fram exemplen kommer ju kortare kommer texterna bli då vi antar att du följt exemplen i kronologisk ordning. Detta är för att författarna är lata och vill slippa repetera sig allt för ofta. :-) Det är därför inte rekommenderat att hoppa mellan exempel. Se gärna även till att förstå texten och se gärna över föregående exempel innan du börjar på ett nytt för att friska upp minnet om du tagit ett avbrott. Vissa exempel kommer att vara en slags naturlig påbyggnad av tidigare exempel. I slutet kommer ett större projekt som omfattar alla de olika bitarna som vi gått igenom. De stora projektet kan givetvis ersättas med en egen idé över en applikation som du tycker dig behöva eller bara skulle vara riktigt kul att bygga.

Här följer en lista på de olika projekt/exempel som presenteras i texten:

…. kom överens om de olika projekten ….

Styra portar och pinnar

  1. Knappkod system
  2. Digital lamprytare - optisk

Timer

  1. Kylskåpslarm
  2. Tidtagarur
  3. Digital Klocka

ADC (Analog till digital konvertering)

  1. Dörrknackar detektor (gör högt tydligt ljud när någon knackar på dörren - piezo som detektor samt en piezo som högtalare)
  2. Capsense detektor (passar här?)
  3. Tempratursensorer - PT-100/TC1047/Diod

PWM (Pulse width modulation)

  1. Ljusnivå styrning
  2. Switchande filter
  3. Effektregulator
  4. Intelligent Class D förstärkare med switchat filter??)

Vad är AVR?

Läs: http://en.wikipedia.org/wiki/Atmel_AVR

Det är väldigt praktiskt att läsa igenom ovanstående dokument som nybörjare. Tryck vidare och läs om de termer som du inte förstår till du har fått en hyfsat bra känsla över vad det är du kommer ha framför dig när du utvecklar.

Varför AVR?

Det är en mikrokontroller med en genomtänkt arkitektur som tillåter en utan större kval programmera i högnivåspråk så som C/C++ utan att oroa sig för overhead i förhållande till att programmera i assembler.

Det finns givetvis andra producenter av MCU'er ute på markanden. Huruvida en mikrokontroller är bättre än någon annan är ett en väldigt svår fråga och enbart den trångsynte fastnar vid en produkt och påstår dess överlägsenhet. Vi rekommenderar att du köper/samplar andra typer av MCU'er och prövar på för att hitta det som passar just dig.

Anledningen till varför många fastnar för AVR är för att mjukvaran är gratis/fri, lättilgänglig och hårdvaran som behövs till tömmer inte det fattige studentens plånbok. Utöver detta finns det även en utbredd och allt växande användarbas som står till förfogande på webforum så som AVRfreaks.

Installera AVR Studio & WinAVR

Ladda ner och installera den senaste versionen av AVR Studio på om du redan inte har detta installerat på din dator. På ETA bör det finnas installerat på alla befintliga Windows datorer.

Ladda ner och installera den senaste versionen av WinAVR på om du redan inte har detta installerat på din dator. På ETA bör det finnas installerat på alla befintliga Windows datorer.

Att välja mikrokontroller till rätt uppgift

Att välja mikrokontroller (MCU) modell kan vara knepigt ibland. Man kanske kan fråga sig varför det finns en sån enorm uppsjö av olika modeller och titeln på denna sektion svarar på sätt och vis den frågan; För att spara pengar (och ibland yta/volym) och göra det enklare för sig väljer man en MCU som täcker precis kraven för ens uppgift. Detta sätt att tänka på likar i mångt om mycket principen bakom fokuserade applikationer. De är ett program eller en produkt som utför en eller eller par individuella uppgifter enbart och inget annat. Istället för att vara så bred och flexibel som möjligt så siktar man på att göra ett fåtal uppgifter bra med en så minimal design som möjligt. Vill man till exempel enbart skapa lampa som blinkar i olika utföranden till sin cykel är det föga meningsfullt att ha en mikrokontroller som har mer än 8 pinnar.

I denna introduktion har vi valt att används oss utav Mega168'an. Den kommer i många av de fall där vi använder den vara overkill men vi väljer den eftersom den lämnar utrymme för mer komplexa projekt i framtiden. Du kan läsa om olika tekniska detaljerna hos mega168 på avrfreaks. En tidigare nämnd väldigt bra resurs och samlingsplats för den gemene AVR missbrukaren.

Instruktioner för projekten

Mjukvara

Innan vi kan börja knacka kod och bygga häftiga prylar måste vi lära oss lite om AVR Studio; vår arbetsmiljö.

Ladda ner och installera AVR Studio om du redan inte gjort detta på: http://www.atmel.com/avrstudio

Du behöver även en C kompilator eftersom den inte finns integrerad AVR Studio. Dock har AVR Studio stöd för avr-gcc kompilatorn. Du laddar ner winavr här: http://winavr.sourceforge.net

När du startar upp AVR Stuido kommer du att se ett projektdialogfönster. Här kan du skapa eller öppna gamla projekt. Nedan följer direkta instruktioner med medföljande bilder.

  • Välj “New Project”.

01

  • Välj “AVR GCC”. Fyll i ett “Project Name” och bestäm vad din källkod ska ligga. Gör gärna en katalog för varje individuellt projekt så alla dina projektfiler hamnar i samma katalog och rör ihop sig. Tryck därefter på “Next”.

02

  • Välj “AVR Simulator” och vänta på att listan genereras. Välj därefter i listan till höger “ATmega168” och tryck på “Finish”.

03

Om att gått vägen borde du ha detta fönster framför dig:

full ide bild

Till vänster där det står “AVR GCC” är ditt fönster för hantering av filer i ditt projekt. Expanderar du foldern “Source Files” kommer du se C-filen för ditt projekt.

I mitten ser du ett fönster där du skriver din källkod. Du kan ha flera filer öppna samtidigt givetvis men just nu borde enbart den filen du skapt till ditt nya projekt synas. Det är rekommenderat att du maximerar det fönstret för att få god överskådlig blick på koden.

Till vänster (NB den andra vänstern!) har vi “I/O View”. Det här fönstret används när du debuggar din källkod eller bara ska undersöka vad som händer med de olika delarna av din mikrokrokontroller när den körs. I vårt fall har vi som du kanske tidigare noterat valt “AVR Simulator”. Det innebär att det du ser hända är en simulering av vad som kommer ske efter att du programmerat din mikrokontroller. Du kan även under debugkörnings gång virituellt manipulera mikrokontrollerns tillstånd med musen för att simulera knapptryckningar och dylikt.

Våra första projekt kommer att vara väldigt enkla och tämligen meningslösa i verkliga fall men du ska snart se att det inte krävs mycket till för att man ska kunna hitta på roliga idéer till projekt.

De flesta källkodsfilerna som du ser på projektsidorna skall i kunna ta och kopiera+klistra in i din egna tomma källkodfil som du nu har framför dig i AVR Studio och kompilera direkt såvida andra instruktioner inte avgivits.

Projekten

Projekt 1 - Ditt första projekt

Projekt 2 - Blinkande lysdiod

user/guider/etaavrguide.txt · Last modified: 2018/04/04 23:44 by 127.0.0.1