problemi programmazione PIC (invalid OSCCAL)

Jan 24, 2010 6 Replies

Ciao a tutti! Ho comprato da poco il PICKit2 e ho provato a fare eseguire qualche programmino banale. I primi andavano bene, si compilavano e tutto ok. Poi ho provato a fare un altro esempio, ma ogni volta che provo a programmare il PIC, mi dice sempre "invalid value" per il valore del OSCCAL, ma io non lo modifico proprio. Mi spiego meglio. Collego il PICKIt2 e lancio il programma e va bene, quando riconosce il dispositivo dice che il valore del OSCCAL e' 0CFF (corretto), pero' non appena importo il file HEX, mi dice che il valore del OSCCAL e' invalido e ogni volta tira fuori un valore diverso. Ho provato anche a farglielo aggiustare da solo, oppure a cambiarlo a mano, ma niente. Ho provato pure a cambiare a mano gli ultimi byte nella finestra "PRogram Memory"e poi esportare l'HEX cosi' modificato e reimportarlo, ma niente. Fa sempre lo stesso errore. QUando cerco di scrivere il programma nella program memory mediante il tasto "Write", mi dice "Programming failed at Program Memory address 0x00000". Temendo che fosse rotto il PIC ho provato a cambiarlo, ma fa le stesse cose. Ho anche provato a scrivere i vecchi programmi che prima andavano, ma niente, da' lo stesso errore. C'e' qualcuno che mi puo' aiutare? Se puo' servire il programma (banale) e' questo. Grazie a chi mi aiutera'.



;************************************************** ; Secondo esempio programmazione PIC ; LED_2.ASM


; ;**************************************************



PROCESSOR 12F509 RADIX DEC INCLUDE "P12F509.INC" ERRORLEVEL -302



;Setup of PIC configuration flags



;INTERNAL oscillator ;Disable watch dog timer ;Enable power up timer ;Disable code protect



__CONFIG 0x000A



LED EQU 0



cblock 0x10



Count : 2 endc



;Reset Vector ;Start point at CPU reset



ORG 0x00



bsf STATUS,5



MOVLW 0xC0 OPTION



movlw 0x0 movwf OSCCAL



MOVLW 0x00 TRIS 6



bcf STATUS,5



movlw B'00000000' ; spengo i LED movwf GPIO


MainLoop



call Delay


btfsc GPIO,2 goto SetToZero



bcf GPIO,1 bsf GPIO,2 goto MainLoop



SetToZero



movlw B'00000000' ; spengo il LED 2 movwf GPIO



movlw B'00000010' ; accendo il LED 1 movwf GPIO goto MainLoop


;Subroutines



;Software delay



Delay clrf Count ;azzera i due byte di Count clrf Count+1



DelayLoop



decfsz Count,1 goto DelayLoop



decfsz Count+1,1 goto DelayLoop


return



END


Ciao Piero!

Mmh... Premetto che non ho mai visto/usato il pickit2, comunque tieni presente, come regola generale che il valore di OSCAL non andrebbe MAI modificato, per evitare disallineamenti del clock del PIC.

Potrebbe essere un problema di configurazione del programma, normalmente è quella la causa di quell'errore, e questo spiegherebbe anche perchè non riesce a programmare OSCAL.

Stefano M. (Italy) WEB: http://www.lemming.it [...] non si vede bene che col cuore. L?essenziale e invisibile agli occhi". (Il Piccolo principe - A. De Saint Exupery)

Si. Ma infatti io non l'ho modificato di certo!All'inizio, mi viene sulla schermata che il valore di OSCCAL e' 0CFF (e non fa storie), poi quando importo l'HEX mi dice invalid (ma io non l'ho modificato!).

Ma ti riferisci al MIO programma (quello che ho scritto io in assembler per il PIC) o al programma che serve per programmare il PIC, quello dato con il PICKit2 insomma? E come potrei risolvere? Cmq grazie fin da ora per il tempo concessomi

chi".

In passato ho avuto anch'io dei problemi indecrifabili e ho scoperto che il problema era dovuto alle connessioni tra programmatore e PIC.

Ti consiglio di verificare attentamente. Buon lavoro.

Saluti.

Il giorno Sun, 24 Jan 2010 00:17:57 -0800 (PST), PieroM ha scritto:

[cut]

Non conosco il 12f509, ma ho lavorato con i 12f629 e 675, che hanno lo stesso principio di funzionamento per quanto riguarda l'oscillatore interno. Nel datasheet del 629/675 nel capitolo sulle configurazioni dell'oscillatore è specificato come calibrare l'oscillatore interno servendosi del dato memorizzato in fabbrica nell'ultima word di RAM:

bsf STATUS, RP0 ;Bank 1 call 3FFh ;Get the cal value movwf OSCCAL ;Calibrate bcf STATUS, RP0 ;Bank 0

Nel codice da te riportato OSCCAL è settato a 0 indipendentemente dal valore di calibrazione.

L'esempio è relativo ai 12f629/675, quindi prima di utilizzarlo verifica sul datasheet del micro da te utilizzato.

esso

ore =E8

e

alore di

Ringrazio anche te. Ribadendo che ho cominciato da pochissimo, e quindi potrei benissimo dire corbellerie, ma a me il codice non lo fa proprio scrivere in memoria. Quando premo il tasto "Write", mi dice "Programming failed at Program Memory address 0x00000", quindi come posso dargli il nuovo codice se non mi fa scrivere in memoria? Appena importo l'HEX mi dice che il valore di OSCCAL e' invalido. Adesso sto verificando i contatti per vedere se e' un problema del genere, poi provo anche il tuo suggerimento.

a sul

Mi sono spiegato malissimo (scusa): era solo una regola generale, non mi riferivo specificatamente al tuo caso!

Sì, mi riferisco al software di programmazione, quello dato con il PICKIT2, non al tuo listato.

Leggi sul manuale come funziona la configurazione del programma, spesso si tratta di un pin con il livello basso/alto sbagliato.

Ciao!

Stefano M. (Italy) WEB: http://www.lemming.it [...] non si vede bene che col cuore. L?essenziale e invisibile agli occhi". (Il Piccolo principe - A. De Saint Exupery)

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required