domingo, 31 de agosto de 2014

USO DE MODULO ADC CON ATTINY85

                      A continuación se presentara un programa simple del uso del modulo ADC en microcontroladores tinyAVR en concreto a la serie Attinyx5, esto con el fin de demostrar su funcionamiento y compatibilidad con los microcontroladores megaAVR. Esto se hará utilizando la librería InitADC.h que ha sido de utilidad en programas realizados con ayuda del microcontrolador Atmega48.

DESCRIPCIÓN:

                                  En primer lugar se configurar la velocidad de reloj del CPU esto con el fin de saber de antemano cual sera nuestra frecuencia de reloj en un principio, evitando así dificultades al realizar programas que requieran conocer la frecuencia de reloj precisa. 

#ifndef F_CPU
#define F_CPU 8000000UL // XTAL de 8 MHz
#endif

Se introduce la librería del modulo ADC y las macros para el control de los bits de registro.

#include "InitADC.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))

                                   Declaramos la variable donde se guardara e contenido de la lectura de nuestro ADC, el cual utilizara el pin PB2 para realizar la lectura. En este caso se utilizara el voltaje Vcc como referencia conectado a AREF.

//CONFIGURAR ADC
initADC(2,1,5);         //configuración de modulo ADC..(refrencia Vcc en AREF,justificado, prees. 32 )
canalADC(1);           //pin PB2 como canal de entrada
SALIDAS
setbit(DDRB,DDB4);
setbit(DDRB,DDB3);

WHILE(1):

                                Primeramente se lee el canal seleccionado y se guarda su valor en la variable analógico tipo unsigned char, para posteriormente encender y/o apagar los leds que se encuentran conectados en PB3 y PB4 con forme se incrementa o decrementa el valor de la señal en PB2.

analogico=convADC();
if (analogico>=0&&analogico<=63)
{
clearbit(PORTB,PB4);
clearbit(PORTB,PB3);
}
else if (analogico>=64&&analogico<=127)
{
clearbit(PORTB,PB4);
setbit(PORTB,PB3);
}
else if (analogico>=128&&analogico<=191)
{
setbit(PORTB,PB4);
clearbit(PORTB,PB3);
}
else if (analogico>=192&&analogico<=255)
{
setbit(PORTB,PB4);
setbit(PORTB,PB3);
}


NOTA:

                           Para mas información sobre el uso de la librería, recomiendo observar los programas anteriores, recomiendo la entrada ADC y salida binaria con int1, alguna duda o sugerencia puede dejarla en los comentarios contestare sus solicitudes en cuanto pueda, ademas dejare el programa al final para que puedan descargarlo.

PROGRAMA:

/*
 * ADC_ATTINY.c
 *
 * Created: 31/08/2014 15:52:58
 *  Author: TERRAFORMARS
 */ 


#ifndef F_CPU
#define F_CPU 8000000UL // XTAL de 8 MHz
#endif
#include <avr/io.h>
#include "InitADC.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))
unsigned char analogico;

int main(void)
{
//CONFIGURAR ADC
initADC(2,1,5);         //configuración de modulo ADC..(refrencia Vcc en AREF,justificado, prees. 32 )
canalADC(1);           //pin PB2 como canal de entrada
SALIDAS
setbit(DDRB,DDB4);
setbit(DDRB,DDB3);
while(1)
{
//TODO:: Please write your application code
analogico=convADC();
if (analogico>=0&&analogico<=63)
{
clearbit(PORTB,PB4);
clearbit(PORTB,PB3);
}
else if (analogico>=64&&analogico<=127)
{
clearbit(PORTB,PB4);
setbit(PORTB,PB3);
}
else if (analogico>=128&&analogico<=191)
{
setbit(PORTB,PB4);
clearbit(PORTB,PB3);
}
else if (analogico>=192&&analogico<=255)
{
setbit(PORTB,PB4);
setbit(PORTB,PB3);
}
//termina else
}
}

IMÁGENES:

EJECUCIÓN EN ATMEL STUDIO


SIMULACION EN PROTEUS



FUNCIONAMIENTO







LINK:

https://mega.co.nz/#!RklDzZrA!SXuRPqgMMzijhCsrvvTAv6FcI_kj7joTQ3xCaqseQoY