Post on 11-Aug-2015
FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA
LABORATORIO N°5: USO DEL MODULO ADC
OBJETIVO:
Comprobar el funcionamiento del módulo adc del Atmega8 Familiarizarse aún más con las funciones en c para Atmega8.
FUNDAMENTO TEORICO:
DESCRIPCIÓN DEL CIRCUITO El siguiente proyecto se trata de un dispositivo electrónico que muestra el valor del voltaje ingresado por potenciómetro conectado a la entrada análoga PC0. Estos valores se muestran a través de una pantalla LCD.
DESCRIPCIÓN DEL ADC DEL ATMEGA8
Un conversor analógico digital, también llamado ADC, es un dispositivo electrónico que toma un voltaje de entrada analógico y después de cierto tiempo produce un código de salida que representa la entrada analógica. La figura presenta el esquema general de un ADC:
Para el proceso de conversión, la señal máxima de entrada se divide en 2n niveles, donde “n” es el número de bits que indica la resolución del conversor; con ello, se establece una relación entre el nivel de señal de entrada y el valor digital a la salida resultante de la conversión. En la figura 2 se puede observar una señal digitalizada con una resolución de 3 bits; si hubiera habido un mayor número de bits de resolución, la separación vertical de la cuadrícula (denominado LSB) sería menor, obteniendo así una mejor calidad en la digitalización. El tiempo que tarda la conversión es la diferencia de T i+1 – Ti. La tabla 1 muestra el código de salida para cada muestra.
MICROCONTROLADORES -2013V
FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA
Número de muestra
Código digital a la salida
T0 001T1 001T2 001T3 010T4 101T5 111T6 110T7 101T8 100T9 100T10 011T11 010
DESCRIPCIÓN DEL CONVERSOR ANÁLOGO DIGITAL DEL ATMEGA8L
El Atmega8L cuenta con un ADC de aproximaciones sucesivas de 10 bits de resolución. Mediante un multiplexor se conectan 8 canales (el Atmega8L en empaque DIP posee 6 canales) cuyas entradas se encuentran en el Puerto C según se puede observar en el diagrama esquemático del conversor:
MICROCONTROLADORES -2013V
tiem
Señal analógica de Código de
Número de
1111101001010000
TTT9T8T7T6T5T4T3T2T1T0
FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA
Registros utilizados para el manejo del ADC
Registro ADCSRA
Bit 7 – ADEN: habilitador del ADC. Al escribir un “1” en ADEN, el ADC se habilitará. Si se escribe “0” el ADC es apagado.
Bit 6 – ADSC: Inicio de conversión del ADC. En el modo “Conversión Simple”, al escribir “1” en este bit se inicializa cada conversión. En el modo de “Carrera Libre”, escribir “1” en ADSC indica el inicio de la primera conversión. ADSC permanecerá en “1” durante todo el tiempo de conversión, y cambiará a “0” al completar la conversión.
MICROCONTROLADORES -2013V
FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA
Bit 5 – ADFR: Selector de carrera libre del ADC. Para seleccionar el modo de “Carrera Libre”, el ADFR debe estar en “1”
Bit 4 – ADIF: Bandera de interrupción del ADC. Se pone automáticamente en “1” cuando el ADC completa su conversión y el registro de datos se actualiza. Si los bits ADIE y el bit I del registro SREG estan en “1”, se genera una interrupción al estar ADIF en “1”; luego del salto al correspondiente vector de interrupción ADIF pasa a “0”. De manera alternativa se puede poner el bit ADIF en “0” escribiendo un “1” en el mismo bit.
Bit 3 – ADIE: Habilitador de interrupción del ADC. Cuando éste bit y el bit I del SRGE están en “1”, la interrupción por conversión completa del ADC es activada.
Bits 2:0 – ADPS2:0: Bits de selección del pre escalador. Estos bits determinan el factor de división entre la frecuencia del cristal y la entrada de reloj del ADC según la Tabla.
Registro ADMUX
Bits 7:6 – REFS1:0: Bits de selección de voltaje de referencia. Seleccionan el voltaje de referencia del ADC según se muestra en la tabla 2. Si se modifican durante una conversión, el cambio se efectuará en la siguiente conversión (ADIF in ADCSRA es “1”)
Bit 5 – ADLAR: Ajusta a la izquierda el resultado de la conversión, si ADLAR es “1”. Caso contrario el resultado es ajustado a la derecha (revisar la descripción de los registros de datos ADCH y ADCL de este manual).
Bits 3:0 – MUX3:0: Seleccionan el canal de referencia al que será conectado el ADC.
Registros de datos ADCH y ADCL
Cuando la conversión termina, el resultado se almacena en estos registros. La forma de su presentación depende del estado del bit ADLAR
MICROCONTROLADORES -2013V
FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA
Parte I.- MOSTRAR MENSAJE: UNAC – FIEEMICRO_ATMEGA8
MICROCONTROLADORES -2013V
FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA
2.- Realizar el programa para mostrar el mensaje que se muestra en la figura 01 mediante el entorno AVR STUDIO 6
#include "avr_compiler.h" //inclusion de librerias #include "lcd.h” void delay_ms(unsigned int t) //function delay ms a partir de us{ while(t--) delay_us(1000);}int main(void)
{ lcd_init(); // Inicializar LCD while(1) { lcd_gotorc(1,7); // Cursor a fila 1 posición 7 lcd_puts(“UNAC-FIEE"); // Escribir Hello lcd_gotorc(2,7); // Cursor a fila 2 posición 7 lcd_puts(“MICRO-ATMEGA8"); //mensaje delay_ms(600); // Pausa de 600 ms lcd_clear(); // Limpiar pantalla delay_ms(400); //delay 400ms }}
MICROCONTROLADORES -2013V
FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA
Diagrama de flujo
Realizar la simulación
MICROCONTROLADORES -2013V
FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA
CÓDIGO DEL PROGRAMA:
#include <avr/io.h>#include "lcd.h"#include <util/delay.h>
void InitADC() //funcion de inicializacion de adc
{ADMUX=(1<<REFS0);
Aref=AVcc;ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); //Prescalar div factor =128}
uint16_t ReadADC(uint8_t ch)//funcion para leer adc{//ch=0b00000101
ch=ch&0b00000111;ADMUX|=ch;ADCSRA|=(1<<ADSC);while(!(ADCSRA & (1<<ADIF)));ADCSRA|=(1<<ADIF);return(ADC);
}
void print(uint16_t voltaje) function para mostrar valor adc{
lcd_putc((voltaje/200)+48);//separamos cada digito mayorvoltaje%=200; //residuolcd_puts("."); //punto decimallcd_putc((voltaje/20)+48);//digito mediovoltaje%=20; //residuolcd_putc((voltaje/2)+48);//digito menor
}
void print2(uint16_t voltaje){//separacion de digitos para mostrar de uno en uno
lcd_putc((voltaje/1000)+48);voltaje%=1000;lcd_putc((voltaje/100)+48);voltaje%=100;lcd_putc((voltaje/10)+48);voltaje%=10;lcd_putc((voltaje/1)+48);
MICROCONTROLADORES -2013V
FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA
}void main() //función principal{
int adc; //variable adcint adc2; //variable adc2while(1){
lcd_init(LCD_DISP_ON); //funcion para inicializar lcdlcd_clrscr(); //limpiado de pantallalcd_gotoxy(0,0); // posicionar el mensaje lcd_puts("ADC="); // imprimir el mensaje
InitADC(); //invoacion a funcion InitAdcadc2=ReadADC(0); //signación de valores a adc2print2(adc2); //impresión de pantalla adc2_delay_ms(100); //delay de 100ms
lcd_gotoxy(0,1);// posicionar el segundo mensaje //en la segunda filalcd_puts("Voltaje="); //imprimir en la segunda filaInitADC();adc=ReadADC(0);print(adc); //impresión de voltajelcd_puts("v");_delay_ms(100);
}}
MICROCONTROLADORES -2013V
FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA
Diagrama de flujo
PARTE III SISTEMA DE MEDICION DE TEMPERATURA
MICROCONTROLADORES -2013V
FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA
DISEÑO DEL PROGRAMA:
#include <avr/io.h> //Cargando las librerias necesarias para usar...#include "lcd.h"#include "math.h"#include <util/delay.h> //...el LCD y la funcion retraso y operaciones matematicas void InitADC() //Funcion de configuracion del convertidor analogo digital{
ADMUX=(1<<REFS0); //Se asigna como voltaje de referencia a AVccADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); //Prescalar=128
}
uint16_t ReadADC(uint8_t ch){
ch=ch&0b00000111; //Selecciona canal 0ADMUX|=ch;ADCSRA|=(1<<ADSC); //Empieza conversion simplewhile(!(ADCSRA & (1<<ADIF))); //Espera a que termine la conversionADCSRA|=(1<<ADIF); //ADIF se limpia al escribir un 1 logicoreturn(ADC); //Se retorna el valor digital
}
void print(uint16_t tem) //Funcion para escribir digito por digito...{
lcd_putc((tem/10)+48);tem%=10;lcd_putc((tem/1)+48); //...el valor de la temperatura
}void main() //Funcion principal{
int V, T; //Se declaran las funciones de tipo entero: V y Twhile(1) //Bucle while infinito{
lcd_init(LCD_DISP_ON); // Inicializar LCDlcd_clrscr(); //Limpiar pantalla
lcd_gotoxy(3,0); // Cursor a fila 0 posición 3lcd_puts("TEMPERATURA"); //Escribir TEMPERATURA
lcd_gotoxy(5,1); // Cursor a fila 1 posición 5
MICROCONTROLADORES -2013V
FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA
lcd_puts("T="); //Escribir T
InitADC(); //Se llama la funcion InitADCV=ReadADC(0); //Se toma el valor que retorna: ADC=valor digitalT=((1/(((log(V*0.00488/(2*(5-V*0.00488))))/4050)+1/298.5))-273.5);
//funcion para converison de voltaje a temperaturaprint(T); //Escribe Tlcd_putc(0xDF); //Escribe el simbolo: º cuyo valor hexadecimal es DFhlcd_puts("C"); //Escribe C_delay_ms(100); //Llama un retraso de 100ms
}}
Diagrama de Flujo
MICROCONTROLADORES -2013V
FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA
Aplicaciones de los circuitos y programas señalados:
MICROCONTROLADORES -2013V
FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA
El módulo ADC nos permite convertir cualquier señal analógica en digital, lo que nos lleva a manejar datos en forma digital , para un procesamiento más rápido y efectivo
El modulo ADC tiene infinidad de aplicaciones en la vida diaria , ya que todo es anlogico y requiere de un procesamiento digital.
Conclusiones
Hemos visto la importancia del modulo ADC del microcontrolador Atmega8
Se observo la importancia del estudio de los registros para el control del modulo ADC
Es importante incluir todas las librerías para los dispositivos mencionados
MICROCONTROLADORES -2013V