Bei einigen PICs (12F629 / 12F675 / 16F630 / 16F676) gibt es eine Besonderheit, die unter Umständen zu Problemen führen kann: der OSCCAL.
Es handelt sich um einen OSCillator CALibration Wert. Da der PIC mit einem internen Oszillator betrieben werden kann (dies spart einen externen Quarz), wird dieser Wert bereits in der Chip-Fabrik an einer Speicherstelle programmiert. Dadurch können Toleranzen in der Taktfrequenz abgefangen werden. Der 16F627 besitzt den OSCCAL übrigens nicht!
Die Verwendung des OSCCAL-Wertes wurde notwendig, damit alle Kombinationen von Dekoder und Zentrale zusammen laufen. Denn auch die Zentrale hat gewisse Toleranzen. Wenn nun eine langsame „Scharping“-Zentrale mit einem hektischen „Waalkes“-Dekoder zusammen funktionieren soll, so verstehen sich die beiden nicht mehr. Die Zentrale sendet einfach zu langsam.
Der OSCCAL liegt in der letzten Speicherstelle des Programm-Speichers und wurde dort von der Chip-Fabrik einprogrammiert. Beim Start des PIC-Programmes wird dieser Wert dann ausgelesen.
Beim Brennen des PIC wird der Programmspeicher mit dem eigentlichen Programm geladen. Und genau hier sieht man schon die Gefahr: dort liegt ja schon der OSCCAL rum. Um diesen nicht zu überschreiben, wird dieser von einer guten PC-Programmier-Software zuerst gelesen und dadurch gerettet. Eine schlechte PC-Programmier-Software überschreibt diese Speicherstelle einfach und der OSCCAL ist futsch. Aber auch mit der guten PC-Programmier-Software kann es vorkommen, das der OSCCAL verloren geht. Wird der Programmier-Vorgang z.B. gestört, so ist evtl. der Speicher schon gelöscht, aber der OSCCAL-Wert noch nicht wieder zurück-programmiert worden. In diesem Fall: OSCCAL schnell notieren und später wieder einprogrammieren.
Unsere Software (PICkit 3 Programmer) zeigt den OSCCAL-Wert im Kopf an - dieser muss also beim ersten Auslesen des PICs notiert werden und zur Not später zurückgesetzt werden.