Autor Tema: el relojito de ucontrol  (Leído 3716 veces)

0 Usuarios y 4 Visitantes están viendo este tema.

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
el relojito de ucontrol
« en: 06 de Enero de 2013, 19:13:16 »
no entiendo como muestra la hora en el relojito de ucontrol ya que si yo tengo un 3 en los minutos tengo que determinar que secuencia tengo que poner en el puerto y ir sacando de a uno en uno y no se como hacerlo, me dan una idea?

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: el relojito de ucontrol
« Respuesta #1 en: 06 de Enero de 2013, 19:37:23 »
En el hilo del desarrollo del relojito no encontraste la respuesta a tu pregunta?
Es uno de los proyectos de ucontrol mejor documentado que hay  ((:-))

Creo que si te pones a estudiar un poco el programa lo sacas enseguida  ;-)
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: el relojito de ucontrol
« Respuesta #2 en: 06 de Enero de 2013, 19:48:41 »
+1 Además tienes un hilo dedicado donde puedes consultar
No contesto mensajes privados, las consultas en el foro

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: el relojito de ucontrol
« Respuesta #3 en: 06 de Enero de 2013, 21:29:06 »
En el hilo del desarrollo del relojito no encontraste la respuesta a tu pregunta?
Es uno de los proyectos de ucontrol mejor documentado que hay  ((:-))

Creo que si te pones a estudiar un poco el programa lo sacas enseguida  ;-)
La rutina para mostrar la hora no esta en ccs, solo se da la idea general.

Desconectado fantaxmax

  • PIC16
  • ***
  • Mensajes: 107
    • Libertycraft - Minecraft
Re: el relojito de ucontrol
« Respuesta #4 en: 07 de Enero de 2013, 00:48:22 »
Hola, yo tambien estoy haciendo ese reloj, pero yo estoy escribiendo el codigo desde cero, onda ingenieria inversa, de momento estoy probando las rutina para separar los numeros, para enviarlos a su display correspondiente, te facilto la rutina pero aun la estoy desarrollando, no te aseguro que funcione correctamente, ademas es una burda separacion de numeros, y es bastante extensa, pero se que se puede reducir, bueno te las dejo.

Código: C
  1. const int segundero[]=0x00,0x01,0x02,0x07,0x0F,0x1F,0x3F,0x7F,0xFF;
  2. const int latch[]=254,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,128;
  3. #int_TIMER1
  4. void  TIMER1_isr(void)
  5. {
  6.    if(hor==0){hor0=0;hor1=0;}
  7.    if(hor==1){hor0=0;hor1=1;}
  8.    if(hor==2){hor0=0;hor1=2;}
  9.    if(hor==3){hor0=0;hor1=3;}
  10.    if(hor==4){hor0=0;hor1=4;}
  11.    if(hor==5){hor0=0;hor1=5;}
  12.    if(hor==6){hor0=0;hor1=6;}
  13.    if(hor==7){hor0=0;hor1=7;}
  14.    if(hor==8){hor0=0;hor1=8;}
  15.    if(hor==9){hor0=0;hor1=9;}
  16.    if(hor==10){hor0=1;hor1=0;}
  17.    if(hor==11){hor0=1;hor1=1;}
  18.    if(hor==12){hor0=1;hor1=2;}
  19.    if(hor==13){hor0=1;hor1=3;}
  20.    if(hor==14){hor0=1;hor1=4;}
  21.    if(hor==15){hor0=1;hor1=5;}
  22.    if(hor==16){hor0=1;hor1=6;}
  23.    if(hor==17){hor0=1;hor1=7;}
  24.    if(hor==18){hor0=1;hor1=8;}
  25.    if(hor==19){hor0=1;hor1=9;}
  26.    if(hor==20){hor0=1;hor1=0;}
  27.    if(hor==21){hor0=2;hor1=1;}
  28.    if(hor==22){hor0=2;hor1=2;}
  29.    if(hor==23){hor0=2;hor1=3;}
  30. }
  31.  
  32. #int_TIMER0
  33. void  TIMER0_isr(void)
  34. {
  35.    if(min<60)
  36.    {
  37.       if(min==50){min0=5;min1=0;}
  38.       if(min==51){min0=5;min1=1;}
  39.       if(min==52){min0=5;min1=2;}
  40.       if(min==53){min0=5;min1=3;}
  41.       if(min==54){min0=5;min1=4;}
  42.       if(min==55){min0=5;min1=5;}
  43.       if(min==56){min0=5;min1=6;}
  44.       if(min==57){min0=5;min1=7;}
  45.       if(min==58){min0=5;min1=8;}
  46.       if(min==59){min0=5;min1=9;}
  47.    }
  48.    if(min<50)
  49.    {
  50.       if(min==40){min0=5;min1=0;}
  51.       if(min==41){min0=5;min1=1;}
  52.       if(min==42){min0=5;min1=2;}
  53.       if(min==43){min0=5;min1=3;}
  54.       if(min==44){min0=5;min1=4;}
  55.       if(min==45){min0=5;min1=5;}
  56.       if(min==46){min0=5;min1=6;}
  57.       if(min==47){min0=5;min1=7;}
  58.       if(min==48){min0=5;min1=8;}
  59.       if(min==49){min0=5;min1=9;}
  60.    }
  61.    if(min<40)
  62.    {
  63.       if(min==30){min0=3;min1=0;}
  64.       if(min==31){min0=3;min1=1;}
  65.       if(min==32){min0=3;min1=2;}
  66.       if(min==33){min0=3;min1=3;}
  67.       if(min==34){min0=3;min1=4;}
  68.       if(min==35){min0=3;min1=5;}
  69.       if(min==36){min0=3;min1=6;}
  70.       if(min==37){min0=3;min1=7;}
  71.       if(min==38){min0=3;min1=8;}
  72.       if(min==39){min0=3;min1=9;}
  73.    }
  74.    if(min<30)
  75.    {
  76.       if(min==20){min0=2;min1=0;}
  77.       if(min==21){min0=2;min1=1;}
  78.       if(min==22){min0=2;min1=2;}
  79.       if(min==23){min0=2;min1=3;}
  80.       if(min==24){min0=2;min1=4;}
  81.       if(min==25){min0=2;min1=5;}
  82.       if(min==26){min0=2;min1=6;}
  83.       if(min==27){min0=2;min1=7;}
  84.       if(min==28){min0=2;min1=8;}
  85.       if(min==29){min0=2;min1=9;}
  86.    }
  87.    if(min<20)
  88.    {
  89.       if(min==10){min0=1;min1=0;}
  90.       if(min==11){min0=1;min1=1;}
  91.       if(min==12){min0=1;min1=2;}
  92.       if(min==13){min0=1;min1=3;}
  93.       if(min==14){min0=1;min1=4;}
  94.       if(min==15){min0=1;min1=5;}
  95.       if(min==16){min0=1;min1=6;}
  96.       if(min==17){min0=1;min1=7;}
  97.       if(min==18){min0=1;min1=8;}
  98.       if(min==19){min0=1;min1=9;}
  99.    }
  100.    if(min<10)
  101.    {
  102.       if(min==0){min0=0;min1=0;}
  103.       if(min==1){min0=0;min1=1;}
  104.       if(min==2){min0=0;min1=2;}
  105.       if(min==3){min0=0;min1=3;}
  106.       if(min==4){min0=0;min1=4;}
  107.       if(min==5){min0=0;min1=5;}
  108.       if(min==6){min0=0;min1=6;}
  109.       if(min==7){min0=0;min1=7;}
  110.       if(min==8){min0=0;min1=8;}
  111.       if(min==9){min0=0;min1=9;}
  112.    }
  113. }
  114.  
  115. #int_EXT
  116. void  EXT_isr(void)
  117. {
  118.    if(seg!=59)
  119.    {
  120.       if(fx==0)
  121.       {
  122.          c++;
  123.          if(c==9){add++;c=1;}
  124.          output_byte(latch[add],segundero[c]);
  125.       }
  126.       if(fx==1)
  127.       {
  128.          c--;
  129.          if(c==9){add--;c=8;}
  130.          output_byte(latch[add],segundero[c]);
  131.       }  
  132.    }
  133. }

como ves es realmente muy extensa, pero la reducire bastante, escribiendo esta respuesta se me ocurrio como reducir unas cuantas operaciones

Saludos!
"El presente es suyo, El futuro es mio" N.T.
El conocimiento es gratuito e ilimitado, solo debes saber donde buscarlo.

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: el relojito de ucontrol
« Respuesta #5 en: 07 de Enero de 2013, 19:00:41 »
Hola fantaxmax, gracias por tu interes, una pregunta: Como haces para saber cuando tenes que actualizar los minutos en el display, yo pensaba utilizar el timer, pero si lo uso estoy haciendo un reloj con el timer y no usando el ds1307? vos como pensas hacer la actualizacion?

Desconectado fantaxmax

  • PIC16
  • ***
  • Mensajes: 107
    • Libertycraft - Minecraft
Re: el relojito de ucontrol
« Respuesta #6 en: 08 de Enero de 2013, 00:23:21 »
en la funcion main tengo un bucle que lee el ds1307, ocupo los dos timers, uno para la actualizacion de los minutos, y el otro para la actualizacion de las horas, ademas ocupo la interrupcion externa para la actualizacion del segundero, ya que configuro el ds 1307 para que saque por sqw o algi asi es el pin ese, a la frecuencia de 1hz, para que en cada flanco de bajada el reloj actualize los segundos, ademas de escribir los valores de los displays pero creo que eso lo cambiare
"El presente es suyo, El futuro es mio" N.T.
El conocimiento es gratuito e ilimitado, solo debes saber donde buscarlo.

Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1093
Re: el relojito de ucontrol
« Respuesta #7 en: 08 de Enero de 2013, 16:05:11 »
fantaxmax, ¿no seria mas sencillo y ocuparia menos recursos del PIC, utilizar solo la interrupcion externa, disparada por la señal del DS1307 y por comparacion deducir si hay que actualizar minutos y horas?.
Pienso que como tu lo haces, realmente estas desperdiciando un monton de recursos del PIC.

Saludos.

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: el relojito de ucontrol
« Respuesta #8 en: 08 de Enero de 2013, 16:06:45 »
en la funcion main tengo un bucle que lee el ds1307, ocupo los dos timers, uno para la actualizacion de los minutos, y el otro para la actualizacion de las horas, ademas ocupo la interrupcion externa para la actualizacion del segundero, ya que configuro el ds 1307 para que saque por sqw o algi asi es el pin ese, a la frecuencia de 1hz, para que en cada flanco de bajada el reloj actualize los segundos, ademas de escribir los valores de los displays pero creo que eso lo cambiare
Pero entonces vos no lees los registros de la hora del ds1307?

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: el relojito de ucontrol
« Respuesta #9 en: 08 de Enero de 2013, 16:08:41 »
fantaxmax, ¿no seria mas sencillo y ocuparia menos recursos del PIC, utilizar solo la interrupcion externa, disparada por la señal del DS1307 y por comparacion deducir si hay que actualizar minutos y horas?.
Pienso que como tu lo haces, realmente estas desperdiciando un monton de recursos del PIC.

Saludos.

Mi idea es alimentar el pic con la señal de la onda cuadrada y generar una interrupcion para actualizar la hora.

Desconectado fantaxmax

  • PIC16
  • ***
  • Mensajes: 107
    • Libertycraft - Minecraft
Re: el relojito de ucontrol
« Respuesta #10 en: 08 de Enero de 2013, 17:09:32 »
fantaxmax, ¿no seria mas sencillo y ocuparia menos recursos del PIC, utilizar solo la interrupcion externa, disparada por la señal del DS1307 y por comparacion deducir si hay que actualizar minutos y horas?.
Pienso que como tu lo haces, realmente estas desperdiciando un monton de recursos del PIC.

Saludos.


yo tambien estoy pensado eso, estoy despilfarrando recursos de pic, pero sucede que aun soy un tanto novato en esto de la programacion,
en la funcion main tengo un bucle que lee el ds1307, ocupo los dos timers, uno para la actualizacion de los minutos, y el otro para la actualizacion de las horas, ademas ocupo la interrupcion externa para la actualizacion del segundero, ya que configuro el ds 1307 para que saque por sqw o algi asi es el pin ese, a la frecuencia de 1hz, para que en cada flanco de bajada el reloj actualize los segundos, ademas de escribir los valores de los displays pero creo que eso lo cambiare
Pero entonces vos no lees los registros de la hora del ds1307?

claro que los leo, ahora que planifico mejor como hacerlo voy a hacer funciones modulares para la hora, minutos y segundos, las cuales van a ser llamadas segun corresponda, mediante tres comprobaciones, utilizare la interrupcion externa para activar un flag, el cual en el bucle principal le indicara leer los registros del reloj, y actualizar los valores de los displays, el timer0 lo ocupare para escribir los valores al display, ya que para ahorrar en IC's activo directamente los displays con el pic

fantaxmax, ¿no seria mas sencillo y ocuparia menos recursos del PIC, utilizar solo la interrupcion externa, disparada por la señal del DS1307 y por comparacion deducir si hay que actualizar minutos y horas?.
Pienso que como tu lo haces, realmente estas desperdiciando un monton de recursos del PIC.

Saludos.

Mi idea es alimentar el pic con la señal de la onda cuadrada y generar una interrupcion para actualizar la hora.

no entiendo lo que dices que quieres hacer
"El presente es suyo, El futuro es mio" N.T.
El conocimiento es gratuito e ilimitado, solo debes saber donde buscarlo.

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: el relojito de ucontrol
« Respuesta #11 en: 08 de Enero de 2013, 21:51:02 »
El ds1307 tiene un pin que se puede configuar para que tiene una onda cuadra de 1Hz. Si esa onda cuadrada la injectas en la pata RB0 puedes generar una interrupcion cada segundo exacto y usarlo como referencia para saber cuando tienes que actualizar el display del reloj, no se si me exiplico?

Desconectado fantaxmax

  • PIC16
  • ***
  • Mensajes: 107
    • Libertycraft - Minecraft
Re: el relojito de ucontrol
« Respuesta #12 en: 08 de Enero de 2013, 22:45:53 »
El ds1307 tiene un pin que se puede configuar para que tiene una onda cuadra de 1Hz. Si esa onda cuadrada la injectas en la pata RB0 puedes generar una interrupcion cada segundo exacto y usarlo como referencia para saber cuando tienes que actualizar el display del reloj, no se si me exiplico?

ya entendi, es que como usaste la palabra alimentacion me parecio extraño, y si eso mismo estoy haciendo, ocupa la interrupcion RB0 para saber cuando debo actualizar los datos y ese lo ocupo para actualizar los 60 leds, y comprobar si debo actualizar los displays, basicamente esa metodologia voy a usar

Saludos!
"El presente es suyo, El futuro es mio" N.T.
El conocimiento es gratuito e ilimitado, solo debes saber donde buscarlo.