# Reloj Digital, utilizando el timer Pic 16f877A



## victorrock13 (Sep 18, 2010)

Hola que tal, me estoy iniciando en esto de los micros, y me encargaron hacer un reloj digital que utilice como entrada para contar exacto 1 segundo (utilizando el timer del pic), convertir una onda senoidal a cuadrada, y esta que entre al pic, y funcione como reloj, todo en ensamblador, he encontrado un contador que cuenta a 9 y regresa, lo que quiero saber es como hacer el reloj algo parecido a contadores en cascada, el reloj lleva segundos, Muchas Gracias


----------



## ivan_mzr (Sep 18, 2010)

Muy rebuscado... una cosa es convertir la onda senoidal a cuadrada y otra lo de contar... mejor organiza tus preguntas para no entenderte mal. Para cambiar la cuenta del tiempo solo utilizas: INCF para incrementar el registro de segundos y cuando llega a 60 reinicia e incrementa en los minutos.


----------



## victorrock13 (Sep 18, 2010)

Si mira, lo que quiero es como poder hacer un reloj, utilizando el timer de contador que tiene el Pic, mi idea, es utilizar un tren de pulsos que entren de manera digital al pic, y que este registre el conteo, para los segundos, minutos y horas, multiplexeado. Gracias


----------



## ivan_mzr (Sep 18, 2010)

Bueno eso habia entendido, es simple si separas las partes que necesitas. Pero tienes que agarrar corte y ser mas especifico en lo que quieres, si quieres o buscas el .asm que haga todo eso, va a estar canijo... 

Para el tiempo incrementas el registro de segundos en cada interrupcion y para desplegarlo lo conviertes a BCD. 

```
org     0x004           ;ubicacion de las interrupciones

PER_INT_V
        
        BTFSC   PIR1, TMR1IF    ; Timer1 hay desborde?
        GOTO    T1_OVRFL        ; Si, opderacion de interrupcion

                                ;no deberia llegar a este punto...


T1_OVRFL
        BCF     PIR1, TMR1IF    ;limpia la bandera de interrupcion Timer1 
        MOVLW   0x80            ;agrega 0h80 
        MOVWF   TMR1H           ;para aumentar 1 segundo
        btfsc   BANDERA,1       ;interrupcion indeseada, salta y regresa     
        incf    SEG,1           ;decrementa el registro de segundos
        BSF     T1CON, TMR1ON   ;activa el Timer1 
         
        RETFIE                  ;Retorno de la interrupcion
```
y para el multiplexado yo lo e hecho asi:

```
SWAPF   DSEG,0                     ;display minutos
     ANDLW   0FH
     CALL    TABLE
     MOVWF   PORTB
     BSF     PORTA,4
     CALL    DELAY
     BCF     PORTA,4
 
    bsf        PORTD,3
    
     MOVFW   DSEG                       ;display minutos
     ANDLW   0FH
     CALL    TABLE
     MOVWF   PORTB
     BSF     PORTA,5
     call    DELAY
     bcf     PORTA,5
        RETURN
```
el delay es de 0x3F a 4Mhz quedo asi:


----------



## ignaciolin4 (Mar 5, 2013)

Hola amigo, soy nuevo es esto de la programación de pic en mplab, no entendi bien el codigo. Lo podrias expliar un poco? 

Gracias de ante mano amigo!


----------



## ThaConectted (Mar 6, 2013)

Buenos dias compañeros del foro, buscando en internet me encontre un reloj multiplexado.Y quise probarlo pero me surgieron algunas dudas que no he podido resolver espero y puedan ayudarme.
Lo primero que hize fue conectarlo en el protoboard con un solo display ya que no poseo las librerias en el isis para poderlo pasar al ares(pensaba hacerlo en express pcb, el diseño).
Pero en el protoboard nose de que forma sea la correcta de conectar ya que en el esquematico muestra 6 tierras conectadas al CD4009.
¿Las dos tierras de cada display se conectan juntas y de ahi se conecta al CD4009?

Ya he realizado el circuito asi y lamentablemente no me funciona correctamente,espero puedan ayudarme


----------



## Gudino Roberto duberlin (Mar 6, 2013)

Amigo, bueno para empezar, debes añadir las resistencias limitadoras, una a cada segmento.
Ademas el CD4009, no posee la capacidad de corriente como para alimentar un digito.
Utiliza transistores.


----------

