viernes, 28 de febrero de 2014

COMPARADOR ANALOGICO

                 El siguiente programa presentado tiene como único fin mostrar el uso básico del comparador analógico del microcontrolador AVR, en mi caso del microcontrolador ATMEGA48, esto con el fin de dar a conocer el funcionamiento para una posterior practica donde se hará un uso mas complejo de esta función, esperando utilizar en la medición de distancia con ayuda de un sensor ultrasonido y el comparador analógico.  


DESCRIPCIÓN:

                      El programa es realizado en si es facil de entender pero para facilitar la comprensión de la practica a realizar posteriormente se explicara en esta ocasión su estructura de forma detallada.

COMPARADOR();
                          
                          Esta función realiza la configuración de funcionamiento de nuestro comparador analógico. Primeramente se habilita el bit ADEN del registro ADCSRA  y el bit ACME del registro ADCSRB para permitir utilizar el pin AIN1 como entrada negativa del comparador. También podría dejarse estos bits sin habilitar y el programa funcionaria como se espera, pero se indica para su comprensión mas clara, sobre todo para poder explicar que la entrada negativa puede cambiarse por cualquiera de las entradas analógicas del ADC mediante multiplexion, esto se logra seteando el bit ACME del registro ADCSRB y des-habilitando el bit ADEN del registro ADCSRA, al realizarse esto se elige la entrada negativa del comparador con ayuda del registro ADMUX donde se configurara la entrada que se desea utilizar con los bits MUX2..0. 

//SELECCION DEL MODO DE INTERRUPCION DE COMPARADOR ANALOGICO
//Comparator interrupt on falling output edge
setbit(ACSR,ACIS1);
setbit(ACSR,ACIS0);

                           Los bits ACSI1 y ACSI0 del registro ACSR, estos bits determinar qué eventos de comparación desencadenaran la interrupción del Comparador Analógico.



                               Es importante configurar el funcionamiento de estos bits antes de habilitar la interrupción del comparador analógico, de no ser así la interrupción ocurrirá cuando se cambien los bits.

        //HABILITAR INTERRUPCIÓN DEL COMPARADOR ANALÓGICO
setbit(ACSR,ACIE);
sei();
                     
                            Una vez realizado lo anterior se habilita la interrupción local del comparador analógico, y enseguida la comparación global sei();.

        setbit(DDRB,DDB0);
clearbit(PORTB,PB0);

                               A continuación se declara como salida el pin PB0 del puerto B y se inicializa en nivel bajo.

//INTERRUPCION
ISR (ANALOG_COMP_vect){
bittoggle(PORTB,PB0);
}

                              Se realiza la rutina de interrupción la cual únicamente para ser un caso ilustrativo cambiara el estado del pin de salida PB0 cada vez que el comparador detecte un flanco de subida, es decir cada vez que la entrada positiva cambie a ser mayor que la entrada negativa.

NOTA:
                                        Al final se colocaran tanto el programa del microcontrolador como su simulación en ISIS para observar el comportamiento del mismo, cualquier duda o sugerencia puede ingresarla en los comentarios.

PROGRAMA:


/*
 * comparador_analogico.c
 *
 * Created: 28/02/2014 22:39:47
 *  Author: TERRAFORMARS
 */ 


#include <avr/io.h>
#ifndef F_CPU
#define F_CPU 8000000UL // XTAL de 8 MHz
#endif
#include <util/delay.h>
#include <avr/interrupt.h>

#define setbit(sfr,bit) (_SFR_BYTE(sfr)|=(_BV(bit)))
#define clearbit(sfr,bit) (_SFR_BYTE(sfr)&=~(_BV(bit)))
#define bittoggle(sfr,bit)(_SFR_BYTE(sfr)^=_BV(bit))

//INTERRUPCION
ISR (ANALOG_COMP_vect){
bittoggle(PORTB,PB0);
}

//COMPARADOR ANALÓGICO
void COMPARADOR(){
//UTILIAR AIN1 COMO ENTRADA NEGATIVA
setbit(ADCSRA,ADEN);
//HABILITACION DEL MULTIPLEXOR DEL COMPARADOR ANALOGICO
setbit(ADCSRB,ACME);

//SELECCION DEL MODO DE INTERRUPCION DE COMPARADOR ANALOGICO
//Comparator interrupt on falling output edge
setbit(ACSR,ACIS1);
setbit(ACSR,ACIS0);
//HABILITAR INTERRUPCION DEL COMPARADOR ANALOGICO
setbit(ACSR,ACIE);
sei();
}

int main(void)
{
COMPARADOR();
setbit(DDRB,DDB0);
clearbit(PORTB,PB0);
    while(1)
    {
        //TODO:: Please write your application code 
    }
}

IMÁGENES:

SIMULACIÓN EN ATMEL STUDIO


SIMULACIÓN EN ISIS PROTEUS


ENTRADA MULTIPLEXADA DEL COMPARADOR ANALÓGICO




LINK:

https://mega.co.nz/#!5wUVxD5D!9Sf30yPMwGVxnF8jhztRedMd1OEp1kvvCKo7PQqm8XE

No hay comentarios:

Publicar un comentario