Hallo iedereen
Ik ben bezig met een nixie klok en wil dit doen doormiddel van een attiny2313. Als clock wil ik een 4 mhz kristal gebruiken en heb daarom de timer ingesteld op ctc mode met een prescaler van 256 en een compare waarde van 15625. Dit moet dus elke seconde een interrupt opleveren. Nu heb ik hiervoor een programma geschreven en gesimuleert in avrstudio maar bij simulatie blijkt dat er elke seconde 64uS bijkomt waavan ik niet weet wat.
Weet iemand waar deze fout vandaan zou kunnen komen of is het een fout in avrstudio en werkt het in de praktijk wel goed. De fout zou namelijk betekenen dat de klok na een jaar ongeveer 30 minuten achterloopt wat wel jammer is.
Marcel
AVR C tutorial http://expand.xs4all.nl/avr
Hoe meet je die tijd? Vanaf timer start tot het eerste interrupt, of tussen twee interrupts? In het eerste geval meet je de overhead van de interrupt routine. Dat is geen probleem want het gaat toch om de tijd tussen twee interrupts.
4MHz/256 levert een periodetijd van 64μS op. Ik weet uit m'n hoofd niet precies hoe die compare werkt. Als het een 'equal' is, zit je denk ik wel goed, als het een 'greater than' is duidelijk niet. Al met al denk ik dat je dus 1 cyclus minder moet tellen. Reden daarvan moet je even opzoeken in de datasheet.
Bedankt voor de tip ik had hier al mee zitten reken en kwam ook op 256 uit dus heb er 256 bijgeteld maar was vergeten dat ik een prescaler van 256 had en er dus 1 bij moest tellen. Ik heb er dus 1 bijgeteld maar dat werkte ook niet dus het ik er een afgeteld en dat werkt wel, ik denk dat de verklaring is dat hij op nul begint met tellen en daar gaat het volgens mij mis.
probleem is dus opgelost
Marcel
AVR C tutorial http://expand.xs4all.nl/avr
Op 28 februari 2008 22:59:32 schreef RES:
Vraag me af welke interrupt je moet gebruiken. TIMER1 COMPA of TIMER1 OVF?
Dat heb ik me ook al eens afgevraagd. Aangezien de datasheet er niet duidelijk over is heb ik het maar gewoon getest. Je zou inderdaad een overflow interrupt verwachten omdat je zelf een TOP waarde ingeeft die overloopt. Dat is niet zo. Er komt helemaal geen overflow interrupt. Wel komt er zoals kweenie al aangeeft een compare interrupt.
Op 28 februari 2008 22:59:32 schreef RES:
Vraag me af welke interrupt je moet gebruiken. TIMER1 COMPA of TIMER1 OVF?
Een compare interrupt krijg je als de timer optelt vanaf nul en dan een vooringesteld waarde bereikt, in dit geval 15625
Een overflow interrupt krijg je als de timer overloopt, in dit geval dus als hij een waarde van 65536 bereikt. Door de timer vanaf 49911 te laten tellen zal hij na 15625 tellen een OVF int geven.
Het ligt er een beetje aan waarvoor je het wil gebruiken wat de beste keuze is. Nu gebruikt hij het voor een clock en dan maakt het niet zo uit.