Estoy conectando DS1307
con PIC32MX795F512L
usando biblioteca periférica . Puedo enviar datos pero no puedo recibirlos.
Código:
#include <plib.h>
#define BAUDRATE 115200
#define Fsck 100000
#define BRG ((FPB/2/Fsck)-2)
#define FCY 66000000L
#define FPB (FCY/2)
#pragma config POSCMOD=HS, FNOSC=PRIPLL
#pragma config FPLLIDIV=DIV_3, FPLLMUL=MUL_18, FPLLODIV=DIV_1
#pragma config FPBDIV=DIV_2, FWDTEN=OFF
#pragma config FSOSCEN = OFF
#pragma config ICESEL = ICS_PGx2
int main(int argc, char** argv)
{
OpenUART1( UART_EN | UART_NO_PAR_8BIT | UART_1STOPBIT , UART_RX_ENABLE | UART_TX_ENABLE, (FPB/16/BAUDRATE)-1 );
putsUART1("START\n");
int res;
OpenI2C2(I2C_EN, 163); // I2C channel Configuration
StartI2C2();
IdleI2C2();
MasterWriteI2C2(0xD0);
Nop();
MasterWriteI2C2(0x01);
Nop();
MasterWriteI2C2(0b00010011);
Nop();
StopI2C2();
IdleI2C2();
StartI2C2();
IdleI2C2();
MasterWriteI2C2(0xD0);
Nop();
MasterWriteI2C2(0x01);
Nop();
StopI2C2();
RestartI2C2();
IdleI2C2();
MasterWriteI2C2(0xD1);
Nop();
MasterWriteI2C2(0x01);
IdleI2C2();
res = MasterReadI2C2();
Nop();
NotAckI2C2();
Nop();
StopI2C2();
//converting to ASCII
unsigned char x,y,p1,p2;
x = res & 0x0F;
p1 = x | 0x30;
y = res & 0xF0;
y = y >> 4;
p2 = y | 0x30;
char value1[5] ;
char value2[5] ;
sprintf(value1,"%d",p1);
sprintf(value2,"%d",p2);
putsUART1(value1);
putsUART1(value2);
putsUART1("\n");
while(1)
{
}
return (EXIT_SUCCESS);
}
UART funciona bien y no hay colisión porque la función MasterWriteI2C2()
devuelve -1 si hay colisión y devuelve 0 si no hay colisión y la transmisión de datos es exitosa & Recibí 0, eso significa que los datos se están transmitiendo, pero no sé por qué no puedo leerlos. Por favor ayuda.
EDITAR:
Resolví el problema al que me enfrentaba y ahora I2C está funcionando porque puedo ver que el valor recibido en el registro I2CRCV es el mismo que estoy enviando. Pero necesito enviar el valor a UART para el cual creo que necesito convertirlos a ASCII, pero después de convertir los valores cambiarán. Digamos que he establecido un valor de 13 en el registro de segundos, entonces su valor cambiará durante la conversión, entonces, ¿cómo puedo configurar el valor de RTC? Necesito crear una lógica para poder establecer el valor RTC desde UART. Por favor ayuda!