TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: racu en 19 de Noviembre de 2004, 11:50:00

Título: reloj display de 7 segmentos
Publicado 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
Título: RE: reloj display de 7 segmentos
Publicado por: ALE1973 en 19 de Noviembre de 2004, 12:24:00
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.
Título: RE: reloj display de 7 segmentos
Publicado por: racu en 19 de Noviembre de 2004, 19:55:00
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
Título: RE: reloj display de 7 segmentos
Publicado por: ALE1973 en 20 de Noviembre de 2004, 05:08:00
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.
Título: RE: reloj display de 7 segmentos
Publicado por: racu en 20 de Noviembre de 2004, 17:39:00
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
Título: RE: reloj display de 7 segmentos
Publicado por: ALE1973 en 23 de Noviembre de 2004, 14:33:00
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...
Título: Re:RE: reloj display de 7 segmentos
Publicado por: RodrigoR en 10 de Julio de 2020, 18:06:45
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!