Jag har kopplat in en 32,768 KHz-kristall för att göra exakt tidtagning. Förutom att ta tid ska mojängen kolla några sensorer, uppdatera en display, m.m.
Altså ska jag såklart ha ett interrupt som avbryter när det gått exakt 1 millisekund och plussar på en variabel.
Använder jag prescaler 128 när jag startar timern så slår den över en gång per sekund och jag får det att funka perfekt. Utan prescaler slår den således över en gång var 1/128 av en sekund. Jag vill ju dock att att den ska slå över efter exakt 1/1000 av en sekund.
Några tips på hur jag åstadkommer det? Man kan väl få den att slå runt vid ett annat värde? Och framförallt, vilket värde ska man ha för att få exakt 1/1000?
Du får nog skaffa en annan, snabbare kristall. Du hinner med drygt 32 klockcykler på en ms, men det går inte att få exakt 1 ms med den kristallen. Använd en kristall på 4,0960 MHz eller liknande. Då blir det 4096 cykler per ms alltså presc 16.
Jaha..
Har man OCR2=1 borde den ju slå över så fort kristallen svängt en gång = 32768 ggr/s. Det värde på OCR2 som ger EXAKT 1/1000 blir ju 3,2768 och det går ju inte. Det kanske inte går å i sånna fall måste jag ju ha en annan kristall.
tackar för tipset. Ibland e man inte smart. Lyssnade väl lite förmycket på min handledare. "Men då ska du ha en sån här 32,768-kristall blablabla"
Senast redigerad av gunne 22 mars 2006, 20:48:13, redigerad totalt 1 gång.
Använd systemklockan istället. Kör du på 8 eller 16Mhz är det inte vidare svårt att hitta lämplig prescaler och lämpligt värde mellan 0 och 65536 för en 16-bitars timer så att du får interrupt just så ofta du vill.
Men jag vill att det ska va exakt exakt. Jag tänkte använda intern oscillator å då blir det väl inte exakt. Iof skulle jag lika gärna kunna smacka på en 16MHz-kristall som systemklocka och köra från den. E ju aldrig fel med fart. Ska inte gå på batteri.
Om (huvud-) kristallen har samma noggranhet som den "klock-kristall"
som du hade på timern, så blir det väl inget större skillnad.
Olika "setup" av timern antagligen...
Räkna inte med att klockan kommer att gå exakt rätt och stegen på delaren blir antagligen för stora för att få den precision som krävs. Det får Du lösa i mjukvara, det finns flera olika möjligheter som tillåter justering med stor precicion. Skall man bygga en klocka som använder kristallreferens är det viktigare att få den stabil än att träffa exakt på en viss frekvens.
Man kan göra justeringar sällan, t.ex. en gång per dygn, för att inte ackumulera felet. Med den metoden får man mera precicion ju längre det är mellan justeringarna.
Om hårdvaruräknaren har ett preload-register kan man ställa om denna till att efer ett visst antal tick lägga till eller ta bort ett.
Man kan också ha en mjukvaruräknare som består av ett stort tal. Där räknar man ned den översta byten och när den kommer till noll startas den om genom att addera in ett kalibrerat värde till hela räknaren.
Den sist nämndametoden tycker jag är den bästa till en klocka. Det är enkelt att implementera och blir inga synliga "ryck" och man kan få hur hög precision som helst.
Till alla nybörjare som läser här: Precision och noggranhet är inte det samma. Även om en klocka kan justeras i mycket små inkrement får aldrig bättre noggranhet än vad tidbasen medger.
Jag använder Mega32 och har en huvudkristall på 14,74560 MHz.
Då kan jag skapa en timer med avbrott som ger 100 ms. Denna används för att ge exakta tider på 1 sekund.