Fork me on GitHub

Microcontrolandos

O Blog está passando por uma fase de mudanças. Todos os posts estão sendo atualizados, códigos, links e imagens estão sendo arrumados. Conteúdos novos ainda estão por vir.

AVR: Comparador Analógico

Share:

AVR: Comparador Analógico





O Comparador Analógico compara os valores de tensão de entrada no pino positivo AIN0 e o pino negativo AIN1.

Quando a tensão no pino AIN0 é maior que a tensão no pino AIN1, a saída do comparador analógico, o bit ACO do registro ACSR é setado.

A saída do comparador pode ser ajustado para desencadear a função de captura do Timer1, ativando o bit ACIC do registro ACSR.

Além disso, o comparador pode desencadear uma interrupção exclusiva para o Comparador Analógico, setando o bit ACIE do registro ACSR.

O usuário pode selecionar o evento de interrupção, quando houver na saída do comparador um pulso positivo, pulso negativo ou alternado, basta configurar os bits ACIS1:0 do registro ACSR.


Quando a interrupção ocorrer o bit ACI do registro ACSR será setado.

A entrada negativa pode ser multiplexada com os pinos ADC7-ADC0. Setando o bit ACME do registro ADCSRB, você habilita a multiplexação e configurando os bits MUX2:0 do registro ADMUX você escolhe o pino a ser utilizado como entrada negativa. Por padrão o pino de entrada negativa é o pino AIN1.


A entrada positiva é o pino AIN0, mas você pode definir uma tensão de referência fixa de 1.1V setando o bit ACBG do registro ACSR.

O Comparador Analógico é habilitado limpando o bit ACD do registro ACSR.

REGISTRO


EXEMPLO
MikroC PRO AVR
//ATMEGA328P

//Interrupção do comparador analogico
void isr_comparador_analogico() iv IVT_ADDR_ANALOG_COMP
{
     //alterna as saidas da PORTC
     PINC = 255;
}

void ComparadorAnalogico_Init()
{
  //ACD = 0, habilita o comparador analogico
  //ACIE = 1, habilita interrupção do comparador
  //ACIS1:0 = 11, interrupção por borda de subida
  ACSR = ( 0 << ACD ) | ( 1 << ACIE ) | ( 1 << ACIS1 ) | ( 1 << ACIS0 );
      
  //Desabilita a função de entrada digital dos pinos AIN1 e AIN0.
  DIDR1 = 3;
}

void main()
{
   ComparadorAnalogico_Init();
   DDRC = 255; //Saidas
   DDRB = 255; //Saidas
   asm sei;  //habilita interrupção global
   
   while(1)
     PORTB.B0 = ACSR.ACO; //Monitora a saida do comparador
}

Um comentário:

  1. Boa noite Tiago Henrique obrigado por compartilhar seus conhecimentos conosco, pois com AVR temos pouco material com compilador Mikroc PRO AVR.

    ResponderExcluir