pero la instruccion "i2c_stop()" no resetea el rtc, solamente termina la comunicacion entre master y slave.
Pero te falta "capturar", "decirle" al rtc que de esos datos, simplemente estas poniendo variables que nunca se actualizan.Las variables se actualizan cada 1 sg, ya que primero se configuro el ds1307 para generar la señal de 1 Hz, esta va conectada a RB0, y al habilitar la interrupcion
jeje, creo que no os está entendiendo lo que le quereis decir.... de todos modos también puede poner un "asm sleep" (no se como es la intruccion en ccs para poner asm) despues del i2c_stop();Voy a intentar lo que me comentan, pero no me convence mucho, por que en la simulacion en Proteus me funciono excelente.
Saludos
...por que en la simulacion en Proteus me funciono excelente.
Primero que todo gracias por darse el tiempo de ayudarme, finalmente resolvi el problema....por que en la simulacion en Proteus me funciono excelente.
Ese es el problema, es una simulación ;-)
Saludos!
#include <16F628.h>
#fuses INTRC,NOMCLR,NOWDT,NOPUT,NOPROTECT
#use delay(clock=4000000)
#use standard_io(A)
#use i2c(Master,sda=PIN_A1,scl=PIN_A2)
//#include <RTC_DS1307.C>
//Programa para configurar el registro de opcion del rtc, y que comience a parpaderar cada 1 sg.
//La escritura del RTC es como sigue:
//* Primero el uC envia la condicion de START.
//* Luego envia la direccion del rtc en modo escritura (b'11010000' o 0xD0).
//* A continuacion el maestro envia un puntero con la primera direccion del registro a escribir.
//* Despues se transmiten los datos a escribir. La direccion del registro se incrementa automaticamente.
//* Cuando se termina de escribir el uC maestro envia la condicion de STOP.
void main(){
//delay_ms(1000); //Se comienza con un retardo para ver el efecto de la configuracion.
i2c_start();
i2c_write(0xD0); //Direccion del RTC en modo escritura.
i2c_write(0x00); //Registro de de los segundos, bit 7 es CH.
i2c_write(0b00000000); //Se resetea, si CH=0, se activa el reloj.
i2c_stop();
i2c_start();
i2c_write(0xD0);
i2c_write(0x07); //Registro de control.
i2c_write(0b00010000); //Palabra para configurar la señal de salida de 1 Hz (SQWE=1, RS1=RS2=0).
i2c_stop();
}Creo que era problema con el reloj...
Y seguís sin colocar un while(1); al final :undecided: Al no colocarlo el micro se resetea, puede que no afecte pero hay que entenderlo ;-)
Saludos!