PIC: Controle de LED RGB com PIC16F628A
Neste tutorial será mostrado uma maneira simples de controlar um LED RGB com o PIC16F628A sem utilizar o canal PWM.
O Led RGB é um LED que reproduz três cores: vermelho, verde e azul. Ele possui 4 terminais, um para cada cor e o GND.

É possível acender cada uma das cores com diferentes intensidades, resultando em cores diferentes das primárias. Como o PIC possui apenas um canal PWM, utilizaremos a interrupção do TIMER1 e três portas do PIC, emulando um canal PWM.
Para cada interrupção gerada, uma variavel (i) é incrementada e comparada com as variáveis (R, G, B), se o valor de (i) é menor, a porta terá nível lógico 1, caso for maior a porta terá nível lógico 0.
No Circuito coloquei apenas 3 botões para incrementar os valores das cores.
O timer1 foi configurado para disparar a cada 100us, com um clock de 8Mhz.
CÓDIGO
MikroC PRO PIC
/*
   Controlando um LED RGB com o PIC16F628A
   
   Autor: Tiago Henrique
*/
sbit Led_R at PORTB.B5;
sbit Led_G at PORTB.B6;
sbit Led_B at PORTB.B7;
typedef struct
{
  char R;
  char G;
  char B;
}Colors;
Colors RGB = { 127, 127, 250 };
char i = 0;
void Interrupt()
{
  if ( TMR1IF_bit )
  {
    if( i <= RGB.R )
       LED_R = 1;
    else
       LED_R = 0;
       
    if( i <= RGB.G )
       LED_G = 1;
    else
       LED_G = 0;
       
    if( i <= RGB.B )
       LED_B = 1;
    else
       LED_B = 0;
    i++;
    
    TMR1IF_bit = 0;
    TMR1H = 0xff;
    TMR1L = 0x37;
   
   }
}
void InitTimer1()
{
  T1CON = 0x01;
  TMR1IF_bit = 0;
  TMR1H = 0xff;
  TMR1L = 0x37;
  TMR1IE_bit = 1;
  INTCON = 0xC0;
}
char flag = 0;
void main()
{
   InitTimer1();
   TRISB = 0x0F;
   while(1)
   {
      if( PORTB.B0 ) flag.B0 = 1;
      if( PORTB.B1 ) flag.B1 = 1;
      if( PORTB.B2 ) flag.B2 = 1;
      if( !PORTB.B0 && flag.B0 )
      {
        RGB.R += 2;
        flag.B0 = 0;
      }
      
      if( !PORTB.B1 && flag.B1 )
      {
        RGB.G += 2;
        flag.B1 = 0;
      }
      
      if( !PORTB.B2 && flag.B2 )
      {
        RGB.B += 2;
        flag.B2 = 0;
      }
      
   }
}


Qual compilador C você utiliza para programar os PICs ?
ResponderExcluirMikroC PRO PIC
ExcluirCCS.
ExcluirVocê teria um arquivo em .HEX para esse efeito, não teria precisão para 17 efeitos, o que mais preciso são quatro saídas para efeito, com controle de velocidade, ...e-mail alenice-s-s@bol.com.br .....agradeço. . http://www.youtube.com/watch?v=p5Mbk3TOLyQ
ResponderExcluirVocê teria um arquivo em .HEX para esse efeito, não teria precisão para 17 efeitos, o que mais preciso são quatro saídas para efeito, com controle de velocidade, ...e-mail alenice-s-s@bol.com.br .....agradeço. . http://www.youtube.com/watch?v=p5Mbk3TOLyQ
ResponderExcluirO Link do esquema está quebrado.
ResponderExcluirArrumei. Vlw!!
ExcluirBoa noite alguen pode min ajudar tenho um modulo HC-11 433mhz comonicaçaõ serial como faso pra se Comonica entre dois pic 16f628a com um pic e um pc já concegui esto tentando entre dois pic
ResponderExcluirBOA TARDE EU QUERIA FAZER UM PROJETO TIPO O DE CIMA MAS COM ALGUMAS DIFERENÇAS.
ResponderExcluirO PIC 12F683 + ACS712+ LED RGB . O MICROCONTROLADOR LÊ A CORRENTE DO ACS712 E O RGB VAI MUDANDO DE COR DE ACORDO COM A LEITURA . TERIA COMO ME AJUDAR OU ME DA UMA IDEIA DE COMO FAZER ?
Olá!
ResponderExcluirVocê poderia postar algo sobre PID, para controlar um motor DC por exemplo.
Desde já grato.
TEstei esseCodigo mas o led RGB estasempre alterando as cores sem carregar nos botoes, vai desdea instensidade mais fraca a mais intensa.
ResponderExcluiro que podera ser?
Cumprimentos