Ir ao conteúdo
  • Cadastre-se

PIC Nao estou conseguindo configurar a interrupçao do ADC


Ir à solução Resolvido por .if,

Posts recomendados

gente o profesSor fernando do Microgenios pediu para fazer um exercicio onde mostro no lcd o valor do ADC E USAR também A iNTERRUPÇAO, 

A parte de amostragem no lcd esta tudo beleza ja, mais a interrupçao nao funciona de maneira nehuma, o Flag (ADIE) so fica em 1 mesmo eu zerando ela. alguem me ajuda a encontrar onde estou errando? estou usando o pic 18f25k20

 

 

sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;

void Interrupt_()
{

 GIE_bit  = 1;//Ativa interrupçao global
 //PEIE_bit = 1;//Interrupções periféricas habilitadas
 ADIE_bit = 1;
 
 ADIF_bit = 0;


}

void Init_ADC()
{

 ADCON0 = 0B00000001;
 ADCON1 = 0B00000000;
 ADCON2 = 0b10101110;

}

void main()
{
 unsigned int resultADC;
 unsigned char txt [6];
 unsigned char txt1 [6];
 
 TRISA = 1;
 PORTA = 0;
 
 TRISC = 0;
 PORTC = 0;
 
 TRISB = 0;
 PORTB = 0;
 
 C1ON_bit = 0;
 C2ON_bit = 0;
 
 Init_ADC(); 
 Interrupt_();
 ADC_Init();
 Lcd_Init();

 
 Lcd_Cmd(_LCD_CLEAR);
 Lcd_Cmd(_LCD_CURSOR_OFF);
 
 while(1)
 {
 
  resultADC = ADC_read(0);//ResultADC recebe o valor do conversor AD
  

  
  if(ADIF_bit == 1 )
  {
   RC7_bit = ~rc7_bit;


   ADIF_bit = 0;
  }


 WordToStr(ADIF_bit, txt);
 Lcd_Out(1, 1, txt);//Exibe no lcd o valor do conversor ADC
 
 WordToStr(resultADC, txt1);
 Lcd_Out(2, 7, txt1);//Exibe no lcd o valor do conversor ADC
 delay_ms(500);
 }

}

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
  • Solução

O flag sempre vai ser 1 pois ele seta a cada leitura ad e esta está dentro do loop infinito. Tire do loop e coloque isso...

 if(ADIF_bit == 1 )
  {
   RC7_bit = ~rc7_bit;


   ADIF_bit = 0;
  }

dentro da interrupt pra ver pra crer pra entender pra me explicar😁

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...