www.mikrocontroller.net

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


Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: PeterL (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Seite 272

Autor: PeterL (Gast)
Datum:

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

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: PeterL (Gast)
Datum:

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

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: PeterL (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Detlef _a (detlef_a)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jochen Hanisch (Gast)
Datum:
Angehängte Dateien:

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

Jochen

Autor: Karsten Planert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.