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:
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).--------------------------------------------------------------------------------------------------
#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-----------------------------------------------------------------------------------------------
Merci d'avance.
-----