• Viernes 15 de Noviembre de 2024, 08:21

Autor Tema:  Programar Un Ds1307 Con El Pic16f877 Con I2c  (Leído 33823 veces)

Alternative

  • Miembro MUY activo
  • ***
  • Mensajes: 176
    • Ver Perfil
Programar Un Ds1307 Con El Pic16f877 Con I2c
« en: Viernes 20 de Abril de 2007, 19:00 »
0
Saludos a todos.
Necesito ayuda para programar el DS1307 con el PIC16F877 a traves de puerto I2C, encontre un programa en el foro, pero cuando lo arme no me quiso funcionar. Les coloco el programa ASM para que lo chequen.

Por todo gracias
Y ya saben si tienen dudas en algun programa
les puedo ayudar

 :hola:
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Alternative

  • Miembro MUY activo
  • ***
  • Mensajes: 176
    • Ver Perfil
Re: Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #1 en: Viernes 20 de Abril de 2007, 19:22 »
0
Saludos.
Les comento que necesito que me ayuden como configural el DS1307 y como leer, yo al poder saber esto, voy a incrementar el programa haciendo que me despliegue en el LCD la fecha y hora, y programar que me prenda una alarma en una determinada hora que de programara ingresandolo por un teclado matricial, pero eso es lo de menos necesito que me ayuden como configurar el DS1307 y cuando termine el programa ya terminado lo coloco en el foro.

Ya saben si tienen dudas sobre LCD, Teclado Matricial, Convertidores, PWM, tranmision serial, Me pueden pedir ayuda y como siempre tratare de ayudarles lo mas que se pueda


bye...

Alternative

  • Miembro MUY activo
  • ***
  • Mensajes: 176
    • Ver Perfil
Re: Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #2 en: Miércoles 16 de Mayo de 2007, 16:14 »
0
SALUDOTES
GRACIAS POR SU HAYUDA, HAAAY  NADIE ME AYUDO
BUENO LO BUENO ES QUE YA REALICE EL PROGRAMA
ME COSTO UN POCO PERO YA LOGRE UTILIZAR EL
DS1307, DESPLIEGO EN UN LCD DE 4X40
EJEMPLO

7  MAY  2007
Lun  7:07:15

lo cheque y hace los cambios automaticamente de meses
por ejemplo si febreo tiene 28 dias o 29
esta bien el integrado se los recomiendo, me llevo una semana
en realizar el programa y ya completo para desplegar en el
LCD son 1300 lineas, como unas 13 hojas

Bueno gracias por su ayuda
 :kicking:

edwardu

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #3 en: Jueves 24 de Mayo de 2007, 06:53 »
0
hola quiesiera recivir tu ayuda tambien estoy en ese proyecto

NANO1985

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #4 en: Miércoles 13 de Junio de 2007, 00:27 »
0
hola a todos.... les cuento que yo el año pasado hice algo con un pic 18F877A y un DS1307... la verdad que funciona muy bien... cualquier duda en las rutinas que utilicé no duden en consultarmelo.... desde ya espero sus preguntirijillas B)

jano77

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #5 en: Miércoles 1 de Agosto de 2007, 00:44 »
0
Hola gente, soy nuevo en el foro y tb principiante en el tema de PIC, pero estoy en un proyecto en el que necesito configurar el DS1307 con el pic que mencionan Uds., y la verdad que estoy medio perdido. Yo los programas los hago con PÎC C compiler, casi nada en assembler.
Me seria de gran ayuda si alguien tiene un codigo para analizar.
Desde ya muchas gracias, mi correo es el_jano_zz@hotmail.com.

hailander

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #6 en: Miércoles 22 de Agosto de 2007, 05:03 »
0
hola: igual que ustedes tengo problemas con el ds1307; intento visulizar la hora en unos display de 7 segmentos pero solo me muestra u 0 y un 5 y de alli no pasa, tambien intente simularlo en proteus pero me aparece lo mismo.

me pueden dar ideas sobre que puede estar pasando.

gracias :comp:  :comp:  :comp:

Jorge1509

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #7 en: Martes 9 de Octubre de 2007, 00:03 »
0
:hola: NANO1985 me podes ayudar enviandome tu proyecto con el ds1307?? muchas gracias, la verdad es que no he podido comprender el "baud generator" del 16f87x y quiero saber como lo hiciste, muchas gracias.. mi mail es jorge-15_09@hotmail.com

JESNER

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #8 en: Miércoles 23 de Septiembre de 2009, 03:04 »
0
HOLA,,,SOY NUEVO EN EL FORO Y VOY A VER SI ME RESULTA......TENGO UN PROBLEMA , NECESITO CONECTAR UN DS 1307 CON UN NICROCONTROLADOR 16F877 U OTRO PIC ,, LA CONDICION ES QUE EL PROGRAMA ESTE REALIZADO EN ASSEMBLER........

MI NOMBRE ES ALBEIRO Y SOY DE COLOMBIA....SI ES POSIBLE ME PUEDEN ENVIAR EL CODIGO AL CORREO albeiro135@hotmail.com        

se lo agradesco...jesner albeiro alvear acosta

caas624

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #9 en: Martes 27 de Octubre de 2009, 20:53 »
0
Cita de: "Alternative"
Saludos a todos.
Necesito ayuda para programar el DS1307 con el PIC16F877 a traves de puerto I2C, encontre un programa en el foro, pero cuando lo arme no me quiso funcionar. Les coloco el programa ASM para que lo chequen.

Por todo gracias
Y ya saben si tienen dudas en algun programa
les puedo ayudar

 :hola:
PARCE SOY NUEVO EN EL FORO QUISIERA SABER COMO PROGRAMA R EL DS1307 CON CON EL PIC 16F877, ME PODRIAS ENVIAR UN ARCHIVO .ASM PARA GUIARME,

GRACIAS

KalebZero

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #10 en: Lunes 28 de Febrero de 2011, 00:18 »
0
Cita de: "Alternative"
SALUDOTES
GRACIAS POR SU HAYUDA, HAAAY  NADIE ME AYUDO
BUENO LO BUENO ES QUE YA REALICE EL PROGRAMA
ME COSTO UN POCO PERO YA LOGRE UTILIZAR EL
DS1307, DESPLIEGO EN UN LCD DE 4X40
EJEMPLO

7  MAY  2007
Lun  7:07:15

lo cheque y hace los cambios automaticamente de meses
por ejemplo si febreo tiene 28 dias o 29
esta bien el integrado se los recomiendo, me llevo una semana
en realizar el programa y ya completo para desplegar en el
LCD son 1300 lineas, como unas 13 hojas

Bueno gracias por su ayuda
 :kicking:
Amigo © Jonathan © necesito tu ayuda me dejaron ese proyecto y no tengo mucha experiencia con el I²C espero tu respuesta.GRACIAS

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #11 en: Martes 1 de Marzo de 2011, 02:02 »
0
Abri un nuevo post con tus dudas, en que consiste el proyecto?. Si el proyecto es en C, crea un post en el subforo de C y veo en que te puedo ayudar. Saludos
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

Maisiweiser

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #12 en: Jueves 7 de Abril de 2011, 18:03 »
0
Buenas... Les comento que necesito Programar un DS1307 Pero con el Atmel 8051 o 8052 Con I2c, Pero todavia no logro dar con la solucion.. quisiera que me ayudaran si conocen de algun texto o link donde pueda leer algo.. Gracias...

damico

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #13 en: Miércoles 13 de Julio de 2011, 19:19 »
0
Hola compañero, he visto que has trabajado con i2c con PIC y ds1307, yo estoy inmerso en un proyecto en el cual necesito mostrar la hora el dia el mes y el año pero no se como hacerlo, tu como has echo el codigo, se que en tu consulta nadie te ayudo pero espero que tu no hagas lo mismo, un saludo y gracias

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #14 en: Miércoles 13 de Julio de 2011, 23:32 »
0
Buenas tardes damico, consulta, el codigo del pic debe ser en ASM o en lenguaje C, para visualizar la informacion usaras displays de 7 seg o LCD?, vas a trabajar con el F877? si ya tenes mas o menos un enfoque de lo que vas a hacer comenta un poco en el foro para buscarte informacion e ir ayudandote poco a poco. Saludos
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

damico

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #15 en: Jueves 14 de Julio de 2011, 12:11 »
0
Hola compañeros, con respecto al pic no me importa cual utilizar lo que me gustaria saber es como mantener una "relacion" PIC y ds1307 ya que soy un poco negado para esto, si me podeis decir por ejemplo y para empezar como mostrar la hora en LCD con la comunicacion i2C y DS1307. gracias y un saludo

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #16 en: Viernes 15 de Julio de 2011, 09:59 »
0
Bueno, te adjunto un archivo de un proyecto que descargue una vez de ucontrol.com.ar, tiene la simulacion para proteus, esta escrito en C y corre en un 16F877. Espero te sea de ayuda. Saludos
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

damico

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #17 en: Martes 19 de Julio de 2011, 22:03 »
0
Hola, Jonathan Y compania, gracias por el codigo para hacer el reloj, queria preguntarte como podemos añadir seis alarmas es decir alas 4:00  , 9:00 , 14:30  ,  18:10  ,  21:20 ,  23:25.

el codigo es el que me diste tan solo lo he modificado para mostrar tambien dia mes y año, ¿SABRIAS DECIRME COMO AÑADIR DICHAS ALARMAS?

////////////////////////////////////////////////////////////////////////////////////////////////////
////////////ESTE PROGRAMA UTILZA EL CIRCUITO DS1307 PARA MOSTRAR LA //////////////
//////////HORA EN TIEMPO REAL A TRAVEZ DE UN UNA LCD DE 2 POR 16 CARACTERES/////
///////////////////////////////////////////////////////////////////////////////////////////////////
#include <16F877A.h>                ///   libreria para el manejo del pic16f877a
#use delay(clock=8000000)          ///   declara  la frecuencia del cristal
#fuses HS,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT
#include <lcd.c>

#use fast_io(A)
#use fast_io(B)
#use fast_io(C)                     ///   con esta instruccion evitamos que
#use fast_io(D)                     ///   se este configurando cada vez que usamos
#use fast_io(E)                     ///   alguna instruccion de entrada o salida
#byte portc = 7                     /// se definen direcciones de memoria
#byte portd = 8
#define RTC_SDA  PIN_C4
#define RTC_SCL  PIN_C3

#use i2c(master, sda=RTC_SDA, scl=RTC_SCL, SLOW)
int sec;
int min;
int hrs;
int  day;
int  month;
int  yr;
int  dow;

///////////////////////////////////////////////////////////////////////////////////
//////////////////////Comienzo de la funcion principal//////////////////////////
///////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///                               DS1307.C                                   ///
///                     Driver for Real Time Clock                           ///
///                                                                          ///
/// ds1307_init() - Enable oscillator without clearing the seconds register -///
///                 used when PIC loses power and DS1307 run from 3V BAT     ///
///               - Disable squarewave output                                ///
///                                                                          ///
/// ds1307_set_date_time(day,mth,year,dow,hour,min,sec)  Set the date/time   ///
///                                                                          ///
/// ds1307_get_date(day,mth,year,dow)               Get the date             ///
///                                                                          ///
/// ds1307_get_time(hr,min,sec)                     Get the time             ///
///                                                                          ///
////////////////////////////////////////////////////////////////////////////////

#define RTC_SDA  PIN_C4
#define RTC_SCL  PIN_C3

#use i2c(master, sda=RTC_SDA, scl=RTC_SCL, SLOW)

BYTE bin2bcd(BYTE binary_value);
BYTE bcd2bin(BYTE bcd_value);

void ds1307_init(void)
{
   BYTE seconds = 0;

   i2c_start();
   i2c_write(0xD0);      // SELECCIONA RTC CON  ORDEN WR
   i2c_write(0x00);      // REG 0
   i2c_start();
   i2c_write(0xD1);      // RD from RTC
   seconds = bcd2bin(i2c_read(0)); // Read current "seconds" in DS1307
   i2c_stop();
   seconds = bin2bcd(seconds & 0x7F);

   delay_us(3);

   i2c_start();
   i2c_write(0xD0);      // WR to RTC
   i2c_write(0x00);      // REG 0
   i2c_write(seconds);     // Start oscillator with current "seconds value
   i2c_start();
   i2c_write(0xD0);      // WR to RTC
   i2c_write(0x07);      // Control Register
//   i2c_write(0x80);     // Disable squarewave output pin
   i2c_write(0x10);     // Disable squarewave output pin
   i2c_stop();

}

void ds1307_OUT(void){
   i2c_start();
   i2c_write(0xD0);      // WR to RTC
   i2c_write(0x07);      // WR to RTC
   i2c_write(0x10);     // Enable squarewave output pin
   i2c_stop();
}

void ds1307_set_date_time(BYTE day, BYTE mth, BYTE year, BYTE dow, BYTE hr, BYTE min, BYTE sec)
{
  sec &= 0x7F;
  hr &= 0x3F;

  i2c_start();
  i2c_write(0xD0);            // I2C write address
  i2c_write(0x00);            // Start at REG 0 - Seconds
  i2c_write(bin2bcd(sec));      // REG 0
  i2c_write(bin2bcd(min));      // REG 1
  i2c_write(bin2bcd(hr));      // REG 2
  i2c_write(bin2bcd(dow));      // REG 3
  i2c_write(bin2bcd(day));      // REG 4
  i2c_write(bin2bcd(mth));      // REG 5
  i2c_write(bin2bcd(year));      // REG 6
  //i2c_write(0x80);            // REG 7 - Disable squarewave output pin
   i2c_write(0x10);     // Enable squarewave output pin
  i2c_stop();
}

void ds1307_get_date(BYTE &day, BYTE &mth, BYTE &year, BYTE &dow)
{
  i2c_start();
  i2c_write(0xD0);
  i2c_write(0x03);            // Start at REG 3 - Day of week
  i2c_start();
  i2c_write(0xD1);
  dow  = bcd2bin(i2c_read() & 0x7f);   // REG 3
  day  = bcd2bin(i2c_read() & 0x3f);   // REG 4
  mth  = bcd2bin(i2c_read() & 0x1f);   // REG 5
  year = bcd2bin(i2c_read(0));         // REG 6
  i2c_stop();
}

void ds1307_get_time(BYTE &hr, BYTE &min, BYTE &sec)
{
  i2c_start();
  i2c_write(0xD0);
  i2c_write(0x00);            // Start at REG 0 - Seconds
  i2c_start();
  i2c_write(0xD1);
  sec = bcd2bin(i2c_read() & 0x7f);
  min = bcd2bin(i2c_read() & 0x7f);
  hr  = bcd2bin(i2c_read(0) & 0x3f);
  i2c_stop();

}

BYTE bin2bcd(BYTE binary_value)
{
  BYTE temp;
  BYTE retval;

  temp = binary_value;
  retval = 0;

  while(1)
  {
    // Get the tens digit by doing multiple subtraction
    // of 10 from the binary value.
    if(temp >= 10)
    {
      temp -= 10;
      retval += 0x10;
    }
    else // Get the ones digit by adding the remainder.
    {
      retval += temp;
      break;
    }
  }

  return(retval);
}


// Input range - 00 to 99.
BYTE bcd2bin(BYTE bcd_value)
{
  BYTE temp;

  temp = bcd_value;
  // Shifting upper digit right by 1 is same as multiplying by 8.
  temp >>= 1;
  // Isolate the bits for the upper digit.
  temp &= 0x78;

  // Now return: (Tens * 8) + (Tens * 2) + Ones

  return(temp + (temp >> 2) + (bcd_value & 0x0f));
}

void main(){
   ds1307_init ();      ///se inicializa el ds1307
   
   set_tris_a (0xff) ;
   set_tris_d (0x00) ;
   set_tris_b (0x00) ;
   set_tris_c (0x04) ;
   set_tris_e (0x01) ;
   port_b_pullups (true) ;
   lcd_init ();        /// inicializamos lcd
   // Set date FOR - > 15 June 2005 Tuesday
   // Set time FOR - > 15:20:55 (9:49:00 am)
   ds1307_set_date_time (8, 11, 7, 2, 19, 05, 00); /// se escribe en el displositivo
   /// el tiempo deseado
   WHILE (1){
      delay_ms (100) ;
      ds1307_get_date (day, month, yr, dow);  /// se obtiene la fecha
      ds1307_get_time (hrs, min, sec);   /// se obtiene la hora
      lcd_gotoxy (1, 2) ;
      printf (lcd_putc, " %02d: %02d: %02d  ", hrs,min,sec);///se despliegan los datos
      lcd_gotoxy (1, 1) ;
      printf (lcd_putc, " %02d: %02d: %02d  ", day,month,yr);
   }
}

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re:Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #18 en: Miércoles 20 de Julio de 2011, 06:26 »
0
Bueno una manera sencilla seria comparar la hora y los minutos actuales con los almacenados en las variables de alarma, mas o menos asi:

if((horas==Hsalarma1)&&(minutos==Minalarma1)).
{}
if((horas==Hsalarma2)&&(minutos==Minalarma2)).
{}
if((horas==Hsalarma3)&&(minutos==Minalarma3)).
{}
if((horas==Hsalarma4)&&(minutos==Minalarma4)).
{}
if((horas==Hsalarma5)&&(minutos==Minalarma5)).
{}
if((horas==Hsalarma6)&&(minutos==Minalarma6)).
{}

No se si me hago entender, tambien hay funciones para comparar dos cadenas, por ejemplo podrias meter la hora y el minuto actual en un string y compararlo con el de las alarmas, osea, guardas los datos de hora y minutos en un string y lo comparas con el de las alarmas usando la funcion strcmp(string1,string2).

Capaz con esta informacion te des alguna idea de como hacer las alarmas, Saludos.
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

damico

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re:Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #19 en: Miércoles 20 de Julio de 2011, 14:44 »
0
Hola Jonathan, intentare hacer las alarmas tal y como me dijiste, por cierto nose si has simulado este reloj pero yo al simularlo con PROTEUS he visto que no va muy sincronizado es decir 1minutos en la simulacion equivale a 1 minuto y 15 segundo en un reloj real, ¿sabrias decirme como sulucionarlo?

Un saludo

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re:Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #20 en: Sábado 23 de Julio de 2011, 05:16 »
0
Hu, sinceramente no sabria decirte como hacer para sincronizar ese tiempo de diferencia que te genera proteus, tendra algo que ver con el equipo que usas? las aplicaciones que estes corriendo a la vez?, yo no practico mucho con proteus porque prefiero jugar mas con el prototipo en el protoboard, pero si encuentro alguna informacion que te sirva te lo hago saber. Saludos
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

Caguamas94

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re:Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #21 en: Domingo 14 de Abril de 2013, 03:19 »
0
Bueno me gustaría que alguien me acesorara en la programacion en MikroC

oskarhg

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re:Programar Un Ds1307 Con El Pic16f877 Con I2c
« Respuesta #22 en: Martes 18 de Julio de 2017, 08:28 »
0
Cita de: Alternative
Saludos a todos.
Necesito ayuda para programar el DS1307 con el PIC16F877 a traves de puerto I2C, encontre un programa en el foro, pero cuando lo arme no me quiso funcionar. Les coloco el programa ASM para que lo chequen.

Por todo gracias
Y ya saben si tienen dudas en algun programa
les puedo ayudar

 :hola:
PARCE SOY NUEVO EN EL FORO QUISIERA SABER COMO PROGRAMA R EL DS1307 CON CON EL PIC 16F877, ME PODRIAS ENVIAR UN ARCHIVO .ASM PARA GUIARME,

GRACIAS

HOLA ALGUIEN PODRIA PASARME POR FAVOR EL CODIGO EN .ASM PARA PROGRAMAR EL DS1307 CON CON EL PIC 16F877 MI CORREO ES oskarh.8@gmail.com   SALUDOS
DE ANTEMANO MUCHAS GRACIAS