mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik osccal


Autor: Tomsn (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hi leute!

im angehängten programm schicke ich per rs232 an den pc.. leider 
empfängt dieser nicht stetig, da die baudrate nicht ganz hinkommt,
ich habe mir sagen lassen, dass ich dies mit "osccal" ausgleichen kann..

leider funktioniert dass nicht so wie ich das probiert habe..

wie kann ich dem osccalc einen exacten wert geben bitte?

vielen dank und lg

tomsn

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

Bewertung
0 lesenswert
nicht lesenswert
Ein exakter Wert ist nicht möglich, da der interne Oszillator von der 
Spannung und der Temperatur abgängig ist. Nimm also besser einen Quarz 
wenn du den UART verwendest.

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ansonsten, in C:     OSCCAL = Wert;
in Assemler:         ldi  Temp,Wert
                     out  OSCCAL,Temp

Ist doch einfach?

Autor: Tomsn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
danke für die antwort

leider kann ich auf grund gewisser umstände keinen quarz verwenden und 
gehe über den internen Oszillator.

kannst du mir evtl sagen wie ich durch den osccal eine annäherung 
schaffen kann? denn im moment bin ich  mit dem wert 6 für UBBRVAL 
ausserhalb der 5% grenze für die baudrate 9600.

lg

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fürs anfängliche Debugging stehen die Chancen nicht schlecht, mit OSCCAL 
einen UART-tauglichen Takt hinzubekommen - man muss nur dran denken dass 
Fehler dann auch daher stammen können. Für Produktionseinsatz hingegen 
ist davon dringend abzuraten.

Wie: Per Programmer den richtigen Kalibrierungwert auslesen und irgendwo 
reinschreiben, beispielsweise ins erste oder letzte Byte vom EEPROM. Und 
diesen Wert dann beim Start ins OSCCAL reinkopieren.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ansonsten, in C:     OSCCAL = Wert;
> in Assemler:         ldi  Temp,Wert
>                      out  OSCCAL,Temp
>
> Ist doch einfach?

Ist aber nur dann korrekt, wenn der neue OSCCAL-Wert nicht zu weit vom 
alten entfernt ist. OSCCAL muß schrittweise angepaßt werden.

Aus dem Datenblatt des Attiny13:

"Avoid changing the calibration value in large steps when calibrating 
the calibrated internal RC Oscillator to ensure stable operation of the 
MCU. A variation in frequency of more than 2% from one cycle to the next 
can
lead to unpredictable behavior. Changes in OSCCAL-register should not 
exceed 0x20 for each calibration."


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

Bewertung
0 lesenswert
nicht lesenswert
Und die Werte passen auch nur, wenn die Temperatur 25° beträgt und die 
Betriebsspannung mit den im Datenblatt angegeben Werten übereinstimmt 
(bei neueren AVRs meist 3,3V). Vor allem bei neueren ist die Änderung 
pro Wert recht hoch. Mit den Werten aus dem AVR funktioniert der UART 
bei neueren AVRs z.B. bei 5V meist nicht.
Da muss man dann selber den Werte ermitteln: Entweder per Try & Error 
oder ein Programm schreiben, dass den Port exakt alle 5 Takte toggelt. 
Dann kann man dort 1/10 der Frequenz messen.

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.