TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: racu en 19 de Noviembre de 2004, 11:50:00
-
estoy haciendo un sistema de irrigacion en tiempo real
y necesito una rutina para mostrar el tiempo en 4 displays 7 segm de anodo comun
es un reloj digital normal
si sabes por favor enviarme
un saludo...racu
-
Hola, seria bueno que indiques que tipo de micro estas usando, cuantas e/s tenes libres, ya que va ha depender de eso, alguna vez hice uno que necesitaba 11 patas del micro, 7 para cada segmento del display, y 4 para multiplexar los display, logico que puedes en cada uno de los segmentos, multiplexar otras cosas.. teclado por ej.
Saludos
Alejandro.
-
es un 16f84 estoy utilizando 4 salidas para los transistores y 4 para un convertidor BCD 7 segmentos ( 7447 )
los 4 salidas de los transistores son RB4, RB5, RB6, RB7
Y RB0-RB3 son para el convertidor BCD
ESPERO ME PUEDAN AYUDAR
-
Hola, puedes hacer esto: si manejas interrupciones, puedes multiplexar dentro de la rutina de interrupcion, cuando interrumpe por tmr0 (timer 0) por ejemplo hacer lo siguiente.
rDecHora ;registro que almacena las decenas de las horas
rUniHora ;idem para las unidad de las horas
rDecMin
rUniMin
rDecSeg
rUniSeg
-------------------------------------------------------
interrupcion timer 0
-------------------------------------------------------
Cuando entra en la interrupcion, haces esto
; apagas todos los display
bcf display1
bcf display2
bcf display3
bcf display4
movfw rMux
addwf PCL,1
goto muestraDigito1 ;rutina que muestra el digito1
goto muestraDigito2 ;2
goto muestraDigito3 ;3
goto muestraDigito4 ;4
clrf rMux ;cuando mostraste todos, reseteo
;aqui te muestro para un digito, despues lo repites para los demas
muestraDigito1
;aqui trasladas las decenas de las horas
;al puerto donde tienes el conversor a BCD
;luego, simplemente prendes el Display
bsf display1
con esto cada vez que se entre a una interrupcion, se mostrara un
digito distinto, como el ojo no distingue a mas de 25 intermitencias
por segundo, parecera que el display esta todo encendido.
Puedes probar con varios valores de preescalers del tmr0, hasta que
ande como te gusta, o bien poner a la entrada de la interrupcion, un contador
para evitar que en cada interrupcion realice la rutina de multiplexado...
decfsz contador
goto xxxx ; irse sin hacer la rutina de mult
;rutina de multiplexacion
; apagas todos los display
bcf display1
bcf display2
bcf display3
bcf display4
movfw rMux
addwf PCL,1
goto muestraDigito1 ;rutina que muestra el digito1
goto muestraDigito2 ;2
goto muestraDigito3 ;3
goto muestraDigito4 ;4
clrf rMux ;cuando mostraste todos, reseteo
;aqui te muestro para un digito, despues lo repites para los demas
muestraDigito1
;aqui trasladas las decenas de las horas
;al puerto donde tienes el conversor a BCD
;luego, simplemente prendes el Display
bsf display1
Bueno espero te sirva, cualquier duda me consultas, y te puedo hacer llegar
el codigo de un reloj que una vez hice....
Saludos.
Alejandro.
-
Alejandro quiero darte las gracias por lo que estas haciendo.
y tambien pedirte que me envies el codigo de tu reloj
pero que le hagas una variaciòn :
cuando sean las 9:00 se active una salida en el puertoA y cuando sean las 9:01 sea apague la que se activó y prenda otra salida por el puertoA Y, 9:02 se apaga la segunda y se prende un tercer.portA
en serio muchas gracias eres muy buena onda
saludos roger cocios.
racuw@yahoo.com
-
Hola, te paso para que vayas viendo el programa del reloj, tendrias que hacer algunas variantes minimas, respecto a lo que dices de prender y apagar a cierta hora, mira en el archivo de interrupciones del timer 0, cuando incrementa los minutos, y la hora, controla si es en la que tienes que hacer algo, y simplemente lo haces, en unos dias estoy viajando por ello no tengo tiempo para hacer las reformas, empieza leyendo esto, cualquier duda me preguntas, a partir de este viernes por 10 dias no se si podre responderlas, pero en cuanto pueda las contesto... suerte.
Saludos.
Alejandro.
PD: no puedo subir el archivo, te lo paso por correo...
-
Hola, puedes hacer esto: si manejas interrupciones, puedes multiplexar dentro de la rutina de interrupcion, cuando interrumpe por tmr0 (timer 0) por ejemplo hacer lo siguiente.
rDecHora ;registro que almacena las decenas de las horas
rUniHora ;idem para las unidad de las horas
rDecMin
rUniMin
rDecSeg
rUniSeg
-------------------------------------------------------
interrupcion timer 0
-------------------------------------------------------
Cuando entra en la interrupcion, haces esto
; apagas todos los display
bcf display1
bcf display2
bcf display3
bcf display4
movfw rMux
addwf PCL,1
goto muestraDigito1 ;rutina que muestra el digito1
goto muestraDigito2 ;2
goto muestraDigito3 ;3
goto muestraDigito4 ;4
clrf rMux ;cuando mostraste todos, reseteo
;aqui te muestro para un digito, despues lo repites para los demas
muestraDigito1
;aqui trasladas las decenas de las horas
;al puerto donde tienes el conversor a BCD
;luego, simplemente prendes el Display
bsf display1
con esto cada vez que se entre a una interrupcion, se mostrara un
digito distinto, como el ojo no distingue a mas de 25 intermitencias
por segundo, parecera que el display esta todo encendido.
Puedes probar con varios valores de preescalers del tmr0, hasta que
ande como te gusta, o bien poner a la entrada de la interrupcion, un contador
para evitar que en cada interrupcion realice la rutina de multiplexado...
decfsz contador
goto xxxx ; irse sin hacer la rutina de mult
;rutina de multiplexacion
; apagas todos los display
bcf display1
bcf display2
bcf display3
bcf display4
movfw rMux
addwf PCL,1
goto muestraDigito1 ;rutina que muestra el digito1
goto muestraDigito2 ;2
goto muestraDigito3 ;3
goto muestraDigito4 ;4
clrf rMux ;cuando mostraste todos, reseteo
;aqui te muestro para un digito, despues lo repites para los demas
muestraDigito1
;aqui trasladas las decenas de las horas
;al puerto donde tienes el conversor a BCD
;luego, simplemente prendes el Display
bsf display1
Bueno espero te sirva, cualquier duda me consultas, y te puedo hacer llegar
el codigo de un reloj que una vez hice....
Saludos.
Alejandro.
Hola, soy un novato con los PIC. Estoy haciendo un reloj con displays de 7 segmentos y mi idea es multiplexarlos mediante el uso de interrupción por desbordamiento de TMR0. Hace dias que estoy buscando una pista de como hacerlo bien, mis intentos fueron un fracaso. Quisiera agradecer al autor del post arriba citado, gracias a el pude mostrar los datos en los displays.
Muchisimas gracias!