Solis Aneliz Lab3
Solis Aneliz Lab3
Solis Aneliz Lab3
MICROPROCESADORES I
Gestión I– 2021
CONVERTIDOR ANALÓGICO DIGITAL
1.OBJETIVO GENERAL
Conocer el funcionamiento del micro controlador ATMEGA 328P en configuración con el ADC.
OBJETIVOS ESPECÍFICOS
2. FUNDAMENTO TEORICO
Microcontrolador
ADC tiene muchos parámetros clave de rendimiento. Los dos parámetros principales son la
velocidad y la resolución de la muestra. La frecuencia de muestreo del ADC es la frecuencia
de la señal de entrada de prueba. La frecuencia de muestreo determina el ancho de banda
máximo de la señal de entrada, generalmente mayor que el doble de la señal de entrada
más alta, también conocida como tasa de Nyquist. La resolución del ADC determina la
precisión de la representación digital discreta que se puede producir dentro del rango de
valores analógicos.
4. TECNICA O PROCEDIMIENTO
Parte 4.1
Programar el microcontrolador para que realice la lectura de dos entradas analógicas, conectadas a dos
potenciómetros, y muestre los valores obtenidos por el ADC en un LCD.
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#define LCD_Port PORTD // PORT de datos del LCD
#define LCD_DPin DDRD // Pin de datos LCD
#define RSPIN PD0 // LCD Rs
#define ENPIN PD1 // LCD EN
void adc_referencia();
void LCD_Action(unsigned char cmnd);
void adc_canal(uint8_t canal);
void adc_iniciar();
int adc_start();
void adc_referencia()
{
ADMUX &=~ (1<<REFS1); //ADMUX con referencia de entrada de 1
ADMUX |= (1<<REFS0); //ADMUX con referencia de salida de 0
}
void adc_iniciar() // iniciamos el Adc
{
ADCSRA |= (1<<ADEN);
ADCSRA &=~ (1<<ADLAR);
ADCSRA &=~ (1<<ADATE);
ADCSRA |= ((1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0)); //preescaler 128
}
void adc_canal(uint8_t canal) // iniciamos la primera lectura
{ // comparamos los valores de las entradas analogicas
if (canal==1)
{
ADMUX |= (1<<0);
ADMUX &=~ ((1<<3) | (1<<2) | (1<<1));
}
if (canal==5)
{
ADMUX |= ((1<<2) | (1<<0));
ADMUX &=~ ((1<<3) | (1<<1));
}
}
int adc_start()
{
ADCSRA |= (1<<ADSC); // iniciamos la conversion (start conversion)
while(ADCSRA&(1<<ADSC));// esperar que la conversion termine
return ADCW; // guardamos el valor
}
// funcionamiento del LCD
void LCD_Init (void)
{
LCD_DPin = 0xFF;
_delay_ms(15);
LCD_Action(0x02);
LCD_Action(0x28);
LCD_Action(0x0c);
LCD_Action(0x06);
LCD_Action(0x01);
_delay_ms(2);
}
// Asignamos los comandos del LCD
void LCD_Action( unsigned char cmnd )
{
LCD_Port = (LCD_Port & 0x0F) | (cmnd & 0xF0);
LCD_Port &= ~ (1<<RSPIN);
LCD_Port |= (1<<ENPIN);
_delay_us(1);
LCD_Port &= ~ (1<<ENPIN);
_delay_us(200);
LCD_Port = (LCD_Port & 0x0F) | (cmnd << 4);
LCD_Port |= (1<<ENPIN);
_delay_us(1);
LCD_Port &= ~ (1<<ENPIN);
_delay_ms(2);
}
// limpiamos el LCD
void LCD_Clear()
{
LCD_Action (0x01);
_delay_ms(2);
LCD_Action (0x80);
}
// Valores que se muestran en LCD
void LCD_Print (char *str)
{
int main(void)
{
adc_referencia();
adc_iniciar();
int num =0;
char letra[4];
LCD_Init();
LCD_Print("POT1 = ");
LCD_Action(0xC0);
LCD_Print("POT2 ");
LCD_Action(0XCD);
while (1)
{
LCD_Action(0X88);
adc_canal(1);
num =adc_start();
itoa(num,letra,10);
if (num<1000)
{
if (num<100)
{
if (num<10)
{
LCD_Print("000");
}
else{ LCD_Print("00");}
}
else {LCD_Print("0");}
}
LCD_Print(letra);
adc_canal(5);
LCD_Action(0XC8);
num=adc_start();
itoa(num,letra,10);
if (num<1000)
{
if (num<100)
{
if (num<10)
{
LCD_Print("000");
}
else{ LCD_Print("00");}
}
else {LCD_Print("0");}
}
LCD_Print(letra);
}
}
5. SIMULACION
6. CUESTIONARIO
1.Explicar el funcionamiento del ADC.
7. CONCLUSIONES
8. BIBLIOGRAFIA
GUIAS DE PRÁCTICA ELECTRONICA -Código de registro: RE-10-LAB-138- Versión 1.0
UNIVERSIDAD DEL VALLE LABORATORIO DE MICROPROCESADORES I -
MICROCONTROLADOR Y BOOTLOADER
https://naylampmechatronics.com/interfaz-de-usuario/19-teclado-matricial-4x4-tipo-
membrana.html