Forum: Mikrocontroller und Digitale Elektronik Genauigkeit interner Oszillator Mega8 ...


von Markus (Gast)


Lesenswert?

Hallo,
ich benötige einen Timer der maximal 30 Minuten (+/- 5 Sekunden kein 
Problem) läuft (Pumpe an).
Die Hardware besteht aus einem Mega8 dessen Pins VOLLSTÄNDIG belegt 
sind.
Daher läuft er mit internem Oszillator bei 1MHz.
Prescaler auf 64 = 15625 =>  8bit Timer => 15625/256 = 61,035...
Also Zähler bei 61 ungefähr 1 Sekunde.
Abweichung 9 Ticks pro Sekunde, ca. 1 Sekunde pro 30 Minuten.
So ich mich nicht gerade verrechnet habe ;)
Wahrscheinlich bin ich nur zu blöd im Datenblatt eine Kennkurve o.ä. für 
die Abweichung des interen Oszillators zu finden.

Zusammengefaßt:
- Der Controller ist ein Mega8, OHNE freie Pins
- Umgebungstemperatur schwankt zwischen 20°C und 45° C
- Es muß ein Timer 30m laufen mit maximaler Abweichung von 5s
- Timer0 wie folgt initialisiert:     TCCR0 = (1 << CS00) | (1 << CS01);
- In IRQ Variable auf 61 ca. 1 Sekunde abgefragt

Frage, wie stark ist die Abweichung des internen Oszillators bei 45°C 
Umgebungstemperatur ?
Erfahrungwerte oder Kennline gefragt.
Danke,
Markus

von PeterL (Gast)


Lesenswert?

Seite 272

von PeterL (Gast)


Lesenswert?

wird nicht gehen, du brauchst +-0,3% laut Datenblatt werdens in dem 
Temperaturbereich  1% sein!

von Markus (Gast)


Lesenswert?

OK,
also bei 45°C wären es dann statt 1MHz nur noch ca. 950kHz.
15625-14843,75 = 781,25 Ticks Abweichung :(
Paßt nie, irgend eine Idee wie das ausgeglichen werden könnte ?
Temperatursensor fällt allerdings aus :(
Seh' schon dann wird wohl extern was abgefragt werden müssen :(
Danke ;)

von PeterL (Gast)


Lesenswert?

könntest den µC beheizen (1 Opamp ein NTC, ein paar widerstände)
und bei der Inbetriebnahme kalibrieren

von Karl heinz B. (kbucheg)


Lesenswert?

Kannst du an den restlichen Pins noch was freischaufeln?
Im schlimmsten Fall könntest du alle Output Pins über
Schieberegister laufen lassen. Du brauchst dann nur noch
4 oder 5 Pins für beliebig viele Outputs.

von Εrnst B. (ernst)


Lesenswert?

Hast du evtl. ein periodisches externes Signal zur Verfügung, mit dem du 
den AVR on-the-fly kalibrieren kannst?

Z.b. Nulldurchgangs-IRQ bei Phasenanschnittssteuerung. Da kann man dann 
schön das OSCCAL-Register danach stellen.

Alternativ könnte man dann ja aber auch gleich die 50Hz für den Timer 
nehmen...

von AVRFan (Gast)


Lesenswert?

Sollte auf der Platine noch Platz für ein 8-Eingangs-Multiplexer-IC [*] 
sein:  Damit kannst Du auf einfachste Weise mit einem geschätzten 
Aufwand von 10 Codezeilen Assembler acht digitale Eingänge über vier 
Leitungen einlesen (drei µC-Ausgänge um 0...7 an den Multiplexereingang 
zu legen, und einen µC-Eingang fürs Multiplexer-Ausgangssignal).  Dann 
hättest Du vier µC-Pins frei. Wäre das eine Lösung für Dein Problem?

[*] 74HCT251, 16 Pin, 0.31 € bei Reichelt

von Markus (Gast)


Lesenswert?

OK,
dann mal wie's insgesamt aussieht:

- Fertig aufgebautes Board, KEINE Erweiterungsmöglichkeiten
- PortB komplett durch 8bit ADC verwendet
- PortD komplett durch 8bit ADC verwendet
- PortC steuert via Software PWM zwei Pumpen PC0&PC1 (ist so :( )
- PortC Pin5&4 ist TWI=I2C Slave
- PortC Pin2&3 ebenfalls ADC
- Frei nur noch PC6

Aufgabe:
Dritte Pumpe soll 30 Minuten angehen, wenn Steuerwert an ADC PC2 
bestimmten Schwellwert erreicht hat.

Mir ist es NICHT möglich irgendetwas an der Hardware zu ändern :(
Weil alleine wegen Software PWM würde ich ja gerne ......

Also nach dem Diagramm auf S272 wären bei -20°C bis +20°C bei 5V eine 
Differenz von 200kHz => bei +/-5° Temperaturänderung +/- 25kHz 
Unterschied.
Stimmt's oder Verpeil ich da wieder was ?

20°C = 1,1 MHz
25°C = 1,075 MHz
30°C = 1,05 MHz
35°C = 1,025 MHz
40°C = 1 MHz
45°C = 0,975 MHz

Nur paßt das irgendwie nicht mit dem Diagramm überein :(

Trotzdem bei 20°C wären es ca. 278 Sekunden mehr pro 30 Minuten !
Bei 40°C die besagte 1 Sekunde weniger.

Die drei Prozent Schwankung macht bei den angenommenen 25kHz/5° ca. +/- 
750Hz aus, wäre also vernachlässigbar ;)

Also die Idee mit der konstanten Temperatur ist ja schon ganz nett ;)
Fragt sich jetzt nur auf wieviel °C ich den µC temperieren soll ?

Danke,
Markus

von PeterL (Gast)


Lesenswert?

du hast ja 1 MHz also bei mir auf Seite 277

bei 5V VCC ?! hat ist er auf 1MHz kalibriert,
und bei 45°C sinds etwa 0,99MHz (im schlechtesten Fall).
der Fehler liegt als0 bei max 1% (mit etwas Glück sinds 0,5%.
1% von 30min sind 18 sec, wie mans dreht und wendet ;-)
Beheizen würde ich Ihn auf mind 45°C, dann musst du deine Software aber 
darauf abstimmen)

Die Temperatur auf +-5°C einzuhalten müsste einfach machbar sein,
dann bist du in deinem Genauigkeitsbereich.

Peter

von Detlef _. (detlef_a)


Lesenswert?

An den freien PC6 ne nicht zu hohe, feste Freq. anlegen und damit die 
30min abzählen. Ist nen sicherer hack als die Heizgeschichte und nen 
Strippchen am Pin muß halt gehen.

Cheers
Detlef

von Martin (Gast)


Lesenswert?

Ist sonst 'nen I2C Baustein möglich? z.B. ein Uhrenbaustein. Dann müßte 
der Atmega nur einmal als master reagieren und könnte über Pin
ein mal programmieren, dann kann er in 30 min 'nen "int" geben und z.B. 
PC6 auf low ziehen lassen.
problem: der Atmel tritt halt eben als zweiter master am I2C bus auf, 
was vom prinmzip aber kein problem sein sollte. (ist der andere master 
multimasterfähig oder kann man irgendwie realisieren, dass der master zu 
der zeit, wenn der atmel als master auftreten will, definitiv nicht auf 
den bus schreibt?)

Alternative:
über PC6 signalisieren, dass man in 30 min 'nen I2C datum bekommen 
möchte, die Uhr kann dann auf dem I2C master laufen.

von Peter D. (peda)


Lesenswert?

Markus wrote:

> - PortB komplett durch 8bit ADC verwendet
> - PortD komplett durch 8bit ADC verwendet


Oh Gott, wer denkt sich denn bloß sowas aus.

Soll das ein Schildbürgerstreich sein ?

Reiß einfach die ollen 8Bit-ADCs raus und zieh nen Draht zu den internen 
ADC, schon hast Du 14 Portpins übrig.


Peter

von Jochen Hanisch (Gast)


Angehängte Dateien:

Lesenswert?

Tja, ohne frei Pins ....
Schau mal das Atmel Doc an. Run-Time calibration mit externem 
Uhrenquarz.
Vielleicht hifts.

Jochen

von Karsten Planert (Gast)


Lesenswert?

... was haltet ihr von einem I2C Thermometer (z.B. LM75 oder DS1621). 
Das koennte man an die schon vorhandenen TWI-Pins haengen. Den Timer 
koennte man denn an die Temperatur anpassen.
Ob sowas funktioniert, habe ich keine Ahnung. ;-)

Karsten

von Sonic (Gast)


Lesenswert?

Bevor du den Aufwand mit der Temperaturkompensation betreibst, überleg' 
lieber ob du nicht 'n Quarz dranhängst! Dann ist das Teil sehr genau. 
Mit Timer1 (16 bit), CTC-Mode, Teiler /1024 (16MHz) und OCRxA auf 15624 
(nicht 15625, es wird von 0 ab gezählt!) und der OC-Interrupt kommt 
exakt jede Sekunde!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.