Autor Tema: ayuda 1307  (Leído 17248 veces)

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

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: ayuda 1307
« Respuesta #15 en: 01 de Diciembre de 2008, 20:23:11 »
De a poco se avanza, ahora me aparece esto en el LCD:

45:85:85

esto sucede con tu modificación Cryn, que le sucederá al programa es una incognita!
hasta otro post, gracias

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: ayuda 1307
« Respuesta #16 en: 01 de Diciembre de 2008, 23:36:42 »
Esta mostrandote los valores en Hexa.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: ayuda 1307
« Respuesta #17 en: 02 de Diciembre de 2008, 03:01:47 »
Ok. MGLSOFT, solo que los numeros no varían.

encontre este programita y me tira lo siguiente :

Freal  Time   Clock ( primera linea del LCD)
ff:ff:fffff-ff-2 (segunda linea del LCD)

se los posteo para ver cual puede ser el error

//Programa que usa protocolo I2C para
//escribir y leer tiempo del DS1307
//saca tiempo en LCD

//migsantiago

// Conexiones de la LCD:
//     D0  enable
//     D1  rs
//     D2  rw
//     D4  D4
//     D5  D5
//     D6  D6
//     D7  D7
//
//   LCD pins D0-D3 are not used and PIC D3 is not used.

#include <16f877a.h>
#fuses xt,nowdt,noput,nobrownout,nolvp,noprotect
#use delay(clock=4000000)

#include "lcd.c"
#use standard_io (D)


#use fast_io (b)

#use i2c(MASTER, SDA=PIN_b1, SCL=PIN_b0,slow)

//Registros DS1307
#define ds_seconds 0x00
#define ds_minutes 0x01
#define ds_hours 0x02
#define ds_day 0x03
#define ds_date 0x04
#define ds_month 0x05
#define ds_year 0x06
#define ds_control 0x07

//DS1307
//Vbat a tierra

void main(void)
{

int16 retardo; //Cada cuando actualiza lectura en LCD

//Dato en registro ds, a mandar o leer
int seconds,minutes,hours,day,date,month,year,control;

retardo=250; //ms a tardar entre lectura y lectura

//Justo cuando prende circuito, la fecha que establece es la siguiente
seconds= 0x00;
minutes= 0x38;
hours  = 0x15; //modo 24 hrs
day    = 0x05; //1 es domingo
date   = 0x13;
month  = 0x01;
year   = 0x05;
control= 0x00; //OUT=0 SQWE=0 RS0-1=0 no hay onda cuadrada


//Establece fecha y hora
i2c_start(); //Inicia I2C
i2c_write(0xd0); //Direcciona DS1307 write
i2c_write(ds_seconds); //Indica que empiece en registro ds_seconds
//Aquí establece fecha y hora respecto a la puesta arriba
i2c_write(seconds);
i2c_write(minutes);
i2c_write(hours);
i2c_write(day);
i2c_write(date);
i2c_write(month);
i2c_write(year);
i2c_write(control);
i2c_stop(); //Ya puso la hora y fecha
//El RTC ya está marcando el tiempo y fecha

//Rutina LCD
lcd_init(); //Inicia LCD
lcd_putc("f"); //Limpia LCD
lcd_putc("Real Time Clock
"); //rtc
lcd_putc("     DS1307");
delay_ms(3000);

while(1)
   {

   delay_ms(retardo); //Usuario lee


   //Obtiene datos de DS1307
   i2c_start(); //Inicia I2C
   i2c_write(0xd0); //Direcciona DS1307 write
   i2c_write(ds_seconds); //Indica que ponga registro en ds_seconds
   i2c_stop();

   i2c_start();
   i2c_write(0xd1); //Lee DS1307
   seconds = i2c_read();
   minutes = i2c_read();
   hours = i2c_read();
   day = i2c_read();
   date = i2c_read();
   month = i2c_read();
   year = i2c_read(0); //no ack
   i2c_stop();

   //Representa datos en la LCD
   printf(lcd_putc,"f%2x-%2x-20%2x
",date,month,year); //dd-mm-year
   printf(lcd_putc,"%2x:%2x:%2x",hours,minutes,seconds); //23:59:59
   }
}



 MUCHAS GRACIAS POR LAS RESPUESTAS!!!!!!!


Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: ayuda 1307
« Respuesta #18 en: 02 de Diciembre de 2008, 03:28:54 »
otra consulta de acuerdo a esta línea

#use i2c(MASTER, SDA=PIN_b1, SCL=PIN_b0,slow)

el sda y scl del rtc tendrían que ir conestados al pin B1 y B0 del PIC????

GRacias

Desconectado tithanae

  • PIC16
  • ***
  • Mensajes: 109
Re: ayuda 1307
« Respuesta #19 en: 02 de Diciembre de 2008, 13:25:57 »
eso sale cuando  esta funcionado mal el bus I2C revisa hardware y sofware del el bus a mi me paso lo mismo un par de veses

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: ayuda 1307
« Respuesta #20 en: 02 de Diciembre de 2008, 18:35:36 »
la duda es la siguiente: el bus

use i2c(MASTER, SDA=PIN_b1, SCL=PIN_b0,slow)

el sda y scl del rtc tendrían que ir conestados al pin B1 y B0 del PIC????

yo los tengo conectados al rc4 y rc3 respectivamente.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: ayuda 1307
« Respuesta #21 en: 02 de Diciembre de 2008, 19:12:44 »
Hola.

Debes conectarlo tal como esta en la configuracion del #use i2c (), si no, no te va a funcionar nunca  :mrgreen:

Saludos
El papel lo aguanta todo

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: ayuda 1307
« Respuesta #22 en: 02 de Diciembre de 2008, 19:44:08 »
Un detalle que quizás te pueda interesar puedes verlo aquí
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: ayuda 1307
« Respuesta #23 en: 03 de Diciembre de 2008, 00:37:00 »
Gracias muchachos empezó a tomar color la situación. Lo que se aprecia en el LCD es lo siguiente:

fReal time Clock
17:01:22f13-01-2

El conteo de los segundos se actualiza cada 8 segundos es decir pasa de ( por eejmplo) de 8 a 16 a 24 a 32 y asi permanentemente como puedo hacer para que se incremente de a un segundo.

como puedo hacer para borrar la primera linea y que alli aparezca la H:m:s
y en la segunda DD-mm-yeras

muchas gracias !!!!!!!!!

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: ayuda 1307
« Respuesta #24 en: 03 de Diciembre de 2008, 01:35:56 »
Bueno logre ubicar la fecha y la hora en el primer y segundo renglon como lo quería.
aparece:
13-01-2005
15:55:13



Todavía no puedo hacer que el conteo se vea cada segundo. a que se  debe que la hora se actualice cada 8 seg, como lo mencioné en el post anterior.
Gracias 

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: ayuda 1307
« Respuesta #25 en: 03 de Diciembre de 2008, 09:11:59 »
Que cristal utilizas??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: ayuda 1307
« Respuesta #26 en: 03 de Diciembre de 2008, 11:49:37 »
El del PIC es de 4 Mhz y del RTC es de 32768 Hz.
Gracias

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: ayuda 1307
« Respuesta #27 en: 03 de Diciembre de 2008, 17:26:16 »
Muchas gracias, todo marcha sobre ruedas, veo en el display lo que necesito., respecto al incremento tuve que disminuir el tiempo en que lee el pic el rtc y todo solucionado, estoy viendo la fecha y la hora. y el incremento en 1 seg.
muchas gracias nuevamente por la ayuda.
Surge otra consulta:
Como podría colocar en hora el reloj mediante pulsadores externos.
Gracias se aprende mucho con el apoyo de este foro

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: ayuda 1307
« Respuesta #28 en: 03 de Diciembre de 2008, 18:04:43 »
que bueno que hayas solucionado la cuenta, para comentario, también decirte que me aparecía el famoso 45:85:85 y esto era porque no inicializaba la hora, osea, yo nunca le daba un set_hora(..); porque lo hacía manualmente (mediante un teclado) y ya la pila se encargaba del resto; me aparecía esos números grandes cuando le sacaba la pila y volvía a encenderlo sin ella, al volver a colocar la pila la hora se volvía a 00:00:00, osea que el RTC quería tener pila, jeje. Es un detalle para considerar, como ya te recomendaron anteriormente si no usas la pila mejor conecta a tierra el pin que le corresponde.

Para modificar la hora con pulsadores no será muy complicado, seguramente tendrás algunos pulsadores, te recomiendo los siguientes:

INC(incrementar+) DEC(decrementar-) EDIT(modificar) OK(aceptar), el último opcional

o ya dependerá de tí, de cuanta facilidad le desees dar a un usuario, pero creo que mínimamente 3 pulsadores

con uno de ellos (EDIT de preferencia) posicionas en que variable modificarás el dato (hh, mm, ss, dd, mm, aa) al presionar por ejemplo EDIT configurarás las horas, al volver a presionar EDIT pasas a minutos y así sucesivamente hasta llegar al último dato que puedas modificar y al terminar todo con EDIT también saldrás y se habrán guardado los datos en el RTC, los datos que habrán sido modificados primeramente en memoria RAM, para al final pasarlo al Reloj.

variarás el dato correspondiente con + -

tendrás que controlar todo eso con variables, variables correspondientes a cada dato y al tipo de dato que variarás, para que se guarden en el lugar correspondiente en RAM y posteriormente en el reloj.

nose si se entendió, pero solo avisas. Como mencioné esta es la forma que se me ocurre, ya dependerá de ti si quieres más pulsadores y por lo tanto más opciones.
« Última modificación: 03 de Diciembre de 2008, 21:26:58 por Cryn »
.

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: ayuda 1307
« Respuesta #29 en: 04 de Diciembre de 2008, 01:03:08 »
Esa es la idea Cryn, pero como se hace, como guardo en memoria, como hago correr el cursor. Las preguntas sonmuchas espero me des algunas pistas. Por lo menos logré vizualizar el reloj y ya lo puse en hora mediante el programa, pero se  atraza cdo lo saco del programador  y lo llevo al protoboard. (otra forma sería de programarlo adelantado por ejemplo dos min que es lo que me lleva ubicarlo nueva,mente en el circuito ) por eso quiero utilizar pulsadores para la puesta en hora. Alguna informacion o explicación te agradecería mucho.