# Como construir un reloj de ajedrez



## quimypr (Abr 14, 2007)

Hola a todos, les cuento que estoy en 4to año de una escuela industrial (Otto Krause), en la especialidad de electronica.

Soy nuevo en esta pagina y me gustaria q alguien me pudiera ayudar con este tema:

Como construir un reloj digital de ajedrez.

El mismo deberia estar formado por dos contadores regresivos q lleguen hasta 9hs:59minutos.

El tiempo inicial deberia poder se configurado por el usuario.

Lo q se me ocurre (no se si se puede hacer) es usar 4 displays en cada contador, mientras los contadores muestren hasta la hora entera marcarian las horas y los minutos. Cuando el reloj pase a los 59 minutos, marcaria los minutos y los segundos. Y a partir de los 5 minutos marcarian los minutos enteros, los segundos y las decimas de segundos.

Ejemplo

Una hora, veinte minutos, diez segundos:

1:20

Cuarenta minutos, cincuenta segundos

40:50

Tres minutos, diez segundos, 8 decimas

3:10.8


Otra cosa q deberia tener el reloj es incremento, es decir q se pueda configurar la cantidad de segundos q se sumarian por jugada.


Bueno, lo que espero de las respuestas de este comentario no es q me resuelvan el problema, sino q todos tratemos de construir este proyecto q estaria buenisimo armar. A los q saben por favor coaboren 

Muchas Gracias


----------



## quimypr (Abr 21, 2007)

Che si contestan no me enojo eh???


----------



## maunix (Abr 23, 2007)

¿y qué es lo que debemos contestar?  más que contestar, se me ocurren 134123 preguntas!!

¿usaras un microcontrolador o circuitos integrados?
¿qué micro usaras?
¿tienes idea de programar un micro?
¿tienes duda en ómo hacer el software? 
¿tienes duda en cómo mostrar los datos?
¿tienes duda en cómo armar el circuito?


----------



## quimypr (Jun 24, 2007)

Bueno

Les dejo aqui si a alguien le interesa un preeliminar reloj de ajedrez construido a base de un 74192, y compuertas lógicas. Es muy limitado, con tres displays para cada jugador lo máximo que puede llegar es a 9m:59s. Tiene un interruptor para la alimentación, un interruptor que frena el tiempo de los dos jugadores, un pulsador set para configurar el tiempo en minutos para cada jugador, y un pulsador reset para resetear los segundos de cada jugador.

Los pulsadores estan dibujados como llaves de dos efecetos porque el workbench no tiene pulsadores, si alguien me puede facilitar el link de descarga del circuit maker, o de algun programa esquema/simulacion agradecido.

Para la frecuencia utilize un clock que me daba el workbench. Pero la verdad que todavia no se como hacerla en la vida real. Alguien me puede ayudar??

Bueno por ultimo el credito de todo esto es para Rodrigo Perez Millan


----------



## quimypr (Jun 24, 2007)

Me olvide de explicar el circuito.

Aca va:

El interruptor (Space) es el que le da la alimentacion al circuito.

El clock 1Hz 50% es el que le da la frecuencia a los relojes.

La llave de dos efectos (Q) es la que cambia el conteo, acciona uno u otro reloj.

El interruptor (W) es el que detiene el tiempo de ambos jugadores

Los pulsadores (Z) y (A) se usan para resetear los segunderos de cada reloj

Los pulsadores (S) y (X) se usan para setear los minutos de cada reloj.

El 74192 de la derecha es el que controla los segundos, a el le llega la frecuencia de 1Hz y basicamente cuente hacia atras 9..8..7..6..5..4..3..2..1..0.. y arranca de 9 otra vez.

Cuando el display esta 9, tiene que mandar el pulso para que las decimas de segundos desciendan entonces con una combinacion de compuertas generamos ese 1

El 74192 que esta en el medio tiene cargado, en binario el 5, para que el display no empiece de 99, sino de 59. Para que el load se active, hay que colocar en las entradas D, C, B, A el numero 0101, y que en load halla un nivel logico bajo o un 0, entonces lo que se hace es lo siguiente:

Como el contado tira por defecto el numero 9 (1001), necesitamos de hay sacar un 0 para activar el load y que marque 5 en lugar de 9. Simplemente negamos C, y B,  multiplicamos todas las variantes, al resultado lo negamos y eso lo mandamos al load para que se cargue el 5.

Por ultimo el 74192 que controla los minutos recibe el pulso cuando en el display de decenas de segundos pasa de 0 a 5

Y eso es todo

Cuando aprenda a programar pics lo hare mas facil y con mas cosas

Saludos


----------



## pazsan (Jul 5, 2007)

Mira, yo solo soy un quimico, pero hago cosillas de electronica. No voy a poder decirte como armarlo, pero cuando tengas una idea puedo construir el circuito y ver como anda.
Igual voy a averiguar porque en un libro que tengo dice como armar un cronometro coon cuenta regresiva, quizas se puede sacar alguna idea de ahi.

Bueno pibe, nos vemos.

Suerte


----------



## strakk82 (Jul 12, 2007)

Hola, me parece un proyecto interesante, yo creo que se puede hacer con contadores, aunque creo que según las especificaciones que das pueden dar grandes quebraderos de cabeza, por ejemplo en lo de mostrar los segundos y las décimas a partir de un momento dado. Yo creo que hacerlo con un microcontrolador ganarías en sencillez del circuito y en facilidad de añadir mejoras. Se me antoja bastante más fácil implementar nuevas funcionalidades a tu reloj, ya que es más fácil cambiar unas líneas de código que no una parte de un circuito.


----------



## PICMIND (Jul 17, 2007)

Hola,

Me interesa ese proyecto y ya que estoy desocupado te voy a hechar una mano, mira puedes usar un 16f84 o si quieres mas exactitud con lo delos tiempos un 16f877, te aconsejo utilizar un LCD en vez de display 7 segmentos, creeme te mataras menos la cabeza, usa lenguaje C y para simularlo PROTEUS.

Para los tiempos usa el TMR2 y configuralo para que haga una interrupcion cada 10 ms.
Para para el tiempo puedes usar la interrupcion por RB0.

Espero que esto te de una guia, asi sería como yo lo haria.

SUERTE CON TU PROYECTO


----------



## JJKANON (Ago 18, 2010)

Iba poner un tema parecido, pero ya que lo encontré me parece interesante.
Ahora bien, yo tengo pensado usar el pic16f877A y un Lcd de 16x2.
Hasta ahí todo bien, lo estoy programando con PicBasic Pro.
No entiendo bien eso de las interrupciones, ya tengo programado la parte donde ingresas el valor inicial.
Con cuatro pulsadores tu ingresas el valor a cada uno de los momentos solo de forma ascendente.
Me pareció divertido hacerlo con un seleccionador y un up y otro down que sube y baja la cuenta.
Pero me di cuenta que el programa gasta mas líneas de programación, ademas que necesito 3 pulsadores y para el otro 4 pulsadores, así que la diferencia es poca y la facilidad de manejo y de programación también. Estaba interesante por eso me incline por ello.

Tengo problemas al crear las interrupciones, por ejemplo debe correr un reloj y el otro no durante un momento y así, y eso no me sale con las interrupciones bien.

A ver quien lo puede mejorar o darme mas ideas, el programa me copie de el diseño de un cronometro y me puse a cambiar hasta el momento donde cada reloj tiene que funcionar.
Independientemente iba bien, funcionaban los dos y todo eso, pero entonces cuando requería que ambos funcionaran separados lo modifique a lo que se verá a a continuación y no me salió.
Ayuda...


```
'DEFINITIONS
define osc 4
DEFINE LCD_DREG PORTB 'Salida por donde se controla el LCD
DEFINE LCD_DBIT 0 'Desde el bit q inicia los datos de salida del LCD
DEFINE LCD_RSREG PORTB 'LCD bit de Registo RS 
DEFINE LCD_RSBIT 4 'LCD Selecciona el bit de Registro 
DEFINE LCD_EREG PORTB 'LCD Bit de Enable
DEFINE LCD_EBIT 5 'LCD enable bit 
DEFINE LCD_BITS 4 'LCD Tamañno de bus 4 u 8
DEFINE LCD_LINES 2 'Numero de Lines del LCD 
DEFINE LCD_COMMANDUS 2000 'Command delay time in us 
DEFINE LCD_DATAUS 50 'Data delay time in us
CMCON=7 ' Configura el puerto Analogico A
TRISE=0 ' PORTE es Salida
TRISB=0 ' PORTB es salida
TRISD=$FF ' PORTD es entrada
'Nombrando entradas
Symbol Modo_button=PORTD.0
Symbol Jugador1_button=PORTD.1
Symbol Jugador2_button=PORTD.2
Symbol Minute1_button=PORTD.3
Symbol Hour1_button=PORTD.4
Symbol Minute2_button=PORTD.5
Symbol Hour2_button=PORTD.6

'Nombrando Salidas
Symbol Jugador1=PORTB.6
Symbol Jugador2=PORTB.7
Symbol Bocina=PORTE.0


Ticks VAR byte
Hour1 VAR byte
Minute1 VAR byte
Second1 VAR byte
Disp VAR byte
Delay VAR byte
Hour2 VAR byte
Minute2 VAR byte
Second2 VAR byte
Modo var byte

PAUSE 500
Modo=0
Hour1=0
Minute1=0
Second1=0
Ticks=0
Disp=1
Hour2=0
Minute2=0
Second2=0


OPTION_REG = %00000101 ' Set prescaler=64
ON INTERRUPT GOTO ISR ' ISR routine
LCDOUT $FE, 1 ' Clear LCD

LOOP:
'MODO DE PROGRAMACION
IF Modo_Button=0 Then 
    INTCON=0
    Disp=1
    IF Hour1_button=0 THEN
        Hour1=Hour1+1
        IF Hour1=10 THEN Hour1=0
    Gosub Debounce
    Endif
    IF Minute1_button=0 THEN
       Minute1=Minute1+1
       IF Minute1=60 THEN Minute1=0
    Gosub Debounce
    Endif
    
    IF Hour2_button=0 THEN
        Hour2=Hour2+1
        IF Hour2=10 THEN Hour2=0
    Gosub Debounce
    Endif
    IF Minute2_button=0 THEN
       Minute2=Minute2+1
       IF Minute2=60 THEN Minute2=0
    Gosub Debounce
    Endif
'MODO DE JUEGO
ENDIF
if modo_button=1 then
    TMR0=0
    INTCON=$A0
    Disp=1 
endif

IF Disp=1 THEN
LCDOUT $FE, 2
LCDOUT "J&S1: ", DEC1 Hour1, ":",DEC2 Minute1, ":",DEC2 Second1
lcdout $FE, $C0
LCDOUT "J&S2: ", DEC1 Hour2, ":",DEC2 Minute2, ":",DEC2 Second2
Disp=0
ENDIF


GOTO LOOP

Debounce:
FOR Delay=1 To 200
Pause 1
NEXT Delay
Disp=1
RETURN


DISABLE
ISR:
Ticks=Ticks + 1
IF Ticks < 61 THEN Noupdate
    Ticks=0
       Second1=Second1 - 1
    If Second1=0 then
        Second1=59
        Minute1=Minute1 - 1
    If Minute1<0 Then
        Minute1=59
        Hour1=Hour1-1
    Endif
    Endif
Disp=1 
NoUpdate:
INTCON.2=0
Resume
ENABLE
END
end
```


----------

