Forum: Mikrocontroller und Digitale Elektronik UART mit Internem Oszillator über großen Temperaturbereich


von Luky S. (luky)


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?

von Benedikt K. (benedikt)


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.

von Peter D. (peda)


Lesenswert?


von RE (Gast)


Lesenswert?

Schau mal auf das LIN-Protokoll.

Dort findet bei jeder Übertragung eine Neukalibrierung zwischen Master 
und Client statt.  Das Protokoll ist speziell auf solche Anwendungen 
(geringe Datenrate, einfache Implementierung des Clients), wie von Dir 
geschildert, ausgerichtet.

  RE

von Peter D. (peda)


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

von Luky S. (luky)


Lesenswert?

Der Tip mit LIN war gut, Danke!
http://www.atmel.com/dyn/resources/prod_documents/doc7653.pdf
Da wird OSCCAL verändert

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.