Вы находитесь на странице: 1из 10

Microcontroladores

Universidad del Callao, 2013

MICROCONTROLADORES
(Informe Previo del Laboratorio N5)
Control del modulo LCD
Sistema de medicion de temperatura
Entorno AVR Studio
Integrantes:

Adarleen Arevalo Valle


Pascual Gernimo Luigi
Miguel Franco Cesar A.
Iriarte Arevalo
Cristian

082661G
100749D
082644E
080660C

-----------------------------------------------------------------------------------------------------------------------------OBJETIVOS:
o controlar el modulo LCD
o programar el lcd para mostrar mensaje
o Programar voltmetro de 0a 5V
o Programar sistema de medicino de temperatura
o estructurar rutinas de trabajo
Usando el ATMEGA8, el modulo LCD, se desea realizar mensajes en el mdulo LCD,
as mismo implementar un sistema de medicin de temperatura
3. Material:
o 1 Micro controladorATMEGA8
o 1 modulo LCD Hitachi HD44780 o compatible de 2x16
o 1 pushbuttons NA
o Fuente realimentacin 5V,1 amp
o Sensor de temperatura NTC con una resistencia a 25C de 20Kohm y
=4050
o AVR STUDIO 6
o Programador
o PC
Parte I.- mostrar mensaje
1. .- Realizar el circuito que se indica

Atmel
1

Microcontroladores
Universidad del Callao, 2013

Figura N1 .- Circuito Base


2.- Realizar el programa para mostrar el mensaje que se muestra en la figura 1
mediante el entorno AVR STUDIO 6
3.- Comente cada instruccin del programa
#include "avr_compiler.h"
#include "lcd.h"

//libreria para compilador


//libreria para lcd

int main(void)
{
lcd_init();

// Inicializar LCD

while(1)
{
lcd_gotorc(1,4);
//Cursor 1,4
lcd_puts("UNAC-FIEE");
//mensaje 1
lcd_gotorc(2,3);
//Cursor 2.3
lcd_puts("MICRO-ATMEGA8");
//mensaje 2
}

4.-Genere el archivo +.hex

5.- Realizar la simulacin y luego las pruebas correspondientes

Atmel
2

Microcontroladores
Universidad del Callao, 2013

Figura N2.-Simulacion

Figura N3.-Implementacion
Parte II IMPLMENTACION DE VOLTIMERO DE 0V A 5V
2.1 implemente el circuito de la figura 2

Atmel
3

Microcontroladores
Universidad del Callao, 2013

Figura N4.-Circuito base


2.2.- Realizar el programa para mostrar el LCD:
o
o

1 FILA: VOLTAJE DIGITAL: ADC =..


2 FILA VOLTAJE EN DECIMAL: VOLTAJE=..

2.3.- Comente cada instruccin del programa


#include "avr_compiler.h" //libreria para compilar
#include "lcd.h"
//libreria para lcd
void adc_setup(void);
unsigned int adc_read(char channel);

//funcion adc
//funcion lectura ADC

int main()
{
char cadena[14],cadena2[14];
int n,vol1,vol2;
float vol;
lcd_init();
//inicializamos lcd
adc_setup();
//inicializamos adc
lcd_gotorc(1,1);
lcd_puts("ADC :");
lcd_gotorc(2,1);
lcd_puts("Voltaje : ");
while(1)
//bucle
{
n = adc_read(0);
//lectura ADC
vol=n*5.0/1023;
vol1=vol;
vol2=(vol-vol1)*100;
sprintf(cadena,"%0004u", n);
//impresion primer dato
lcd_gotorc(1,11);
lcd_puts(cadena);
sprintf(cadena2,"%d.%02d V.", vol1, vol2); //impresion segundo dato
lcd_gotorc(2,11);
lcd_puts(cadena2);
}

Atmel
4

Microcontroladores
Universidad del Callao, 2013
}
//****************************************************************************
// Configurar el conversor ADC
//****************************************************************************
void adc_setup(void)
{
// Vref+ y Vref= VCC y GND
// Justificacin de resultado = Derecha
ADMUX = 0x40;
// Reloj de ADC
= F_CPU/64 = 125kHz
// Estado del conversor
= Habilitado
// Modo de conversin
= Manual
ADCSRA = 0x86;
}
//****************************************************************************
// Lee el canal 'channel' del conversor ADC
//****************************************************************************
unsigned int adc_read(char channel)
{
ADMUX &= 0xF8;
//
ADMUX |= channel;
// Seleccionar canal
ADCSRA |= (1<<ADSC);

// Iniciar conversin

while(ADCSRA & (1<<ADSC)); // Esperar a que termine la conversin


return ADC;

// Retornar resultado de conversin

}
2.4.-Genere el archivo +.hex

2.5.- Realizar la simulacin y luego las pruebas correspondientes

Atmel
5

Microcontroladores
Universidad del Callao, 2013

Figura N5.-Simulacion

Figura N6.-Implementacion
PARTE III SISTEMA DE MEDICION DE TEMPERATURA
Se utiliza un NTC con un =4050 con resistencia a 25C de 20Kohm
Nota:
La NTC se linealita mediante una resistencia R1 de 10Kohm. El valor de la tensin
de la NTC (Vt) se obtiene segn las ecuaciones que se muestra (temperatura en
grados Kelvin)

Atmel
6

Microcontroladores
Universidad del Callao, 2013
3.1 CIRCUITO EXPERIMENTAL

Figura N7.-Circuito Base


3.2.- Realizar el programa para mostrar el LCD:
o
o

1 FILA: MENSAJE = TEMPERATURA


2 FILA TEMPERATURA = T=. C.

3.3.- Comente cada instruccin del programa


#include "avr_compiler.h"
#include "lcd.h"
#include <math.h>
#define logf log
#define grado 0x00

//definimos caractes

PROGMEM const char Pattern1[] = {0x00,0x1C,0x14,0x1C,0x00,0x00,0x00,0x00};


//caracter
void create_char(unsigned char a, PGM_P p)//funcion para generar caracter
{
unsigned char i;
lcd_cmd(LCD_CGRAM + a);
// Instruccin Set CGRAM Address
for (i=0; i<8; i++)
lcd_data(pgm_read_byte(p+i));
}
void adc_setup(void);
//funcion setup ADC
unsigned int adc_read(char channel);
//funcion lectura ADC
int main()
//funcion principal
{
char cadena[10];
char c=0;
//seleccion de canal
float
float
float
float

n=0;
Vin = 5.0;
Rfija = 10000;
R25 = 10000;

Atmel
7

Microcontroladores
Universidad del Callao, 2013
float Beta = 4050.0;
float T0 = 293.15;
float Vout = 0.0;
float Rntc = 0.0;
float TempK = 0.0;
float TempC = 0.0;
lcd_init();
adc_setup();

//inicializar lcd
//inicializar adc

create_char(grado*8, Pattern1);

//llamamos a funcion caracter

lcd_gotorc(1,1);
lcd_puts("TEMPERATURA-UNAC");
while(1)
{
n = adc_read(c);
//Primero la Vout del divisor
Vout=(Vin/1024)*(n);
//Ahora la resistencia de la NTC
Rntc=(Vout*Rfija)/(Vin-Vout);
//Y por ltimo la temperatura en Kelvin
TempK = Beta/(log(Rntc/R25)+(Beta/T0));
//Y ahora la pasamos a celsius
TempC = TempK-273.15;
sprintf(cadena,"T = %0.0f",TempC); //impresion tempC
lcd_gotorc(2,4);
lcd_puts(cadena);
lcd_gotorc(2,11);
lcd_data(grado);
lcd_gotorc(2,12);
lcd_puts("C.");
}

//****************************************************************************
// Configurar el conversor ADC
//****************************************************************************
void adc_setup(void)
{
// Vref+ y Vref= VCC y GND
// Justificacin de resultado = Derecha
ADMUX = 0x40;
// Reloj de ADC
= F_CPU/64 = 125kHz
// Estado del conversor
= Habilitado
// Modo de conversin
= Manual
ADCSRA = 0x86;

Atmel
8

Microcontroladores
Universidad del Callao, 2013
}
//****************************************************************************
// Lee el canal 'channel' del conversor ADC
//****************************************************************************
unsigned int adc_read(char channel)
{
ADMUX &= 0xF8;
//
ADMUX |= channel;
// Seleccionar canal
ADCSRA |= (1<<ADSC);

// Iniciar conversin

while(ADCSRA & (1<<ADSC)); // Esperar a que termine la conversin

return ADC;

// Retornar resultado de conversin

3.4.- Genere el archivo +.hex

3.5.- Realizar la simulacin y luego las pruebas correspondientes

Figura N8.-Simulacion

Atmel
9

Microcontroladores
Universidad del Callao, 2013

Figura N9.-Implementacion
4.- Diga cinco aplicaciones de este sistema de medicin
o
o
o
o
o

Termometro digital
Sensor para control de temperatura de fuentes
Voltimetro digital implementado en fuentes
Control de dispositivos mediante ADC
Sistema de enfriamiento de motores con control de temperatura

5.- DIGA SUS CONCLUSIONES


Las multiples practicas para poder programar un Atmegaxx8 usando el conversor
ADC nos muestra la gran utilidad que puede tener , ya que las seales analogas
estan presentes en cualquier dispositivo como sensores de temperatura ,
acelerometros, potenciometros , etc.

Atmel
10