osccal

Gast #511079
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
Angehängte Dateien:
Gast
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
Gast
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.
Gast
> 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."

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

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.