主题中讨论的其他器件: MSP430FR5969
工具/软件:
尊敬的、
我尝试 使用 MSP430FR5969 (主器件) LaunchPad 通过 I2C 协议校准 PGA302 (从器件)。
电路板上有两个 PGA302。 我们希望 在一个程序中通过 I2C 协议使用 MSP430FR5969 (主器件) Launchpad 读取/写入两个 PGA302的寄存器。
这是可能的吗?
此致。
Jimy
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:
尊敬的、
我尝试 使用 MSP430FR5969 (主器件) LaunchPad 通过 I2C 协议校准 PGA302 (从器件)。
电路板上有两个 PGA302。 我们希望 在一个程序中通过 I2C 协议使用 MSP430FR5969 (主器件) Launchpad 读取/写入两个 PGA302的寄存器。
这是可能的吗?
此致。
Jimy
您好、Maggie、
我们使用2个主器件通过 usb2anydll 通过 I2C 与2个 PGA302器件进行通信。 但 PGA302寄存器读取的值是意外的。
M_EE302_H0_A 在第二个 u2aOpen 之前和第二个 u2aOpen 之后 为0x2000 (是正确的)、并将 m_EE302_H0_A_2配置为0x213d (错误、实际上是 m_EE302_H0_B 的值 )。
出什么问题了?
计划大纲为:
int usb_num = u2aFindControllers (); //返回2
char szSerialNumber_A;
int num = u2aGetSerialNumber (0、szSerialNumber_A); //返回 num :0、szSerialNumber_A:"39A4934608001C00"
int u2a_handle_A = u2aOpen (szSerialNumber_A); //返回0x3010
u2aSetReceiveTimeout(20);
字节 BUFFER_A[64];
int read_A = u2aFirmware Version_Read (u2a_handle_A 、(字节*) buffer_A、sizeof (buffer_A)); //返回 read_A :4、buffer_A:0x02、0x07、0x00、0x034
configure_gpiles_of_a ();
u2aSPI_Control (u2a_handle_A 、SPI_MSB_FIRST Inactive_State_Low、SPI_8_BIT、Change_On_Following_Edge、SPI_MSB_FIRST、 SPI_SPI With_Every_Word、SPI_SPI、High_To_Low 0、8);
u2aI2C_Control (u2a_handle_A 、I2C_400kHz、I2C_7Bits、I2C_PULLUP_OFF);
u2aADC_Control (u2a_handle_A 、Analog_In Analog_In、Analog_In、ADC_ADC_ADC_ADC Analog_In、 ADC_VREF_3V3);
M_REVISION_A = comm_low_level_read_single(u2a_handle_a , 0,0); //返回 m_revision_A :0
m_dev_state_a = comm_low_level_read_single(u2a_handle_a , 0,12); //返回 m_dev_state_a :3
M_EE302_H0_A =(comm_low_level_read_single (u2a_handle_A 、5、1)<< 8)+ comm_low_level_read_single (u2a_handle_A 、5、0);//返回 m_EE302_H0_A:0x2000
char szSerialNumber_B;
int num = u2aGetSerialNumber (1、 szSerialNumber_B); //返回 num :0、szSerialNumber_B:"39A4934629003100"
int u2a_handle_B = u2aOpen (szSerialNumber_B); //返回0x3011
u2aSetReceiveTimeout(20);
字节 BUFFER_B[64];
int READ_B = u2aFirmware Version_Read (u2a_Handle_B 、(字节*) Buffer_B、sizeof (Buffer_B)); //返回 READ_B :4、 Buffer_B:0x02、0x07、0x00、0x034
configure_gpiles_of_B ();
u2aSPI_Control (u2a_handle_B 、SPI_MSB_FIRST Inactive_State_Low、SPI_8_BIT、Change_On_Following_Edge、SPI_MSB_FIRST、 SPI_SPI With_Every_Word、SPI_SPI、High_To_Low 0、8);
u2aI2C_Control (u2a_handle_B、I2C_400kHz、I2C_7位、I2C_PULLUP_OFF);
u2aADC_Control (u2a_handle_B 、ADC_ADC_ADC_ADC_ADC_ADC_ADC_ADC_ADC_Control Analog_In、Analog_In、Analog_In Analog_In ADC_VREF_3V3);
M_REVISION_B = comm_low_level_read_single(u2a_handle_B , 0,0); //返回 m_revision_B :0
m_dev_state_B = comm_low_level_read_single (u2a_handle_B 、0、12); //返回 m_dev_state_B:3
M_EE302_H0_A_2 =(comm_low_level_read_single (u2a_handle_a 、5、1)<< 8)+ comm_low_level_read_single (u2a_handle_a 、5、0);//返回 m_EE302_H0_A_2:0x213d
M_EE302_H0_B =(comm_low_level_read_single (u2a_handle_B 、5、1)<< 8)+ comm_low_level_read_single (u2a_handle_B 、5、0);//返回 m_EE302_H0_B:0x213d
此致、
Jimy
您好、Maggie、
我们 的测试 用例中使用了2个 PGA302EVM-037评估板。 程序是 PGA302EVM-GUI、我们添加了第二个 u2aOpen、CONFIGURATION_OF_GPIOS 和协响应 u2aI2C_RegisterRead。
M_EE302_H0_A =(u2aI2C_RegisterRead (u2a_handle_A、(UINT16)(0x40 + 5)、1)<< 8)+u2aI2C_RegisterRead (u2a_handle_A、(UINT16 )(0x40 + 5)、 0);
M_EE302_H0_B =(u2aI2C_RegisterRead (u2a_handle_B、(UINT16 )( 0x40 + 5)、1)<< 8)+u2aI2C_RegisterRead (u2a_handle_B、(UINT16 )(0x40 + 5)、 0);
此致、
Jimy
嗨、Jimy、
两个 PGA302评估板都直接连接到 MSP430吗?
您好像尝试读取 H0_MSB 和 H0_LSB、正确吗? 为了确保我明白、您有两个要与之通信的 PGA 器件:PGA302-A 和 PGA302-B 从 PGA302-A 读取 H0_MSB+H0_LSB 时、得到正确的值、但初始化 PGA302-B 后、尝试 再次从 PGA302-A 读取 H0_MSB+H0_LSB 时、 从 PGA302-B 获得 H0_MSB+H0_LSB 值、这是否正确?
如果您可以提供示波器或逻辑分析仪的 I2C 通信快照、这将会很有帮助。