PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RS232 + interner RC Oszillator 8Mhz als Takt und OSCCAL



Mandi Nice
12.03.2007, 15:08
Hallöchen

Ich brauche beim AVR alle Pins. Daher habe ich auch die XTAL-Pins verwendet.

Da der interne RC Oszilator nicht sehr temperaturstabil ist, ergeben sich bei Temperaturänderungen Probleme mit der Baudrate der RS232.

Um das Problem zu lösen möchte ich eine Art "autotune" für das OSCCAL erstellen.

Ginge ja bei meiner Anwendung ganz einfach :
Ein PC fragt vom AVR 5*pro Sekunde Werte ab.
Wenn der PC die Werte die ich sende empfängt sendet er eine Bestätigung zurück.
Wenn ich diese Bestätigung nicht mehr erhalte erhöhe ich den Wert des OSCAL-Registers um eins , aber maximal bis + 8, dann fange ich mit Werte von -7 wieder von unten an.
Irgendwann , nach spätestens 2 Sekunden fängt er sich dann wieder bei einem Wert bei dem die Baudrate wieder in er Toleranz ist.
Bei meiner Anwendung ist es zum Glück egal wenn mal einige Werte nicht richtig übertragen werden !


Ein kleines Testprogramm läuft nun schon ganz gut.
Ich sehe am Oszi wenn das Timing rauswandert und nach dem Abgleich des OSCCAL wieder in Zeitfenster reinkommt.


Nun meine Frage :
Spricht was gegen diese Lösung ?

Oder hat jemand eine bessere Idee ?

Bin für jede Anregung dankbar.

hmg
Mandi

felack
12.03.2007, 15:20
Im "AVR-Mikrocontroller-Lehrbuch" von Roland Walter (www.rowalt.de) ist eine solche Routine beschrieben. Ich schaue mal zuhause nach, ob ich den Artikel noch finde. Kann 1-2 Tage dauern.

felack

Mandi Nice
13.03.2007, 08:47
Hallo felack

Wäre toll wenn Du mir die Infos senden könntest.

Danke im voraus

hmg
Mandi

felack
15.03.2007, 14:11
Hallo Mandi,

ich hab die Info gefunden. Das Basic-Programm steht im RcTerm.txt. Falls Du weitere Infos dazu brauchst bitte eine PN senden. RCTerm.zip musst Du in RcTerm.exe umbenennen (exe.Dateien kann man nicht hochladen).

felack

Mandi Nice
15.03.2007, 16:30
Hallöchen

und vielen Dank.

Aber das reicht leider nicht.
Die Kalibierung erfolgt dann nur für eine Temperatur.

Und wenn man die Print dann im Sommer verwendet bei 40-50°C
läuft der RC davon.


Ich mache das so :
Der PC sendet eine Anfrage an den uC
Der uC sendet die Anwort, welches der PC mit ACK bestätigt.
Dies erfolgt 10 mal pro Sekunden.

Empfangt der uC das ACK nicht, verändere ich das OSCCAL-Register solange bis ich das ACK wieder empfange. ( natürlich mit Timeout )

spätestens nach 1 Sekunde hat er sich wieder gefangen.

Hab das ganze von 0 - 70°C ausprobiert und scheint zu funktionieren.

Dies geht natürlich nur wenn Daten mit Prüfsumme und Softwarehandshake übertragen werden. Und wenn auch mal Daten verloren gehen können.

hmg
Mandi