Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

probleme programmation pic16f628a



  1. #1
    mecatro69

    probleme programmation pic16f628a


    ------

    Bonjour,

    J'ai un petit problème sur le projet sur lequel je travaille et j'espère être claire en vous l'exposant.
    J'aimerais pouvoir allumer 4 leds de couleur différentes et pouvoir choisir leurs intensités sur une tablette tactile via le pic 16f628a.
    Si on appuie sur le bouton rouge cela allume la led rouge et si on appuie de nouveau dessus cela l’éteint (de même pour les autres couleurs). Les leds pouvant être allumées en même temps.

    La tablette envoie en fait une lettre via une liaison série rs232. Et le pic agit en fonction de la lettre reçue.
    Mon soucis est que pour certaines leds le programme ne fonctionne pas très bien et j'ai beau chercher je ne comprends pas d’où cela peut venir.
    (si j'allume la rouge tout se passe bien, j'allume le verte ensuite c'est encore nickel, mais si j'allume la bleue cela éteint la verte... ceci est un exemple des problèmes qui peuvent survenir).
    Je n'ai pas de debugger donc je ne sais pas comment se comporte mon programme en réalité et j'aimerais donc savoir si quelqu'un avait une idée d’où ce problème pouvait venir.

    Voici mon code:
    --------------------------------------------------------------------------------------------------
    #define __16f628a
    #include <stdio.h>
    #include <htc.h>
    #include "tsmtypes.h"


    ///////////////////////config PIC
    //__CONFIG( INTRC_OSC_NOCLKOUT & WDTE_OFF& PWRTE_OFF & BOREN_OFF &
    //LVP_OFF & MCLRE_OFF & CPD_OFF & CP_OFF);
    __CONFIG(0xFF38);



    void main(void)
    {

    // Definitions des variables
    char donnee;
    int eteinte, seuil1, seuil2, seuil3;
    int etat_r=0, etat_b=0, etat_e=0, etat_v=0;




    // Initialisation des seuils de la PWM
    eteinte=0;
    seuil1=25;
    seuil2=100;
    seuil3=255;

    // Initialisation du port A
    TRISA=0b00000000; // en sortie
    PORTA=0b00000000; // sortie = 0

    // Initialisation de la fonction UART
    TRISB=0b00000110;



    // Initialisation de la communication USART
    SPBRG=26 ;
    BRGH=1; // BRGH hight speed asynchronous
    SYNC=0; // SYNC asynchro mode
    CREN=1; //CREN continuous receive
    TXEN=1; // 1 Enable 0 disable transmission mode
    CSRC=0;
    SPEN=1; // SPEN activation du port serie
    TX9=0;




    //Initialisation de la PWM
    PR2=199; // Periode 199 ==> 3,2ms
    CCP1CON=0b00101100; // PWM mode
    CCPR1L=0b011001; // Duty cycle 410 ==> 1,6ms registre a changé si on veut...
    T2CON=0b00000111; // Timer2 on Prescaler value =16

    /////////////////
    CCPR1L=seuil3;
    while (1) // Boucle principale

    {


    while(!RCIF); // Test si buffer de reception plein

    donnee=RCREG; // stock le buffer dans variable donnee (char)

    if(donnee=='a') // on gère la couleur rouge
    {
    if (etat_r==0) //on l'allume si elle était éteinte
    { PORTA = PORTA | 0b10000000 ;
    etat_r=1;
    }
    else if(etat_r==1) //on l'éteint si elle était allumée
    { PORTA = PORTA & 0b01111111;
    etat_r=0;
    }
    }
    if(donnee=='b') // on gère la couleur blanche
    {
    if (etat_b==0)
    { PORTA = PORTA | 0b00000001;
    etat_b=1;
    }
    else if(etat_b==1)
    { PORTA = PORTA & 0b11111110;
    etat_b=0;
    }
    }
    if(donnee=='c') // on gère la couleur bleue
    {
    if (etat_e==0)
    { PORTA = PORTA | 0b00000010;
    etat_e=1;
    }
    else if(etat_e==1)
    {
    PORTA = PORTA & 0b11111101;
    etat_e=0;
    }
    }
    if(donnee=='d') // on gère la couleur verte
    {
    if (etat_v==0)
    { PORTA = PORTA | 0b00001000;
    etat_v=1;
    }
    else if(etat_v==1)
    { PORTA = PORTA & 0b11110111;
    etat_v=0;
    }


    l-----------------------------------------------------------------------------------------------
    la led rouge se trouve sur RA7, la blanche sur RA0, la bleue sur RA1 et la verte sur RA3, l'intensité est réglée par une PWM mais ici je ne gère que les couleurs pour le moment.(je vous envoie le schéma de la carte).

    Merci d'avance.

    -----
    Images attachées Images attachées
    Dernière modification par mecatro69 ; 08/06/2012 à 10h34.

  2. Publicité
  3. #2
    Franck-026

    Re : probleme programmation pic16f628a

    es tu sur de la bonne vitesse de ton TX RX??? la tolerance entre RS232 du PC et frequence TX RX du PIC peut etre trop importante. On y remedie en choisissant une frequence mieux adaptee sur le quartz du PIC...

  4. #3
    mecatro69

    Re : probleme programmation pic16f628a

    C'est bon j'ai résolu le problème!il s'agissait de mettre simplement le registre CMCON =07; pour inhiber les comparateurs analogiques!

    Merci pour la rapidité de la réponse en tout cas

  5. #4
    Franck-026

    Re : probleme programmation pic16f628a

    ah oui par defaut on est en mode comparateurs, d'ou l'interet de debuter les projets avec une maquette vierge pre-configurée dispo sur le site de Mr Bigonoff. Tout y est explicité et commenté.
    Oups je parlais pour un programme en assembleur pas en C desolé...

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    RISC

    Re : probleme programmation pic16f628a

    Salut,

    Si tu veux utiliser l'UART de façon fiable IL FAUT ABSOLUMENT mettre un quartz externe !
    L'oscillateur interne n'est pas assez précis...

    a+
    Ma marotte ? les microcontrôleurs ;=)

Discussions similaires

  1. [PROJET] Tachymètre 1voie, PIC16F628A
    Par amoniaque dans le forum Électronique
    Réponses: 1
    Dernier message: 01/05/2015, 16h46
  2. pic16f628a, CC5x, entier et flottant
    Par mdiabolo dans le forum Électronique
    Réponses: 0
    Dernier message: 23/02/2011, 00h31
  3. commutation portB (pic16F628A) in/out
    Par vinowan dans le forum Électronique
    Réponses: 6
    Dernier message: 07/02/2010, 13h26
  4. plusieur interupt sur pic16F628A
    Par vinowan dans le forum Électronique
    Réponses: 3
    Dernier message: 03/02/2010, 09h11
  5. pic16f628A, hitech et les timers...
    Par MofK dans le forum Électronique
    Réponses: 19
    Dernier message: 29/12/2008, 12h38
Découvrez nos comparatifs produits sur l'informatique et les technologies.