relojito+microcontrolador+atmega32

7
 Implementación de un reloj con termómetro digital Led. Diego Carrera #1 Rodrigo Cueva #2 Alex Guaman #3 Dalton Gallegos #4  #1  Profesionales en formación, Universidad Técnica Particular de Loja  Loja, Ecuador 1 [email protected] 2 [email protected] 3 [email protected] 4 [email protected] R esume n   El presente proyecto se basa en el diseño e implementación de un reloj digital con termómetro, en un micro controlador ATMEGA y su programación en C. El sistema constara con 60 led’s que nos indicaran los segundos y 4 displays que mostraran las horas y segundos (HH:MM), al igual que la temperatura ambiente en grados Celsius y Fahrenheit, el mismo que podrán ser controlados por 4 pulsadores que configuraran las funciones de reloj y temperatura permitiendo al usuario configurarlo. Palab r as clave s    grados Celsius, grados Fahrenheit. I. DESCRIPCIÓN El presente trabajo es un reloj de pared bastante especial, además de dar la hora (como todo reloj que se precie como tal), también nos muestra la temperatura ambiente. Pero lo que lo hace diferente a la mayoría de los relojes electrónicos es la forma en que está construido su particular segundero. En efecto, en lugar de indicar el transcurso de los segundos mediante un  par de display LED de 7 segmentos como es habitual, lo hace mediante 60 diodos LED dispuestos en forma de circulo a lo largo del borde exterior del circuito impreso que aloja todos los componentes del reloj Figura 1. [1]  Figura 1: Circuito. El reloj que vamos a construir puede indicar la hora y los minutos mediante 4 display LED de 7 segmentos, en el formato HH:MM”, donde los :centrales están constituidos por los DP de los displays. Además los displays también se utilizan para mostrar la temperatura, que se obtiene mediante un sensor de temperatura LM 35 analógico. [1]  El segundero, como decíamos, es una circunferencia formada por 60 LEDs de 5mm, controlados mediante solamente dos pines del Microcontrolador ATMEGA 32. Esto es posible gracias a la utilización de un registro de desplazamiento construido a partir de 8 circuitos integrados 74LS164N. [1]  Además hemos dotado al reloj de 4 pequeños pulsadores, que servirán para llevar a cabo las tareas de puesta en hora, selección del modo de funcionamiento y temperatura. [1]  Si bien el circuito del Reloj puede resultar intimidante  por su tamaño (emplea 9 circuitos integrados y 68 resistores) en realidad no es tan complejo como parece. El esquema se basa en un Microcontrolador ATMEGA 32 que se encarga de llevar a cabo todas las tareas necesarias Figura 2. Figura 2: Circuito del reloj.

Upload: marco-encinas

Post on 15-Jul-2015

154 views

Category:

Documents


5 download

TRANSCRIPT

5/13/2018 Relojito+microcontrolador+ATMEGA32 - slidepdf.com

http://slidepdf.com/reader/full/relojitomicrocontroladoratmega32 1/7

Implementación de un reloj con termómetro digitalLed.

Diego Carrera#1Rodrigo Cueva#2Alex Guaman#3Dalton Gallegos#4

#1Profesionales en formación, Universidad Técnica Particular de Loja

Loja, Ecuador

[email protected]@utpl.edu.ec

[email protected]

[email protected]

Resumen — El presente proyecto se basa en el diseño eimplementación de un reloj digital con termómetro, en un microcontrolador ATMEGA y su programación en C. El sistemaconstara con 60 led’s que nos indicaran los segundos y 4 displays

que mostraran las horas y segundos (HH:MM), al igual que latemperatura ambiente en grados Celsius y Fahrenheit, el mismoque podrán ser controlados por 4 pulsadores que configuraran lasfunciones de reloj y temperatura permitiendo al usuario

configurarlo.

Palabras claves — grados Celsius, grados Fahrenheit.

I. DESCRIPCIÓN

El presente trabajo es un reloj de pared bastante especial,además de dar la hora (como todo reloj que se precie como tal),también nos muestra la temperatura ambiente. Pero lo que lo

hace diferente a la mayoría de los relojes electrónicos es laforma en que está construido su particular segundero. En efecto,en lugar de indicar el transcurso de los segundos mediante unpar de display LED de 7 segmentos como es habitual, lo hacemediante 60 diodos LED dispuestos en forma de circulo a lolargo del borde exterior del circuito impreso que aloja todos loscomponentes del reloj Figura 1. [1]

Figura 1: Circuito.

El reloj que vamos a construir puede indicar la hora y losminutos mediante 4 display LED de 7 segmentos, en elformato “HH:MM”, donde los “:” centrales están

constituidos por los DP de los displays. Además losdisplays también se utilizan para mostrar la temperatura,que se obtiene mediante un sensor de temperatura LM 35analógico. [1]

El segundero, como decíamos, es una circunferenciaformada por 60 LEDs de 5mm, controlados mediantesolamente dos pines del Microcontrolador ATMEGA 32.Esto es posible gracias a la utilización de un registro dedesplazamiento construido a partir de 8 circuitos integrados74LS164N. [1]

Además hemos dotado al reloj de 4 pequeños pulsadores,que servirán para llevar a cabo las tareas de puesta en hora,

selección del modo de funcionamiento y temperatura. [1]

Si bien el circuito del Reloj puede resultar intimidantepor su tamaño (emplea 9 circuitos integrados y68 resistores) en realidad no es tan complejo como parece.

El esquema se basa en un Microcontrolador ATMEGA32 que se encarga de llevar a cabo todas las tareasnecesarias Figura 2.

Figura 2: Circuito del reloj.

5/13/2018 Relojito+microcontrolador+ATMEGA32 - slidepdf.com

http://slidepdf.com/reader/full/relojitomicrocontroladoratmega32 2/7

Los pulsadores encargados de la gestión de la puesta en horay selección del modo de funcionamiento se encuentranconectados a los pines 15, 16, 17 y 18, del PORTD. Cada uno deestos pines se ha puesto a +V mediante un resistor de 330Ω.Cada vez que presiona un pulsador, el pin correspondiente sepone a GND.

La temperatura se lee desde un sensor LM35, conectado al

pin 36 del microcontrolador. Este pin corresponder al PORTAADC4.

Para mostrar tanto la información correspondiente a las horasy minutos como los datos de la temperatura, se emplearon 4display LED de 7 segmentos de unos 3.5 centímetros de altura.El modelo elegido fue el LDS-5161H. Se trata de un display decátodo común, donde cada segmento está constituido por dosLEDs rojos en serie. Los “:” centrales están formados por losDP de los dos displays centrales usando el tercer displaytranspuesto (invertido) de tal forma que nos presente los “:”

centrales.

Dado que el multiplexar estos displays mediante las técnicastradicionales hubiese exigido un elevado número de pinesde E/S del microcontrolador ATMEGA32, se utilizó un registrode desplazamiento o barrido. Cada una de las salidas estáconectada a los pines 33,34,35,37,38,39,40 del PORTA y pin 29del PORTC, y el barrido que habilita los displays se los hacecon los pines 1,2,3,4 del PORTB.

El mismo truco del registro de desplazamiento se utilizó paracontrolar los 60 LEDs que conforman el segundero. Esta vezfueron necesarios 8 circuitos integrados 74LS164N. Esteregistro dispone de 64 salidas, de las que se aprovechan solo lasprimeras 60.

Cada una de estas salidas controla uno de los LEDs a travésde un resistor de 300Ω que limita la corriente que los atraviesapor el mismo.

La etapa de alimentación esta construida alrededor deun regulador de voltaje LM7805 que proporciona la corrientenecesaria al microcontrolador, los LEDs, los displays y el sensorde temperatura. [1]

A. Diagrama de Flujo:

B. Registo de desplazamiento:

Un "registro de desplazamiento" es una configuracióncircuítal muy utilizada, generalmente para convertir unflujo de datos en forma serial a uno del tipo paralelo,motivo por el cual a menudo los chips encargados de estatarea son llamados "conversores serie-paralelo". [2]

Los datos que son enviados desde el microcontroladorpasan al registro de desplazamiento con cada pulso de relojque envía los datos o el valor a encender los LEDs. [2]

Muchos circuitos de registros de desplazamiento "reales"también incluyen un sistema de RESET, que permite ponersimultáneamente todas las salidas en "0" o estado bajo, sinnecesidad de ingresar 8 ceros seguidos. Esto permitelimpiar rápidamente el registro de desplazamiento. [2]

Cuando decimos "rápidamente" nos referimos a quecomo la velocidad de los pulsos del reloj (CLOCK) nopuede ser infinita (típicamente el máximo ronda los 10 o 20MHz) y cada dato demora el tiempo de un pulso de reloj en

desplazarse por el registro, introducir 8 "0"s llevaría 800 ns(100 ns * 8 bits), contra los 100 ns que demora en aplicarseel RESET. No obstante, para obtener los tiempos exactosimplicados se debe consultar la hoja de datos del integradoque estemos utilizando, ya que los límites varían inclusocon la tensión de alimentación y la temperatura. [2]

C. Sensor de Temperatura LM35:

El LM35 es un sensor de temperatura con una precisióncalibrada de 1ºC y un rango que abarca desde -55º a+150ºC. [3]

El sensor se presenta en diferentes encapsulados pero elmás común es el to-92 de igual forma que un típicotransistor con 3 patas, dos de ellas para alimentarlo y latercera nos entrega un valor de tensión proporcional a latemperatura medida por el dispositivo. Con el LM35 sobrela mesa las patillas hacia nosotros y las letras delencapsulado hacia arriba tenemos que de izquierda aderecha los pines son: VCC - Vout - GND. [3]

La salida es lineal y equivale a 10mV/ºC por lo tanto:

+1500mV = 150ºC

+250mV = 25ºC

-550mV = -55ºC

Funcionamiento: Para hacernos un termómetro lo únicoque necesitamos es un voltímetro bien calibrado y en laescala correcta para que nos muestre el voltaje equivalentea temperatura.

5/13/2018 Relojito+microcontrolador+ATMEGA32 - slidepdf.com

http://slidepdf.com/reader/full/relojitomicrocontroladoratmega32 3/7

El LM35 funciona en el rango de alimentación comprendidoentre 4 y 30 voltios. [3]

Podemos conectarlo a un conversor Analógico/Digital y tratarla medida digitalmente, almacenarla o procesarla con elmicrocontrolador usando la siguiente formula para convertir deFahrenheit a grados Celsius. [6]

[6]

Con esto se facilita mucho en el cálculo de la temperatura en elmicrocontrolador

III. COMPONENTES

La lista de componentes que empleamos es la siguiente:

8 circuitos integrados 74LS164N. 60 resistores de 300 ohm, 1/2 de Watt. 4 resistores de 330 ohm, 1/2 de Watt. 1 microcontrolador ATMEGA32.

1 sensor de temperatura LM35 1 condensador electrolítico de 470uF/25V. 4 displays de cátodo común LDS-5161H. 60 LEDs rojos de 5mm. 4 pulsadores de 8mm para circuito impreso. 1 reguladores de voltaje LM7805. 4 resistores de 1K, 1/2 de Watt. 4 transistores 2N3904 NPN. 1 Baquelita de fibra de vidrio.

Figura 3: Circuito PCB. La presente figura 3 nos muestra el diseño de la baquéla que fuequemada para muestro circuito del reloj.

IV. CONCLUSINES

El uso y aplicación básica de un microcontroladorATMEGA32 en la implementación de un reloj.

La manera más fácil de integrar varias etapas dediseño en un solo circuito y usando un solomicrocontrolador.

La conversión de la temperatura de analógica adigital por software usando el ADC delmicrocontrolador.

Es necesario configurar perfectamente el relojinterno del microprocesador para que el reloj nopresente adelantamientos o retardos.

Tener bien claro las etapas de diseño o diagramade flujo para evitar contratiempos en laprogramación del microcontrolador.

V. RECOMENDACIONES

En el uso del microcontrolador se debe tener encuenta la cantidad de procesamiento que este va a

cargar o alojar pese que este circuito se le quisoincrementar un código para fecha y alarma elmicrocontrolador se trababa.

Se debe tener bien en cuenta a la hora de asignarlos puertos del microcontrolador antes de empezarla etapa de programación.

VI. REFERENCIAS

[1] [En línea] <http://www.ucontrol.com.ar/wiki/index.php?title=El_relojito>[Consultada: 21 de enero 2011]

[2] [En línea]<http://www.ucontrol.com.ar/wiki/index.php?title=Registro_de_desplazamiento> [Consultada: 21 de enero 2011]

[3] [En línea] <http://www.x-robotics.com/sensores.htm> [Consultada: 21 deenero 2011][4] [Software] <CodeVision AVR C Compiler> Versión 2.05. 2010.[5] [Software] <Proteus> Versión 7.7. Labcenter Electronics 2009.[6] Embedded C Programming and the Atmel AVR - Barnett, Cox and O’Cull,

Thomson 2006.

5/13/2018 Relojito+microcontrolador+ATMEGA32 - slidepdf.com

http://slidepdf.com/reader/full/relojitomicrocontroladoratmega32 4/7

VII. ANEXOS

Código Reloj.c

El presente código realiza las funciones de reloj ypresentación de temperatura

/*****************************************************This program was produced by the

CodeWizardAVR V2.04.4aAutomatic Program Generator© Copyright 1998-2009 Pavel Haiduc, HP InfoTech s.r.l.http://www.hpinfotech.com

Project : RelojVersion : 1.0Date : 13/11/2010Author :Company : UTPLComments: Free Comments

Chip type : ATmega32Program type : ApplicationAVR Core Clock frequency: 4,000000 MHzMemory model : Small

External RAM size : 0Data Stack size : 512*****************************************************/

#include <mega32.h>#include <delay.h>#include <stdlib.h>#include <stdio.h>#define ADC_VREF_TYPE 0x00

static unsigned int cont_timer, cont_timer1; /* .5 second varible del conteo*/

int uni_seg, dec_seg, uni_min, dec_min, uni_hor, dec_hor, modo, modo1,barrid;

unsigned char valor_vin [6];char u, d, uf, df; /* variables de unidades y decenas del termometro*/

// ADC interrupt service routine

char ADC_Vin;char ADC_Vin_F;

interrupt [TIM0_OVF] void timer0_ovf_isr(void)TCNT0 = 6;++cont_timer1;

if (cont_timer1 == 349)PORTC.1 = (PORTC.1 1);cont_timer1 = 0;

barrid++; //medio segundos

if (barrid>120)barrid=0;

++cont_timer; /*contador*/

if (cont_timer == 700)

PORTA.7 =(PORTA.7 ^ 1); // para que parpadee cada segundocont_timer = 0; /*reset time counter for next .5 second*/

if(PIND.4==0)

modo++;if(modo>3)modo=0;

//UNIDADES Y DECENASuni_seg++; //Segundosif (uni_seg>9)

uni_seg=0;dec_seg++;if(dec_seg>5)

dec_seg=0;uni_min++; //Minutos

if(uni_min>9)uni_min=0;dec_min++;

if (dec_min>5)dec_min=0;uni_hor++; //Horas

if(uni_hor>9)

uni_hor=0;dec_hor++;

if((dec_hor==2 && uni_hor==3) && (dec_min==5 &&uni_min==9)&& (dec_seg==5 && uni_seg==9))

uni_seg=dec_seg=uni_min=dec_min=uni_hor=dec_hor=0;

//INICIALIZA EL RELOJ

// External Interrupt 0 service routineinterrupt [EXT_INT0] void ext_int0_isr(void) //INT0 SIRVE PARAINCREMENTAR

//INCREMENTO DEL RELOJif (modo==2)/*INCREMENTA MINUTOS*/ uni_min++;

if(uni_min>9)uni_min=0;dec_min++;

if (dec_min>5)dec_min=0;

if (modo==3) //INCREMENTA HORAS// uni_hor++;

if(uni_hor>9)uni_hor=0;

5/13/2018 Relojito+microcontrolador+ATMEGA32 - slidepdf.com

http://slidepdf.com/reader/full/relojitomicrocontroladoratmega32 5/7

dec_hor++;

if((dec_hor==2 && uni_hor==4))dec_hor=uni_hor=0;

// External Interrupt 1 service routineinterrupt [EXT_INT1] void ext_int1_isr(void)

//DECREMENTO DEL RELOJif (modo==2)/*DECREMENTA MINUTOS*/ uni_min--;

if(uni_min<0)uni_min=9;dec_min--;

if((dec_min==0 && uni_min==0))

dec_min=5;uni_min=9;

if (modo==3)/*DECREMENTA HORAS*/ uni_hor--;

if(uni_hor<0)uni_hor=9;dec_hor--;

if((dec_hor==0 && uni_hor==0))dec_hor=2;

uni_hor=3;

interrupt [ADC_INT] void adc_isr(void)

unsigned int adc_data;

adc_data=ADCW;ADC_Vin=adc_data*0.00495*100;ADC_Vin_F=adc_data*((0.00495*100)*1.8)+32;

// Read the AD conversion result

d = ADC_Vin/10;u = ADC_Vin%10;df = ADC_Vin_F/10;uf = ADC_Vin_F%10;

ftoa(ADC_Vin,2,valor_vin);ADCSRA= ADCSRA|0x40;

if(PIND.1==0)modo1++;

if(modo1>2)

modo1=0;

void deco(int i)

if(i==0 || i==2 || i==3 || (i>4 && i<11)|| i==12 || i==15) /*a*/ PORTA.0=1;

else PORTA.0=0;

if(i<5 || (i>6 && i<10)) /*b*/ PORTA.1=1;

else PORTA.1=0;

if(i==0 || i==1 || (i>2 && i<10)) /*c*/ PORTA.2=1;

else PORTA.2=0;

if(i==0 || i==2 || i==3 || i==5 || i==6 || i==8 || i==12) /*d*/ PORTA.3=1;

else PORTA.3=0;

if(i==0 || i==2 || i==6 || i==8 || i==12 || i==15) /*e*/ PORTC.7=1;

else PORTC.7=0;

if(i==0 || (i>3 && i<7) || (i>7 && i<10) || i==12 || i==15) /*f*/ PORTA.5=1;

else PORTA.5=0;

if((i>1 && i<7) || (i>7 && i<10) || i==15) /*g*/ PORTA.6=1;

else PORTA.6=0;

void main(void)

DDRA = 0xEF; //puerto A como salida de fuente a displays y entradadel sensor

DDRD = 0x00; //puerto D como entrada de interrupcionesDDRC = 0xFF; //puerto C como señal de leds y entrada de señal de

sensorDDRB = 0xFF; //puerto B como salida a los displaysGICR = 0b11000000;//Activar las interrupcionesMCUCR= 10; // Detenciòn de las interrupciones (INT0,INT1) por

flanco de bajada /*set timer 0 prescaler to clk/8*/ TCCR0=0x02;TCNT0=6;OCR0=0x00;

/* unmask Timer 0 overflow interrupt*/ TIMSK=0x01; // ADC initialization

// ADC Clock frequency: 1000,000 kHz // ADC Voltage Reference: AREF pinADMUX=0x04; //CANAL 4

ADCSRA=0xCE|0x04;

UCSRA=0x00;UCSRB=0x18;UCSRC=0x86;UBRRH=0x00;UBRRL=0xCF;

/* enable interrupts */ //HABILITA INTERRUPCIONES#asm("sei")

while (1)

5/13/2018 Relojito+microcontrolador+ATMEGA32 - slidepdf.com

http://slidepdf.com/reader/full/relojitomicrocontroladoratmega32 6/7

if (modo==0)/*PRESENTA RELOJ*/

//BARRIDO DE DISPLAYPORTB=1;deco(uni_min);delay_ms(1);PORTB=2;deco(dec_min);delay_ms(1);PORTB=4;deco(uni_hor);delay_ms(1);PORTB=8;deco(dec_hor);delay_ms(1);if (modo==1)/*PRESENTA SEGUNDOS*/ PORTB=1;deco(uni_seg);delay_ms(1);PORTB=2;deco(dec_seg);delay_ms(1);

if (modo==2) /*PRESENTA MINUTOS PARA IGUALAR*/ PORTB=1;deco(uni_min);delay_ms(1);PORTB=2;deco(dec_min);delay_ms(1);if (modo==3) /*PRESENTA HORAS PARA IGUALAR*/ PORTB=4;deco(uni_hor);delay_ms(1);PORTB=8;deco(dec_hor);delay_ms(1);

if (modo1==1)/*PRESENTA GRADOS CELSIUS O CENTÍGRADOS*/ PORTB=2;

deco(12);delay_ms(50);

PORTB=4;deco(u);delay_ms(50);

PORTB=8;deco(d);delay_ms(50);

if (modo1==2)/*PRESENTA GRADOS FAHRENHEIT*/

PORTB=2;deco(15);delay_ms(50);

PORTB=4;deco(uf);delay_ms(50);

PORTB=8;deco(df);delay_ms(50);

if(barrid==120) /*Barrido de Leds*/ PORTC.0=0;

elsePORTC.0=1;

Datasheets

Figura 1: ATMEGA32 1

Figura 2: Sensor de temperatura LM35 1

Memoria del proyecto:

Figura 3: Reloj en diseño.

5/13/2018 Relojito+microcontrolador+ATMEGA32 - slidepdf.com

http://slidepdf.com/reader/full/relojitomicrocontroladoratmega32 7/7

Figura 4: Reloj en uso.

Referencias anexos:

1.- En Línea: <http://www.datasheetcatalog.com/>