Forum: Mikrocontroller und Digitale Elektronik Atmega8L und Uart: internen Takt nachtrimmen. Eure Meinung?


von Chris (Gast)


Lesenswert?

Hi!

Ich habe einen Atmega8 an einen Rondostat HR20e Heizkörperthermostat 
gehängt und will vom Thermostat mit seriell Daten empfangen (9600 Baud).

Erste Versuche mit dem internen Oszillator auf 2Mhz ergaben nur Müll am 
Uart. Da ich keine passenden Quarze da hatte und unbedingt weiter machen 
wollte, habe ich den Takt nachgetrimmt.

1.) Aktuellen Takt gemessen
Dazu Endlosschleife (avr-gcc) bei deaktivierten Interrupts:
- Pin high setzen
- _delay_ms(50)
- pin low
- _delay_ms(50).
Frage dazu: Ist das geeignet (genau genug) um den tatsächlichen Takt zu 
messen und wie kann kann man das besser machen?

2.) Intervall per DSO gemessen (=120ms)

3.) Kallibrierungsbyte angepasst so dass das gemessene Intervall 100ms 
beträgt.

4.) Lötkolben und Kältespray auf den Atmega losgelassen, keine 
Veränderung am Takt festgestellt (verstehe ich nicht, das hätte man doch 
sehen müssen...?)

5.) Kommunikation getestet, geht :)

6.) Um bei Abweichungen eine größere Toleranz zu erreichen:
Im Makefile F_CPU auf 1843200 gesetzt (Baudratenquarz) und Schritte 1-5 
wiederholt, also den internen 2Mhz Takt auf 1,8432Mhz "verstellt".

Die Übertragung läuft seit 2 Tagen im 4 Minutentakt ohne Aussetzer.


Was meint ihr, kann das klappen oder wird es Probleme geben?
Die Temperaturen ändern sich ja doch erheblich so nah am Heizkörper.

Gruß,
Chris

von Purzel H. (hacky)


Lesenswert?

Alternativ kann man auch einen Uhrenquarz anhaengen und auf diesen 
Synchronisieren. Der Aufwand Quarzgenauigkeit zu erreichen ist etwas 
gross, wenn ich den Preis eines Quarzes, etwa 0.2 Euro, einsetze.
Heisst, ich wuerde mir diese Klimmzuege nicht antun und einen Quarz 
einsetzen.

von (prx) A. K. (prx)


Lesenswert?

Und wenn einem Quarze zu aufwendig sind, dann gibt es noch die 
Keramikschwinger als Dreibein mit integrierten Kondensatoren.

von Falk B. (falk)


Lesenswert?

@  Chris (Gast)

>wollte, habe ich den Takt nachgetrimmt.

Schon mal ne gute Idee! Mal endlich einer der nicht blind auf den 
RC-Oszillator vertraut.

>Frage dazu: Ist das geeignet (genau genug) um den tatsächlichen Takt zu
>messen

Naja, eigentlich schon.

> und wie kann kann man das besser machen?

Timer mit Output Compare/PWM Funktion benutzen und einen Takt mit ~50% 
Tastverhältnis erzeugen. Ist absolut präzise, egal was die CPU macht.

>2.) Intervall per DSO gemessen (=120ms)

DSO ist hart an der Grenze der Messgenauigkeit. Dafür ist es nicht 
wirklich gedacht. Ein Einfacher Freqeunzzähler ist das deutlich besser, 
selbst die aus einem einfachen Multimeter.

>4.) Lötkolben und Kältespray auf den Atmega losgelassen, keine
>Veränderung am Takt festgestellt (verstehe ich nicht, das hätte man doch
>sehen müssen...?)

Nöö, dein Oszi misst wenn es hoch kommt mit 1% Auflösung, Laut 
Datenblatt driftet der RC-Oszillator um ca. 1,2%/20K.

>Die Übertragung läuft seit 2 Tagen im 4 Minutentakt ohne Aussetzer.

Das wird sie solange, wie die Temperatur nicht mehr als sagen wir +/-20K 
schankt oder die Spannung um 0,1V oder mehr sich ändert.

>Die Temperaturen ändern sich ja doch erheblich so nah am Heizkörper.

Dann wird es eng. Nimm einen Quarz.

MfG
Falk

von g457 (Gast)


Lesenswert?

> Frage dazu: Ist das geeignet (genau genug) um den tatsächlichen Takt zu
> messen [..]

Gute Frage. Das wirst Du wahrscheinlich selbst feststellen falls es 
Probleme gibt an der Heizung.. Und wenn nicht dann wars genau genug :-)

> [..] und wie kann kann man das besser machen?

Ich würde dafür die 'Toggle OCn on compare match'-Funktionalität des 
Timers verwenden, die ist genauer (im Sinne von fester mit dem Takt 
verdrahtet).

Atmel hat übrigens auch (mindestens) eine AppNote (AVR053: "Calibration 
of the internal RC oscillator") die sich mit dem Thema beschäftigt 
(selbige AppNote läuft aber in die 'andere' Richtung, also Referenztakt 
von aussen angelegt und der µC dreht so lange am Rad bis es passt).

von Chris (Gast)


Lesenswert?

Danke für die Hinweise.

@prx: Diese 3beiner (Keramikresonatoren) kannte ich noch gar nicht... 
wird getestet :)

@Falk: Ich habe hier so einen "Gigaherz Frequenzzähler", ein etwas 
älterer Bausatz. Mal schauen was der sagt.

von Dieter M. (Gast)


Lesenswert?

Da besonders der interne Oszillator temperaturabhängig, wäre wohl schon 
ein regelmäßiger Neuabgleich in kurzen Abständen sinnvoll.
Idee zum drüber Nachdenken:
Peter Dannegger hat in seinem Bootloader eine Autobaud-routine. 
Funktioniert bei mir mit 115,2kbaud mit internem RC-Oszillator 
hervorragend. (Respekt und Dank nochmal an Peter!)
Vielleicht ist das ja ein Ansatz.
Gruß, Dieter

von Chris (Gast)


Lesenswert?

Eben eine Frage des Aufwands... Da ich mit dem Modul eh die Temperatur 
erfasse, könnte man das einbeziehen. Oder man lässt eine Uhr mitlaufen, 
vergleicht deren Zeit mit der (ungenauen...) Uhr des Rondostats und 
errechnet aus dem Delta die Taktabweichung, oder....

Fürs erste lasse ich das so, mal gespannt ob es Probleme gibt. Dann 
kommen die Keramikresonatoren rein.

von Thomas (Gast)


Lesenswert?

Ich hab es bei mir so gemacht:
Eine Routine versucht eine Kommunikation aufzubauen, danach wird das 
Kalibrierbyte inkrementiert. Wenn die Kommunikation mit den 
Kalibrierbytes 50 bis 70 funktioniert, dann nutze ich für das 
Hauptprogramm als Kalibrierbyte 60.

von Klaus 2. (klaus2m5)


Lesenswert?

Leute, was macht ihr nur für Klimmzüge, wenn es doch mit einem einfachen 
Quarz getan wäre. Überlegt mal, wieviel Arbeitszeit jede dieser 
"Lösungen" verdampft, geschweige denn die Zeit für die unzähligen 
Beiträge in diesem Forum zu genau diesem Thema.

*** Kopfschüttel ***

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Also ich finde das Thema schon interessant. Nicht, um Quarze an Stellen 
einzusparen, wo man locker welche einbauen könnte, sondern für 
Anwendungen wo man keine einbauen kann (z.B. wegen mechanischer 
Stoßfestigkeit).

Ich würde im konkreten Fall mittels Capture-Input und einem Timer die 
Bitzeiten der uart-Gegenstelle messen und den eigenen Takt so anpassen, 
dass es passt.

Grüße,

Peter

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.