Part Number: MSPM0G1106
Other Parts Discussed in Thread: SYSCONFIG
Tool/software:
Hello, I am working with DS1307. I am constantly receiving meaningless times from my I2C line. I will leave the code I wrote below. Can you help me where I might have gone wrong?
#include "ti_msp_dl_config.h"
#include "LCD_Func.h"
int val=0;
#define DS1307_ADDRESS 0x68
#define Seconds 0x00
#define Minutes 0x01
#define Hours 0x02
#define Day 0x03
#define Date 0x04
#define Month 0x05
#define Year 0x06
/* I2C Target address */
/* Data received from DS1307 */
volatile uint8_t gRxPacket[7];
uint8_t seconds; // Saniyeler
uint8_t minutes ; // Dakikalar
uint8_t hours; // Saatler
uint8_t dayOfWeek ; // Haftanın günü
uint8_t dayOfMonth ; // Ayın günü
uint8_t month ; // Ay
uint8_t year ;
int bcdToDec(int val) {
return ((val / 16) * 10 + val % 16);
}
uint8_t rxData;
uint8_t readDS1307Register(uint8_t regAddr)
{
DL_I2C_fillControllerTXFIFO(I2C_INST, ®Addr, 1);
while (!(DL_I2C_getControllerStatus(I2C_INST) & DL_I2C_CONTROLLER_STATUS_IDLE));
DL_I2C_startControllerTransfer(I2C_INST, DS1307_ADDRESS,
DL_I2C_CONTROLLER_DIRECTION_RX, 1);
while (DL_I2C_isControllerRXFIFOEmpty(I2C_INST))
;
rxData = DL_I2C_receiveControllerData(I2C_INST);
if (DL_I2C_getControllerStatus(I2C_INST) & DL_I2C_CONTROLLER_STATUS_ERROR) {
__BKPT(0); // Hata durumunda duraklat
}
return bcdToDec(rxData);
}
int main(void)
{
SYSCFG_DL_init();
uint8_t start_address = 0x00;
while (1) {
// DS1307'den saniyeleri oku ve yazdır
// DS1307'den saniyeleri oku ve yazdır
uint8_t seconds = readDS1307Register(Seconds);
printf("second: %02d\n", seconds);
// DS1307'den dakikaları oku ve yazdır
uint8_t minutes = readDS1307Register(Minutes);
printf("minut: %02d\n", minutes);
// DS1307'den saatleri oku ve yazdır
uint8_t hours = readDS1307Register(Hours);
printf("hours: %02d\n", hours);
// DS1307'den günü oku ve yazdır
uint8_t day = readDS1307Register(Day);
printf("day: %02d\n", day);
// DS1307'den tarihi oku ve yazdır
uint8_t date = readDS1307Register(Date);
printf("date: %02d\n", date);
// DS1307'den ayı oku ve yazdır
uint8_t month = readDS1307Register(Month);
printf("monty: %02d\n", month);
// DS1307'den yılı oku ve yazdır
uint8_t year = readDS1307Register(Year);
printf("Year: %02d\n", year);
printf("/////////////////////////////////////////\n");
delay_cycles(160000000);
//toggle_gpio_pin() ;
}
}

