[Programmation] PIC12F: La programmation ne fonctionne qu'une fois !
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

PIC12F: La programmation ne fonctionne qu'une fois !



  1. #1
    bonhommr

    Question PIC12F: La programmation ne fonctionne qu'une fois !


    ------

    Bonjour,

    je programme un petit PIC12F615 en C avec l'outil MPLAB X IDE et un PicKit 3.
    J'arrive à programmer le produit une fois sans problème.
    Quand je change le code et que j'essaie de le reprogrammer, j'obtiens l'erreur suivante:
    Code:
    *****************************************************
    
    Connecting to MPLAB PICkit 3...
    
    Currently loaded firmware on PICkit 3
    Firmware Suite Version.....01.39.15
    Firmware type..............Midrange
    
    Target voltage detected
    Target device PIC12F617 found.
    Device ID Revision = 0
    
    The following memory area(s) will be programmed:
    program memory: start address = 0x0, end address = 0x53
    configuration memory
    
    Device Erased...
    
    Programming...
    program memory
    Address: 10 Expected Value: 1f7 Received Value: 1f5
    Failed to program device
    Si je déssoude le microcontrolleur et que je ressoude un nouveau, pas de soucis, il peut être de nouveau programmé.
    Mon code est pourtant très simple, est-ce que j'ai raté quelquechose?

    Code:
    /******************************************************************************/
    /* Files to Include                                                           */
    /******************************************************************************/
    #if defined(__XC)
        #include <xc.h>         /* XC8 General Include File */
    #elif defined(HI_TECH_C)
        #include <htc.h>        /* HiTech General Include File */
    #endif
    #include <stdint.h>        /* For uint8_t definition */
    #include <stdbool.h>       /* For true/false definition */
    
    // === DEFINES =================================================================================== //
    #define _XTAL_FREQ  8000000
    // CONFIG
    #pragma config FOSC = INTOSCIO  // Oscillator Selection bits (INTOSCIO oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN)
    #pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register)
    #pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
    #pragma config MCLRE = ON      // MCLR Pin Function Select bit
    #pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled)
    #pragma config IOSCFS = 8MHZ    // Internal Oscillator Frequency Select (8 MHz)
    #pragma config BOREN = ON       // Brown-out Reset Selection bits (BOR enabled)
    /******************************************************************************/
    /* User Global Variable Declaration                                           */
    /******************************************************************************/
    int on_off = 0;
    // === PROTOTYPES ================================================================================ //
    void interrupt interrupt_isr(void);
    /******************************************************************************/
    /* Main Program                                                               */
    /******************************************************************************/
    void main(void)
    {
        TRISIO = 0b00001100; // 0: Output; 1: Input
        ANSEL = 0x00; // Only digital function
        GPIObits.GP0 = 0;
        GPIObits.GP1 = 0;
        GPIObits.GP4 = 0;
        GPIObits.GP5 = 0;
        // Wait few ms during power stabilisation
         __delay_ms(10);
        OPTION_REGbits.INTEDG = 1;//Interrupt on GP2 rising edge
        INTCONbits.INTE = 1;
        INTCONbits.GIE = 1;
        while(1)
        {
            /* TODO <INSERT USER APPLICATION CODE HERE> */
        }
    }
    
    void interrupt interrupt_isr(void)
    {
        // For HW debug
        GPIObits.GP5=1;
        __delay_us(2);
        GPIObits.GP5=0;
        // Push button
        if(INTCONbits.INTF){
            if(on_off==0){ // On allume le buzzer
                GPIObits.GP1 = 1;
                __delay_us(5);
                GPIObits.GP4= 1;
                on_off = 1;
            }else{
                GPIObits.GP1 = 0;
                GPIObits.GP4 = 0;
                on_off = 0;
            }        
            INTCONbits.INTF = 0;// Flag must be cleared by SW
        }
    }
    Merci

    -----

  2. #2
    terriblement

    Re : PIC12F: La programmation ne fonctionne qu'une fois !

    Salut,

    Fais voir le schéma associé au microcontroleur ?

    Une fois le micro dessoudé, arrives-tu à le programmer (sans le relier au circuit) ?
    Dernière modification par terriblement ; 28/01/2016 à 09h35.

  3. #3
    bonhommr

    Re : PIC12F: La programmation ne fonctionne qu'une fois !

    Bonjour,
    ci-dessous le schéma de mon MCU et du connecteur.
    J'ai juste une batterie 3V pour alimenter mon produit.
    J'ai également essayé d'utiliser le mode avec alimentation via le Pickit mais sans succès.

    schema_connecteur.jpg
    schema_MCU.jpg

    J'ai aussi ajouté une résistance de Pull-up de 10k entre le MCLR et l'alimentation.
    RIen ne change, ça programme toujours une fois mais pas deux.

    Difficile de faire les connections pour le micro une fois déssoudé.
    Par contre, j'ai supprimer toutes les connexions avec le reste du ciruit, utilisé l'alimentation du PicKit mais le problème reste le même.

    Merci

  4. #4
    Aurélien

    Re : PIC12F: La programmation ne fonctionne qu'une fois !

    Regarde la datasheet du PIC, dans la section des charac electriques "Program Flash memory", ils indiquent une tension mini de 4.5V pour permettre de faire un erase du composant. Ca n'est pas simple à contourner, il faut alimenter le PIC en 5V pdt la programmation (cette tension peut etre fournie par le programmateur), mais du coup vérifie que le reste de ta carte peut supporter cette tension.
    Je me suis deja fait avoir avec ce genre de connerie...

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

    Re : PIC12F: La programmation ne fonctionne qu'une fois !

    Salut,
    Si tu fonctionnes sous 3V il vaudrait mieux utiliser un PIC plus récent qui peut être programmé et effacé sous 3V comme le PIC12(L)F1840/1822 ou PIC10(L)F322
    a+

  7. #6
    bonhommr

    [RESOLU] PIC12F: La programmation ne fonctionne qu'une fois !

    Merci beaucoup c'était effectivement le soucis.
    La programmation et la reprogrammation fonctionnent.

    Merci pour votre aide !

Discussions similaires

  1. [Blanc] Urgent Table Induction qui ne fonctionne qu'une fois Sur 5
    Par invite1d12a054 dans le forum Dépannage
    Réponses: 0
    Dernier message: 14/11/2012, 17h58
  2. ne fonctionne qu'une fois chaude
    Par inviteed0090a4 dans le forum Électronique
    Réponses: 3
    Dernier message: 05/10/2009, 17h14
  3. 18F452 reception donnée série qui ne fonctionne qu'une seule fois
    Par invite4828afd1 dans le forum Électronique
    Réponses: 3
    Dernier message: 10/03/2009, 17h26
Découvrez nos comparatifs produits sur l'informatique et les technologies.