TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: electroipod en 23 de Enero de 2012, 10:49:36
-
Hola tengo un problema quiero hacer funcionar este IC RTC DS1307 con un pic 16f887 y una pantalla lcd solo quiero mostrar la hora en la pantalla pero no se que esta mal en mi programa si alguien me pudiera dar una mano, en la pantalla solo sale: TIME 0:0:0 y no cambia los segundos ayuda porfa, gracias.
unsigned short bcdtoshort(unsigned short bcd){
unsigned short lv,hv;
lv=bcd&0x0f;
hv=(bcd>>4)&0x0f;
return lv+hv*10;
}
void main() {
unsigned short seg,min,hor;
char time[6];
ANSEL=0;ANSELH=0;
TRISB.B1=0;
PORTB.B1=0;
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,"TIME ");
I2C1_Init(100000);
Delay_ms(50);
I2C1_Start();
I2C1_Wr(0xd0);
I2C1_Wr(0);//direccion de memoria "segundos"
I2C1_Wr(0);//segundos
I2C1_Wr(0);//minutos
I2C1_Wr(0);//hora
I2C1_Wr(0);//dia de la semana
I2C1_Wr(0);//fechas
I2C1_Wr(0);//meses
I2C1_Wr(0);//años
I2C1_Wr(0x10);//control,habilita SQWE
I2C1_Stop();
Delay_ms(50);
while(1){
I2C1_Start();
I2C1_Wr(0xd0);
I2C1_Wr(0);
I2C1_Repeated_Start();
I2C1_Wr(0xd1);
seg=I2C1_Rd(1);//lee segundos
min=I2C1_Rd(1);//lee minutos
hor=I2C1_Rd(0);//lee horas
I2C1_Stop();
Delay_ms(50);
time[0]=bcdtoshort(hor)+48;
time[1]=':';
time[2]=bcdtoshort(min)+48;
time[3]=':';
time[4]=bcdtoshort(seg)+48;
time[5]=0;
Lcd_out(1,6,time);
Delay_ms(100);
}
}
-
Hola amigo, de esta forma lo configuro yo, revisa si te sirve.
Saludos.void leer_ds1307()
{ int respaldo;
i2c_start(); //Start
i2c_write(0b11010000); //Control
i2c_write(0b00000000); //Direccion
i2c_stop(); //Stop
i2c_start(); //Start
i2c_write(0b11010001); //Control para lectura
respaldo = i2c_read(); //Se lee los segundos
uni_seg = respaldo;
dec_seg = swap(respaldo);
uni_seg &= 0x0f;
dec_seg &= 0x0f;
respaldo = i2c_read(); //Se lee los minutos
uni_minu = respaldo;
dec_minu = swap(respaldo);
uni_minu &= 0x0f;
dec_minu &= 0x0f;
respaldo = i2c_read(); //Se lee las horas
uni_hora = respaldo;
dec_hora = swap(respaldo);
uni_hora &= 0x0f;
dec_hora &= 0x0f;
respaldo = i2c_read(); //Se lee el dia de la semana
dia_sem = respaldo;
respaldo = i2c_read(); //Se lee el dia del mes
uni_dia = respaldo;
dec_dia = swap(respaldo);
uni_dia &= 0x0f;
dec_dia &= 0x0f;
respaldo = i2c_read(); //Se lee el mes
uni_mes = respaldo;
dec_mes = swap(respaldo);
uni_mes &= 0x0f;
dec_mes &= 0x0f;
respaldo = i2c_read(); //Se lee los años
uni_anio = respaldo;
dec_anio = swap(respaldo);
uni_anio &= 0x0f;
dec_anio &= 0x0f;
respaldo = i2c_read();
i2c_stop(); //Stop
}
///////////////////////////////////////////////////////////////////////////////
void conf_ds1307()
{
int respaldo;
i2c_start(); //Start
i2c_write(0b11010000); //Control
i2c_write(0b00000000); //Direccion
respaldo=(uni_seg | (swap(dec_seg))); //Se escriben los segundos
i2c_write(respaldo);
respaldo=(uni_minu | (swap(dec_minu))); //Se escriben los minutos
i2c_write(respaldo);
respaldo=(uni_hora | (swap(dec_hora))); //Se escriben las horas
i2c_write(respaldo);
i2c_write(dia_sem);
respaldo=(uni_dia | (swap(dec_dia))); //Se escriben los dias del mes
i2c_write(respaldo);
respaldo=(uni_mes | (swap(dec_mes))); //Se escribe el mes
i2c_write(respaldo);
respaldo=(uni_anio | (swap(dec_anio))); //Se escribe el año
i2c_write(respaldo);
i2c_write(0); //Control de pulsos
i2c_stop(); //Stop
}
-
El problema parece ser el simulador proteus ya que lo grabe en el pic y funciona normal, pero me gustaria poder simularlo en el proteus para no estar grabando el pic a cada rato cada vez que haga algun cambio, alguno de ustedes tendra un programa funcionando en proteus no importa que sea algo simple como mostrar la hora me lo podria pasar porfavor, les pongo una imagen haber si alguien me dice que estoy conectando mal, gracias.
-
Revisa este ejemplo.
Saludos
-
Revisa este ejemplo.
Saludos
Gracias por el programa lo voy a estudiar se que esta hecho en ccs c pero el programa que estoy haciendo esta hecho en mikroc pero creo que podre adaptarlo ya que ambos trabajan con el lenguaje C. Me quede sorprendido cuando vi en el LCD la misma hora y fecha que tiene mi computadora, interesante, gracias man.