Autor Tema: problema con reloj ds1302  (Leído 3507 veces)

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

Desconectado hqv

  • PIC12
  • **
  • Mensajes: 70
problema con reloj ds1302
« en: 07 de Agosto de 2005, 19:05:00 »
Hola amigos del foro:

Ya estoy utilizando el reloj pero el unico inconveniente es que los segundos llegan hasta 99 y los minutos también...que puedo hacer para solucionar eso..


gracias..

hq

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: problema con reloj ds1302
« Respuesta #1 en: 08 de Agosto de 2005, 00:10:00 »
Es que el DS1302 no entrega el dato en binario, lo entrega en BCD. Echa un vistazo aquí y lo entenderás:
http://www.monografias.com/trabajos3/bcd/bcd.shtml

Desconectado hqv

  • PIC12
  • **
  • Mensajes: 70
RE: problema con reloj ds1302
« Respuesta #2 en: 08 de Agosto de 2005, 01:08:00 »
entonces lo que tengo que hacer es transformar el numero que me da el reloj (bcd) a binario y ese valor mandarlo al lcd??

Pero sabes estoy medio mariado...como se hace eso....?

gracias por la información..

hq



Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: problema con reloj ds1302
« Respuesta #3 en: 08 de Agosto de 2005, 02:39:00 »
Es fácil, sólo tienes que romper el valor leído en bloques de 4 bits y convertirlos a decimal independientemente. Pero mejor que yo, lo explica el monográfico que linké en el mensaje anterior.

Desconectado pachopic

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 207
RE: problema con reloj ds1302
« Respuesta #4 en: 08 de Agosto de 2005, 08:33:00 »
HOLA:

en el otro post,que respondi, en el codigo hay una funcion de conversion en bcd, es tomada de un ejemplo que trae el ccs (yo la modifique un poco) y es especificamente para el ds1302, mira este  ejemplo :
EX_RTCLK.C ,que esta en la carpeta  de ejemplos que trae el ccs....espero te sirva de ayuda..
Codigo:
/////////////////////////////////////////////////////////////////////////
////                           EX_RTCLK.C                            ////
////                                                                 ////
////  This program reads and writes to an external Real Time Clock.  ////
////  It communicates to the user using the LCD and keypad.          ////
////                                                                 ////
////  Configure the CCS prototype card as follows:                   ////
////      Install the LCD and keypad.                                ////
////                                                                 ////
////  This example will work with the PCB, PCM and PCH compilers.    ////
////  The following conditional compilation lines are used to        ////
////  include a valid device for each compiler.  Change the device,  ////
////  clock and RS232 pins for your hardware if needed.              ////
/////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,2003 Custom Computer Services         ////
//// This source code may only be used by licensed users of the CCS  ////
//// C compiler.  This source code may only be distributed to other  ////
//// licensed users of the CCS C compiler.  No other use,            ////
//// reproduction or distribution is permitted without written       ////
//// permission.  Derivative programs created using this software    ////
//// in object code form are not restricted in any way.              ////
/////////////////////////////////////////////////////////////////////////


#if defined(__PCB__)
#include <16C56.h>
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=20000000)

#elif defined(__PCM__)
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)

#elif defined(__PCH__)
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#endif

#define RTC_SCLK  PIN_B1
#define RTC_RST   PIN_B2

#define RTC_CE    PIN_D0
#define RTC_IO    PIN_D1
#define RTC_CLK   PIN_D2
#define RTC_DATA  PIN_D3

#include <ds1302.c>
#include <lcd.c>
#include <kbd.c>


byte get_bcd() {
  char first,second;

  do {
    first=kbd_getc();
  } while ((first<"0") || (first>"9"));
  lcd_putc(first);
  first-="0";

  do {
    second=kbd_getc();
  } while ((second<"0") || (second>"9"));
  lcd_putc(second);

  return((first<<4)|(second-"0"));
}

void set_clock(){
   byte day,mth,year,dow,hour,min;

   lcd_putc("fYear 19: "Giño;
   year=get_bcd();
   lcd_putc("fMonth: "Giño;
   mth=get_bcd();
   lcd_putc("fDay: "Giño;
   day=get_bcd();
   lcd_putc("fWeekday 1-7: "Giño;
   dow=get_bcd();
   lcd_putc("fHour: "Giño;
   hour=get_bcd();
   lcd_putc("fMin: "Giño;
   min=get_bcd();

   rtc_set_datetime(day,mth,year,dow,hour,min);
}


void main() {
   char cmd;
   byte day,mth,year,dow,hour,min,sec;

   rtc_init();
   lcd_init();
   kbd_init();

   lcd_putc("f1: Change, 2: Display"Giño;

   do {
      cmd=kbd_getc();
   } while ((cmd!="1")&&(cmd!="2"));

   if(cmd=="1")
     set_clock();

   while (TRUE) {
      lcd_putc("f");
      rtc_get_date( day, mth, year, dow);
      rtc_get_time( hour, min, sec );
      printf(lcd_putc,"%2X/%2X/%2X
%2X:%2X:%2X",day,mth,year,hour,min,sec);
      delay_ms(250);
   }
}




saludos...RebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotado

Desconectado laloavr

  • PIC10
  • *
  • Mensajes: 34
RE: problema con reloj ds1302
« Respuesta #5 en: 22 de Agosto de 2005, 13:03:00 »

yo trabaje con el ds1302 usando estas macro para conversion BCD2BIN y BIN2BCD

copien esto en su ***.h

#define BCD2BIN(val) (((val)&15) + ((val)>>4)*10)
#define BIN2BCD(val) ((((val)/10)<<4) + (val)%10)

forma de uso:

La mejor manera de leer los datos CLOCK/CALENDAR del DS1302 es en modo BURST y guardarlos en un ARRAY.  

main o funcion
{
  char ARRAY[10];  
  char *PunteroARRAY;
  char Minutos;
  char Segundos;
  char Hora;
  PunteroARRAY = ARRAY;
 
  ReadClockBurstMode(PunteroArray); //esta es mi funcion de lectura//
 
  Minutos =  BCD2BIN(ARRAY[1]); // Combirtio los minutos BCD a BIN para  para                                                                        mejor calculo de lapsos de tiempo  Hora,fecha,etc //

}

 

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
RE: problema con reloj ds1302
« Respuesta #6 en: 22 de Agosto de 2005, 14:11:00 »
Podrias poner tambien tu funcion de lectura ????Sonrisa GiganteSonrisa GiganteSonrisa Gigante
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado laloavr

  • PIC10
  • *
  • Mensajes: 34
RE: problema con reloj ds1302
« Respuesta #7 en: 22 de Agosto de 2005, 16:56:00 »

si le intesa a varios la pongo

Desconectado hqv

  • PIC12
  • **
  • Mensajes: 70
RE: problema con reloj ds1302
« Respuesta #8 en: 24 de Agosto de 2005, 18:41:00 »
gracias..lalovr por tu mensaje....
podrías poner la función de lectuta tb...

gracias de nuevo por las dosa cosas...

hq