TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Helena en 22 de Enero de 2007, 16:17:44

Título: RELOJ CON PIC
Publicado por: Helena en 22 de Enero de 2007, 16:17:44
Hola Chicos,

Alguno de ustedes sabe de algún ejemplo para realizar un reloj con pic?  es que pienso hacer uno pero necesito ideas.

Muchas gracias

Besos

Helena
Título: Re: RELOJ CON PIC
Publicado por: aitopes en 22 de Enero de 2007, 16:27:26
Hola Elena!
¿Te referis a ejemplos de codigo en BASIC o a el hard?
Si es respecto del codigo (supongo que se trata de eso por donde posteaste), para hacer un reloj generalmente se utiliza un timer, que incremente una variable cada cierto tiempo. Basandote en ese valor, incrementas los segundos, horas, minutos y eventualmente la fecha, indicador de AM/PM, etc.
Tambien es una buena idea dotarlo de alguna(s) alarma(s), no te parece?

Segui preguntando, que seguro algun forista tiene un reloj armado y te puede ayudar.
Título: Re: RELOJ CON PIC
Publicado por: navaismo en 22 de Enero de 2007, 16:31:27
yo voy por usar un RTC es mas efectivo no hay nada mas fiable que eso
Título: Re: RELOJ CON PIC
Publicado por: aitopes en 22 de Enero de 2007, 16:52:02
Hola Navaismo!
Si, un DS1307 o similar es sencillo de usar, y muy presiso. Pero a lo mejor Helena esta empezando y el tema del I2C puede complicarle el proyecto, no?

Con un codigo parecido a este, y "mile" actualizado en la interrupcion, estaria basicamente andando el reloj. Falta por supuesto las rutinas de puesta en hora, etc.

Código: [Seleccionar]
If mile = 3993 Then
mile = 0
segu = segu + 1
If segu > 59 Then
segu = 1
minu = minu + 1
If minu > 59 Then
minu = 0
hora = hora + 1
If hora > 23 Then
hora = 0
minuaire = 0
' dia = dia + 1
' If dia = 8 Then
' dia = 1
' Endif
Endif
Endif
Endif
Endif
Título: Re: RELOJ CON PIC
Publicado por: Helena en 22 de Enero de 2007, 16:55:07
Hola aitopes,

Pues la idea es hacerlo con display de 7 segmentos uno para la hora, otro para los minutos y el ultimo para los segundos, lo quiero hacer en picbasic pero necesito de ideas o mejor aún el ejemplo de algún codigo para tomarlo como base y empezar. Me agrada mucho esto de relojes y temporizadores pero por ahora quiero comenzar con u  reloj.

Gracias a todos por sus ideas

Besos

Helena



Hola Elena!
¿Te referis a ejemplos de codigo en BASIC o a el hard?
Si es respecto del codigo (supongo que se trata de eso por donde posteaste), para hacer un reloj generalmente se utiliza un timer, que incremente una variable cada cierto tiempo. Basandote en ese valor, incrementas los segundos, horas, minutos y eventualmente la fecha, indicador de AM/PM, etc.
Tambien es una buena idea dotarlo de alguna(s) alarma(s), no te parece?

Segui preguntando, que seguro algun forista tiene un reloj armado y te puede ayudar.
Título: Re: RELOJ CON PIC
Publicado por: Mario en 22 de Enero de 2007, 17:08:03
¿Haz realizado algún contador?
¿Con algún contador de 4 bits?
74F194 o 96 o 64 (no recuerdo).

Si lo haz hecho entonces el código que colocó Aitopes es muy ilustrativo.
Pregunto lo de los contadores porque asi tienes una idea de cómo se debe hacer en programación; además de todo lo que colocó aitopes, deberás colocar los bits necesarios en el puerto para poder activar las combinaciones de los displays.

Date una vuelta por aquí:
http://www.todopic.com.ar/foros/index.php?topic=3613.0

Es un compendio de ejemplos para Basic por Lordlafebre, quizá haya algún ejemplo de reloj (existe el de BCD a 7 segmentos que también lo necesitas).

Suerte.
Título: Re: RELOJ CON PIC
Publicado por: LordLafebre en 22 de Enero de 2007, 17:12:09
Hola:

No hay ejemplos de relojes en los que he puesto, pero me parece que si hay uno que indica un contador utilizando un Display multiplexado, el tema es que decidas como mismo lo quieres, si debera ser preciso mejor opta por un RTC, pero eso ya depende deti, define bien que es lo que quieres para poder ayudarte.
Título: Re: RELOJ CON PIC
Publicado por: Helena en 22 de Enero de 2007, 20:41:35
Hola Lord y a todos

Pues gracias por las respuestas que me han dado, la idea es hacer un reloj tomando como base de tiempo el cristal interno o externo del pic no estoy buscando una presicion alta por ahora, quiero tener la idea de como hacerlo para las horas, minutos y segundos en displays de 7 segmentos y una alarma que suene a la hora fijada. Lo del DS1307 me parece muy interesante pero creo que debo partir de lo bàsico "ustedes que creen?" para ir avanzando poco a poco pero con seguridad.

Chicos son muy amables por su atencion.

Besos

Helena :g)



Hola:

No hay ejemplos de relojes en los que he puesto, pero me parece que si hay uno que indica un contador utilizando un Display multiplexado, el tema es que decidas como mismo lo quieres, si debera ser preciso mejor opta por un RTC, pero eso ya depende deti, define bien que es lo que quieres para poder ayudarte.
Título: Re: RELOJ CON PIC
Publicado por: navaismo en 22 de Enero de 2007, 21:25:09
Hola en lo personal considero mas facil usar el i2c que por software no da problemas a usar el timer del pic que es mas complicado.

Un ejemplo rapido es usar un FOR que vaya de 0 a 60 con pausa de un segundo cada que el for termine incremente la variable minutos la variable minutos cuando llegue a 60 incremente la varaible hora y cuando hora llegue a 24 todos a cero y vuelve el ciclo

suponiendo PBP
Código: [Seleccionar]
segs var byte
mins var byte
hora var byte

mins=0
hora=0

cuenta:

  for segs=0 to 59
   pause 1000
  next segs

 mins=mins+1

if mins > 59 then
 mins = 0
hora = hora+1
endif

if hora > 23 then
 hora = 0
 mins = 0
endif

goto cuenta

Título: Re: RELOJ CON PIC
Publicado por: todopic en 22 de Enero de 2007, 21:27:33
Hola Helena, es muy importante comenzar con ejemplos bien simple, para ir encontrando errores...  supuestamente ya construiste un simple destalledor  de led?
le fuiste cambiando los tiempos de destello?  sensaste un interruptor?...

si la respuesta es si... pues entonces manos a la obra con el reloj!  :D

Un abrazo!

Norberto
Título: Re: RELOJ CON PIC
Publicado por: Helena en 22 de Enero de 2007, 21:41:08
Hola todopic,

Primero gracias por tener en cuenta mi mensaje, y a tu pregunta es un rotundo "SI" estoy con esto de los pics hace ratito y tengo mi cuarto lleno de esquemas, libros, boards en fin... te puedes imaginar!. El foro ha sido para mi de gran ayuda y he aprendido desde cero con ustedes y quiero llegar a dominar este lenguaje de programacion para poder "codearme" con los expertos que son ustedes.

De nuevo gracias todopic y al foro.

Besos

Helena :g)



Hola Helena, es muy importante comenzar con ejemplos bien simple, para ir encontrando errores...  supuestamente ya construiste un simple destalledor  de led?
le fuiste cambiando los tiempos de destello?  sensaste un interruptor?...

si la respuesta es si... pues entonces manos a la obra con el reloj!  :D

Un abrazo!

Norberto
Título: Re: RELOJ CON PIC
Publicado por: electronando en 22 de Enero de 2007, 23:55:35
si en lo q quieres es presicion debes usar uno con el ds1307 creo q lord puso un ejemplo que estaba bastante entendible aunque no sepas usar tanto el i2c esta solo para armarlo no me acuerdo nomas en que parte esta ese ejemplo  :)
Título: Re: RELOJ CON PIC
Publicado por: psykhon en 23 de Enero de 2007, 00:23:14
este anda lindo, echo en proton y corrige las fallas del crystal
Código: [Seleccionar]
'*****************************************************************************************
'*  Name    : PicReloj.BAS                                                               *
'*  Author  : Lisandro  (psykhon@yahoo.com)                                         *
'*  Notice  : Copyright (c) 2006                                                         *
'*          : All Rights Reserved                                                        *
'*  Date    : 02/08/2006                                                                 *
'*  Version : 1.3                                                                        *
'*  Notes   : se mejora la precision de la hora, se programa _                           *
'*          : el tmr0 con un preescalador de 256  como lo _                              *
'*          : explica la formula_                                                        *
'* (reloj de intrucciones) / (preescaler de tmr0 * tmr) = overflows en 1 seg             *
'*1,000,000,000 uS / (65,536 uS / TMRO overflow) = 15,258.78906 overflows for 1,000 S.   *
'* luego solo resta subdividir por 16000 y esto d un margen teorico de error de          *
'* 51,711.99345  (ver http://www.picbasic.co.uk/forum/showthread.php?t=2129)             *
'*****************************************************************************************

CONFIG XT_OSC , WDT_OFF , PWRTE_ON , BODEN_OFF , LVP_OFF , PWRTE_ON , CP_OFF
 
Device = 16F628a
XTAL = 4
CMCON = 7                      'establece las lineas como digitales

Declare LCD_TYPE 0             'caracterial
Declare LCD_DTPIN PORTb.4
Declare LCD_ENPIN PORTB.3
Declare LCD_RSPIN PORTB.0
Declare LCD_INTERFACE 4        ' bus de datos multiplexado a 4 pines
Declare LCD_LINES 2            ' numero de lineas de


DIM WBotonA AS BYTE             ' Workspace para la instruccion BUTTON, botonA
DIM WBotonB AS BYTE             ' Workspace para la instruccion BUTTON, botonB
Declare BUTTON_DELAY = 1500     ' no presente en documentacion, define la demora de repeticion del boton

dim Segundos as byte
dim Minutos as byte
Dim Horas as byte
dim Alarma as bit             'almacena si debe sonar la alarma o no
dim wtimer as word            'subdivisor del tmr0
Dim HoraAlarma as byte        'almacena la hora fijada para la alarma
Dim MinutoAlarma as byte      'almacena el minuto fijado para la alarma
symbol TiempoAlerta = 30      'constante que indica cuanto tiempo suena la alarma
dim wTiempoAlerta as byte


symbol PinAlarma = porta.2    'indica en que pin esta conectado el parlante           

dim Parpadeo as bit           'almacena cuando parpadea el valor selec en pantalla
Dim Registro as byte          'almacena que registro se esta actualizando_
                              ' 1 hora, 2  minuto, 3 hora alarma, 4 minuto alarma 

'inicializacion de variables
segundos = 0                 
minutos = 0
horas = 0
horaalarma = 0
MinutoAlarma = 0
registro = 1         
alarma = 0                   ' seteo la alarma como apagada                   
wtimer = 15625               'medio segundo (4mhx xtal)   

OPTION_REG = %10000111       'desabilita pull-ups, prescale TMR0 by 256
INTCON = 0                   'desabilita interrupciones                 
TrisA = %11111 ' input        ' seteo los dos primeros pines del PORTA como entradas

cls                           'limpio la pantalla


Main:
if intcon.2=0 then goto main    ' chekeo desbordamiento de tmr0 por polling

intcon.2 =  0                   'borro el flag de desbordamiento

wtimer = wtimer - 1024

if wtimer < 1024 then

    Segundos = segundos + 1     'Incremento los segundos

    if segundos = 60 then      'Si los segundos = 60 incremento los minutos y pongo a 0 los segundos
        segundos = 0
        gosub IncrementarMinutos
        cls                    ' limpio la pantalla
    endif

    gosub MostrarHora

    if horas = horaalarma and minutos = minutoalarma and alarma = 1 then gosub SonarAlarma

    wtimer = wtimer + 15625

else

    'rutinas para verificar si se presiona algun boton, si es "mode" se va a edicion,_
    'si es set se enciende la alarma

    BUTTON porta.0 , 1 , 255 , 250 , wbotona, 0 , NoBotonA
    gosub modoedicion

    NoBotonA:
    BUTTON porta.1 , 1 , 255 , 250 , wbotona, 0 , NoBotonB

    if alarma = 1 then      'si la alarma esta encendida la apaga y viceversa
        alarma = 0
    else
        alarma = 1
        wTiempoAlerta = 0   'resetea el tiempo que suena la alarma
    end if   
       
    NoBotonB:
end if

goto main

ModoEdicion:
if intcon.2=0 then goto modoedicion    ' chekeo desbordamiento de tmr0 por polling
intcon.2 =  0                   'borro el flag de desbordamiento

wtimer = wtimer - 1024

if wtimer < 1024 then

   ' genera el efecto parpadeo en el lcd sobre el registro seleccionado
    select registro             ' selecciona sobre que registro se etsa haciendo el parpadeo
    case 1                      ' parpadeo sobre las horas
        if parpadeo = 1 then
             print at 1,1,"  "
             Parpadeo = 0
        else
             print at 1,1,dec horas
             parpadeo = 1
        endif
    case 2                      ' parpadeo sobre los minutos
        if parpadeo = 1 then
             print at 1,4,"  "
             Parpadeo = 0
        else
             print at 1,4,dec minutos
             parpadeo = 1
        endif       
     
     case 3                      ' parpadeo sobre la hora de alarma
     print at 2,3, ":"           ' muestro el separador de alarma
        if parpadeo = 1 then
             print at 2,1,"  "
             Parpadeo = 0
        else
             print at 2,1,dec horaalarma
             parpadeo = 1
        endif
               
     case 4                      ' parpadeo sobre los minutos de alarma
        if parpadeo = 1 then
             print at 2,4,"  "
             Parpadeo = 0
        else
             print at 2,4,dec minutoalarma
             parpadeo = 1
        endif             
    endselect       
    wtimer = wtimer + 15625

else
    'control de botones
    BUTTON porta.0 , 1 , 255 , 250 , wbotona, 0 , NoBotonA2  'rutina para detectar el primer boton "mode"
   
    registro = registro + 1     'si se vuelve a apretar el boton incremento registro
    if Registro = 5 then        'y si es 3 lo resetea a 1 y retorna al programa
        registro = 1
        segundos = 0            'cuando se sale de edicion los segundos arrancan en 0
        cls
        return           
    end if   
   
    NoBotona2:                  ' aqui continua la ejecucion si no es presinado el boton A
   
    'rutina para detectar el boton "set" e incrementar el registro seleccionado
    BUTTON porta.1 , 1 , 255 , 250 , wbotona, 0 , NoBotonBE                   
   
    select registro                                      ' controla que registro esta seleccionado
        case 1                           
            horas = horas + 1                            ' incrementa las horas
            if horas >= 24 then horas = 0                ' si el valor es mayor o = que 24 las pone en 0
        case 2
            minutos = minutos + 1                        'incrementa los minutos
            if minutos >= 60 then minutos = 0            'los pone en 0 si son 60 o mas
        case 3
            horaalarma = horaalarma + 1                  'incrementa los minutos
            if horaalarma >= 24 then horaalarma = 0      'los pone en 0 si son 60 o mas
        case 4
            minutoalarma = minutoalarma + 1              'incrementa los minutos
            if minutoalarma >= 60 then minutoalarma = 0  'los pone en 0 si son 60 o mas       
    endselect
 
    nobotonBE:
   
 endif
   
goto modoedicion            ' entra en loop hasta que se abandona

MostrarHora:
    print at 1,1, dec horas    'muestro las horas
    print at 1,3, ":"          'muestro el separador
    print at 1,4, dec minutos  'muestro los minutos
    print at 1,6, ":"          'muestro el separador
    print at 1,7, dec segundos 'muestro los segundos
    if alarma = 1 then
        gosub mostrarAlarma
    else
        print at 2,1, "        "   
    endif   
return

MostrarAlarma:
        print at 2,1, dec Horaalarma
        print at 2,3, ":"
        print at 2,4, dec minutoalarma
return
   
IncrementarMinutos:            'Incremento los minutos, si son 60 los pongo en 0 _
    minutos = minutos + 1      'e incremento las horas
    if minutos = 60 then
        minutos = 0
        gosub Incrementarhoras
    endif
return

IncrementarHoras:             'Incremento las horas y si son 24 las pongo en 0
    Horas = horas + 1
    if horas = 24 then horas = 0
return
       
SonarAlarma:

sound pinalarma,[120,15]                            ' reproduce el sonido de la alarma
wTiempoAlerta = wTiempoAlerta + 1                   'incrementa el valor que controla la duracion de la alarma
if wtiempoalerta = tiempoalerta then alarma = 0     'si pasan los segundos de alarma se apaga la misma

if parpadeo = 0 then                                'rutina que hace parpadear la alarma en el display   
    gosub mostrarAlarma
    parpadeo = 1
else
    print at 2,1, "        "   
    parpadeo = 0
endif   
   
return
Título: Re: RELOJ CON PIC
Publicado por: aitopes en 23 de Enero de 2007, 05:58:17
Muy bueno Lisandro!!!! Excelente aporte. ;)
Título: Re: RELOJ CON PIC
Publicado por: Helena en 23 de Enero de 2007, 09:49:05
Hola psykhon,

Reitero lo mismo excelente aporte, una preguntita este codigo lo puedo llegar a modificar y adaptar para display de 7 segmentos?, o al menos tomar como referencia las rutinas.

Besos

Helena :g)
Título: Re: RELOJ CON PIC
Publicado por: psykhon en 23 de Enero de 2007, 09:59:43
modificalo cuanto te guste helena, lo unico que si lo haces despues pone tu codigo aca asi lo compartis con el resto
Título: Re: RELOJ CON PIC
Publicado por: Helena en 23 de Enero de 2007, 18:09:48
Hola chicos,

Pues voy a ponerle "cabeza" a este proyecto no se incomoden si pregunto mucho ji ji ji  :lol: los estare  molestando un poquito.


Besos

Helena :g)

Título: Re: RELOJ CON PIC
Publicado por: psykhon en 23 de Enero de 2007, 19:16:56
metele helena y que te quede bonito
Título: Re: RELOJ CON PIC
Publicado por: mincho en 05 de Julio de 2007, 23:16:18
Hola Psykhon, Esta muy interesante el reloj para ir aprendiendo rutinas en proton.

Me gustaria simularlo, tienes el esquema???

Un Saludo....
Título: Re: RELOJ CON PIC
Publicado por: zagoaristides en 09 de Diciembre de 2007, 16:36:06
metele helena y que te quede bonito

De verdad estás en ISLANDIA???
Título: Re: RELOJ CON PIC
Publicado por: psykhon en 10 de Diciembre de 2007, 18:07:46
metele helena y que te quede bonito

De verdad estás en ISLANDIA???
nahhh, lo puse porque me recuenda al libro de verne
Título: Re: RELOJ CON PIC
Publicado por: ASTROCAR en 11 de Enero de 2008, 11:27:53
me uno al proyecto de helena de hacer un reloj con pic, pero si tengo la posibilidad de usar i2c lo hace para asi ir adquiriendo mas experiencias, haa la otra es que siempre he trabajado en picbasicPro pero desde este nuevo año emigrare a proton ya que note que se puedes declarar variables con mas de 16 bit que eso para mi era un problema wen picbasic.

bueno un saludos y desde hoy trabajo en el tema de reloj.

saludos y gracias por la oportunidad que me abristes helena jajajaj no tenia persado hacer un reloj pero no esta demas.
bye
Título: Re: RELOJ CON PIC
Publicado por: navaismo en 11 de Enero de 2008, 13:12:16
aa si y retomando esto. Aqui esta la rutina que uso para meter la hora en el RTC y visualizarla en el LCD, como en todo encontraran varios bugs o codigo de mas y aun no esta al 100%.

Código: FreeBasic
  1. '****************************************************************
  2. '*  Name    : Persiana.BAS                                      *
  3. '*  Author  : Max Eduardo Reyes Vera Juárez                     *
  4. '*  Notice  : Copyright (c) 2008 Protegido por leyes de autor   *
  5. '*          : All Rights Reserved                               *
  6. '*  Date    : 03/01/2008                                        *
  7. '*  Version : 1.0                                               *
  8. '*  Notes   :                                                   *
  9. '*          :                                                   *
  10. '****************************************************************
  11. device  = 16f88
  12. ansel   = 0       ' Salidas Digitales
  13. osctune = 0       ' Frecuencia Media
  14. osccon  = 126     ' %01111110  Oscilador Interno a 8MHZ
  15.  
  16. trisb   = %00001100
  17. trisa   = %00100000
  18. CLEAR PORTA
  19. CLEAR PORTB
  20. declare lcd_type alpha
  21. declare lcd_interface 4    ' LCD a 4 Bits
  22. declare lcd_lines     2    ' LCD 2 Filas
  23. DECLARE LCD_DTPIN PORTB.4  ' PORTB4-7 Salidas del LCD
  24. DECLARE LCD_ENPIN porta.2  ' RA6 Pin E LCD
  25. declare lcd_rspin porta.3  ' RA7 PIN RS LCD
  26.  
  27. declare sda_pin porta.0    ' PIN SDA I2C RTC
  28. declare scl_pin porta.1    ' Pin SCL I2C RTC
  29. declare slow_bus true      ' Bus Lento para I2C
  30.  
  31. symbol ctrl = 1            ' Constante para el flasheo de 1 segundo
  32.  
  33. dim ssec as byte           ' Variables para la configuracion del RTC
  34. dim smin as byte
  35. dim shor as byte
  36. dim swek as byte
  37. dim smon as byte
  38. dim sday as byte
  39. dim sano as byte
  40. dim rsec as byte
  41. dim rmin as byte
  42. dim rhor as byte
  43. dim rwek as byte
  44. dim rmon as byte
  45. dim rday as byte
  46. dim rano as byte
  47. dim d2hex as byte
  48. dim lsb   as byte
  49. dim msb   as byte
  50.  
  51. dim i as byte             ' Variable comodin
  52.                                                    
  53. dim bt1 as portb.3        ' Botones de Configuracion
  54. dim okk as portb.2
  55. dim cfg as porta.4
  56.                          
  57. dim izq as portb.1        ' Salidas a L293D
  58. dim der as portb.0
  59.  
  60.  
  61. delayms 1000              ' Pausa para LCD
  62.  
  63.  If cfg=1 then
  64.   gosub ConfRTC
  65.  else
  66.   Gosub NormalOP
  67.  endif
  68.  
  69. ConfRTC:
  70. shor=0
  71. smin=0
  72. ssec=0
  73. sday=0
  74. smon=0
  75. sano=0
  76.  
  77. h:
  78.  print $FE,1, " Ingrese Hora"
  79.  print $FE,$C0, dec shor, " Hora"
  80.  if bt1=1 then                        ' Ingresamos Hora
  81.   gosub pausa
  82.    if bt1=1 then
  83.     shor=shor+1
  84.     print $FE,$C0, dec shor, " Hora"  
  85.    endif
  86.  endif  
  87.  
  88.  IF SHOR>23 THEN SHOR=0 ENDIF
  89.  
  90.  if okk=1 then
  91.   D2HEX=shor  
  92.   gosub dec2hex
  93.   SHOR=d2hex
  94.   gosub save
  95.   goto m
  96.  endif
  97. gosub P2
  98. goto h  
  99.  
  100. m:
  101.  print $FE,1, "Ingrese minutos"
  102.  print $FE,$C0, dec smin, " mins"
  103.  if bt1=1 then                        ' Ingresamos Minutos
  104.   gosub pausa
  105.    if bt1=1 then
  106.     smin=smin+1
  107.     print $FE,$C0, dec smin, " mins"  
  108.    endif
  109.  endif  
  110.  
  111.  IF SMIN>59 THEN SMIN=0 ENDIF
  112.  
  113.  if okk=1 then
  114.   D2HEX=sMIN  
  115.   gosub dec2hex
  116.   SMIN=d2hex
  117.   gosub save
  118.   goto S1
  119.  endif
  120. gosub P2
  121. goto m
  122.  
  123. S1:
  124.  print $FE,1, "Ingrese Segundos"
  125.  print $FE,$C0, dec ssec, " segs"
  126.  if bt1=1 then                        ' Ingresamos Segundos
  127.   gosub pausa
  128.    if bt1=1 then
  129.     ssec=ssec+1
  130.     print $FE,$C0, dec ssec, " segs"  
  131.    endif
  132.  endif  
  133.  
  134.  IF SSEC>59 THEN SSEC=0 ENDIF
  135.  
  136. if okk=1 then
  137.   D2HEX=sSEC  
  138.   gosub dec2hex
  139.   SSEC=d2hex
  140.   gosub save
  141.   gosub d1
  142.  endif
  143. gosub p2
  144. GOSUB S1
  145.  
  146. d1:
  147. print $FE,1, "Ingrese Dia"
  148.  print $FE,$C0, dec sday
  149.  if bt1=1 then                        ' Ingresamos Dia
  150.   gosub pausa
  151.    if bt1=1 then
  152.     sday=sday+1
  153.     print $FE,$C0, dec sday  
  154.    endif
  155.  endif  
  156.  
  157.  IF Sday>31 THEN Sday=1 ENDIF
  158.  
  159. if okk=1 then
  160.   D2HEX=sday  
  161.   gosub dec2hex
  162.   Sday=d2hex
  163.   gosub save
  164.   gosub m1
  165.  endif
  166. gosub p2
  167. GOSUB d1
  168.  
  169. m1:
  170.  print $FE,1, "Ingrese mes"
  171.   print $FE,$C0, dec smon
  172.  if bt1=1 then                        ' Ingresamos Mes
  173.   gosub pausa
  174.    if bt1=1 then
  175.     smon=smon+1
  176.     print $FE,$C0, dec smon  
  177.    endif
  178.  endif  
  179.  
  180.  
  181.  IF Smon>12 THEN Smon=1 ENDIF
  182.  
  183. if okk=1 then
  184.   D2HEX=smon  
  185.   gosub dec2hex
  186.   Smon=d2hex
  187.   gosub save
  188.   gosub w1
  189.  endif
  190. gosub p2
  191. GOSUB m1
  192.  
  193. w1:
  194.  print $FE,1, "Ingrese Año"
  195.   print $FE,$C0, dec sano
  196.  if bt1=1 then                        ' Ingresamos Año
  197.   gosub pausa
  198.    if bt1=1 then
  199.     sano=sano+1
  200.     print $FE,$C0, dec sano  
  201.    endif
  202.  endif  
  203.  
  204.  IF Sano>99 THEN Sano=0 ENDIF
  205.  
  206. if okk=1 then
  207.   D2HEX=sano  
  208.   gosub dec2hex
  209.   Sano=d2hex
  210.   gosub save
  211.   gosub writertc
  212.  endif
  213. gosub p2
  214. GOSUB w1
  215.  
  216. WriteRTC:                              '*************Escribimos el RTC*******************
  217.  
  218. busout $D0,$00,[ ssec,  smin, shor,swek,  sday, smon, sano,ctrl]
  219. print $FE,1, "Configurando..."
  220. delayms 750
  221. Date:
  222. Print $FE,1, " Hora/Fecha ok? "    
  223. busin $D0,$00,[rsec,rmin,rhor,rwek,rday,rmon,rano]
  224.                                       ' Fecha y Hora OK? si NormalOP no repetimos configuracion
  225. print $FE,$C0,  hex rhor,":", hex RMIN,":", hex RSEC
  226.  
  227. gosub Pausa
  228.  
  229.  if okk=1 then NormalOP
  230.  if bt1=1 then confrtc
  231. goto date
  232.  
  233. Save:
  234.  Print $FE,1, "Guardado"          ' subrutina de msj guardado
  235.  delayms 750
  236. return
  237.  
  238. Pausa:                            ' pausa 50mS
  239.  delayms 50
  240. return
  241.  
  242. P2:                               ' Pausa 300mS
  243. delayms 300
  244. return
  245.  
  246. Dec2Hex:
  247.    lsb=d2hex//10                                'obtener lsb
  248.    msb=d2hex/10                                 'obtener msb
  249.    d2hex=msb*16                                 'convertir msb a bcd
  250.    d2hex=d2hex+lsb                              'juntar msb hex y lsb
  251. return
  252.  
  253.    
  254. NormalOP:
  255.  
  256.  busin $D0,$00,[rsec,rmin,rhor,rwek,rday,rmon,rano]
  257.  print $FE,1,  shex2 rhor,":", shex2 RMIN,":", shex2 RSEC
  258.  print $FE,$C3,  shex2 rday,"/", shex2 rmon,"/20", shex2 Rano
  259.  IF RHOR=$03 AND RMIN=$06 AND RSEC=$10 THEN
  260.   GOSUB BLINK
  261.   ENDIF  
  262.  delayms 100
  263. goto normalop
  264.  
  265. BLINK:
  266. FOR I=0 TO 10
  267.    HIGH PORTB.0:HIGH PORTB.1
  268.    GOSUB P2
  269.    LOW PORTB.0: LOW PORTB.1
  270.    GOSUB P2
  271.   NEXT
  272. RETURN

La fecha es la que me anda dolores de cabeza. 

PD. Olvide el pantallazo.


(http://img175.imageshack.us/img175/8462/rtcpd6.jpg)
       


Título: Re: RELOJ CON PIC
Publicado por: Mario en 12 de Enero de 2008, 05:20:04
¿Qué compilador es ese Navaismo?
Título: Re: RELOJ CON PIC
Publicado por: doppel en 12 de Enero de 2008, 11:58:23
eso es protón  :-)
Título: Re: RELOJ CON PIC
Publicado por: ASTROCAR en 05 de Febrero de 2008, 06:25:30
¿Qué compilador es ese Navaismo?


por lo que veo es compilador es mikrobasic
Título: Re: RELOJ CON PIC
Publicado por: navaismo en 05 de Febrero de 2008, 13:53:18
¿Qué compilador es ese Navaismo?


por lo que veo es compilador es mikrobasic

No, no es Mikrobasic, como bien ha dicho Hernan el compilador es PROTON
Título: Re: RELOJ CON PIC
Publicado por: ASTROCAR en 08 de Febrero de 2008, 17:45:11
Hola buenas tardes como les va les comento que no me habia iniciado con el proyecto del reloj por no disponer de un ds1307 y su respectivo cristal ya por fin me llego y desde hoy empieso el codigo para dicho proyecto el cual ya tengo una dudas pero aun no consigo una buena datasheets explicativa del ds1307 y alguien dispone de una lo mas explicativa posible se lo agradesco como por ejemplo que me explique la parte de control para el protocolo i2c usado con el ic reloj ya que asumo que no es como las eeprom de la serie 24cxxx.

haa la otra duda que tengo es como configurar el reloj por lo pco que vi se que tiene los pines de i2c mas su respectiva alimentacion (Vcc y Gnd) pero aparte tiene un voltaje de bateria el cual es de 3 volt maximo. bueno muchas dudas de momento mejor me documento un poco y les comento pero manos a la obra y helana no te dejes ganar conmigo usted comenso primero asi que es un reto es broma pero espero que aprendamos mucho en este codigo del reljo y que lo manipuulemos hasta con calendario.

saludos y quedo a sus comendarios de tenerlos
Título: Re: RELOJ CON PIC
Publicado por: navaismo en 08 de Febrero de 2008, 18:18:56
MIra segun yo lo poco que entendi y basto para configuararlo es:

Que este bicho trabaja bajo I2C -eso ya lo sabes-, que necesita el crystal de 32.xxxx para que funcione bien -Tambien ya lo sabes-, que la bateria que tiene es para que no pierda los datos a pesar de que el circuito no este energizado.

Y lo "importante" es que trabaja con datos Hexadecimales para leer y escribir; porlo que hay que direccionarlos asi. Que en las posiciones de memoria se encuentran como configurar MES DIA AÑO etc, por eso en el codigo cuando ponemos:

Código: FreeBasic
  1. busout $D0,$00,[ ssec,  smin, shor,swek,  sday, smon, sano,ctrl]

Le decimos que ne la direccion $D0 que corresponde al RTC, y comenzando con la direccion 00 escribiremos los datos que se ven en el argumento.


Y a "grosso modo" es lo que te podria decir de manera digerida.
Título: Re: RELOJ CON PIC
Publicado por: ASTROCAR en 08 de Febrero de 2008, 19:06:52
Listo men que bueno, doy mi manera de ver las cosas ahora,  primero en cuando a la bateria es para que el ic no pierda la configuracion de la hora asi se desconecte del pic pero aun sigue una duda porque asuves tiene que estar los 5 voltis o es que el ic el mismo reconoce con cual alimentacion trabajar si el ve que le quitaron los 5 voltios entonce trabaja con la bateria de 3volt ejemplo que este funcionando copn una fuente que este a la red de 120vac y se corte el suministro de energia entonce el pasa a trabajar con la bateria de 3 voltios eso es mi gran duda en esa parte porque la bateria y los 5 voltios de una fuente extena. cosa que lo puedo averiguar en la practica.

Lo otro que entendi es que el protoco i2c para el ds1307 usa como control $D0=bin11010000 y para direccionar los parametros de seg, min, hor y esas cosas comienza desde cero cosa que me lo dira mejor una buena datasheets del ds1307.

Eso fue lo que maneje con su explicacion haaa y previamente tengo que configurar el reloj para para que es sepa desde que hora y segundo y minutos empezar a trabajar.

bueno saludos y en lo que este en la practica creo que aclarare mas mis dudas.
Título: Re: RELOJ CON PIC
Publicado por: ASTROCAR en 09 de Febrero de 2008, 12:27:31
oye colegas estoy si que me parece a un reloj y me disculpan

http://es.youtube.com/watch?v=-6JnAxTXApw&feature=related
Título: Re: RELOJ CON PIC
Publicado por: MGLSOFT en 09 de Febrero de 2008, 12:30:34
Esta mortal!!
Que buen diseño!! :lol:
Título: Re: RELOJ CON PIC
Publicado por: ASTROCAR en 09 de Febrero de 2008, 12:35:44
la imaginacion humana es super es mas sin palabras asi que todos somos capaz de eso y mucho mas trabajemos en union y lo de mas es reto.

saludos
Título: Re: RELOJ CON PIC
Publicado por: navaismo en 09 de Febrero de 2008, 14:05:25
Ah bienvenido al mudo de los "Proppellers Clock's" busca eso en google y veras los muchos y variados diseños que hay. Alguien aqui LEDROJ ha hecho el suyo y con PBP!!
Título: Re: RELOJ CON PIC
Publicado por: Nocturno en 09 de Febrero de 2008, 14:19:48
Se ve un pequeño fallo de estabilidad, pero la resolución es extraordinaria.
Título: Re: RELOJ CON PIC
Publicado por: ASTROCAR en 09 de Febrero de 2008, 16:34:12
ya comence con mi codigo y hasta el momento todo va perfecto el tener claro el principio de funcionamiento las cosas se hacen facil lo que es interpretar la datasheets bien pronto subo todo mi avence para que me den sus comentarios haa le estoy colocando un teclado para poder cambiar hora, minuto, segundo y fecha en el momento que yo desee para asi no usar puldadores y un conteo.

y como recomendacion es muy bueno el ds1307 y mas su simplesa con el protocolo i2c.

saludos y espero terminarlo hoy mismo lo que pasa es que soy flojo y hago por parte a demas que estoy pasando la resaca jajajajaja.
bye
Título: Re: RELOJ CON PIC
Publicado por: zagoaristides en 09 de Abril de 2009, 16:02:14
metele helena y que te quede bonito

De verdad estás en ISLANDIA???
nahhh, lo puse porque me recuenda al libro de verne

Nooo, yo también soy amante de Jules! Me leí todo. Buenísimo.