Hola foreros, ahora tengo que realizar el manejo de un reloj, para esto se utilizara un ds1307, por el momento lo estoy simulando en el proteus
pero un problema y es que se ha hecho muy lento el programa, y apenas tengo unas cuantas lineas, aunque estoy estoy leyendo todos los datos que me puede dar, es demasiado lento....
Digo esto por que en el proteus al simular, me aparece otra pantalla con los datos del reloj (ds1307), y el lcd, ambos cambian simultaneamente, pero despues de como 10 seg reales avanza un segundo estos 2 relojes.
Esta es la programacion que tengo, si alguien tiene alguna libreria, lo agradeceria mucho.
Esta es la libreria:
//Subrutina para DS1307
int BCDaBIN(int bcd){
int varia;
varia = bcd;
varia >>= 1;
varia &= 0x78;
return(varia + (varia >> 2) + (bcd & 0x0f));
}
void tiempo(byte &hor, byte &min, byte &sec, byte &diasem, byte &fecha, byte &mes, byte &anio){
i2c_start(); //Escritura
i2c_write(0
0); //Código de escritura
i2c_write(0x00); //Puntero a la primera dirección
i2c_start(); //Lectura
i2c_write(0
1); //Código de lectura
sec = BCDaBIN(i2c_read()&0x7f);
min = BCDaBIN(i2c_read()&0x7f);
hor = BCDaBIN(i2c_read()&0x3f);
diasem = BCDaBIN(i2c_read()&0x07);
fecha = BCDaBIN(i2c_read()&0x3f);
mes = BCDaBIN(i2c_read()&0x1f);
anio = BCDaBIN(i2c_read(0));
i2c_stop();
}
Y esta es la programacion:
#include <16F876.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use i2c(Master,sda=PIN_C4,scl=PIN_C3)
#include <lcd.c>
#include <ds1307.c>
int hr,min,sec,diasem,fecha,mes,anio;
void main() {
lcd_init();
while(1){
tiempo(hr,min,sec,diasem,fecha,mes,anio); //Lee tiempo del DS1307
lcd_gotoxy(1,1);printf(lcd_putc,"%2u:%2u:%2u",hr,min,sec); //Visualiza en LCD la hora
lcd_gotoxy(1,2);printf(lcd_putc,"%2u:%2u:%2u:%2u",diasem,fecha,mes,anio); //Visualiza en LCD la hora
}
}
David Nunez.