Anda di halaman 1dari 5

.

UNIVERSIDAD DE LAS AMRICAS


TALLER2
Andr Torres
aectorres@udlanet.ec
Darwin Suarez
dnsuarez@udlanet.ec

ABSTRACT: Este documento es un resumen de lo

devolver la temperatura en un rango de 2C a 110C. Y


su variacin es de 0,1C. Para tomar esta lectura y tener
una presin ms exacta usamos un Vref de 1,1V. Con
esta forma se podr visualizar la temperatura deseada
en grados en el display.

realizo en el taller llevado a cabo en clases. En el


cual utilizamos un sensor de temperatura LM35, el
cual nos devuelve una lectura analgica, que
nosotros la transformamos a digital y la mostramos
mediante un display de 4 dgitos. Para ver en video
el funcionamiento de este proyecto puede visitar el
siguientelink:
https://www.youtube.com/watch?
v=nQDGT5KSZvM&feature=youtu.be

I.

Como sabemos el display necesita de un barrido para


poder mostrar el nmero y/o letra, tenemos que poner
una velocidad bastante grande para que el ojo humano
lo pueda ver sin problemas con la line de cdigo
_delay_ms(). El manejo de los transistores funciona
como switches (interruptores elctricos), los cuales
dejan pasar corriente y viceversa ya que
constantemente se estn abriendo y cerrando, pero
esto sucede muy rpidamente. Esto puede funcionar
as gracias al cdigo que mostraremos ms adelante.

INTRODUCCIN

Para la realizacin de este proyecto utilizamos un


microcontrolador Atmega 2560, el cual consta de un
mdulo ADC (Conversin analgica digital). Este
mdulo le permite al microcontrolador recibir una seal
analgica, y luego convertirla en un dato digital. Este
proceso el mdulo ADC lo realiza mediante
aproximaciones sucesivas. El Atmega 2560 nos ofrece
una aproximacin de hasta mximo 10 bits, cuando el
mdulo opera a una frecuencia entre 50Hz y 200Hz. Y
nos da una aproximacin de 8 bits, cuando opera a una
frecuencia de 1MHz.

II.
DESARROLLO
CONTENIDO

DEL

Fig.2: Circuito implementado.

Fig.1: Esquema del circuito.

Una vez que tengamos implementado el circuito en el


protoboard, conjuntamente con el Atmega 2560.
Nuestro siguiente paso es escribir el programa para
que este funcione. Para su desarrollo usaremos el

El sensor LM35 segn su datasheet, funciona con un


rango de voltaje de 2V a 30V. Para nuestro caso lo
conectaremos a 5V. A este voltaje el sensor nos

.
software Atmel Studio, y desarrollaremos en lenguaje
C.

trabajaremos con una frecuencia de 125Khz, por lo que


utilizaremos el prescaler 128. Lo anterior se lo configura
de la siguiente manera:

Lo primeros que tenemos que realizar es incluir algunas


libreras que nos ayudaran en el desarrollo de este
proyecto. Incluiremos la librera delay.h, la cual nos
brinda tiempos en los que el microcontrolador detiene
todas sus tareas, esto nos servir posteriormente para
el barrido del display. Tambin vamos a declarar
algunas variables de arreglos del tipo entero de 8 bits.
El primer arreglos es un arreglo de 10 enteros, que nos
permitir escribir en un entero, como se muestre el
dgito deseado en el display, ya que el display
dependiendo que bit le enviemos prendera su
respectivo LED. El otro arreglo de 4 enteros, nos sirve
para guardar el resultado de la conversin analgica
digital, para que se muestre en el display. Y tambin
declararemos una variable que nos servir de contador
para que la conversin no se realice tan
repetitivamente, ya que no se podra visualizar el dato
de la temperatura correctamente, ya que este de dato
se estar actualizando muy rpido.

ADMUX |= 0X84;
BITS, CH4
ADCSRA |= 0X87;
MODULO, PREESCALER 128

//HABILITO

EL

Seguidamente,
crearemos
la
funcin
barridoDisplay(uint16_t numero), el parmetro que
vemos ah es el dato que se va a mostrar en el display,
el cual lo recibe de la funcin uint16_t leer_AD().
Dentro del cuerpo de la funcin barridoDisplay(uint16_t
numero), vamos a poner en cada posicin (de cero a
tres), del arreglo para los datos el numero
descompuesto en unidades, decenas, centenas y si es
posible miles ya que es prcticamente imposible llegar
a medir miles de grados. Esto se lo realiza as,
asignamos en la posicin cero del arreglo datos el
residuo que resulta de dividir el nmero para 10, luego
en otra lnea de cdigo, dividimos el nmero para 10,
asignando a la variable nmero, as obtenemos las
unidades del numero de 16 bits, luego en la posicin 1
del arreglo datos volvemos a asignar el residuo que
resulta de dividir para 10, y en otra lnea volvemos a
dividir el numero para 10, asignando a la variable
nmero, as obtenemos las decenas, en la posicin 2
del arreglo datos asignamos el residuo que resulta de
dividir el numero para 10 nuevamente, as obtenemos
las centenas, y por ltimo en la posicin 3 del arreglo
datos asignamos la divisin entre el numero para 10.
As obtenemos los miles.

Luego de las libreras y de los arreglos para los dgitos


y para los datos respectivamente, procedemos a crear
una funcin setIO(), la cual va a contener las salidas
para los datos y las salidas para los transistores. En
nuestro caso conectamos las salidas para los dgitos en
el puerto A y la salida para los datos en el nibble bajo
del puerto C. Es necesario poner en 1 los pines que
utilizaremos para las salidas y adems hay que
enmascarar con una OR lgica. Lo anterior se lo
configura de la siguiente manera:

void setIO(){

DATOS

//VREF 1.1V, 10

Luego hay que crear un for el cual va a ir desde i=0,


hasta i<4, es decir va a hacer 4 repeticiones. Dentro del
for vamos a realizar el barrido el cual consiste en mover
i posiciones al puerto de los transistores en cada bucle
o repeticin, con los enmascaramientos necesarios.
Comenzamos poniendo el nibble bajo del puerto C en
ceros con una operacin AND, luego en otra lnea de
cdigo, al miso puerto C ponemos en 1 al pin C0 y lo
recorremos i posiciones, despus le hacemos una
operacin OR, para poner los 1 para que los
transistores dejen pasar su corriente con 1 lgico.
Luego realizamos un IF-ELSE, el cual nos va a servir
para el punto decimal, en este caso queremos que en
la posicin 1 se muestre el punto decimal entonces si,
i==1, que se prenda el punto, sino, que no se apague.
Finalmente ponemos un delay de 2 milisegundos para
que el barrido se aprecie de la mejor manera. Lo
anterior se lo configura de la siguiente manera:

DDRA |= 0XFF;//SALIDAS PARA LOS

DDRC |= 0X0F;//SALIDAS PARA LOS


TRANSISTORES
}
Seguido se llama a la funcin set_AD(), en esta funcin
configuraremos el conversor analgico digital. Primero
vamos a configurar el registro ADMUX, en este registro
vamos escoger el voltaje de referencia a 1,1V, para
esto colocamos en 1 en bit 7 del registro. Y tambin se
escoge el canal por el cual entrara la seal analgica,
para nuestro caso habilitaremos el ch4. Seguido vamos
a configurar el registro ADCSRA, en este registro
habilitamos el mdulo ADC, y escogemos el prescaler
para la frecuencia del mdulo. En este caso

.
void barridoDisplay(uint16_t numero){
dato[0] = numero % 10;
numero = numero / 10;

conversin, este registro de 16 bits se llama ADCW. En


el caso de que el contador sea menor a 30, el programa
entra en el ELSE, aqu solo se aumentara el contador,
para que as no se actualice muy rpido el registro
ADCW, y as mismo retornamos el registro ADCW. Esta
funcin se la implementa de la siguiente manera:

dato[1] = numero % 10;


numero = numero / 10;

uint16_t leerAD(){
if(x> 30)
{
x=0;
ADCSRA |= 0X40;
//INCIA LA CONVERSION
while(!(ADCSRA &
0X10));//ESPERAMOS QUE LA CONVERSION
TERMINE (BANDERA)
ADCSRA
|= 0x10;
//while(ADCSRA &
0X40);
//grados=ADCW;
return ADCW;
}
else
{
x++;
return ADCW;
}
}

dato[2] = numero % 10;


dato[3] = numero /10;
//dato[4] = {1,9,9,5};
for (uint8_t i = 0; i < 4; i++)
{
PORTC &= (0b11110000);
PORTC |= (0B00000001 << i);
//REALIZA EL BARRIDO PARA LOS
TRANSISTORES
PORTA = digitos[dato[i]];

//para el punto decimal


if (i==1)
{
PORTA |=0X01;
}
else
{
PORTA &=0XFE;
}
_delay_ms(2);

}
La funcin leerAD(), es la que me va a devolver el
dato que se obtiene de la conversin. Aqu implantamos
un IF que nos sirve para que la conversin no se realice
tan seguido, ya que si esta se realiza muy rpido, en el
display los datos que mostremos no se podrn apreciar
de la mejor manera. Entonces en este IF comparamos
que el contador, en este caso x, sea mayor a 30. Una
vez dentro volvemos a colocar al contador en cero y
ahora procedemos a iniciar la conversin, para esto
colocamos en 1 lgico el bit 6 del registro ADCSRA,
esto provocara que la conversin se realice. Luego
tenemos que esperar que la conversin termine, para lo
cual utilizamos un WHILE, que mientras el bit 4 del
registro ADCSRA, no se coloque en 0, no se salga del
WHILE. Una vez que se termine la conversin el bit
anterior se colocara en 1 y por lo tanto la conversin
trmino y el programa salen del WHILE. Como ltimo
dentro del IF retornamos el registro del resultado de la

Fig.3: Circuito funcionando.

Como se aprecia en la imagen anterior, el proyecto


funciona apropiadamente mostrando la temperatura de
la habitacin. Con propsito de demostrar como la
temperatura sube, vamos a elevar la temperatura del
sensor con el uso de un cautn:

.
6 tiene para arrancar la conversin AD, el bit 4 se
lo utiliza para la bandera es para darnos cuenta
si la conversin arranc o termin.

El registr ADMUX lo utilizamos para poner el


voltaje de referencia (bits 6 y7), para el bit de
justificacin, es decir si utilizamos 8 bits o 10 bits
para el registro ADCW (bit 5), y para escoger los
canales analgicos.
El dato de ADCW es el componente de las dos
ADCH y ADCL.
El registro ADCSRA lo utilizamos para poner el
prescaler, en los bits 0, 1 y 2, en este caso como
el uC trabaja con una frecuencia de 16000000
MHz, ponemos en 1 los tres bits antes
mencionados para poner el preescaler de 128.
IV.

REFERENCIAS

Fig.4: Elevacin de temperatura.

Como se puede apreciar en el display, la temperatura


que el sensor indica se eleva al contacto del cautn. El
video del circuito en funcionamiento se lo puede ver en
el siguiente enlace: https://www.youtube.com/watch?
v=nQDGT5KSZvM&feature=youtu.be

III.

[1] Atmel. (2016). Atmega manual. Recuperado el 26 de


Septiembre del 2016 de:
http://www2.udla.edu.ec/udlapresencial/pluginfile.ph
p/1064641/mod_resource/content/14/Manual
%20Atmega2560.pdf

[2] J. Rosero (2016). Introduccin al lenguaje C. Recuperado


el 26 de Septiembre del 2016 de:
http://www2.udla.edu.ec/udlapresencial/pluginfile.ph
p/1064640/mod_resource/content/12/Semana3%202016-1.pd

CONCLUSIONES

La conversin AD sirve para transformar de una


entrada con seal analgica y transformarla en
una seal digital.

El registro ADCSRA en el bit 7 tiene la


configuracin de habilitar el modulo AD, en el bit