UART mit Internem Oszillator über großen Temperaturbereich

#1128370
Lesenswert?

Ich habe einen ATMega88 welcher auf einer Platine mit verschiedenen I2C 
Sensoren in einem Temperaturbereich von -30° bis 50°C eingesetzt wird.
Da die Schaltung sehr starken Vibrationen ausgesetzt ist, vertraue ich 
auf keinen Quarz (erfahrungsgemäß mögen die das nicht!) und möchte den 
internen RC Oszillator verwenden.
Mein Problem ist nun, das der AVR jede Minute 4Byte an Messdaten zur 
Zentraleinheit schicken soll.
Ich habe mir also überlegt, dass die Zentraleinheit ein 0-Byte schickt, 
der AVR die Zeit zwischen Start- und Stopbit misst und sich dann 
anpasst.
Ist es besser den RC-Oszillator zu kalibrieren oder die 
Baudrateneinstellung anzupassen? Wie kann ich die Länge am einfachsten 
messen ohne einen zusätzlichen Pin (mit ICP gehts ja recht einfach...) 
am AVR zu opfern?
Welches vorgehen ist empfehlenswert?
#1128373
Lesenswert?

Schau dir mal den Bootloader von Peter Danegger in der Codesammlung an, 
der erkennt die Baudrate automatisch. Er verwendet zwar einen Soft UART, 
aber die Baudratenmessung sollte auch auf den Hardware UART übertragbar 
sein.

Ich würde OSCCAL verändern, das dürfte feiner einstellbar sein, vor 
allem wenn die Baudrate etwas höher ist. Prinzipiell sollte es aber egal 
sein.
#1128394
Lesenswert?

Benedikt K. wrote:
> Ich würde OSCCAL verändern, das dürfte feiner einstellbar sein, vor
> allem wenn die Baudrate etwas höher ist. Prinzipiell sollte es aber egal
> sein.

Ich hab wohl übersehen, wo im Datenblatt die garantierte Funktion f_RC = 
f(OSCCAL) steht, kannst Du sie mir sagen?


Den Baudratentimer kannst Du nach der Messung sofort auf den richtigen 
Wert einstellen.
Mit OSCCAL geht nur Trial&Errror, d.h. Du mußt soviele Meßbytes 
schicken, bis es stimmt.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren