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.
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.
//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
}





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