Autor Tema: Ayuda para programar Reloj en Tiempo Real  (Leído 4408 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ferloy

  • PIC10
  • *
  • Mensajes: 3
Ayuda para programar Reloj en Tiempo Real
« en: 12 de Julio de 2011, 18:24:53 »
Hola, soy nuevo en este foro y necesito ayuda, ya que me he pasado más de 8 horas buscando como escribir y recibir datos de un reloj en tiempo real.
Les cuento:
Estoy trabajando con un modulo BIGPIC 5 de mikroelectronics, el cual, dentro de sus dispositivos, cuenta con un real time clock PCF 8583.
Resulta que lo necesito para hacer un reloj en un display de 7 segmentos, pero no sé hacer el programa para sacar los datos. La conexion es por I2C y nunca había trabajado con eso, lo unico que encuentro en internet es el codigo en assembler, por eso decidi inscribirme en este foro para ver si alguien me ayuda con el codigo en BASIC.
Yo trabajo con el microcode studio.

En la parte de trabajar con el 7 segmentos no tengo problema, solo me gustaria que me ayuden hasta tener la información (fecha, hora minuto segundo) en variables.

Saludos

Desconectado Marioguillote

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: Ayuda para programar Reloj en Tiempo Real
« Respuesta #1 en: 13 de Julio de 2011, 00:50:53 »
Hola!

Tal vez esto sobre el DS1307 ( I y II) te ayude, o esto sobre el DS1337.

Al menos para que tengas una idea de cómo sacar los datos hacia las variables. Si bien no es el mismo RTC, tal vez pueda ser de utilidad por tratarse de I2C y BASIC.

Saludos!
Mario

Desconectado Noelillo

  • PIC12
  • **
  • Mensajes: 94
Re: Ayuda para programar Reloj en Tiempo Real
« Respuesta #2 en: 13 de Julio de 2011, 06:56:02 »
PROGRAMADO CON PROTON IDE:


'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : Miguel Noe Garcia Perez                           *
'*  Notice  : Copyright (c) 2010 Iberica 2000                   *
'*          : All Rights Reserved                               *
'*  Date    : 05/05/2010                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
  Device = 16F877A        ' Define el Micro a Utilizar
   All_Digital = True      ' Configura Puertos como dig.
   XTAL = 4                ' Define velocidad resonador
   PORTB_PULLUPS = ON      ' Resistencia interna Activada
   
'DEFINICION DE VARIABLES, CONSTANTES Y PUERTOS I/O
'---------------------------------------------------------
   'TRISA = $00           ' Define el Puerto A como salidas
   TRISB = $FF           ' Define el Puerto B como Entradas
   TRISC = $FF           ' Define el Puerto C como Entradas
   TRISd = $00           ' Define el Puerto C como salidas
   
   
   
   
   '************************************ reloj
        Symbol CLK       = PORTc.3
      Symbol DTA      = PORTc.7
      Symbol RST      = PORTc.6
      
      
      symbol T1= PortA.0
        symbol T2= PortA.1
        symbol T3= PortA.2
        symbol T4= PortA.3
        symbol T5= PortA.4
        symbol T6= PortA.5
       
        Symbol Punto = Portd.7
       
        Symbol Pul1= Portb.0
        symbol Pul2= Portb.1
        Symbol Pul3= Portb.2
        symbol Pul4= Portb.3
        Symbol Pul5= Portb.4
        symbol Pul6= Portb.5
        Symbol Pul7= Portb.6
        symbol Pul8= Portb.7
     
        dim Contador  as byte
        Dim Numero    as dword
        dim Unidades  as dword
        dim Decenas   as dword
        dim Centenas  as dword
        dim Millares  as dword
        dim UniMillar as dword
        dim CenMillar as dword
       
        dim Btnvar    as byte
        dim N         As byte
       
       
       
        '****************************** reloj *************************

       Dim RTCCMD      as Byte
      
      Dim TEMP      as Byte
      Dim TEMP1       as Byte
      Dim TIMEDATA[7]   as Byte
      Dim OLDSECONDS    as Byte
      
        Dim SECONDS    as timedata#0
      Dim MINUTES    as timedata#1
      Dim HOURS      as timedata#2
      Dim DATE      as timedata#3
      Dim MONTH      as timedata#4
      Dim DAY         As Timedata#5
        Dim YEAR      as timedata#6
 
        dim Seg         as byte


 
' Clear Write Protect bit in control register of DS1302
      Temp = $10
      RTCCmd = %00111
      Gosub DS1302_WRITE
        Temp = $00
      RTCCmd = $00
      Gosub DS1302_WRITE
      
        Temp = $80
      RTCCmd = %00111
      Gosub DS1302_READ
      
      
      
AGAIN:
      Gosub DS1302_READ
       'if seconds = 16 then seconds = 10
       'if seconds = 10 then
       
       ' If oldseconds <> seconds Then  n=0'Print at 1,1, "TIME ", Hex2 Hours,":",Hex2 Minutes,":",Hex2 Seconds
                              '   at 2,1, "DATE ", Hex2 Date,"/",Hex2 Month,"/20",Hex2 Year
'                                          At 3,1,$FE,$10,$FE,$10,$FE,$10,$FE,$10,"DAY  ", hex2 Day



          if seconds > 9 then seconds = seconds - 6
          if seconds > 19 then seconds = seconds - 6
          if seconds > 29 then seconds = seconds - 6
          if seconds > 39 then seconds = seconds - 6
          if seconds > 49 then seconds = seconds - 6
         
          if Minutes > 9 then Minutes = Minutes - 6
          if Minutes > 19 then Minutes = Minutes - 6
          if Minutes > 29 then Minutes = Minutes - 6
          if Minutes > 39 then Minutes = Minutes - 6
          if Minutes > 49 then Minutes = Minutes - 6
         
          if Hours > 9 then Hours = Hours - 6
          if Hours > 19 then Hours = Hours - 6
         


         Unidades = dig  Seconds,0
         Decenas  = dig  Seconds,1
         
         centenas = dig  Minutes,0
         Millares = dig  Minutes,1
         
         UniMillar = Dig  Hours,0
         CenMillar = dig  Hours,1
         
         gosub Multiplexacion
        'gosub DiaSemana
        Gosub Pulsadores
Goto AGAIN

'******************************************* 1
Multiplexacion:

 
  numero = Unidades
  gosub Paso_a_7Segmento
  low punto
  HIGH T1
  low T2
  low T3
  low T4
  low T5
  low T6
 
 
  delayms 2
  clear portd
  delayms 1
'******************************************* 2
 
  numero = decenas
  gosub Paso_a_7Segmento
 
  low T1
  HIGH T2
  low T3
  low T4
  low T5
  low T6
  'clear portd
  delayms 2
  clear portd
  delayms 1
'******************************************* 3
  'centenas = DIG contador,2


  numero = centenas
  gosub Paso_a_7Segmento
  'low punto
  high punto
  low T1
  low T2
  HIGH T3
  low T4
  low T5
  low T6
  'clear portd
  delayms 2
  clear portd
  delayms 1
'******************************************* 4
  'Millares = DIG contador,3
  numero = Millares
  gosub Paso_a_7Segmento
  low punto
  low T1
  low T2
  low T3
  high T4
  low T5
  low T6
  'clear portd
  delayms 2
  clear portd
  delayms 1
'******************************************* 5
  numero = UniMillar
  gosub Paso_a_7Segmento
  high punto
  low T1
  low T2
  low T3
  low t4
  high t5
  low t6 
  delayms 1
  'clear portd
  delayms 1
 '******************************************* 6
  numero = cenMillar
  gosub Paso_a_7Segmento
  low punto
  low T1
  low T2
  low T3
  low t4
  low t5
  high t6 
  delayms 2
  clear porta
  delayms 2
  clear portd
  delayms 1
  return
  '*******************************************************************************
  '*********    transformacion a siete segmentos *********************************
  '*******************************************************************************
  Paso_a_7Segmento:
   
  select case numero
       case 0
          portd =$3F
         
       case 1
          portd =$06
         
       case 2
          portd =$5B
         
       case 3
          portd =$4F
         
       case 4
          portd =$66
         
       case 5
          portd =$6D
         
       case 6
          portd =$7D
         
       case 7
          portd =$07
         
       case 8
          portd =$7F
         
       case 9
          portd =$67
       
       case else
          portd =$49
               
     endselect 
       
return


'-----------------------------------------------------------------------------------
' Write to DS1302 RTC
DS1302_WRITE:      
      High RST'______________________________5
      Shout Dta, Clk, LSBFIRST, [%0\1,RTCCmd\5,%10\2,Temp\8]
      Low RST
      Return
'-----------------------------------------------------------------------------------
' Read from the DS1302
DS1302_READ:
      High RST'__________________________6
      Shout DTA, Clk, LSBFIRST, [%111111\6,%10\2]
      oldseconds = seconds
      Shin DTA, Clk, LSBPRE, [Seconds,Minutes,Hours,Date,Month,DAY,Year]
      Low RST
      Return
      
      
Pulsadores:
 
       
        button pul1,0,255,250,Btnvar,0,Bp
        goto Setup
  Bp:     
        return
       
'Bp:
'        button Pul2,0,255,250,Btnvar,0,cP
'        decenas = decenas +1 :gosub decena
'Cp:     
'        button Pul3,0,255,250,Btnvar,0,DP
'        inc Centenas:gosub centena 
'Dp:
'        button Pul4,0,255,250,Btnvar,0,Ep
'        inc Millares:gosub Millar
       
'Ep:       
'        button pul5,0,255,250,Btnvar,0,Fp
'        dec unidades :gosub unidad
'Fp:
'        button Pul6,0,255,250,Btnvar,0,GP
'        dec decenas :gosub decena: if Decenas < 0 then Decenas = 5
'Gp:     
'        button Pul7,0,255,250,Btnvar,0,HP
'        dec Centenas:gosub centena: if centenas < 0 then centenas = 9 
'Hp:
'        button Pul8,0,255,250,Btnvar,0,IP
'        dec Millares:gosub Millar: if millares < 0 then Millares = 5
             
'Ip:    button star,0,255,250,Btnvar,0,Sp
'       goto Contar
'Sp:
'       return
 
Setup:
     clear porta
     
     gosub MultiMinutos
     
     button Pul2,0,255,250,Btnvar,0,Seti
     Minutes = Minutes +1 :if minutes >= 60 then minutes = 0
     centenas = dig  Minutes,0
     Millares = dig  Minutes,1
     
 Seti:
     button pul1,0,255,250,Btnvar,0,setup
     gosub DS1302_WRITE
     delayms 500
     goto AGAIN
     
     
 MultiMinutos:   
     
 numero = centenas
  gosub Paso_a_7Segmento
  'low punto
  high punto
  low T1
  low T2
  HIGH T3
  low T4
  low T5
  low T6
  'clear portd
  delayms 2
  clear portd
  delayms 1
'******************************************* 4
  'Millares = DIG contador,3
  numero = Millares
  gosub Paso_a_7Segmento
  low punto
  low T1
  low T2
  low T3
  high T4
  low T5
  low T6
  'clear portd
  delayms 2
  clear porta
  delayms 1
       
 return

Desconectado ferloy

  • PIC10
  • *
  • Mensajes: 3
Re: Ayuda para programar Reloj en Tiempo Real
« Respuesta #3 en: 14 de Julio de 2011, 00:03:25 »
Gracias marioguillote, la verdad es que habia visto esa informaciòn pero no podia acceder a la 2da pagina del tutorial, ahora vi algunas cosas que me pueden servir, pero aun no entiendo ya que está echo en otro programa no en microbasic y para otro reloj que tiene distintos registros y todo eso, mañana le preguntaré a un profesor, pero igual si alguien tiene algo para que pueda servir, por favor posteelo aqui.



 

anything