Bonjour,
Je viens vers vous ça fait 3 jours que je suis bloqué dans la configuration des registres du PIC12F1572.
Tout d'abord voici la doc : http://ww1.microchip.com/downloads/e.../40001723C.pdf
Le problème provient lorsque j'utilise les modules PWM :Code:/******************************************************************************* Nom : modif Thermostat Logiciel : MPLABX & compilateur XC8 Date : 28/11/2014 Auteur : K####### *******************************************************************************/ #include <xc.h> #include <pic12f1572.h> /*************************************************************************** * Define ***************************************************************************/ #define _XTAL_FREQ 4000000 #define Bouton_Droit PORTAbits.RA3 #define Valide PORTAbits.RA4 #define Bouton_Gauche !PORTAbits.RA5 #define Anti_Rebonds() __delay_ms(300) /*#define leds_rouge() LATAbits.LATA0 = 0; LATAbits.LATA1 = 1; LATAbits.LATA2 = 0 #define leds_vert() LATAbits.LATA0 = 0; LATAbits.LATA1 = 0; LATAbits.LATA2 = 1 #define leds_bleu() LATAbits.LATA0 = 1; LATAbits.LATA1 = 0; LATAbits.LATA2 = 0 #define leds_blanc() LATAbits.LATA0 = 1; LATAbits.LATA1 = 1; LATAbits.LATA2 = 1 #define leds_Eteint() LATAbits.LATA0 = 0; LATAbits.LATA1 = 0; LATAbits.LATA2 = 0*/ #define leds_rouge() PWM1DCH = 0x00; PWM1DCL = 0x20; PWM2DCH = 0x00; PWM2DCL = 0x00; PWM3DCH = 0x00; PWM3DCL = 0x00 #define leds_vert() PWM1DCH = 0x00; PWM1DCL = 0x00; PWM2DCH = 0x00; PWM2DCL = 0x00; PWM3DCH = 0x00; PWM3DCL = 0x20 #define leds_bleu() PWM1DCH = 0x00; PWM1DCL = 0x00; PWM2DCH = 0x00; PWM2DCL = 0x20; PWM3DCH = 0x00; PWM3DCL = 0x00 #define leds_blanc() PWM1DCH = 0x00; PWM1DCL = 0x0A; PWM2DCH = 0x00; PWM2DCL = 0x0A; PWM3DCH = 0x00; PWM3DCL = 0x0A #define leds_Eteint() PWM1DCH = 0x00; PWM1DCL = 0x00; PWM2DCH = 0x00; PWM2DCL = 0x00; PWM3DCH = 0x00; PWM3DCL = 0x00 /*************************************************************************** * Configurations fusibles ***************************************************************************/ // CONFIG1 #pragma config FOSC = INTOSC // (INTOSC oscillator; I/O function on CLKIN pin) #pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled) #pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is digital input) #pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled) #pragma config BOREN = OFF // Brown-out Reset Enable (Brown-out Reset disabled) #pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin) // CONFIG2 #pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off) #pragma config PLLEN = OFF // PLL Enable (4x PLL disabled) #pragma config STVREN = OFF // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will not cause a Reset) #pragma config BORV = HI // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.) #pragma config LPBOREN = OFF // Low Power Brown-out Reset enable bit (LPBOR is disabled) #pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming) /******************************************************************************* Name : main Fonction : principale Auteur : K#######.F####### *******************************************************************************/ void main() { /*************************************************************************** * Initialisations des variables ***************************************************************************/ unsigned char menu, i; enum menu{Hors_gel, Eco, Confort, Auto, Heure, Prog, Off}; menu = Heure; /*************************************************************************** * Configurations des registres ***************************************************************************/ OSCCON = 0x6A; //p54, PLL désactivée, FOSC = 4MHz while(!OSCSTATbits.HFIOFR); //Tant que l'oscillateur interne n'est pas démarré INTCONbits.GIE = 0; //p70, interruptions désactivées INTCONbits.PEIE = 0; ANSELA = 0x00; //PORTA utilisé en IO numérique TRISA = 0x30; //p105, RA3/4/5 configurées en entrées WPUA = 0x00; OPTION_REGbits.nWPUEN = 1; //p145, pull-up désactivées ODCONA = 0x00; //p107, sortie PORTA configurée en push-pull SLRCONA = 0x00; //p108, Slew rate au maximum INLVLA = 0x00; //p108, entrées TTL APFCON = 0x00; //p102, PWM1/2 sur les broche RA1 ET RA0 /*************************************************************************** * Configurations des PWMs ***************************************************************************/ PWM1CON = 0xC0; PWM1INTE = 0x00; PWM1INTF = 0x00; PWM1CLKCON = 0x00; PWM1LDCON = 0x01; PWM1OFCON = 0x01; PWM1PHH = 0x00; PWM1PHL = 0x00; PWM1OFH = 0x00; PWM1OFL = 0x00; PWM1PRH = 0x04; PWM1PRL = 0x00; /************************************/ PWM2CON = 0xC0; PWM2INTE = 0x00; PWM2INTF = 0x00; PWM2CLKCON = 0x00; PWM2LDCON = 0x02; PWM2OFCON = 0x02; PWM2PHH = 0x00; PWM2PHL = 0x00; PWM2OFH = 0x00; PWM2OFL = 0x00; PWM2PRH = 0x04; PWM2PRL = 0x00; /************************************/ PWM3CON = 0xC0; PWM3INTE = 0x00; PWM3INTF = 0x00; PWM3CLKCON = 0x00; PWM3LDCON = 0x03; PWM3OFCON = 0x03; PWM3PHH = 0x00; PWM3PHL = 0x00; PWM3OFH = 0x00; PWM3OFL = 0x00; PWM3PRH = 0x04; PWM3PRL = 0x00; /*************************************************************************** * Lorsque le thermostat et la carte sont alimentés pour la première fois ***************************************************************************/ leds_Eteint(); leds_rouge(); while(Valide == 1); Anti_Rebonds(); while(Valide == 0); Anti_Rebonds(); leds_bleu(); while(1); }
Des que j'alimente ma carte, mes leds s'éclaires en rouge, normal. Si j'appui sur le bouton Valide rien ne se passe, normalement les leds devraient s'éclairées bleu.
Des que j'alimente la carte avec le bouton valide appuyé, les leds s'éclaire bleu ou parfois rouge et bleu, normalement les leds devraient rester éclairées rouge puisque je suis appuyé sur le bouton.
Si les modules PWM ne sont pas utilisés tout fonctionne, mes leds sont donc pilotées en tout ou rien, or moi je veut qu'elles soit pilotées en PWM.
Donc mon bouton Valide ne fonctionne plus lorsque j'utilise les PWMs, impossible de trouver d'ou viens le problème dans le programme.
Merci de votre aide
-----