Forum: Mikrocontroller und Digitale Elektronik PIC 12F629; Programm lässt sich nicht brennen; Osccal Blank


von Sebastian (Gast)


Lesenswert?

Moin,

So habe ein kleines Programm geschrieben um den 12F629 mal
auszuprobieren und wollt eben das Programm auf den PIC brennen aber
Brennprogramm sagt:

"Checking Osccal & Bandgab..."
"Check Osccal is Blank!"

So meine Frage Wo kann ich denn Den Osccal einstellen ? im Datenbuch
steht das er standart mässig in der Center Frequnz eingestellt ist.

Ich benutze einen ALL-11C2 Brenner mit der dazugehörigen Brennsoftware
vom Hersteller.

Könnte mir bitte dabei jemand helfen ?

Danke

Sebastian

von Sebastian (Gast)


Angehängte Dateien:

Lesenswert?

Ich Benutze MPLAB und dort hab ich im "Configuration & ID data"
folgendes eingestellt:
(Ich hab mein Programm mal in den anhang kopiert)


Oscillator       : INTOSC, I/O function on GP4
Watch dog        : WDT disabled
Power up Timer   : PWRT enabled
MCLR pin functi  : /MCLR pin is Alternate function
Brown-Out reset  : BED Reset enabled
Code Protect     : Code Protect Off
Data memory Prote: Code protect Off

Und immer noch der gleiche fehler aber mit
Oscillator       : INTOSC, I/O function on GP4
Lege ich doch dest das der Interne Oszi verwendet wird oder ?

von Schoasch (Gast)


Lesenswert?

Hi


>>Und immer noch der gleiche fehler aber mit
>>Oscillator       : INTOSC, I/O function on GP4
>>Lege ich doch dest das der Interne Oszi verwendet wird oder ?

Ja, hier legst du den Internen Oszillator fest. Kannst du nicht bei
deinem Programmer den OSCCAL-Wert festlegen? Ich habe mal geles wie man
den OSCCAL da festleget.. aber i weis nicht mehr wie.. waren glaube ich
nur 2 Zeilen oder so... i schau mal ob ich was finde. Aber sonst schau
mal bei www.fernando-heitor.de vorbei.. da wirst du sicher deine
Antwort(für die und zukünftige Fragen) bekommen.

von Christoph P. (Gast)


Lesenswert?


von H. W. (digger72)


Lesenswert?

Hallo Sebastian,

Der 12 F629 springt beim reset immer erst auf Adresse 3FFFH.
Dort steht normalerweise ein Retlw xx -Befehl.
Wenn man den internen Oscillator benutzt, schreibt man
als ersten Befehl ab Org 000
"movwf OSCAL "
Damit ist der Oszillator kalibriert. Bei anderer
Oszillatorkonfiguration kann man den Ladebefehl weglassen.

Wenn du den Pic vor dem ersten Brennen ausliest, steht
dort der Calibrationswert ab Werk.

Gruss Digger

von Gast (Gast)


Lesenswert?

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

von TK (Gast)


Lesenswert?

Mit MPLAB und dem PICSTART+ oder ICD2 gibts jedoch keine Probleme,
da in beiden Fällen nur bis zu 0x3FE programmiert wird. Demnach bleibt
der OSCCAL-Wert erhalten - es sei denn - man LÖSCHT vorher den gesamten
Chip. Aber auch hier scheint MBLAB vorher den OSCCAL-Wert auszulesen, um
ihn dann nachträglich wieder zu programmieren.
Ich bekomme beim Programmieren immer den Hinweis, dass OSCCAL-Wert 
bereits
kalibriert ist.
Allerdings hab ich in der Firmware noch eine Abfangroutine 
implementiert, die
einen gelöschten OSCCAL erkennen soll.
z.B.
call 0x3FF
BANK_1
movwf OSCCAL
addlw .1
movlw 0x80
btfsc STATUS,C
movwf OSCCAL
BANK_0

(BANK_1 und BANK_0 sind MACROS)
Wenn der OSCCAL gelöscht wurde, steht normalerweise 0xFF drin. Ist dies 
der Fall, dann schreib ich einfach 0x80 rein, was laut Datenblatt als 
CENTER FREQUENCY deklariert wird. So kann ich wenigstens garantieren, 
dass der PIC nicht GANZ DANEBEN läuft.

Gruß
TK

von Gast (Gast)


Lesenswert?

Hallo TK,

die Routine ist nutzlos, wenn alle Bits der Zelle gesetzt oder gelöscht 
sind und nicht nur die 8 Bit des Operanden - wie bei mir. Der "call 
0x3FF" läuft in den Wald.

Ich habe mir jetzt angewöhnt, den PICkit 2 wieder auf die alte Weise zu 
benutzen. In MPLAB das Hexfile machen und über die PICkit-Software 
importieren und brennen.

Mit PICkit 1 lässt sich bei einigen PICs der OSCCAL-Wert "regenerieren". 
Das ist ganz praktisch.

Das Gehampel mit dem Netzteil bei PICStart+ ist mir meist zu 
umständlich.

Gruß,
K

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.