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