mikrocontroller.net

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


Autor: Luky S. (luky)
Datum:

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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: RE (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Luky S. (luky)
Datum:

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

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.