Exakt tidtagning, Atmega16, 32,768-kristall

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
gunne
Inlägg: 2079
Blev medlem: 17 juni 2004, 15:00:31
Ort: sthlm
Kontakt:

Exakt tidtagning, Atmega16, 32,768-kristall

Inlägg av gunne »

Hej!

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? :?

Kod: Markera allt

ASSR|= 8; // Enable asynch mode- Ext x-tal
TCCR2 |= 0x09; // Clear timer on compare match / Timer No prescaler
TIFR= 0x80; // Clear OCF2/ Clear pending interrupts

// Compare Match
OCR2= 32;

#interruptfunktion här 

Senast redigerad av gunne 22 mars 2006, 20:38:35, redigerad totalt 2 gånger.
bearing
Inlägg: 11340
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Inlägg av bearing »

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.
Användarvisningsbild
gunne
Inlägg: 2079
Blev medlem: 17 juni 2004, 15:00:31
Ort: sthlm
Kontakt:

Inlägg av gunne »

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.
frejo
Inlägg: 496
Blev medlem: 21 april 2004, 21:43:01
Ort: Linköping

Inlägg av frejo »

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.
Användarvisningsbild
gunne
Inlägg: 2079
Blev medlem: 17 juni 2004, 15:00:31
Ort: sthlm
Kontakt:

Inlägg av gunne »

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.

För/nackdelar med att använda systemklockan?
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43205
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Inlägg av sodjan »

> För/nackdelar med att använda systemklockan?

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...
frejo
Inlägg: 496
Blev medlem: 21 april 2004, 21:43:01
Ort: Linköping

Inlägg av frejo »

kollar man på elfa verkar det inte vara nån direkt skillnad i stabilitet på en klockristall eller en mikroprocessorkristall.
Användarvisningsbild
gunne
Inlägg: 2079
Blev medlem: 17 juni 2004, 15:00:31
Ort: sthlm
Kontakt:

Inlägg av gunne »

Presis. Då ere lika bra att köra en kristall på 16 för hela systemet. Så slipper jag ockupera portar med timer2-kristallen oxå. Tackar för svaren!
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7011
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

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.
Användarvisningsbild
gunne
Inlägg: 2079
Blev medlem: 17 juni 2004, 15:00:31
Ort: sthlm
Kontakt:

Inlägg av gunne »

Marta skrev:... det finns flera olika möjligheter som tillåter justering med stor precicion...
Vilka metoder är det?
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7011
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

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.
Användarvisningsbild
gunne
Inlägg: 2079
Blev medlem: 17 juni 2004, 15:00:31
Ort: sthlm
Kontakt:

Inlägg av gunne »

Manikken ska antingen ta tid upp till en minut med noggranheten 1/1000 eller upp till några timmar med nogranheten 1 sek.

en 16MHz-kristall som man försöker få så stabil som möjligt borde väl klara det utan att man behöver justera med mjukvaran. elleR?
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43205
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Inlägg av sodjan »

En standard kristall ligger på +/- 50 ppm, så du kan enkelt räkna själv.

0.001 sek / 60 sek = ca 17 ppm.
1 sek / 7.200 sek = ca 138 ppm.

Första fallet kan bli svårt, andra bör ligga inom marginalen...
silop
Inlägg: 2
Blev medlem: 26 mars 2006, 22:44:43
Ort: Hökerum

Inlägg av silop »

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.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43205
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Inlägg av sodjan »

> Denna används för att ge exakta tider på 1 sekund.

"Exakta tider" ??

Det tror jag inte ett smack på,
du har säkert något litet fel.
Skriv svar