Sunteți pe pagina 1din 7

Implementacin de un reloj con termmetro digital Led.

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


#1

Profesionales en formacin, Universidad Tcnica Particular de Loja Loja, Ecuador


dfcarrera@utpl.edu.ec 2 rcueva@utpl.edu.ec 3 apguaman@utpl.edu.ec 4 dmgallegos@utpl.edu.ec
1

ResumenEl presente proyecto se basa en el diseo e implementacin de un reloj digital con termmetro, en un micro controlador ATMEGA y su programacin en C. El sistema constara con 60 leds 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 podrn ser controlados por 4 pulsadores que configuraran las funciones de reloj y temperatura permitiendo al usuario configurarlo. Palabras claves grados Celsius, grados Fahrenheit.

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 estn constituidos por los DP de los displays. Adems los displays tambin se utilizan para mostrar la temperatura, que se obtiene mediante un sensor de temperatura LM 35 analgico. [1] El segundero, como decamos, es una circunferencia formada por 60 LEDs de 5mm, controlados mediante solamente dos pines del Microcontrolador ATMEGA 32. Esto es posible gracias a la utilizacin de un registro de desplazamiento construido a partir de 8 circuitos integrados 74LS164N. [1] Adems hemos dotado al reloj de 4 pequeos pulsadores, que servirn para llevar a cabo las tareas de puesta en hora, seleccin del modo de funcionamiento y temperatura. [1] Si bien el circuito del Reloj puede resultar intimidante por su tamao (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.

I. DESCRIPCIN El presente trabajo es un reloj de pared bastante especial, adems de dar la hora (como todo reloj que se precie como tal), tambin nos muestra la temperatura ambiente. Pero lo que lo hace diferente a la mayora de los relojes electrnicos 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.

Figura 2: Circuito del reloj.

Los pulsadores encargados de la gestin de la puesta en hora B. Registo de desplazamiento: y seleccin del modo de funcionamiento se encuentran conectados a los pines 15, 16, 17 y 18, del PORTD. Cada uno de Un "registro de desplazamiento" es una configuracin estos pines se ha puesto a +V mediante un resistor de 330. circutal muy utilizada, generalmente para convertir un Cada vez que presiona un pulsador, el pin correspondiente se flujo de datos en forma serial a uno del tipo paralelo, pone a GND. motivo por el cual a menudo los chips encargados de esta tarea son llamados "conversores serie-paralelo". [2] La temperatura se lee desde un sensor LM35, conectado al pin 36 del microcontrolador. Este pin corresponder al PORTA Los datos que son enviados desde el microcontrolador pasan al registro de desplazamiento con cada pulso de reloj ADC4. que enva los datos o el valor a encender los LEDs. [2] Para mostrar tanto la informacin correspondiente a las horas y minutos como los datos de la temperatura, se emplearon 4 Muchos circuitos de registros de desplazamiento "reales" display LED de 7 segmentos de unos 3.5 centmetros de altura. tambin incluyen un sistema de RESET, que permite poner El modelo elegido fue el LDS-5161H. Se trata de un display de simultneamente todas las salidas en "0" o estado bajo, sin ctodo comn, donde cada segmento est constituido por dos necesidad de ingresar 8 ceros seguidos. Esto permite LEDs rojos en serie. Los : centrales estn formados por los limpiar rpidamente el registro de desplazamiento. [2] DP de los dos displays centrales usando el tercer display transpuesto (invertido) de tal forma que nos presente los : Cuando decimos "rpidamente" nos referimos a que centrales. como la velocidad de los pulsos del reloj (CLOCK) no puede ser infinita (tpicamente el mximo ronda los 10 o 20 Dado que el multiplexar estos displays mediante las tcnicas MHz) y cada dato demora el tiempo de un pulso de reloj en tradicionales hubiese exigido un elevado nmero de pines desplazarse por el registro, introducir 8 "0"s llevara 800 ns de E/S del microcontrolador ATMEGA32, se utiliz un registro (100 ns * 8 bits), contra los 100 ns que demora en aplicarse de desplazamiento o barrido. Cada una de las salidas est el RESET. No obstante, para obtener los tiempos exactos conectada a los pines 33,34,35,37,38,39,40 del PORTA y pin 29 implicados se debe consultar la hoja de datos del integrado del PORTC, y el barrido que habilita los displays se los hace que estemos utilizando, ya que los lmites varan incluso con la tensin de alimentacin y la temperatura. [2] con los pines 1,2,3,4 del PORTB. El mismo truco del registro de desplazamiento se utiliz para C. Sensor de Temperatura LM35: controlar los 60 LEDs que conforman el segundero. Esta vez fueron necesarios 8 circuitos integrados 74LS164N. Este El LM35 es un sensor de temperatura con una precisin registro dispone de 64 salidas, de las que se aprovechan solo las calibrada de 1C y un rango que abarca desde -55 a primeras 60. +150C. [3] Cada una de estas salidas controla uno de los LEDs a travs El sensor se presenta en diferentes encapsulados pero el de un resistor de 300 que limita la corriente que los atraviesa ms comn es el to-92 de igual forma que un tpico por el mismo. transistor con 3 patas, dos de ellas para alimentarlo y la tercera nos entrega un valor de tensin proporcional a la La etapa de alimentacin esta construida alrededor de temperatura medida por el dispositivo. Con el LM35 sobre un regulador de voltaje LM7805 que proporciona la corriente la mesa las patillas hacia nosotros y las letras del necesaria al microcontrolador, los LEDs, los displays y el sensor encapsulado hacia arriba tenemos que de izquierda a de temperatura. [1] derecha los pines son: VCC - Vout - GND. [3] A. Diagrama de Flujo: La salida es lineal y equivale a 10mV/C por lo tanto: +1500mV = 150C +250mV = 25C -550mV = -55C Funcionamiento: Para hacernos un termmetro lo nico que necesitamos es un voltmetro bien calibrado y en la escala correcta para que nos muestre el voltaje equivalente a temperatura.

El LM35 funciona en el rango de alimentacin comprendido entre 4 y 30 voltios. [3] Podemos conectarlo a un conversor Analgico/Digital y tratar la medida digitalmente, almacenarla o procesarla con el microcontrolador usando la siguiente formula para convertir de Fahrenheit a grados Celsius. [6]
[6]

La manera ms fcil de integrar varias etapas de diseo en un solo circuito y usando un solo microcontrolador. La conversin de la temperatura de analgica a digital por software usando el ADC del microcontrolador. Es necesario configurar perfectamente el reloj interno del microprocesador para que el reloj no presente adelantamientos o retardos. Tener bien claro las etapas de diseo o diagrama de flujo para evitar contratiempos en la programacin del microcontrolador. V. RECOMENDACIONES En el uso del microcontrolador se debe tener en cuenta la cantidad de procesamiento que este va a cargar o alojar pese que este circuito se le quiso incrementar un cdigo para fecha y alarma el microcontrolador se trababa. Se debe tener bien en cuenta a la hora de asignar los puertos del microcontrolador antes de empezar la etapa de programacin. VI. REFERENCIAS
[1] [2] [En lnea] <http://www.ucontrol.com.ar/wiki/index.php?title=El_relojito> [Consultada: 21 de enero 2011] [En lnea] <http://www.ucontrol.com.ar/wiki/index.php?title=Registro_de_desplazamie nto> [Consultada: 21 de enero 2011] [En lnea] <http://www.x-robotics.com/sensores.htm> [Consultada: 21 de enero 2011] [Software] <CodeVision AVR C Compiler> Versin 2.05. 2010. [Software] <Proteus> Versin 7.7. Labcenter Electronics 2009. Embedded C Programming and the Atmel AVR - Barnett, Cox and OCull, Thomson 2006.

Con esto se facilita mucho en el clculo de la temperatura en el microcontrolador 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 electroltico de 470uF/25V. 4 displays de ctodo comn 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.

[3] [4] [5] [6]

Figura 3: Circuito PCB.

La presente figura 3 nos muestra el diseo de la baqula que fue quemada para muestro circuito del reloj. IV. CONCLUSINES El uso y aplicacin bsica de un microcontrolador ATMEGA32 en la implementacin de un reloj.

VII. ANEXOS Cdigo Reloj.c El presente cdigo realiza las funciones de reloj y presentacin de temperatura
/***************************************************** This program was produced by the CodeWizardAVR V2.04.4a Automatic Program Generator Copyright 1998-2009 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Reloj Version : 1.0 Date : 13/11/2010 Author : Company : UTPL Comments: Free Comments

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

Chip type : ATmega32 Program type : Application AVR Core Clock frequency: 4,000000 MHz Memory model : Small External RAM size :0 Data 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 segundo cont_timer = 0; /*reset time counter for next .5 second*/ if(PIND.4==0) {

//UNIDADES Y DECENAS uni_seg++; //Segundos if (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 routine interrupt [EXT_INT0] void ext_int0_isr(void) //INT0 SIRVE PARA INCREMENTAR { //INCREMENTO DEL RELOJ if (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;

dec_hor++; } } if((dec_hor==2 && uni_hor==4)) { dec_hor=uni_hor=0; } } } }

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)) PORTA.1=1; else PORTA.1=0; if(i==0 || i==1 || (i>2 && i<10)) PORTA.2=1; else PORTA.2=0; /*b*/

// External Interrupt 1 service routine interrupt [EXT_INT1] void ext_int1_isr(void) { //DECREMENTO DEL RELOJ if (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) {

/*c*/

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) PORTC.7=1; else PORTC.7=0; /*e*/

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) PORTA.6=1; else PORTA.6=0; } /*g*/

void main(void) { DDRA = 0xEF; //puerto A como salida de fuente a displays y entrada del sensor DDRD = 0x00; //puerto D como entrada de interrupciones DDRC = 0xFF; //puerto C como seal de leds y entrada de seal de sensor DDRB = 0xFF; //puerto B como salida a los displays GICR = 0b11000000;//Activar las interrupciones MCUCR= 10; // Detencin 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 pin ADMUX=0x04; //CANAL 4 ADCSRA=0xCE|0x04;

UCSRA=0x00; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0xCF; /* enable interrupts */ //HABILITA INTERRUPCIONES #asm("sei")

while (1)

{ if (modo==0)/*PRESENTA RELOJ*/ { //BARRIDO DE DISPLAY PORTB=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 CENTGRADOS*/ { 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; } }

else PORTC.0=1;

Datasheets

Figura 1: ATMEGA32 1

Figura 2: Sensor de temperatura LM35 1

Memoria del proyecto:

Figura 3: Reloj en diseo.

Figura 4: Reloj en uso. Referencias anexos: 1.- En Lnea: <http://www.datasheetcatalog.com/>

S-ar putea să vă placă și