Problema con un PreDiseño de Reloj para Ajedrez

Vi en algún post de otro foro que justo el reloj que estoy haciendo, le fallaba un poco la programación. y si miras el mensaje numero 17 de este post...vas a ver algo que me parece raro
 
Vuelvo al post para no hacer uno nuevo...

Por otro lado recién ahora hice la PCB y todo pero tuve 2 inconvenientes generales:

1) conseguir el PC16F84 es imposible, por ende compré el 16F628 que es muy similar
2) conseguir el 74LS47...pero al fin lo conseguí.

Vamos con el punto 1)...la programación es para el 16F84A y yo no sé mucho de programación, por ende recurro a ustedes.

Qué habría que cambiar en el programa para poder usar el PIC16F628 en lugar del 16F84????


Gracias!!!
 
Bueno...sigo en el intento del reloj.

Cargo el programa en el MPlab y trato de construir el.HEX pero me larga cuatrochientos errores.

Estoy usando el programador USB y también tengo el pickit 2...eso anda bien y lee el pic y todo...


Cómo puedo hacer que el programa en .asm pase a .hex sin tantos errores?

Repito que el programa era para PIC16F84 y yo sólo dispongo del PIC16F628

Gracias
 
El programa viene con el modo fisher...

ahi lo subo asi ves el proyecto completo...al cual le faltan algunas cosillas igualmente.
 

Adjuntos

  • Ajedrez..pdf
    331.4 KB · Visitas: 16
Sigo en el berenjenal y sin poder salir...

como soy muy novato en programación, pero me gusta demasiado, estoy estudiando...para tal vez entender mejor el programa y reprogramarlo.

Mande mails a ambos correos electronicos del proyecto pero ya no existen...asi que...si alguien sabe mucho de programación y puede colaborar le agradezco :)
 
Lo tengo en casa...voy a ver si lo puedo subir ahora.

Código:
include "p16f84.inc" 
list p=16f84 

; declaracion de variables en posiciones de memoria 
pc equ 02h 
status equ 03h 
ptoa equ 05h 
ptob equ 06h 
tecla equ 0ch 
loop equ 0ah 
loop2 equ 0eh 
rota equ 0fh 
tecla2 equ 10h 
trisa equ 85h 
trisb equ 86h 
z equ 02h 
c equ 00h 
w equ 00h 
dis1 equ 21h 
dis2 equ 22h 
dis3 equ 23h 
dis4 equ 24h 
dis5 equ 25h 
dis6 equ 26h 
dis7 equ 27h 
dis8 equ 28h 
aux equ 29h 
aux1 equ 2ah 
aux2 equ 2bh 
aux3 equ 2ch 
reset org 0 
goto inicio 
org 5 

;rutina de retardo, tiempo de activacion de los transistores 
retardo movlw d'2' 
movwf loop 
top2 movlw d'100' 
movwf loop2 
top nop 
nop 
nop 
nop 
nop 
nop 
decfsz loop2 
goto top 
decfsz loop 
goto top2 
retlw 0 

;rutina de retardo, antirebotes en los pulsadores 
retard1 movlw d'250' 
movwf loop 
to2 movlw d'250' 
movwf loop2 
to nop 
nop 
nop
nop 
nop 
nop 
decfsz loop2 
goto to 
decfsz loop 
goto to2 
retlw 0 

;rutia de retardo, tiempo de apagado del transistores 
retard2 movlw d'1' 
movwf loop 
to3 movlw d'100' 
movwf loop2 
to4 nop 
nop 
nop 
nop 
nop 
nop 
decfsz loop2 
goto to4 
decfsz loop 
goto to3 
retlw 0 

;rutina de decremento del reloj del jugador 1 
juga1 decfsz tecla 
retlw 0 
movlw d'46' 
movwf tecla 
movf dis5,w 
xorlw d'0' 
btfss status,z 
call array 
movf dis6,w 
xorlw d'0' 
btfss status,z 
call array1 
movf dis7,w 
xorlw d'0' 
btfss w,z 
call array2 
movf dis8,w 
bcf status,z 
xorlw d'0' 
btfss status,z 
call array3 
movlw d'0' 
movwf rota 
goto pri1 

;sub rutinas "arrays", para control de tiempo jugador uno... viene de juga1 
array3 movlw d'9' 
movwf dis5 
movwf dis7 
movlw d'5' 
movwf dis6 
decfsz dis8 
goto pri1 
goto pri1 
array2 movlw d'9' 
movwf dis5 
movlw d'5' 
movwf dis6 
decfsz dis7 
goto pri1 
goto pri1 
array1 movlw d'9' 
movwf dis5 
decfsz dis6 
goto pri1 
goto pri1 
array decfsz dis5 
goto pri1 
goto pri1 

;rutina de decremento del reloj del jugador 2 
juga2 decfsz tecla2 
retlw 0 
movlw d'46' 
movwf tecla2 
movf dis1,w 
xorlw d'0' 
btfss status,z 
call array4
movf dis2,w 
xorlw d'0' 
btfss status,z 
call array5 
movf dis3,w 
xorlw d'0' 
btfss status,z 
call array6 
movf dis4,w 
bcf status,z 
xorlw d'0' 
btfss status,z 
call array7 
movlw d'0' 
movwf rota 
goto pri1 

;sub rutinas "arrays", para control de tiempo jugador dos... viene de juga2 
array7 movlw d'9' 
movwf dis3 
movwf dis1 
movlw d'5' 
movwf dis2 
decfsz dis4 
goto pri1 
goto pri1 
array6 movlw d'9' 
movwf dis1 
movlw d'5' 
movwf dis2 
decfsz dis3 
goto pri1 
goto pri1 
array5 movlw d'9' 
movwf dis1 
decfsz dis2 
goto pri1 
goto pri1 
array4 decfsz dis1 
goto pri1 
goto pri1 
cargar movlw d'0' 
movwf dis3 
movwf dis7 
retlw 0 
cargar2 movlw d'0' 
movwf dis4 
movwf dis8 
retlw 0 
; rutina manejo control de asignacion de tiempo a cada jugador al pulsar minuto unidad 
salir call retard1 
call retard1 
movf rota,w 
xorlw d'0' 
btfss status,z 
goto voy 
incf dis3 
incf dis7 
movf dis3,w 
xorlw d'10' 
btfsc status,z 
call cargar 
movlw d'0' 
movwf rota 
voy retlw 0 

;rutina manejo control de asignacion de tiempo a cada jugador al pulsar minutos decimal 
salir1 call retard1 
call retard1 
movf rota,w 
xorlw d'0' 
btfss status,z 
goto voy1 
incf dis4 
incf dis8 
movf dis4,w 
xorlw d'10' 
btfsc status,z 
call cargar2 
movlw d'0' 
movwf rota 
voy1 retlw 0

; pulsador segundo jugador "salir2", manipulando rota detiene el reloj y pone andar el del contrario 
;manipulando rota en 1 
salir2 call retard1 
movf rota,w 
xorlw d'1' 
btfsc status,z 
goto vamos 
movlw d'1' 
movwf rota 
movf dis4,w 
xorlw d'0' 
btfss status,z 
goto vamos 
movf dis3,w 
xorlw d'0' 
btfss status,z 
goto vamos 
call intre 
vamos retlw 0 

;subrutina del pulsador del juez, para los dos relojes.. manipulando rota en 0 
salir3 call retard1 
movlw d'0' 
movwf rota 
retlw 0 

; pulsador primer jugador "salir4" 
;manipulando rota en 2 
salir4 call retard1 
movf rota,w 
xorlw d'2' 
btfsc status,z 
goto vamos1 
movlw d'2' 
movwf rota 
movf dis8,w 
xorlw d'0' 
btfss status,z 
goto vamos1 
movf dis7,w 
xorlw d'0' 
btfss status,z 
goto vamos1 
call intre1 
vamos1 retlw 0 

;***rutina para incremento cuando va menos de 1 minuto primer jugador 
intre movf dis2,w 
xorlw d'0' 
btfss status,z 
goto ha 
aja movf dis1,w 
addlw d'5' 
movwf aux 
movlw d'10' 
subwf aux,0 
btfsc status,c 
call corre 
movf aux,w 
movwf dis1 
chao retlw 0 
ha movf dis1,w 
xorlw d'0' 
btfss status,z 
goto aja 
goto chao 
corre movwf dis1 
movf dis2,w 
addlw d'1' 
movwf aux1 
xorlw d'6' 
btfss status,z 
call cam 
movlw d'0' 
movwf dis2 
movlw d'1' 
movwf dis3 
goto vengo 
cam movf aux1,w 
movwf dis2 
goto vengo 

;*** 
;**rutina para incremento cuando va menos de 1 minuto segundo jugador 
intre1 movf dis6,w 
xorlw d'0' 
btfsc status,z 
goto ha1 
aja1 movf dis5,w
addlw d'5' 
movwf aux2 
movlw d'10' 
subwf aux2,0 
btfsc status,c 
call corre1 
movf aux2,w 
movwf dis5 
chao1 retlw 0 
ha1 movf dis5,w 
xorlw d'0' 
btfss status,z 
goto aja1 
goto chao1 
corre1 movwf dis5 
movf dis6,w 
addlw d'1' 
movwf aux3 
xorlw d'6' 
btfss status,z 
call cam1 
movlw d'0' 
movwf dis6 
movlw d'1' 
movwf dis7 
goto vengo1 
cam1 movf aux3,w 
movwf dis6 
goto vengo1 

;** 
;Programa principal ... donde se hace el barrido para el control del display 
; y lectura del los pulsadores 
inicio movlw d'0' 
movwf dis1 
movwf dis2 
movwf dis3 
movwf dis4 
movwf dis5 
movwf dis6 
movwf dis7 
movwf dis8 
movlw d'46' 
movwf tecla 
movwf tecla2 
bsf status,5 
movlw 1f0h 
movwf trisa 
movlw 00h 
movwf trisb 
bcf status,5 

;hasta aqui configurtacion del puerto 
pri1 movlw 0ffh 
movwf ptob 
movf dis1,w 
movwf ptoa 
call retard2 
movlw 0feh 
movwf ptob 
call retardo 

;hasta aqui muestra el dato por display 1 
movf ptoa,w 
andlw d'16' 
xorlw b'10000' 
btfss status,z 
call salir 

;pregunto por pulsador 1 
movlw 0ffh 
movwf ptob 
movf dis2,w 
movwf ptoa 
call retard2 
movlw 0fdh 
movwf ptob 
call retardo 

;hasta aqui muestra el dato por display 2 
movf ptoa,w 
andlw d'16' 
xorlw b'10000' 
btfss status,z 
call salir1 

;pregunto por pulsador 2 
movlw 0ffh 
movwf ptob 
movf dis3,w 
movwf ptoa 
call retard2 
movlw 0fbh 
movwf ptob 
call retardo
 
;hasta aqui muestra el dato por display 3 
movf ptoa,w 
andlw d'16' 
xorlw b'10000' 
btfss status,z 
call salir2 

;pregunto pulsador 3 
vengo movlw 0ffh 
movwf ptob 
movf dis4,w 
movwf ptoa 
call retard2 
movlw 0f7h 
movwf ptob 
call retardo 

;hasta aqui muestra el dato por display 4 
movf ptoa,w 
andlw d'16' 
xorlw b'10000' 
btfss status,z 
call salir3 

;pregunto pulsador 4 
movlw 0ffh 
movwf ptob 
movf dis5,w 
movwf ptoa 
call retard2 
movlw 0efh 
movwf ptob 
call retardo 

;hasta aqui muestra el dato por display 5 
movf ptoa,w 
andlw d'16' 
xorlw b'10000' 
btfss status,z 
call salir4 

;pregunto pulsador 5 
vengo1 movlw 0ffh 
movwf ptob 
movf dis6,w 
movwf ptoa 
call retard2 
movlw 0dfh 
movwf ptob 
call retardo 

;hasta aqui muestra el dato por display 6 
movlw 0ffh 
movwf ptob 
movf dis7,w 
movwf ptoa 
call retard2 
movlw 0bfh 
movwf ptob 
call retardo 

;hasta aqui muestra el dato por display 7 
movlw 0ffh 
movwf ptob 
movf dis8,w 
movwf ptoa 
call retard2 
movlw 07fh 
movwf ptob 
call retardo 

;hasta aqui muestra el dato por display 8 
;las siguientes lineas me pregunto por el estado del juego 
;es decir, esta jugando player 1 o player 2 
; ademas control el tiempo en segundos por tecla y tecla2 
;rota es la variable que me controla que jugador juega, o si no ha empezado el juego. 
movf rota,w 
xorlw d'0' 
btfsc status,z 
goto pri1 
movf rota,w 
xorlw d'1' 
btfsc status,z 
call juga1 
movf rota,w 
xorlw d'2' 
btfsc status,z 
call juga2 
goto pri1 
end

Espero que estè bien cargado el código y que alguien pueda resolverme las dudas.

Repito que debo modificar el código para usarlo en un PIC16F628

P/D: Lo que yo veo (y como dije en mensajes anteriores) es que cuando define las direcciones y todo eso manda más de 1 al mismo banco...

pc equ 02h
status equ 03h
ptoa equ 05h
ptob equ 06h
tecla equ 0ch
loop equ 0ah
loop2 equ 0eh
rota equ 0fh
tecla2 equ 10h
trisa equ 85h
trisb equ 86h
z equ 02h
c equ 00h
w equ 00h

dis1 equ 21h
 
Última edición:
Le mandé fruta como loco y ya está programado y todo casi listo...

Ahora hago el display y ya lo pruebo....

Pronto...muy pronto...fotos del artefacto...si es que funciona :S
 
Recién hace unos días conseguí los display 7 segmentos...no conseguí verdes pero bueno.

Así que este finde hago la PCB de los displays y ya pruebo el circuito :)

y obviamente subo fotos...
 
Bueno...problemita, ayer probé el circuito del reloj y paso a contarles lo que sucedió:

1) al conectarlo encendieron todos los displays excepto 2
2) se mantuvo encendido, todo perfecto.
3) presioné un pulsador cualquiera para programar algo, o hacer algo y en ese momento se apagó todo y listo no volvió a encender

Probé desconectar todo, sacar el pic y todo pero no enciende más.


Ningún integrado o transistor se calentó, ni nada que se le parezca...el regulador de tensión sigue dando casi 5V como siempre...es muy raro.

Solicito ayuda :s

Agrego: acabo de probar el PIC en el programador, y la pc lo reconoce, el programa lo lee y parece estar todo en orden...puede ser que se hayan quemado los displays??

Agrego: será que se quemó el decodificador? las resistencias son de 100 ohms como dice el circuito...pero por cálculos deberian ser de unos 220ohms o 330ohms
 
Última edición:
Atrás
Arriba