Ir ao conteúdo
  • Cadastre-se
Gabriel El

Dificuldade na programação - limitador de velocidade

Recommended Posts

Podem me ajudar? 

preciso fazer acender o led quando estiver com 90% da tensão de referência que no caso seria 2,5V 


// --- Mapeamento de Hardware ---
#define led_g RB0_bit                         //Conecta o LED Verde à porta RB0
#define led_y RB1_bit                         //Conecta o LED Amarelo à porta RB1
#define led_r RB2_bit                         //Conecta o LED Vermelho à porta RB2

// --- Rotina de Interrupção ---
void interrupt()
{
    if(CMIF_bit)                               //Houve mudança na saída de um dos comparadores?
    {                                          //Sim...
       CMIF_bit = 0x00;                        //Limpa a flag

       if(C1OUT_bit)                          //Tensão acima de 2,5V?
       {
           led_g = 0x01;
           led_r = 0x00;
           led_y = 0x00;                     //Inverte o estado dos LED's
       }
       else if (!C1OUT_bit)
       {
           led_g = 0x00;
           led_r = 0x01;
           led_y = 0x00;

       }
       
    } //end CMIF

} //end interrupt


// --- Função Principal ---
void main() 
{

     CMCON      = 0x02;                        //Configura comparadores com tensão de referência interna
     VRCON      = 0xAC;                        //Tensão de referência interna igual a 2,5V

     OPTION_REG = 0x80;                        //Desabilita pull-ups , prescaler 1:2 associado ao Timer0
     GIE_bit    = 0x01;                        //Habilita interrupção global
     PEIE_bit   = 0x01;                        //Habilita interrupção por periféricos
     CMIE_bit   = 0x01;                        //Habilita interrupção dos comparadores
     
     TRISA.RB0  = 0xFF;                        //Todo PORTA será entrada
     TRISB.RB0  = 0x00;                        //Configura RB0 como saída
     TRISB.RB1  = 0x00;                        //Configura RB1 como saída
     TRISB.RB2  = 0x00;                        //Configura RB2 como saída
      
     led_g      = 0x00;                        //Saída inicia desligada
     led_y      = 0x00;                        //Saída inicia desligada
     led_r      = 0x00;                        //Saída inicia desligada

     while(1)                                  //Loop infinito
     {
                                               //Aguarda interrupção...
     }



} //end main

 

Editado por Gabriel El
.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode me ajudar? 

preciso fazer acender o led quando estiver com 90% da tensão de referência que no caso seria 2,5V 

// --- Mapeamento de Hardware ---
#define led_g RB0_bit                         //Conecta o LED Verde à porta RB0
#define led_y RB1_bit                         //Conecta o LED Amarelo à porta RB1
#define led_r RB2_bit                         //Conecta o LED Vermelho à porta RB2

// --- Rotina de Interrupção ---
void interrupt()
{
    if(CMIF_bit)                               //Houve mudança na saída de um dos comparadores?
    {                                          //Sim...
       CMIF_bit = 0x00;                        //Limpa a flag

       if(C1OUT_bit)                          //Tensão acima de 2,5V?
       {
           led_g = 0x01;
           led_r = 0x00;
           led_y = 0x00;                     //Inverte o estado dos LED's
       }
       else if (!C1OUT_bit)
       {
           led_g = 0x00;
           led_r = 0x01;
           led_y = 0x00;

       }
       
    } //end CMIF

} //end interrupt


// --- Função Principal ---
void main() 
{

     CMCON      = 0x02;                        //Configura comparadores com tensão de referência interna
     VRCON      = 0xAC;                        //Tensão de referência interna igual a 2,5V

     OPTION_REG = 0x80;                        //Desabilita pull-ups , prescaler 1:2 associado ao Timer0
     GIE_bit    = 0x01;                        //Habilita interrupção global
     PEIE_bit   = 0x01;                        //Habilita interrupção por periféricos
     CMIE_bit   = 0x01;                        //Habilita interrupção dos comparadores
     
     TRISA.RB0  = 0xFF;                        //Todo PORTA será entrada
     TRISB.RB0  = 0x00;                        //Configura RB0 como saída
     TRISB.RB1  = 0x00;                        //Configura RB1 como saída
     TRISB.RB2  = 0x00;                        //Configura RB2 como saída
      
     led_g      = 0x00;                        //Saída inicia desligada
     led_y      = 0x00;                        //Saída inicia desligada
     led_r      = 0x00;                        //Saída inicia desligada

     while(1)                                  //Loop infinito
     {
                                               //Aguarda interrupção...
     }



} //end main

 

Editado por Gabriel El
cmcon

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×