Pic 16F84 qui se deprogramme
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Pic 16F84 qui se deprogramme



  1. #1
    vinowan

    Pic 16F84 qui se deprogramme


    ------

    bonjour,

    j'utilise un pic84A afin de stokker des valeurs en eedata, ceci afin de ne pas les perdre apres une un power off.

    j'ai une liaison de donnée avec une autre electronique sur 4 fils pour y transmettre ces "valeur" à la cpu centrale (a l'alumage de la machine).

    j'ai aussi une petite interface utilisateur composée de 3 bouton poussoir commun à la masse et 3 afficheur 7 segment piloter via un mm5450.

    je vous joint la schématique en annexe.

    le probleme :

    de temps en temps le pic se deprogramme, il n'est pas foutu car si on le reprogramme, c'est repartit. et pas moyen de comprendre pq?

    j'ai d'abord pensé à la liaison semi serielle (4 fils), donc j'y ai ajouter un uln2803 pour faire office de buffer, le probleme se presente beaucoup moins souvent avec cette modification mais se presente encore tout de même.

    avez vous une idée sur la source de ce probleme?

    merci.

    -----

  2. #2
    vinowan

    Re : Pic 16F84 qui se deprogramme

    sorry j'avais oublier la piece jointe
    Images attachées Images attachées

  3. #3
    maximilien

    Re : Pic 16F84 qui se deprogramme

    Normalement, le PIC reconnait la phase de programmation grâce a la tension de 13V sur sa broche 4 (reset).

    Peut de change donc...

    As tu essayé avec un autre PIC???

  4. #4
    invite7a49d0d5

    Cool Re : Pic 16F84 qui se deprogramme

    bonsoir,

    en effet, c'est vraiment trés bizarre ;O]
    un pic qui se dé-programme...
    ou se re-programme...
    pour quoi faire ;O]

    et si la broche 4 n'est vraiment jamais "portée" à plus de 12V...

    vede
    ;O]

  5. A voir en vidéo sur Futura
  6. #5
    gedonet

    Re : Pic 16F84 qui se deprogramme

    Bonjour
    Un pic 16F84, ne peut pas se deprogrammer comme cela, même avec du 12V par inadvertance sur MCLR, il faut un ordre et un timming precis entre Vcc et Vpp pour entrer en mode programmation ensuite il faut aussi envoyer des suites de bit particulieres sur RB6, RB7 pour ecrir, lire ou effacer la memoire flash, hors de porté du hasard.
    Par contre tu parles de données en EEprom, il faudrait peut être soupçonner ta routine de lecture/ecriture en EEprom qui ne ferait pas réellement ce que tu veux. L'ecriture en EEprom mal faite est le moyen le plus rapide de "flinguer" un pic.
    Gilles

  7. #6
    RISC

    Re : Pic 16F84 qui se deprogramme

    Salut,

    Tout d'abord peux-tu préciser exactement le modèle que tu utilises : PIC16F84 ou PIC16F84A (tu mentionnes les 2).
    Ce ne sont PAS les même produits.

    Ensuite tu parles d'E2PROM, je suspecte que ton programme ou ta détection de la perte de tension ne sont pas au point...

    As-tu une détection de la perte d'alimentation ? (exemple : si tu es en train d'écrire et que l'alimentation disparait, les valeurs dans l'E2PROM seront très probablement erronnées.

    Fais-tu un checksum de ton E2PROM après des modifications ? (c'est parfois nécessaires dans les systèmes ou il y a des parasites)

    Comment as-tu programmé les bits de configuration ?

    a+

    PS : la seule façon d'être sur que la mémoire programme se "déprogramme" est de relire cette mémoire (il suffit de désactiver la protection). Cela dit la probabilité que cela arrive par accident est proche de 0 vu la complexité de la séquence nécessaire (voir le document Programming Specification)
    Dernière modification par RISC ; 17/10/2009 à 10h23. Motif: correction

  8. #7
    vinowan

    Re : Pic 16F84 qui se deprogramme

    Merci pour votre aide,

    c'est un probleme qui provient d'un developpement d'une autre personne, ce n'est pas mon programme, mais c'est moi qui en herite, cool.

    je m'était fixer sur le hardware mais je vais rechercher le programme qui est en assembleur (recool).

    C'est un pic 16F84 et en annalisant le probleme de plus pres coté soft, 90 % des cas ce sont les valeur en eeprom qui se mettent à 0 sans raison apparente ("apparente car je sens que ce code sens le roussi") et 10% il deconne, semble faire des jump ou il ne le faut pas.
    et la à la relecture erreur, le code ne crorrespond plus.

    je met en piece jointe le code, c'est tout le programme mais pas tres long, j'ai laisser toute les procedure mais j'ai mis en rouge celle qui doivent je pense être en cause.

    du coté du detect power failled, comment faire? juste en soft c'est possible ou il faut ajouter de l'hardware.
    de plus qu'est ce qui peux se produire si un parasite (et ca c'est sur il y en a) se presente quand on lit ou ecrit en l'eeprom.

    un collegue ma faite remarque que si un parasite se pointe ("facon de parler) , le pic fait reagir les aficheur qu'il gere de facon erronée.

    merci pour votre aide.
    et toute vos idées sont tres bonne a prendre.

    voici le code:
    Code:
    maping de l'eeprom en reset
    ;	00 01 02 03 04 05 06 07  08 09 0A 0B 0C 0D 0E 0F 
    ;   00	00 00 03 00 00 03 00 00  07 00 02 04 04 04 01 09 
    ;   10	FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF 
    ;   20	00 00 03 00 00 03 00 00  07 00 02 04 04 04 01 09 
    ;   30	FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF 
    
    
    ;PortB: 
    ;RB0	CS    MM5450	Out
    ;RB1	Data  MM5450	Out
    ;RB2	Clock MM5450	Out
    ;RB3	Switch START	In
    ;RB4	Switch A+	In
    ;RB5	Switch B	In
    ;RB6	Switch A-	In
    
    ;PortA: connection sérielle entrée et sortie avec carte CPU 
    ;RA0	Data   CPU	Out	
    ;RA1	On/Off CPU	Out
    ;RA2	Clock  CPU	In
    ;RA3	CS     CPU	In
    ;RA4	Switch RESET	In
    
    	LIST		P=16F84
    	#include	p16F84.inc	
    
    _RESVEC EQU     0000H           ;16F84 start address
    
    ;registers used by this code
    
    	variable	TempA=0011	; Set Default 																						
    	variable	TempB=0010	; Set Default 	
    	variable	DispA=0012	; Set Default 	
    	variable	DispB=0013	; Set Default 	
    	variable	DispC=0014	; Set Default 	
    	variable	Disp=00015	; Set Default 	
    	variable	PortA1=00016	; Set Default	
    	variable	PortA2=00017	; Set Default 	
    	variable	PortB1=00018	; Set Default
    	variable	PortB2=00019	; Set Default
    	variable	Compt1=0001A	; Set Default
    	variable	Compt2=0001B	; Set Default
    	variable	Temp1=0001C	; Set Default
    	variable	Flag1=0001D	; Set Default
    	variable	TempC=001E	; Set Default
    	variable	PortC=0001F	; Set Default
    	variable	Buffer=00020	; Set Default
    	variable	Tempo1=00021	; Set Default
    	variable	Tempo2=00022	; Set Default
    	variable	Tempo3=00023	; Set Default
    
    ;*** Reset Vector ********************************************************
    
    	ORG     _RESVEC         ;
    RESVEC  			;
    	GOTO    INIT            ;
    
    ;*************************************************************************
    
    ;*************************************************************************
    ;** INIT
    ;** Hardware reset entry point
    ;**
    ;*************************************************************************
    INIT    ;Power-on entry
    
    ;*************************************************************************
    ;** RESET
    ;** software reset entry point
    ;**
    ;*************************************************************************
    RESET   ;Soft reset
    
    	CALL	Res7		;Reset démarrage du PIC
    	CALL	Tempor2
    
    
    
    Start
    ;	CALL	Clr0		;modif centvin pour lpk
    	CLRF	Flag1
    	CALL	SwtchS		;Test allumage display
    	CALL	Phase2		;Envoit vers l'afficheur display eteint
    	CALL	CPU_L		;Test demande envoit de la cpu
    	CALL	Tempor		;Temporisation
    	BCF	PORTA,1		;On/Off <= 0
    	BTFSS	Flag1,0
    	GOTO	Start
    
    Debut0	CLRF	Compt1
    	CLRF	Compt2	
    	BSF	PORTA,1	;On/Off <= 1
    
    Debut	CLRF	Flag1
    	CALL	Swtch		;Gestion switch
    	BTFSC	Flag1,0		;Test Start
    	GOTO	Start1
    	CALL	Memor		;Gestion memoire
    	CALL	DisplA		;Gestion codage display
    	CALL	Phase1		;Envoit vers l'afficheur
    	CALL	CPU_R
    	CALL	Tempor		;Temporisation
    	GOTO	Debut	
    
    Start1	CALL	Tempor2
    
    	CALL	Clr0		;modif centvin pour lpk
    
    	GOTO	Start
    ;*******************************************************
    ;       Librairie des procédures
    ;*******************************************************
    
    ;**** Reset et configuration des ports **** Ok
    
    Res7	BCF	INTCON,GIE	;Masquage interruption
    	CLRWDT                  ;Clear watchdog timer
    	CLRF	STATUS
        
    	CLRF	PORTB		;Initialisation PORTB
    	BSF	STATUS,RP0	;Bank bit1
    	MOVLW   0xF8
    	MOVWF   TRISB		;In/Out
    	BCF	STATUS,RP0
    
    	CLRF	PORTA		;Initialisation PortA
    	BSF	STATUS,RP0	;Bank bit1
    	MOVLW   0x1C
    	MOVWF   TRISA		;In/Out
    	BCF	STATUS,RP0
    
    	MOVLW	0x01		;Cs=1,data=0,clock=0
    	MOVWF	PORTB
    
    	BSF	PORTA,0
    
    	RETURN
    
    
    ;**** Temporisation ****
    Tempor	CLRWDT                  ;Clear watchdog timer
    	MOVLW	0x8F
    	MOVWF	TempA
    Tempor1	NOP
    	NOP
    	NOP
    	NOP
    	DECFSZ	TempA,1
    	GOTO	Tempor1
    	RETURN
    
    ;**** Temporisation ****
    Tempor2	CALL	Phase3
    
    	MOVLW	0x5B
    	MOVWF	Tempo2
    
    Tempor4	CLRWDT                  ;Clear watchdog timer
    	MOVLW	0xFF
    	MOVWF	Tempo3
    
    Tempor5	CALL	CPU_L		;Test demande envoit de la cpu
    	CALL	Tempor		;Temporisation
    	BCF	PORTA,1
    	NOP
    	NOP
    	NOP
    	NOP
    	NOP
    
    	DECFSZ	Tempo3,1
    	GOTO	Tempor5
    
    	DECFSZ	Tempo2,1
    	GOTO	Tempor4
    
    	CALL	Phase2
    
    	RETURN
    
    
    
    ;**** Lecture des switchs ****
    Swtch	MOVF	PortC,0
    	MOVWF	PortB1
    	
    	MOVF	PORTB,0
    	MOVWF	PortB2
    	MOVWF	PortC
    	MOVF	PortB1,0
    	XORWF	PortB2,1
    	ANDWF	PortB2,1
    
    	BTFSS	PortB2,3	;Start
    	GOTO	Swtch1
    	BSF	Flag1,0
    
    SwtchA	CLRF	TempB
    	MOVLW	0x1F		;Fin BitG
    	MOVWF	TempC
    
    Swtch1	BTFSS	PortB2,6	;A-
    	GOTO	Swtch2
    	INCF	Compt1,1
    	BSF	Flag1,2
    
    Swtch2	BTFSS	PortB2,4	;A+
    	GOTO	Swtch3
    	DECF	Compt1,1
    	BSF	Flag1,2
    
    Swtch3	BTFSS	PortB2,5	;B
    	GOTO	Swtch4
    	BSF	Flag1,3
    	INCF	Compt2,1
    
    Swtch4	MOVF	PORTA,0
    	MOVWF	PortA1
    	BTFSC	PortA1,4	;Reset
    	GOTO	Swtch6
    	DECFSZ	TempC,1
    	GOTO	Swtch6
    	BSF	Flag1,1
    	MOVLW	0x1F		;Fin BitG
    	MOVWF	TempC
    
    Swtch6	RETURN
    
    ;**** Lecture du switchs START ****
    SwtchS	MOVF	PORTB,0
    	MOVWF	PortB2
    	BTFSC	PortB2,3	;Start
    	GOTO	SwtchF1
    	DECFSZ	TempB,1
    	GOTO	SwtchF
    	DECFSZ	TempC,1
    	GOTO	SwtchF
    	BSF	Flag1,0
    
    SwtchF1	CLRF	TempB
    	MOVLW	08
    	MOVWF	TempC
    SwtchF	RETURN
    
    ;**** Gestion des display ****
    DisplA	MOVF	Compt2,0	;Gestion display Choix
    	MOVWF	DispC
    
    	CLRF	DispB		;Gestion display catégorie
    	INCF	DispB,1
    	MOVF	Compt1,0
    	MOVWF	Temp1
    	MOVLW	0A
    Displa1	SUBWF	Temp1,1
    	BTFSS	STATUS,C
    	GOTO	Displa2
    	INCF	DispB,1
    	MOVLW	0A
    	GOTO	Displa1
    	
    Displa2	BTFSS	STATUS,Z
    	DECF	DispB,1
    	MOVF	Temp1,0
    	ADDLW	0A
    	MOVWF	DispA
    
    	RETURN
    
    ;**** Codage 7 segments ****
    DA1	DECFSZ	Disp,1
    	GOTO	DA2
    	CALL	Disp1
    	GOTO	DB0
    
    DA2	DECFSZ	Disp,1
    	GOTO	DA3
    	CALL	Disp2
    	GOTO	DB0
    
    DA3	DECFSZ	Disp,1
    	GOTO	DA4
    	CALL	Disp3
    	GOTO	DB0
    
    DA4	DECFSZ	Disp,1
    	GOTO	DA5
    	CALL	Disp4
    	GOTO	DB0
    
    DA5	DECFSZ	Disp,1
    	GOTO	DA6
    	CALL	Disp5
    	GOTO	DB0
    
    DA6	DECFSZ	Disp,1
    	GOTO	DA7
    	CALL	Disp6
    	GOTO	DB0
    
    DA7	DECFSZ	Disp,1
    	GOTO	DA8
    	CALL	Disp7
    	GOTO	DB0
    
    DA8	DECFSZ	Disp,1
    	GOTO	DA9
    	CALL	Disp8
    	GOTO	DB0
    
    DA9	DECFSZ	Disp,1
    	GOTO	DA10
    	CALL	Disp9
    	GOTO	DB0
    
    DA10	CALL	Disp0
    
    DB0	RETURN
    
    ;**** Gestion de la memoire et des compteurs ****
    Memor	BTFSS	Flag1,1		;Test reset
    	GOTO	Memor2
    	GOTO	Bcl0		;Memor1
    	MOVLW	0FFh
    	MOVF	TempB,0
    Memor1	BTFSC	PortA2,4
    	GOTO	Memor2
    	DECFSZ	TempB,1
    	GOTO	Memor2
    Bcl0	MOVLW	01Fh
    	MOVWF	Compt1
    Bcl	MOVF	Compt1,0
    	ADDLW	020h
    	MOVWF	EEADR	
    	CALL	EEPROM2
    	CALL	EEPROM1
    Bcl1	BSF	STATUS,RP0
    	BTFSS	EECON1,EEIF
    	GOTO	Bcl1
    	BCF	EECON1,EEIF
    	BCF	STATUS,RP0
    	DECFSZ	Compt1,1
    	GOTO	Bcl
    Bcl2	CLRF	Compt1
    	CLRF	Compt2
    
    Memor2	BTFSS	Flag1,2		;Test A+ et A-
    	GOTO	Memor5
    	BCF	Flag1,2		;Reset flag
    ;Adaptation compt1
    	BTFSS	Compt1,7	;Test ajustement 00 - 1 = 15
    	GOTO	Memor3
    	MOVLW	00Fh
    	MOVWF	Compt1
    
    Memor3	BTFSS	Compt1,4	;Test ajustement 15 + 1 = 00
    	GOTO	Memor4
    	CLRF	Compt1
    
    Memor4	BCF	STATUS,RP0	;Lecture de la valeur stockee en memoire
    	MOVF	Compt1,0
    	MOVWF	EEADR
    	CALL	EEPROM2
    	GOTO	Memor7
    
    Memor5	BTFSS	Flag1,3		;Test B
    	GOTO	Memor7
    	BCF	Flag1,3		;Reset flag
    ;Adaptation compt2
    	BTFSS	Compt2,3	;Test ajustement 5 + 1		DVM (compt2,3 au lieu de Compt2,2 pour 9+1 au lieur de 4+1)
    	GOTO	Memor6
    	BTFSS	Compt2,1					;DVM (compt2,1 au lieu de Compt2,0 pour 9+1 au lieur de 4+1)
    	GOTO	Memor6
    	CLRF	Compt2
    
    Memor6	CALL	EEPROM1
    
    Memor7	RETURN
    
    ;**** Procedure d'ecriture en EEPROM ****
    EEPROM1	MOVF	Compt1,0
    	MOVWF	EEADR
    	MOVF	Compt2,0
    	MOVWF	EEDATA
    	BSF	STATUS,RP0
    	BCF	INTCON,GIE
    	BSF	EECON1,WREN
    	MOVLW	55h
    	MOVWF	EECON2
    	MOVLW	0AAh
    	MOVWF	EECON2
    	BSF	EECON1,WR
    	BSF	INTCON,GIE
    	BCF	STATUS,RP0
    	RETURN
    
    ;**** Procedure de lecture en EEPROM ****
    EEPROM2	BSF	STATUS,RP0
    	BSF	EECON1,RD
    	BCF	STATUS,RP0
    	MOVF	EEDATA,0
    	MOVWF	Compt2
    	RETURN
    
    ;**** Procedure d'ecriture en EEPROM 0:00 ****
    Clr0	MOVLW	0x00
    	MOVWF	EEADR
    	MOVLW	0x00			;centvin test
    	MOVWF	EEDATA
    	BSF	STATUS,RP0
    	BCF	INTCON,GIE
    	BSF	EECON1,WREN
    	MOVLW	55h
    	MOVWF	EECON2
    	MOVLW	0AAh
    	MOVWF	EECON2
    	BSF	EECON1,WR
    	BSF	INTCON,GIE
    	BCF	STATUS,RP0
    	RETURN
    ;**** Procedure lecture CPU *****
    CPU_L	BTFSC	PORTA,3		;CS => 0
    	GOTO	CPU_LF
    	MOVLW	10h
    	MOVWF	TempB
    	CLRF	Compt1
    
    CPUL0	MOVF	Compt1,0	;Chargement adresse à lire
    	MOVWF	EEADR
    	CALL	EEPROM2		;Lecture EEPROM
    	SWAPF	Compt2,0
    
    	IORWF	Compt1,0
    	MOVWF	Buffer	
    	BCF	PORTA,0		;Data <= 0
    CPUL1	BTFSS	PORTA,2
    	GOTO	CPUL1
    	CALL	CPU_PL
    	INCF	Compt1,1
    CPUL2	BTFSS	PORTA,3
    	GOTO	CPUL2
    	BSF	PORTA,0
    
    
    	DECFSZ	TempB,1
    	GOTO	CPUL0	
    
    CPU_LF	RETURN
    
    ;**** Procedure lecture CPU *****
    CPU_PL	MOVLW	09h
    	MOVWF	TempA
    CPU_PL0	BTFSC	PORTA,2		;Ck => 0
    	GOTO	CPU_PL0
    CPU_PL1	BTFSS	PORTA,2		;Ck => 1
    	GOTO	CPU_PL1
    	BCF	PORTA,0		;Data <= 0
    	BTFSC	Buffer,7
    	BSF	PORTA,0		;Data <= 1
    	RLF	Buffer,1
    	DECFSZ	TempA,1
    	GOTO	CPU_PL0
    	RETURN
    
    ;**** Procedure lecture CPU *****
    CPU_R	BTFSC	PORTA,3		;CS => 0
    	GOTO	CPU_R
    
    CPUR0	SWAPF	Compt2,0
    	IORWF	Compt1,0
    	MOVWF	Buffer	
    	BCF	PORTA,0		;Data <= 0
    CPUR1	BTFSS	PORTA,2
    	GOTO	CPUR1
    	CALL	CPU_PL
    	BSF	PORTA,0
    
    CPU_RF	RETURN
    
    	END		;C'est la fin

  9. #8
    gedonet

    Re : Pic 16F84 qui se deprogramme

    Bonjour
    Ta routine d'ecriture en EEprom ne semble pas marcher, utilises la macro fournit par Bigonoff dans ses fichiers maquettes du cours part1, c'est plus simple.
    Gilles

  10. #9
    vinowan

    Re : Pic 16F84 qui se deprogramme

    merci pour l'info, je vais aller jeter un coup d'oeil

    a bientot

Discussions similaires

  1. Programmateur de PIC 16F84 qui fonctionne sous linux
    Par invite11597533 dans le forum Électronique
    Réponses: 2
    Dernier message: 23/05/2008, 01h27
  2. pic 16F84
    Par inviteaa98cb7b dans le forum TPE / TIPE et autres travaux
    Réponses: 2
    Dernier message: 03/04/2007, 15h48
  3. Pic 16F84
    Par invite10bd8950 dans le forum Électronique
    Réponses: 10
    Dernier message: 14/05/2006, 11h21
  4. Pic 16f84
    Par invite59c54dd9 dans le forum Électronique
    Réponses: 3
    Dernier message: 04/03/2006, 15h36
Découvrez nos comparatifs produits sur l'informatique et les technologies.