Hallo Leute.
auf der Suche nach einer Lösung zu einem Problem mit MPLAB, PICkit2 und
OSCCAL bin ich über diesen Thread gestolpert.
Zunächst will ich mal den inhaltlichen Unsinn des letzten Beitrages
korrigieren.
Es geht hier um den PIC12F629.
1.
Richtig ist, dass ab Werk an der letzten Programmspeicherzelle ein
RETLW-Wert für OSCCAL steht.
2.
Die Speicherzelle ist an 3FFh und nicht an 3FFFh.
3.
Falsch ist, dass der 12F629 nach dem Reset in diese Zelle springt. Er
springt nach 0.
Ein RETLW könnte als erste Anweisung nicht funktionieren, weil er nicht
wüsste wohin der "returnen" soll.
4.
Deshalb ist auch falsch, dass mit einem "movwf OSCCAL" an org 0 der
Oszillator kalibriert ist. OSCCAL ist in Bank1. Ohne eine vorangestellte
Bankumschaltung kann das niemals funktionieren. Mit "movwf OSCCAL" an
der ersten Programmspeicherzelle wird T1CON gelöscht oder irgendetwas
anderes geschrieben, falls nach dem Reset im W-Register nicht 0 steht.
In "Example 9-1" steht, wie der interne RC-Oszillator des PIC12F629
kalibriert wird. Das Reset-Verhalten der verschiedenen PICs ist
unterschiedlich. Es gibt tatsächlich welche, die in die letzte
Programmzelle springen. Ein Blick ins Datenblatt hilft hier weiter.
Und nun zu meinem Problem:
Die anfängliche Freude darüber, dass MPLAB nun auch direkt den PICkit2
anspricht, ist getrübt. In dieser Kombination wird gelegentlich der
OSCCAL-Wert zerhackt und nach dem Brennen steht dort 0. Ein "call 0x3FF"
geht also ins Nirvana.
Anscheinend wird vor dem Brennen der Wert nicht korrekt ausgelesen.
Schönen Tag noch,
ein Gast