主题中讨论的其他器件:TMP100
我无法从 TMP100获取温度读数。 我使用的是 EUSCI B2。 跟踪我的代码(尽可能多地使用 Driverlin API)。
ADD0和 ADD1线路在芯片上接地
我在调用 TMP100SendData (data_buffer、SlaveAddress)时包含了 SCL 和 SDA 波形的屏幕截图;
在 TMP100Init...中 融合函数并执行以下行:
MAP_I2C_masterSendMultiByteStart (EUSCI_B2_base、buffer[i]);//发送开始、地址和第一个字节
似乎代码正在写入正确的地址(即0x48,但 在发送0x01之前我看不到'ACK')
SCL -顶部图
SDA -底部图
代码:
#define TMP100_SLAVE_ADDRESS0 0x48
#define TMP100_RES_12BITS 0x60 //转换时间通常为320ms
#define NON_SHUTDOWN_MODE 0x00 //连续转换
将 EUSCI_B2设置为主器件后、我运行以下初始化函数:
TMP100Init (TMP100_SLAVE_ADDRESS0、TMP100_RES_12BITS | NON_SHUTDOWN_MODE);//等式至 TMP100Init (0x48、TMP100_RES_12BITS | NON_SHUTDOWN_MODE)
空 TMP100Init (uint_fast16_t SlaveAddress、uint8_t Config_Reg_Value)
{
uint8_t DATA_buffer[3];
DATA_buffer[0]= TMP100_CONFIG_register; // 0x01
DATA_buffer[1]= Config_Reg_Value;// 0x01
DATA_buffer[2]= 0;//针对'TMP100SendData 例程的缓冲器终止
TMP100SendData (data_buffer、SlaveAddress);
//重置为读取温度
DATA_buffer[0]= TMP100_TEMP_register;
DATA_buffer[1]= 0;//针对'TMP100SendData 例程的缓冲器终止
TMP100SendData (data_buffer、SlaveAddress);
}
void TMP100SendData (uint8_t *缓冲区、uint_fast16_t SlaveAddress)
{
unsigned int i = 0;
//指定从机地址
MAP_I2C_setSlaveAddress (EUSCI_B2_base、SlaveAddress);
//将主设备设置为发送模式
MAP_I2C_setMode (EUSCI_B2_base、EUSCI_B_I2C_Transmit 模式);
MAP_I2C_masterSendMultiByteStart (EUSCI_B2_base、buffer[i]);//发送开始、地址和第一个字节
i++;
while (buffer[i]!= 0)
{
MAP_I2C_masterSendMultiByteNext (EUSCI_B2_base、buffer[i]);
i++;
}
MAP_I2C_masterSendMultiByteStop (EUSCI_B2_base);//结束传输
}