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
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.
Ansonsten, in C: OSCCAL = Wert; in Assemler: ldi Temp,Wert out OSCCAL,Temp Ist doch einfach?
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
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.
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.