Forum: Mikrocontroller und Digitale Elektronik osccal


von Tomsn (Gast)


Angehängte Dateien:

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

von Benedikt K. (benedikt)


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.

von Sonic (Gast)


Lesenswert?

Ansonsten, in C:     OSCCAL = Wert;
in Assemler:         ldi  Temp,Wert
                     out  OSCCAL,Temp

Ist doch einfach?

von Tomsn (Gast)


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

von A.K. (Gast)


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.

von Rolf Magnus (Gast)


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."


von Benedikt K. (benedikt)


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.

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.