Matriz de Leds con cronometro

¡Hola! Mi compañera y yo tenemos que hacer un proyecto de sistemas digitales para la universidad usando el PIC 16F887 y teniamos pensado hacer una matriz de leds que nos enseñara un cronómetro.Nuestro mayor problema reside a la hora de programar que no sabemos como hacer el cronómetro que deseamos porque pretendiamos usar el Timer0 pero es solo de 8 bits y el Timer 1 es de 16 y sabemos que hay una manera de hacerlo usando solo uno.
Si alguien nos pudiera dar una idea de como desarrollar nuestro proyecto nos seria de mucha ayuda.
Muchas gracias!
 
Pones el preescalado lo mas alto que puedas. Y utilizar variables para almacenar los desbordamientos del timer. Un saludo
 
Hola, Hemos conseguido controlar la matriz de leds con barrido estático que nos visualice algo concreto k no se mueva.
ahora nos toca hacer el cronómetro hemos encontrado un codigo en internet pero del pic 16F84
nos gustaria si nos pudierais ayudar en que cambios realizar para nuestro pic el 16F887 y nos dierais algunas ideas de como hacer el cronómetro.
¡MUCHAS GRACIAS!
 
no puedo mandar privados por-QUE no e mandado 25 mensajes te paso el codigo por aquí vale?
ya eso pensaba que no podria variar mucho. este código tiene un pequeño problema que estamos intetando localizar y es que hay que modificar cuando ra3 se pone a cero para que el programa se detenga. el codigo es:

Código:
List p=16F84 
Incluye “p16f84.inc” 

cont1 equ 0x0C;    asignamos direcciones de memoria 
cont2 equ 0x0D 
cont3 equ 0x0E 
cont4 equ 0x0F 
Lcd_var equ 0x10 

org 0x00 
goto Inicio 
org 0x05 
include “lcd_cxx.ini” 

Inicio bsf STATUS, 5;       Ponemos a 1 el bit 5 de STATUS (entramos en banco1) 
movlw b`00001000´;       Movemos la literal hasta el registro de trabajo, 
(utilizamos una entrada RA3) 
movwf TRISA;        Movemos el registro de trabajo a TRISA 
clrf TRISB;                Ponemos el puerto B como salida. 
mowf OPTION_REG 
bcf STATUS,5;      Ponemos a 0 el bit 5 de STATUS (entramos en banco 0) 
call LCD_INI 
movlw b`00001111´ 
call LCD_REG 

clrf cont1;         Ponemos a 0 los contadores y puerta B 
clrf cont2 
clrf cont3 
clrf PORTB 

Pregunta btfss PORTA, 3;    Activamos el interruptor 
goto Pregunta 

Sigue call Temp;    Si está activado el interruptor, empieza a contar 
call Mostrar_lcd 
incf con1,1;         Cuando pasa 0,1seg incrementa contador 1 
btfss PORTA,3;        Pregunta si está desactivado el interruptor 
call Mostrar_lcd;       Si lo a puesto a cero muestra en LCD 
movlw d`9´;               Si no, mueve el nueve al registro de trabajo 
subwf cont1,0;    Resto 9 al contador 1 
btfss STATUS,2;    Pregunto si la resta es 0 
goto Sigue;    Si no es cero, sigue 
call Temp 
clrf cont1;    Si el cont1 a llegado a 9 , se pone a 0 
incf cont2,1;    Incremento cont2 
movlw d`9´;     Llevo el 9 al registro de trabajo 
subwf cont2,0;    Resto 9 al contador 2 
btfss STATUS,2;    Pregunto se la resta es igual a 0 
goto Sigue;    Si no es cero, se va a sigue 
call Temp 
clrf cont1;    Si el cont2 a llegado a 9, ponemos a 0 los contadores y STATUS,2 
clrf cont2 
incf cont3,1;     Incremento cont3 
movlw d`9´;      Llevo el 9 al registro de trabajo 
subwf cont3,0;       Resto 9 al contador 3 
btfss STATUS,2;   Pregunto se la resta es igual a 0 
goto Sigue;    Si no es cero, se va a sigue 
call Temp 
clrf cont1;     Si el cont3 a llegado a 9, se pone a 0 los contadores 
clrf cont2 
clrf cont3 
goto Sigue;    Volvemos al principio de la cuenta 

Temp movlw d`2´;    Muevo un dos al registro de trabajo 
movwf cont4;     Pongo cont4 a dos 


Retardo bcf INTCON,2;      Pone a cero el bit de rebasamiento del TMR0 
movlw `61´;       Muevo el 61 al registro de trabajo 
movwf TMR0;     Cargo el TMR0 hasta 61 

Explora btfss INTCON,2;     Pregunta si el TMR0 a llegado a 256 (activación del bit) 
goto Explora;     Si no, se va a explora 
decfsz cont4;      Si si, decremento cont4 y se va a retardo 
goto Retardo 
return;        vuelve de la subrutina 

Mostrar_lcd call LCD_REG 
movlw d`30´ 
addwf cont3,0 
call LCD_DATO 
movlw 0x3a 
call LCD_DATO 
movlw d`30´ 
addwf cont2,0 
call LCD_DATO 
movlw d`30´ 
addwf cont1,0 
call LCD_DATO 
return 

end
 
Última edición por un moderador:
Cambia el encabezado por List p=16F887 y Include “p16f887.inc” . Cuidado con este ultimo es Include no Incluye. Cuando utilices constantes en decimal como movlw `61´; pon movlw d'61'; compilalo haber que te dice.
 
no puedo mandar privados por-QUE no e mandado 25 mensajes te paso el codigo por aquí vale?
ya eso pensaba que no podria variar mucho. este código tiene un pequeño problema que estamos intetando localizar y es que hay que modificar cuando ra3 se pone a cero para que el programa se detenga. el codigo es:.....

Siempre es preferible publicar la información en forma pública, de esa forma una mayor cantidad de usuarios puede acceder a ella y aportar una posible solución.
Además:

Normas del Foro

2.3
Los usuarios no pueden publicar mensajes para insinuar o instruir a otro(s) miembro(s) para que revisen su cuenta de correo electrónico, su buzón de mensajes privados, o para indicarles de alguna manera que tienen un nuevo mensaje privado o de correo electrónico, con el objeto de solicitar u ofrecer una respuesta con respecto al tema en cuestión. Tampoco está permitido enviar publicidad u ofertas de servicios no solicitados a través de mensajes privados y/o correo electrónico a otros usuarios de Foros de Electrónica.
 
Para poder parar el cronometro, ¿Tienes libres los pines RB0 RB4 RB5 RB6 o RB7? Asi lo paras mediante una interrupcion. Cuando quieras pasar el código o simulaciones le das a adjuntar archivos y pegas el zip
 
Muchas gracias! haremos lo que nos has dicho! si el cronometro quiero detenerlo con la interrupcion del timer0, tengo que mirar un poco como va porque tambien tenemos que hacer otro proyecto de un laboratorio de digital y estoy haciendo un ascensor entonces estoy un poco liada entre los 2.
MUCHAS GRACIAS!
 
qUE tal amigo me puedes faciliar como te quedo el proyecto yo tambien tu ve los mismo problemas quiero ver como lo solucionastes POR-faVOR
 
Última edición por un moderador:
Atrás
Arriba