Forum: Mikrocontroller und Digitale Elektronik Anfänger sucht Unterstützung beim Flashen PIC12F629 mit PICKit3


von Christian Weber (Gast)


Angehängte Dateien:

Lesenswert?

Hallo liebe Profis,

ich beginne in die weite Welt der PIC-Programmierung einzusteigen, was
tatsächlich nicht einfach ist.
Ich studierte inzwischen viele Beispielprogramme, insbesondere bei
sprut.de.

Man beginnt natürlich mit einfachen Programmen, um hinter die
Geheimnisse zu kommen. Nach vielem erfolglosen probieren, bitte ich um
einen Hinweis, warum mein kleines Progrämmchen nicht funktioniert. Hier
handelt es sich um ein einfaches Ansteuern von Ausgängen in Abhängigkeit
einer Belegung an den Eingängen.

Das Programm läßt sich ohne Fehler kompilieren. Zur flashen benutze ich 
ein PICKit3. Nach connecting erscheint im output MPLAB:
PICkit 3 detected
Connecting to PICkit 3...
Firmware Suite Version...... 01.28.90
Firmware type......................Midrange
PICkit 3 Connected.
PK3Err0045: You must connect to a target device to use PICkit
 3.
Um den Fehler zu beseitigen fand ich in diesem Forum den Hinweis zum 
Einschalten der Spannung im Setting zum PICKit3. Nach Aktivieren 
erscheint:

PICkit 3 detected
Connecting to PICkit 3...
Firmware Suite Version...... 01.28.90
Firmware type......................Midrange
PICkit 3 Connected.
PK3Err0045: You must connect to a target device to use PICkit
 3.
Device ID Revision = 00000010

The target has invalid calibration data (3fff).

Dieser Fehler lässt sich ignorieren und man kann das Progrämmchen 
flshen. Leider passiert aber gar nichts. Also schlussfolgere ich, das 
irgend eine
Vereinbarung nicht stimmt oder eine Einstellung des PICKits ein Problem 
darstellt.

Suchfunktionen und Sprut halfen mir in diesem Fall leider nicht weiter.
Vielleicht kann jemand mir einen Hinweis geben.

Vielen Dank für die Unterstützung.

Mit freundlichem Gruß

Christian

von No target (Gast)


Lesenswert?

Dein Programmer findet den PIC nicht.
Prüf mal die Verdrahtung.
Keine Kapazitäten an mclr, möglichst keine lasten an rb6, rb7.

von Volker S. (vloki)


Lesenswert?

Für den Anfang sind PICs ohne ICD (InCircuitDebugger) nicht so 
empfehlenswert. Wenn man das PICkit als Debugger verwenden kann, bekommt 
man gleich in der IDE die Meldung, ob das Programm überhaupt ausgeführt 
wird.

Du hast in deinem Sourcecode einen Hinweis auf internen Oszillator, aber 
ich sehe keine Konfiguration... (Du musst Angaben für ALLE Configuration 
Bits machen)

<edit> hier noch ein ganz gutes Tutorial:
http://www.gooligum.com.au/PIC-tutorials/baseline-PIC-tutorial

Noch das Template der IDE:
1
;******************************************************************************
2
;   This file is a basic code template for object module code                 *
3
;   generation on the PIC12F629. This file contains the                       *
4
;   basic code building blocks to build upon.                                 *
5
;                                                                             *
6
;   Refer to the MPASM User's Guide for additional information on             *
7
;   features of the assembler and linker (Document DS33014).                  *
8
;                                                                             *
9
;   Refer to the respective PIC data sheet for additional                     *
10
;   information on the instruction set.                                       *
11
;                                                                             *
12
;******************************************************************************
13
;                                                                             *
14
;    Filename:      xxx.asm                                                   *
15
;    Date:                                                                    *
16
;    File Version:                                                            *
17
;                                                                             *
18
;    Author:                                                                  *
19
;    Company:                                                                 *
20
;                                                                             *
21
;                                                                             *
22
;******************************************************************************
23
;                                                                             *
24
;    Files required: P12F629.INC                                              *
25
;                                                                             *
26
;                                                                             *
27
;                                                                             *
28
;******************************************************************************
29
;                                                                             *
30
;    Notes:                                                                   *
31
;                                                                             *
32
;******************************************************************************
33
34
;------------------------------------------------------------------------------
35
; PROCESSOR DECLARATION
36
;------------------------------------------------------------------------------
37
38
     LIST      P=12F629              ; list directive to define processor
39
     #INCLUDE <P12F629.INC>          ; processor specific variable definitions
40
41
;------------------------------------------------------------------------------
42
;
43
; CONFIGURATION WORD SETUP
44
;
45
; The 'CONFIG' directive is used to embed the configuration word within the 
46
; .asm file. The lables following the directive are located in the respective 
47
; .inc file.  See the data sheet for additional information on configuration 
48
; word settings.
49
;
50
;------------------------------------------------------------------------------
51
52
    __CONFIG   _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT 
53
54
;------------------------------------------------------------------------------
55
; VARIABLE DEFINITIONS
56
;------------------------------------------------------------------------------
57
58
; example of using Shared Uninitialized Data Section
59
INT_VAR     UDATA_SHR   0x20   
60
W_TEMP      RES     1             ; variable used for context saving 
61
STATUS_TEMP RES     1             ; variable used for context saving
62
63
;------------------------------------------------------------------------------
64
; EEPROM INITIALIZATION
65
;
66
; The 12F629 has 128 bytes of non-volatile EEPROM, starting at address 0x2100
67
; 
68
;------------------------------------------------------------------------------
69
70
DATAEE    CODE  0x2100
71
    DE    "MCHP"          ; Place 'M' 'C' 'H' 'P' at address 0,1,2,3
72
73
;------------------------------------------------------------------------------
74
; OSCILLATOR CALIBRATION VALUE
75
;------------------------------------------------------------------------------
76
77
OSC       CODE    0x03FF
78
79
; Internal RC calibration value is placed at location 0x3FF by Microchip as
80
; a 0xADDLW K instruction, where the K is a literal value to be loaded into 
81
; the OSCCAL register.  
82
83
;------------------------------------------------------------------------------
84
; RESET VECTOR
85
;------------------------------------------------------------------------------
86
87
RESET_VECTOR  CODE      0x0000 ; processor reset vector
88
        GOTO    START          ; go to beginning of program
89
90
;------------------------------------------------------------------------------
91
; INTERRUPT SERVICE ROUTINE
92
;------------------------------------------------------------------------------
93
94
INT_VECTOR    CODE    0x0004  ; interrupt vector location
95
        MOVWF   W_TEMP        ; save off current W register contents
96
        MOVF    STATUS,w      ; move status register into W register
97
        MOVWF   STATUS_TEMP   ; save off contents of STATUS register
98
99
; isr code can go here or be located as a call subroutine elsewhere
100
101
        MOVF    STATUS_TEMP,w ; retrieve copy of STATUS register
102
        MOVWF   STATUS        ; restore pre-isr STATUS register contents
103
        SWAPF   W_TEMP,f
104
        SWAPF   W_TEMP,w      ; restore pre-isr W register contents
105
        RETFIE                ; return from interrupt
106
107
;------------------------------------------------------------------------------
108
; MAIN PROGRAM
109
;------------------------------------------------------------------------------
110
111
MAIN_PROG     CODE
112
113
START
114
115
;------------------------------------------------------------------------------
116
; OSCCAL RESTORE (not required if internal OSC is not used)
117
;------------------------------------------------------------------------------
118
119
        errorlevel -302
120
        BSF     STATUS,RP0    ; set file register bank to 1 
121
        CALL    0x3FF         ; retrieve factory calibration value
122
        MOVWF   OSCCAL        ; update register with factory cal value 
123
        BCF     STATUS,RP0    ; set file register bank to 0
124
        errorlevel +302
125
        
126
;------------------------------------------------------------------------------
127
; PLACE USER PROGRAM HERE
128
;------------------------------------------------------------------------------
129
130
        GOTO $
131
132
        END                       ; directive 'end of program'

: Bearbeitet durch User
von Christian Weber (Gast)


Lesenswert?

Hallo,

vielen Dank für die ersten Antworten.

@no target: Ich benutze den PICKit mit einem universal-Adapter. Die 
Jumper stecken richtig und ich glaube auch den Pic richtig eingesteckt 
zu haben. Da eine device-ID rückgemeldet wird, wird meiner Meinung nach 
auch der PIC erkannt.

@ volker: Ich habe die Konfigurationsangabe in
    __CONFIG  _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_OFF & 
_PWRTE_ON & _INTRC_OSC_NOCLKOUT

geändert. Das Ergebnis ist unverändert, nach reconnect:
PICkit 3 detected
Connecting to PICkit 3...
Firmware Suite Version...... 01.28.90
Firmware type......................Midrange
PICkit 3 Connected.
Device ID Revision = 00000010
The target has invalid calibration data (3fff).

Abgesehen davon glaube ich, dass ich wegen Nutzung GP3 als Eingang ich 
PWRTE auf OFF stellen muss, Das ist aber erst einmal untergeordnet.

Christian

von Witkatz :. (wit)


Lesenswert?

Christian Weber schrieb:
> The target has invalid calibration data (3fff).

An der Adresse 0x3ff liegt der Kalibrierwert, der per RETLW in der 
Initialisierungsroutine geladen und ins OSCCAL gespeichert wird. Daher 
ist dein Kommentar: ";Lade 3FF für Taktgeneratorkalibrierung" falsch, 
schaue dir die entspr. Stelle in dem von Volker geposteten Template an.

Normalerweise wird die Flash-Adresse 0x3FF nicht gelöscht und nicht 
programmiert, weil hier der Herstellerwert liegt. Wenn das Flash 
komplett gelöscht wurde, dann ist der Kalibrierwert unter 0x3FF ggf. weg 
und muss wiederhergestellt werden. Ohne das RETLW an 0x3FF funktioniert 
die Initialisierungsroutine nicht richtig.

von Thomas E. (picalic)


Lesenswert?

Christian Weber schrieb:
> Da eine device-ID rückgemeldet wird, wird meiner Meinung nach
> auch der PIC erkannt.

Christian Weber schrieb:
> Device ID Revision = 00000010

Die angezeigte Device-ID ergibt keinen Sinn! Laut Programming Spec, 
Seite 18 (Link: ww1.microchip.com/downloads/en/DeviceDoc/41191D.pdf) 
müsste die Device ID für den 12F629 hexadezimal 0F8x oder 0F9x sein (die 
unteren 5 Bits sind die Revision Nummer). Die ganzen Nullen in Deiner 
angezeigten ID deuten auf ein Kommunikationsproblem zwischen PK3 und PIC 
hin. Die eine 1 ist wohl eher Datenmüll.

PWRTE kann man immer aktivieren.

von Christian Weber (Gast)


Lesenswert?

Hallo Witkatz,

ok, der Kommentar stammt aus meiner Bibel bei sprut.

Leider sehe ich den wesentlichen Unterschied zum Template nicht.

Volker S. schrieb:
> ;----------------------------------------------------------------------- -------
> ; OSCCAL RESTORE (not required if internal OSC is not used)
> ;----------------------------------------------------------------------- -------
>
>         errorlevel -302
>         BSF     STATUS,RP0    ; set file register bank to 1
>         CALL    0x3FF         ; retrieve factory calibration value
>         MOVWF   OSCCAL        ; update register with factory cal value
>         BCF     STATUS,RP0    ; set file register bank to 0
>         errorlevel +302

Das ist in meinem Progrämmchen auch so.

Die Zeile:

Volker S. schrieb:
> ;----------------------------------------------------------------------- -------
> ; OSCILLATOR CALIBRATION VALUE
> ;----------------------------------------------------------------------- -------
>
> OSC       CODE    0x03FF
>
> ; Internal RC calibration value is placed at location 0x3FF by Microchip
> as
> ; a 0xADDLW K instruction, where the K is a literal value to be loaded
> into
> ; the OSCCAL register.

lässt sich so in da Programm nach der Variablendeclaration nicht 
integrieren, da es einen Labelfehler beim Compilieren gibt.

Wo und wie muss ich RETLW in das Programm einbauen, damit es 
funktioniert.

Was mich stutzig macht ist der Fakt, dass MPLAB auch bei geschlossenen 
*.asm und *.hex files erkennt, dass der Kalibrierungswert falsch ist.

Ist der PIC kaputt oder wie kann ich den OSCCAL wieder richtig stellen.

Christian.

von Volker S. (vloki)


Lesenswert?

Ich habe leider noch nie mit diesen Midrange PICs gearbeitet.
Der Link zu den Gooligum Tutorials oben war auch suboptimal.
Besser 
wäre_http://www.gooligum.com.au/PIC-tutorials/midrange-PIC-tutorial

Beginnt genau mit deinem 12F629. Da gab es früher sogar ein extra 
Dokument "PIC12F629 Programming Issues". So was gibt es vieleicht auch 
in den neuen Lessons.

von Witkatz :. (wit)


Lesenswert?

Christian Weber schrieb:
> Wo und wie muss ich RETLW in das Programm einbauen, damit es
> funktioniert.

Das RETLW muss natürlich an 0x3FF, wie sollte denn sonst CALL 0x3FF 
einen Wert ins W-Register holen?

Bevor du den Kalibrierwert wiederherstellst müsstest du erst den 
richtigen Wert bestimmen und dem PicKit 3 muss in den Optionen der 
Zugriff auf diese Speicheradresse erlaubt werden. Normalerweise 
überschreibt PicKit 3 diese Adresse nicht, die Option "Program 
Calibration Memory" ist default aus und sollte auch aus bleiben! 
Deswegen ist vermutlich das Problem wo anders und die Fehlermeldung eine 
Folge von z.B. Kommunikationsproblemen.

Ich würde dir raten erst die Hinweise von Thomas Elger zu befolgen und 
die Kommunikation richtig ans Laufen bekommen. Wenn dann noch die 
Calibration-Meldung kommt, kannst mit dem MPLAB IPE den Speicher 
auslesen und schauen ob in 0x3FF irgendwas abgelegt ist.

von Volker S. (vloki)


Lesenswert?

Witkatz :. schrieb:
> Ich würde dir raten erst die Hinweise von Thomas Elger zu befolgen und
> die Kommunikation richtig ans Laufen bekommen.
+1

Christian Weber schrieb:
> Abgesehen davon glaube ich, dass ich wegen Nutzung GP3 als Eingang ich
> PWRTE auf OFF stellen muss, Das ist aber erst einmal untergeordnet.
Wie programmierst du eigentlich deinen PIC. In der Schaltung?
Dann versuch erst mal ein Miniprogramm zum laufen zu bringen, das keinen 
der Programmierpins benutzt. (ICSPCLK, ICSPDAT, Vpp/MCLR)
Lass die Pins am besten für den Anfang unbeschaltet.

<edit>Mist, auch mein zweiter gooligum Link passt nicht. Sollte 
natürlich uaf die kostenlosen Samples gehen: 
http://www.gooligum.com.au/PIC-tutorials/midrange-PIC-sample

: Bearbeitet durch User
von Stephan (Gast)


Lesenswert?

fehlende Masseverbindung ?

von Christian Weber (Gast)


Lesenswert?

Hallo,

vielen Dank für die Hinweise, die für Anfänger zum Teil sehr schwer zu 
verstehen, bzw. Nachzuvollziehen sind.

Ich programmiere meine PIC über MPLAB IDE V8.92. Als Programmer nutze 
ich einen PICKit 3 mit Universaladapter (in diesem Fall, für 
flash-updates in einem anderen Projekt nutze ich ISP).

Inzwischen glaube ich, dass ich Kommunikationsprobleme ausschließen 
kann. Ich probierte einen funktionierenden PIC18F4245 mit den gleichen 
Anzeigen.Einziger Unterschied ist der, dass dort der PIC-Typ angezeigt 
wird und nicht wie im Fall des PIC12F629 als Firmwaretyp "midrange".

Ich glaube inzwischen, dass ich mir das Register OSCCON zerschossen 
haben. Ich hatte irgendwann im CALL eine falsche Adresse eingetragen und 
den Inhalt dieser Zelle über movwf nach OSCCON geschrieben.

Wie kann ich nun den richtigen Wert ermitteln und wieder in das Register 
eintragen.

Für eine Beschreibung, für einen Amateur wie mich verständlich, bin ich 
sehr dankbar.

Ich denke, dass das über den Reiter PICKit 3 settings --> calibration 
memory gehen müsste. Dort steht gegenwärtig uter last valid value NA und 
unter last value 0x3fff. Unter new --> retlw scheint man einen Wert 
zwischen 0 und 255 eintragen können.

Wie bekomme ich den richtigen Wert heraus?

Mit freundlichem Gruß

Christian

von Volker S. (vloki)


Lesenswert?

Christian Weber schrieb:
> Ich glaube inzwischen, dass ich mir das Register OSCCON zerschossen
> haben. Ich hatte irgendwann im CALL eine falsche Adresse eingetragen und
> den Inhalt dieser Zelle über movwf nach OSCCON geschrieben.
>
> Wie kann ich nun den richtigen Wert ermitteln und wieder in das Register
> eintragen.

Wie schon erwähnt kenne ich mich mit diesem speziellen PIC nicht aus.
Aber, das OSCCAL im RAM kannst du nicht "zerschießen". Nach dem 
Einschalten und vor der Ausführung des Programms steht da 0b100000-- 
drin. Das entspricht dem mittleren Wert für die Oszillator-Kalibrierung.

Beim Hersteller wird für jeden dieser PICs wohl noch ein Kalibrierwert 
ermittelt und an der Adresse 0x3FF im Flash abgelegt.
Den kann man dann wohl holen und in das Register OSCCAL im RAM 
schreiben, damit der Oszillator möglichst genau auf 4MHz läuft.
Verzichtet man darauf, sollte meiner Meinung nach der PIC trotzdem 
laufen, aber eben vielleicht nicht gerade mit 4MHz.
Wie weit man über die Kalibrierung die Frequenz nach oben oder unten 
verschieben kann - keine Ahnung ;-)

Wenn dir die Frequenz egal ist, dann verzichte einfach auf eine 
Kalibrierung. Wenn nicht, musst du wahrscheinlich den Wert ermitteln, 
indem du den PIC mit verschiedenen OSCCAL Werten laufen lässt und über 
den CLOCKOUT Pin misst.

von Thomas E. (picalic)


Lesenswert?

So, habe das gerade mal selbst ausprobiert: tatsächlich wird bei 
"Device-ID Revision" offenbar nur die Revision und nicht die Device-ID 
oder der Name des erkannten PIC12Fxxx angezeigt. Der angezeigte Wert 
"0000010" und damit die Connection scheint also wohl in Ordnung sein.

Wenn der OSCCAL-Wert tatsächlich "zerschossen" ist, ist das, wie Volker 
schon schrieb, für die Funktion des Programms egal, solange man nicht 
per "call 0x3FF" versucht, den Kalibrierungswert zu lesen. Die 
Befehlssequenz "call 0x3FF, movwf OSCCAL" kann man z.B. auskommentieren, 
dann sollte das Programm laufen. Oder einfach erstmal "retlw 0x80" als 
Kalibrierwert bei 0x3ff eintragen.
Zum Ermitteln eines neuen OSCCAL-Wertes reicht notfalls auch ein 
LED-Blinkprogramm und eine Stoppuhr, wenn man das als Programmierübung 
zum Kennenlernen des PICs betrachtet. Wenn man mit irgendeinem halbwegs 
realistischen Zeit-Geld-Verhältnis rechnet, ist 1€ für einen neuen PIC 
aber wohl günstiger.

: Bearbeitet durch User
von Markus W. (dl8mby)


Lesenswert?

Hallo Chistian,

eine persönliche Frage, da ich einen Christian Weber kenne,
der sich hier auch herumtreiben könnte.

Bist Du der SA/JO Christian?

Dieser weiß, wass gemeint ist.

Ansonsten nichts für ungut!

Gruß
Markus

von Christian Weber (Gast)


Lesenswert?

Hallo Markus,

nein, der bin ich nicht.

Christian

von Christian Weber (Gast)


Lesenswert?

Hallo,

Es ist tatsächlich so, wie ich bereits vermutetet. Die Kommunikation 
PICKit, PIC, PC funktioniert.

Volkers links halfen, danke Volker. Dort liegen zwar eine Unmenge von 
Dokumenten, aber nach einem Überflug fand ich die richtige Information.

Ich betrieb bisher MPLAB und nutze das PICKit nur als integrierten 
Programmer. In den Artikeln fand ich auch den link zum Betreiben des 
PICKit als stand allone Gerät. Nach Installation lud der PICKit zwar ein 
neues OS, so das er nun nicht mehr mit MPLAB funktioniert, aber das 
sollte nicht das Problem sein, das wieder einzurenken.

Es ist tatsächkich so, dass ich mir OSCCAL überschrieben habe und damit 
der Fehler angezeigt wird. Die in den Artikeln beschrieben 
"AUTOGENERATE"- Funktion konnte ich zwar nicht finden, aber ein 
manueller Eintrag ist möglich. Nach neuem Kompilieren konnte ich ohne 
Probleme flashen und mein Miniprogrämmchen funktioniert. Im Moment nur 
mit externen Pull-Up -Widerständen, obwohl ich mir einbildete diese mit
  movlw   B'00111000'     ;pull up für GP
  movwf   WPU             ;Pull-up für GP3 bis 5 einschalten
aktiviert zu haben.
Das bekomme ich aber noch heraus.

Vielen Dank für die Unterstützung.

Christian.

von GroberKlotz (Gast)


Lesenswert?

Hallo Christian!

Du musst im OPTION_REG das bit 7 auf 0 setzen
REGISTER 4-1: OPTION_REG: OPTION REGISTER (ADDRESS: 81h)
bit 7 GPPU: GPIO Pull-up Enable bit
1 = GPIO pull-ups are disabled
0 = GPIO pull-ups are enabled by individual PORT latch values

mfG GroberKlotz

von GroberKlotz (Gast)


Lesenswert?

...zu Deinem Problem mit dem OSCCAL-register
Es ist immer gut in den microchip foren nachzuschauen

hier: http://www.microchip.com/forums/m616244.aspx

wurde sogar ein kleines Assemblerprogramm veroeffentlich um den OSCCAL
wieder brauchbar verwenden zu koennen.

mfg GroberKlotz

von Witkatz :. (wit)


Lesenswert?

Im alten PicKit 2 gibt es eine Funktion zum Wiederherstellen des 
Kalibrierwertes. Ich habe mir zwar irgendwann PicKit 3 für MPLAB X und 
die neuen PIC zugelegt, leider hat der 3er diese Funktion nicht mehr. 
Das war für mich ein Grund, den PicKit 2 zu behalten, so lange ich noch 
einige PIC12Fxxx zum verbasteln habe, die sporadisch das gleiche Problem 
mit dem Kalibrierwert haben.
Also, falls du noch ein PcKit 2 hast, oder für kleines Geld dran kommst 
- meine Empfehlung.

von Teo D. (teoderix)


Lesenswert?

Mal ne zwischen Frage.
Was läuft eigentlich schief wenn der Kalwert nicht stimmt. Läuft der 
Oszillator halt nich genau, na und....
Last doch bitte einer mal nen Groschen für mich fallen. :)


PS: Bei mir kommt demnächst ein 12F2xx an den PicKit3

von Werner H. (pic16)


Lesenswert?

Zieh dir mal das Programm hier von Microchip:
 http://ww1.microchip.com/downloads/en/DeviceDoc/PICkit3%20Programmer%20Application%20v3.10.zip
runter und probiers damit. Die MPLAB IDE v8.92 ist etwas zickig mit dem 
PK3.

>Einstellung des PICKits ein Problem
>darstellt.
Richtig!

: Bearbeitet durch User
von Witkatz :. (wit)


Lesenswert?

Teo D. schrieb:
> Läuft der Oszillator halt nich genau, na und....

Wenn die Oszillatorfrequenz egal ist, dann ist es erstmal egal. In 
Assembler kann das kalibrieren des OSCCAL in der Initialisierung 
übersprungen werden und gut ist. In XC8 ist die die Kalibriersequenz 
standardmäßig im Startup eingebaut.

von Teo D. (teoderix)


Lesenswert?

OK, Danke.
Hab wohl das eigentliche Problem missverstanden.

Hab mal kurz drübergegugt, viel is da ja nich dran.
/Kurzschluss/: Das is eine Art PicSeitiger Schreibschutz für die 
Werksseitig programmierten Kall.-Daten!?

von Witkatz :. (wit)


Lesenswert?

Teo D. schrieb:
> PicSeitiger Schreibschutz für die
> Werksseitig programmierten Kall.-Daten!?

Nein, gibt es nicht. Die Flash-Zelle 0x3ff wird zwar vom Hersteller mit 
dem werksseitigen Kalibrierwert als RETLW operation beschrieben, aber 
kann vom Anwender wie jede andere Flasch-Zelle gelöscht oder mit eigenem 
Kalibrierwert beschreiben.

Normalerweise löscht der PicKit diesen Wert nicht, weil in den 
Programmieroptionen die Option "Program Calibration Memory" 
standardmäßig aus ist. Im Normalfall passiert also nichts, aaaber...
der PicKit liest den Wert, löscht Flash und schreibt den Wert zurück. 
Flashen der PIC12F629/675 ist aber erst bei >4,5V zuverlässig.
Mit Vdd Versorgung z.B. aus drei nicht mehr frischen Zellen mit knapp 
<4,5V  kann es passieren, dass das Lesen und Löschen noch funktioniert, 
das Zurückschreiben aber nicht mehr und man darf sich wieder mit der 
Neukalibrierung befassen.

von Student (Gast)


Lesenswert?

Witkatz :. schrieb:
> und man darf sich wieder mit der Neukalibrierung befassen.

Weshalb man als einigermaßen erfahrener PIC-Benutzer auch als erstes bei 
jedem neuen Chip den OSCCAL-Wert ausliest und mit Edding auf der 
Rückseite des Chips notiert. So muss man sich nicht lange mit 
Neukalibrierungen aufhalten sondern hat den Factorywert jederzeit zur Ha 
d und braucht ihn nur noch zurück zu schreiben wenn man mal wieder was 
verproggt hat.

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.