Page 1 of 1

i2c how to set register in ds3231

Posted: Fri Aug 02, 2019 10:18 am
by NIXIE_123
Hi everyone

I have read espressif's document about how to use i2c. I also read example and i know how to send one byte. But how can i send byte (slave address) then register address and finally value that i want to write into this register?

Slave address: 0xD0
Register address: 0x0E
Value: 0x0

I am using eclipse with esp-idf

Re: i2c how to set register in ds3231

Posted: Sun Aug 04, 2019 11:13 am
by mikemoy
Have you looked at the examples for I2c?

Code: Select all


I2C_WriteByte(0xD0, 0x0E, 0x00);


esp_err_t I2C_WriteByte(uint8_t icAddress, uint8_t reg, uint8_t value)
{
	esp_err_t espRc;

	i2c_cmd_handle_t cmd = i2c_cmd_link_create();
	i2c_master_start(cmd);
	i2c_master_write_byte(cmd, (icAddress << 1) | I2C_MASTER_WRITE, ACK_CHECK_EN);  
	i2c_master_write_byte(cmd, reg, ACK_CHECK_EN);
	i2c_master_write_byte(cmd, value, ACK_CHECK_EN);
	i2c_master_stop(cmd);

	espRc = i2c_master_cmd_begin(I2C_NUM_1, cmd, 10 / portTICK_RATE_MS);
	i2c_cmd_link_delete(cmd);

	if (espRc == ESP_FAIL)
	{
		printf("WriteByte Fail\r\n");
	}
	
	return espRc;
}

Re: i2c how to set register in ds3231

Posted: Tue Aug 06, 2019 8:46 am
by NIXIE_123
Yes, i have looked. Thank you very much, that's what i was looking for