Automatische Kalibrierung des internen RC-Oszillators

von Michael Gaus
Der interne RC-Oszillator des ATtiny13 kann laut Datenblatt trotz des Kalibrierbytes, das beim Reset automatisch in das OSCCAL-Register geladen wird, eine Toleranz von bis zu +-10% haben. Durch Nachjustieren des OSCCAL-Werts kann meist eine bessere Genauigkeit erreicht werden. Mit dieser Sparrow-App ist eine automatische Kalibrierung mithilfe der Audio-Verbindung zum Sparrow möglich. Der ermittelte OSCCAL-Wert wird im EEPROM an der letzten Adresse 0x3F gespeichert und steht somit in anderen Sparrow-Apps zur Verfügung. Wichtig ist, dass in den Fusebytes die Fuse EESAVE aktiv ist, da ansonsten beim Aufspielen einer anderen Sparrow-App der im EEPROM gespeicherte OSCCAL-Wert während des Programmiervorgangs gelöscht werden würde.
Beim Programmstart leuchten zunächst beide LEDs. Nun muss zuerst gewährleistet sein, dass keine Audio-Ausgabe Richtung Sparrow stattfindet. Durch Drücken von Taste S1 wird die Messung gestartet. Nun kann über den SoundUart ein passender Datenstrom gesendet werden, der für einen automatischen Abgleich von OSCCAL geeignet ist.
Dazu sind folgende Einstellungen erforderlich:
Baudrate 1000, Byte 0x55, invertierte Ausgabe. Nun muss auf den Button "CheepIt" geklickt werden, damit der SoundUart das Byte sendet. Falls anschließend die grüne LED nicht blinkt, muss noch ein zweites mal auf den Button geklickt werden. Ob der Abgleich funktioniert hat, wird folgendermaßen über die beiden LEDs angezeigt:
Abgleich erfolgreich:
Rote LED aus, grüne LED blinkt langsam mit 1 Hz, wobei die LED in der Einschaltphase mit einer Frequenz von 1 KHz bei einem Duty Cycle von 80% moduliert wird. Dadurch kann mit einem Oszilloskop oder Logicanalyzer geprüft werden, wie genau der Abgleich war.
Abgleich fehlgeschlagen:
Rote LED an, grüne LED blinkt. Bei schnellem Blinken (4 Hz) gab es einen Timerüberlauf während der Messung. Dies deutet darauf hin, dass die Einstellungen im SoundUart (Baudrate und Byte) nicht korrekt sind. Bei langsamem Blinken (2 Hz) liegt der ermittelte OSCCAL-Wert nicht in der erwünschten Toleranz von ca. +/-4%. In diesem Fall einfach einen Reset am Sparrow ausführen und nochmal einen neuen Abgleich starten.
Quelle: