29.08.2013 Views

Autonom robotväckarklocka med trådlös basstation - KTH

Autonom robotväckarklocka med trådlös basstation - KTH

Autonom robotväckarklocka med trådlös basstation - KTH

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Figur 6 Illustration för hur du tänker när du ska tända lampor<br />

Vektorn för att kunna visa detta A kommer bli: A[8] = {0x7F,0x88,0x88,0x88,0x7F,0x00,0x00,0x00};<br />

I en loop aktiverar du sista kolumnen till höger (PA0) och plockar sista värdet från vektorn (A[7]) på<br />

vilka rader som ska lysa, sen aktiverar du näst sista kolumnen från höger och plockar det näst sista<br />

värdet från vektorn på hur kolumnerna ska lysa, och så vidare tills alla åtta rader har loopats igenom<br />

och visats. Om du gör detta till en oändlig loop som loopar igenom kolumnerna tillräckligt snabbt ser<br />

ögonen bara en statisk bild.<br />

6. Mjukvara<br />

Denna modul har fått tre funktioner. Den kan antingen visa lite effekter, där först varje lampa blinkar<br />

var för sig, och sen så visas några olika figurer efter varandra. Men de två större funktionerna, som<br />

här kommer förklaras mer utförligt, är att den kan fungera som en informationsdisplay där en text<br />

rullar fram, eller så kan den användas som en spelplan för att spela Pong på. Men först kommer<br />

ATMega16s inbyggda timers att förklaras lite grundligt eftersom de har varit vitala för att skapa de<br />

två funktionerna. Mjukvaran är skriven i C <strong>med</strong> hjälp av utvecklingshjälp<strong>med</strong>let Atmel AVR Studio 4.<br />

6.1 Timers och interrupts<br />

ATMega16 AVR mikrokontroller har tre inbyggda timers, en 16-bit timer och två 8-bit timers. De kan<br />

användas för att göra många olika saker, men deras huvudfunktion är att göra vad det låter som de<br />

gör, de räknar hur lång tid som förflutit. De kan operera separat från ditt main-program och<br />

kommunicerar <strong>med</strong> hjälp av olika register och interrupts för att veta exakt vad den ska göra och efter<br />

hur lång tid den ska utföra det.<br />

En timer använder en intern klocka för att kunna veta hur lång tid som passerat och när den ska göra<br />

någonting nästa gång. Det kortaste tidsintervall som en timer kan räkna är en period, eller 1 ”tick”, av<br />

den inkommande klocksignalen. Hur lång tid ett tick tar kan man ställa in. Välj först vilken frekvens<br />

du vill att din timer ska ticka <strong>med</strong>. Fördröjning mellan varje gång timern ska göra någonting ska då<br />

vara (1 / Önskad frekvens) sekunder för att få den önskade frekvensen. Tiden mellan timerns varje<br />

tick bestäms som sagt av den interna klockfrekvensen. Den interna klockfrekvensen, Fcpu för<br />

mikrokontrollern, kan bestämmas till 1, 2, 4, eller 8 MHz. Varje tick för timern kommer ta (1 /<br />

Klockfrekvensen) sekunder. En 8-bit timer kan räkna upp till 255 tick, och 16-bit timern kan räkna upp<br />

till 65 536 tick, så där kan du justera efter hur många tick som timern ska göra någonting. Du kan<br />

8

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!