Jag har skrivit en delayfunktion i C som skall fördröja med det värde den blir anropad med. Testat att köra den för sig själv i AVRStudio med en sekund och AVRStudions stopwatch säger 1000.07ms.
Problemet är att om jag kör säg 10 min på labbplatta med tidtagarur så slår det med ca 5s. Jag använder den interna oscillatorn i atmegan på 8MHz och hörde att nån sa att den är inte noggrannare än så. Stämmer det eller är det jag som har programmerat fult så att det blir så i praktiken?
Man kan kalibrera klockan mjukvarumässigt. Det finns info på www.atmel.com om hur man gör. Har en kodsnutt någonstans dock ej för Mega8. Skall kika om jag hittar den. Enligt databladet till Mega32 går det att få den att gå med en noggrannhet på 2%.
Det här är det enda som jag hittade i databladet allt annat var bara om hur mycket frekvensen ändrades vid olika temperaturer och spänningar.
Oscillator
The calibrated internal RC Oscillator provides a fixed 1.0, 2.0, 4.0, or 8.0 MHz clock. All
frequencies are nominal values at 5V and 25°C. This clock may be selected as the system
clock by programming the CKSEL fuses as shown in Table 9. If selected, it will
operate with no external components. The CKOPT fuse should always be unprogrammed
when using this clock option. During reset, hardware loads the calibration byte
into the OSCCAL register and thereby automatically calibrates the RC Oscillator. At 5V,
25°C and 1.0 MHz Oscillator frequency selected, this calibration gives a frequency
within ± 1% of the nominal frequency.
Din kod är det nog inget fel på men om du funderar lite så kanske det ger sig vad som är fel.
Du säger att det blir 5 sekunder fel på 10 minuter. 10 minuter är 600 sekunder. Vad säger databladet? Jo, att vid 5V och 25°C så ska det inte bli mer än 1% fel. Hur mycket är 1%? Precis, 6 sekunder. Det har alltså blivit lite bättre än databladet och du har säkert inte ens haft 25°C.
När de skriver nominellt och anger en spänning och temperatur så innebär det nästan ingenting, tyvärr. Den interna oscillatorn är väldigt temperaturberoende och även beroende av spänningen.
Slutsats: För bättre precision behöver du en extern kristall.