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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

äkna ut hur många tick du behöver för att uppnå den önskade frekvensen genom att dela (1 /<br />

Önskad frekvens) <strong>med</strong> (1 / Klockfrekvensen).<br />

Ibland kan det bli väldigt många tick som behövs, mer än var till exempel 8-bit timern kan ticka om<br />

det är den man ska använda. Man kan då använda en pre-scaler för att skala ner den interna timerklockan.<br />

Man kan använda en pre-scaler på 8, 64, 256 och 1024. Då multipliceras (1 / Önskad<br />

frekvens) <strong>med</strong> den givna pre-scalern och antalet tick som behövs minskas. Om man även sätter en<br />

lägre Fcpu så minskas antalet nödvändiga tick.<br />

De tre olika timerna har alla olika register, men de bestämmer samma funktioner. I ett av timerns<br />

register väljer man vilket mode den ska jobba i; Normal, PWM, Clear Timer on Compare Match (CTC)<br />

eller Fast PWM. I detta projekt har det mode som används varit CTC, där en jämförelse har skett och<br />

sen har timern nollställts och börjat om igen. I samma register ställer man in om man vill ha en prescaler.<br />

Antalet tick innan varje jämförelse sker specificerar i ett annat register. Varje gång timern har räknat<br />

upp till det givna antalet tick så vill vi att den ska gå in i ett interrupt, där den gör vad som är<br />

specificerat, nollställer timern, och hoppar sen tillbaka till main-programmet. Det finns flera olika<br />

typer av interrupts, det finns external interrupts och A/D-interrupt, men i detta projekt har då timerinterrupts<br />

används. För att aktivera interrupt måste man ställa in i ett tredje register aktivera CTC<br />

interrupt, och i ett fjärde register ett-ställa en bit för att sätta igång interrupts över huvud taget.<br />

Beroende på vilken timer du använder skiljer sig interrupt-vektorn för Compare Match som man ska<br />

använda lite, så det måste tittas upp när du ska programmera din interrupt.<br />

I detta projekt har interrupten används för att efter att en bild på LED-matrisen har visats ett tag så<br />

går man in i interruptet för att ändrar vilka lampor som ska lysa. I main-delen har i princip den enda<br />

funktionen varit att varje kolumn ska loppas igenom jättesnabbt hela tiden <strong>med</strong> en frekvens på för<br />

att visa den önskade bilden, och i interruptet som aktiveras ändras bilden efter att man hunnit<br />

registrera den tidigare bild som visats på LED-matrisen.<br />

De timers som används i detta projekt har haft inställningarna Fcpu 8 MHz för att få en snabb timer,<br />

och en pre-scaler på 1024 för att minska behovet av antalet tick. Antalet tick beror på hur snabbt<br />

bilden på displayen har behövt bytas, och har oftast experimenterats fram vilken hastighet som har<br />

varit bekväm.<br />

6.2 Rulla text på displayen<br />

Principen för att få en bokstav eller figur att rulla förbi på LED-displayen är att du visar flera olika<br />

bilder efter varandra, där bilden efter visar bokstaven förskjuten ett steg. När man bara har en<br />

bokstav som ska skiftas räcker det <strong>med</strong> att för varje gång som bokstaven ska skiftas börjar du din<br />

loopning av bokstavs-vektorn en kolumn åt höger. Så första bilden på bokstaven börjar från<br />

kolumnen för PA0, men när du ska visa nästa bild börjar du din loop på kolumnen näst längst bort till<br />

höger, på platsen för PA1, och visar samma bild på bara 7 kolumner denna gång. Du börjar<br />

fortfarande på sista platsen i bokstavsvektorn, så då kommer det se ut som att bokstaven har skiftat<br />

ett steg.<br />

Eftersom det går så otroligt snabbt att loopa igenom alla kolumnerna så skulle det gå alldeles för fort<br />

för att hinna se när bokstaven skiftas om det skulle skiftas direkt efter bokstavens första position har<br />

9

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

Saved successfully!

Ooh no, something went wrong!