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.

[参考译文] TMS570LS3137-TMP117:有关 EP EP 定制板中从 TMP117读取温度数据的问题

Guru**** 1958595 points
Other Parts Discussed in Thread: TMP117
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1274170/tms570ls3137-ep-issue-regarding-temperature-data-reading-from-tmp117-in-tms570ls3137-ep-custom-board

器件型号:EP
主题中讨论的其他器件:TMP117

尊敬的先生:

我不熟悉 I2C。  

我有一个定制电路板 TMS570LS3137-TMS570LSB EP。 在板上、我有一个外部温度 IC (TMP117)。

我随附了微控制器和 TMP117的定制电路板原理图

在 R67 --> SCL 处
在 R68 --> SDA 处

我将在示波器中捕获 SCLK 和数据、并同时附加快照  

在 GUI 中读取温度数据时、系统出错了。

在 GUI 温度值*0.0625 =我的实际温度(根据数据表)


我还附加了代码

哪里出了问题、请帮我

/*包含文件*/
#include "stdio.h"
#include "sys_common.h"
#include "system.h"
#include "Gio.h"

#include "sci.h"
#include "reg_het.h"
#include "reg_sci.h"


#include "reg_gio.h"
#include "sys_vim.h"
#include "system.h"
#包含

#include "ADC.h"
#include "reg_adc.h"
#include "stdlib.h"

#include "mibspi.h"
#include "sys_vim.h"
#include "reg_mibspi.h"
#include "reg_gio.h"

#include "i2c.h"


#define TSIZE1 12
UINT8 text1[TSIZE1]={'\r'、'\n'、'|'、'\t'、'C'、'H'、'.'、'I'、'D'、'=''、'0'、'x'};
#define TSIZE2 9
Uint8 text2[TSIZE2]={'\t'、'V'、'A'、'L'、'U'、'E'、'='、'0'、'x'};

#define DATA_COUNT 2
#define Master_Address 0x26
#define Slave_Address 0x8
#define Slave_Word_ 0x450000
#define RECEIVE_DATA_setup 0x1 // 1个字地址

uint8_t TX_DATA_COUNT] Data_Master ={0x10、0x11、0x12、0x13、0x14、0x15、0x16、0x17、0x18、0x19};
Uint8 RX_UART[DATA_COUNT] Data_Master ={0};

uint8_t TX_TX_TX[10] Data_Slave ={0x20、0x21、0x22、0x23、0x24、0x25、0x26、0x27、0x28、0x29};
uint8_t RX_UCC110[10] Data_Slave ={0};

#define TMP117_ADDRESS 0x48 //在 PCF8570中、所有 A0、A1、A2都连接到3.3V

/*用户代码开始(1)*/
/*用户代码结束*/

/**@fn void main (void)
*@简介应用程序主要功能
*@注意此功能默认为空。
*
*此函数在启动后调用。
*用户可以使用此函数来实施应用程序。
*/
静态 unsigned char 命令;
/*用户代码开始(2)*/

/*用户代码结束*/

uint8 emacAddress[6U]={0xFFU、0xFFU、0xFFU、0xFFU、0xFFU、 0xFFU};
UINT32 emacPhyAddress = 0u;


adcData_t ADC_data[2];
void sciDisplayText (scibase_t * sci、uint8 *文本、uint32长度);
void sciDisplayData (scibase_t *sci、uint8 *text、uint32 length);
空等待(UINT32时间);


#define ADC_DATA_LENGTH 1


空 main (void)
{

_enable_irq();
sciInit();

// adcInit ();
gioInit ();
hetInit ();
mibspiInit ();
// i2cInit ();
i2cInit();

sciSend (scilinREG、5、(unsigned char *)"ENTC\n\n");
sciReceive (scilinREG、1、(unsigned char *)&COMMAND);

//adcStartConversion (adcREG1、adcGROUP1);


//***** IIC IIC


int repeat = 0;int delay = 0;

/* I2C 初始化、根据 GUI
*模式=主设备-发送器
*波特率= 100KHz
*计数= 10
*位数= 8位
*/
// i2cInit ();

//主传输功能//

/*配置要与之通信的从器件地址*/
i2cSetSlaveAdd (i2cREG1、TMP117_ADDRESS);

/*设置到发送器的方向*/
/*注:可选-在 Init 中完成*/
i2cSetDirection (i2cREG1、I2C_TRANSMIT);

////将方向设置为接收器
// i2cSetDirection (i2cREG1、I2C_receiver);


/*配置数据计数*/
/*数据计数+ 1 (字地址)*/
i2cSetCount (i2cREG1、1);

/*将模式设置为主模式*/
i2cSetMode (i2cREG1、I2C_MASTER);

/*编程计数后设置停止*/
i2cSetStop (i2cREG1);

/*发送启动条件*/
i2cSetStart (i2cREG1);

/*发送字地址*/
i2cSendByte (i2cREG1、0x00);

/*轮询模式下发送 data_count 数据的数量*/
// i2cSend (i2cREG1、1、0x00);

/*等待清除总线忙状态*/
while (i2cIsBusy (i2cREG1)== true);

/*等待直到检测到停止*/
while (i2cIsStopDetected (i2cREG1)=0);

/*清除停止条件*/
i2cClearSCD(i2cREG1);

/*开始下一个块之前的简单 Dealya */
/*取决于从设备准备就绪的速度*/
for (delay=0;delay<1000;delay++);


//主机接收功能//

/ /
/ /

/*等待 MST 位被清除、这将持续
*清除总线忙状态后几个周期*/
/* while (i2cIsMasterReady (i2cREG1)!= true);

/*配置要与之通信的从器件地址*/
// i2cSetSlaveAdd (i2cREG1、TMP117_ADDRESS);
//
///*设置到发送器的方向*/
///*注:可选-在 Init 中完成*/
// i2cSetDirection (i2cREG1、I2C_TRANSMIT);
//
///*配置数据计数*/
///*读取前的从器件地址+字地址写入操作*/
// i2cSetCount (i2cREG1、0x91);
//
///*将模式设置为主模式*/
// i2cSetMode (i2cREG1、I2C_MASTER);
//
///*编程计数后设置停止*/
// i2cSetStop (i2cREG1);
//
///*发送启动条件*/
// i2cSetStart (i2cREG1);
//
///*发送字地址*/
// i2cSendByte (i2cREG1,Slave_Word_);
//
///*等待清除总线忙状态*/
// while (i2cIsBusBusy (i2cREG1)== true);
//
///*等待检测到停止*/
// while (i2cIsStopDetected (i2cREG1)=0);
//
///*清除停止条件*/
// i2cClearSCD(i2cREG1);
//
//***** /
//***** /
//
////*等待 MST 位被清除,这将采用
//*清除总线忙状态后几个周期*/
// while (i2cIsMasterReady (i2cREG1)!= true);

/*配置要与之通信的从器件地址*/
i2cSetSlaveAdd (i2cREG1、TMP117_ADDRESS);

/*设置到接收器的方向*/
i2cSetDirection (i2cREG1、I2C_receiver);

/*配置数据计数*/
/*注:可选-它在 Init 中完成,除非用户想要更改*/
i2cSetCount (i2cREG1、3);

/*将模式设置为主模式*/
i2cSetMode (i2cREG1、I2C_MASTER);

/*编程计数后设置停止*/
i2cSetStop (i2cREG1);

/*发送启动条件*/
i2cSetStart (i2cREG1);
// uint32_t u[2];


/*轮询模式下发送 data_count 数据的数量*/
i2cReceive (i2cREG1、2、RX_REF1 Data_Master);


// uint16_t tematureData;
// i2cReceive (i2cREG1、3、(uint8_t*)&TematureData);


uint32_t k;
// j=((RX_VIN[1]<<8 Data_Master)+ RX_VIN[0] Data_Master);

对于(k = 0;k < 2;k++)
{
//将 ADC 值转换为十进制字符串表示
char adcValueStrr[4];//假设最大的 ADC 值适合5位数字加上一个空端接器。
// j =j>>4 ;
//j=j;
//将 adcValueStr 转换为整数
// int adcValue =(int) strtol (adcValueStrr、NULL、10);
sprintf (adcValueStrr、"%x"、RX_VREF[k] Data_Master);
// sprintf (adcValueStrr1、"%x"、u[k]);
//通过 SCI 将 ADC 值发送到 GUI
sciSend (scilinREG、strlen (adcValueStrr)、(uint8_t*) adcValueStrr);
// sciSend (scilinREG、strlen (adcValueStrr1)、(uint8_t*) adcValueStrr1);
sciSend (scilinREG、2、"\r\n");


/*等待清除总线忙状态*/
while (i2cIsBusy (i2cREG1)== true);

/*等待直到检测到停止*/
while (i2cIsStopDetected (i2cREG1)=0);

/*清除停止条件*/
i2cClearSCD(i2cREG1);

// asm (" nop");
// asm (" nop");
// asm (" nop");


while (1);

{


////*用户代码开始(13)*/
///*用户代码结束*/


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Balu:

    中的 GUI 温度值*0.0625 =我的实际温度(根据数据表)

    TMP117的温度分辨率为0.0078125而不是0.0625。

    可能这会为您提供错误的结果。

    如果我乘以正确的分辨率、那么值0x0D9B 为27.21C。

    --

    谢谢。此致、
    Jagadish。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢您。

x 出现错误。请重试或与管理员联系。