Estoy intentando leer los valores de registro de DS1302 RTC utilizando un PIC MCU en un entorno protegido. He hecho dos funciones simples para ese propósito, una es para la transferencia de DATOS al RTC y la otra para recibir de él.
Puedo solo obtener el valor correcto de registro de segundos pero todos los demás valores (min, días, meses, etc.) son 0xFF o 0x00 . No se pudo encontrar dónde está el problema.
He estado rastreando la transferencia de bytes al RTC utilizando un OSCILLOSCOPE que muestra que los datos se están transfiriendo correctamente en el RISING EDGE del reloj. No estoy inicializando los valores de RTC (porque el RTC NO ENCONTRARÁ mis datos), así que lo inicializo en el calendario del sistema (opción disponible en proteus).
Aquíestoyenviandoladireccióndelregistrodelsegundo(0x81)yrecibiendoelvalordelsegundo(valorcorrecto)deRTC.
Aquíestoyenviandoelvalordelosminutosyobteniendo(0xFF)cadavez.
Yparaelregistrodehoras,obtengo0x00.ParaelregistrodeFECHAobtengo0xFFyviceversa.
Estassonlasdosfuncionesatravésdelascualesenvíoyrecibodatos.
charvalue=0x00;voidSPI_SEND_DATA(charADDRESS,charDATA){delay_us(1);EN=1;SSPBUF=ADDRESS;//TransmitADDRESSwhile(!SPI_BUSY_FLAG);value=SSPBUF;//ClearBitflagSSPBUF=DATA;//TransmitDATAwhile(!SPI_BUSY_FLAG);value=SSPBUF;//ClearBFflagEN=0;}charSPI_RCV_DATA(charADDRESS){delay_us(1);EN=1;SSPBUF=ADDRESS;while(!SPI_BUSY_FLAG);value=SSPBUF;//ClearBitflagSSPBUF=0x00;//StarttheSCLKwhile(!SPI_BUSY_FLAG);//Recievedatavalue=SSPBUF;//StoretherecievedByteEN=0;//FininshReadingreturnvalue;}
Aquíescómoestoyinicializandoelrelojenproteusautomáticamenteyelrelojfuncionabastantebien.
Tambiénheadjuntadoelcódigocompletodelproyectoyelarchivodesimulacióndeproteus,encasodequealguienquieraprobarlo.Porfavorencontrareneladjuntoadjunto.
Cualquier ayuda / sugerencia sería apreciada.
EDITAR: probé el mismo código en MAX6902 [ lo único que cambié es ; He invertido el PIN ENABLE porque, de acuerdo con la hoja de datos MAX6902 , su nivel bajo activo ] y funcionó a la perfección. La cosa es que, proteus puede tener algún problema al simular DS1302.