(1)我在工作台上串联了三个传感器、使用 RaspberryPi 和9600波特运行数天。 有一次、第一个传感器返回时温度为0.1 C、而另外两个传感器仍在22 C 左右读取环境温度。 这是在经过处理后、因此我没有其他详细信息可以添加到公式中。 它们都在关断状态下运行、这是我的读取温度代码。 TDLY 仅为几毫秒。 即2 x 字符时间
/***** 读取温度 TMP107s **** /
浮点读取温度(AA)
内部 AA; /*器件型号*/
{
内部 ITEMP;
float rTemp;
fprintf (stdout、"\n3:");
serialPutchar (ftmp,cCAL); //写入 OneShot 的校准字节*/
延迟(TDLY);
serialPutchar (ftmp,(AA <<3)); /*地址设备*/
延迟(TDLY);
serialPutchar (ftmp, 0xA0+cCONFIG); /*临时寄存器*/
延迟(TDLY);
serialPutchar (ftmp,(cSHUTDOWN+cONESHOT)& 0xFF );/* LSB OneShot */
延迟(TDLY);
serialPutchar (ftmp、((cSHUTDOWN + cONESHOT)>> 8)和0xFF);/* MSB 关断*
serialFlush(ftmp);
延迟(TDLY);
readByte(5); /*读取预期的字节*/
printByte(5);
延迟(22); /****延迟22毫秒**/
serialPutchar (ftmp,cCAL); //读取温度的校准字节
延迟(TDLY);
serialPutchar (ftmp,cREAD +(AA <<3)); /*读取设备*/
延迟(TDLY);
serialPutchar (ftmp, 0xA0+cTEMP); /*临时寄存器*/
serialFlush(ftmp);
延迟(22); /****毫秒**/
readByte(5);
printByte(5);
ITEMP =(rByte[3]>> 2)+(rByte[4]<< 6);// 20170210解码温度*/
IF (ITEMP & 0x2000) /*-ve 符号集*/
{
ITEMP =~ITEMP & 0x3FFF; /*一补码、0高位*/
ITEMP = ITEMP ^-1; /*异或带-1 */
}
rTemp = ITEMP * tLSB; /* Scale to LSB *
flog = 1;
返回 rTemp; /*°C */
在发送 OneShot 命令请求数据和读取数据之间、我有22毫秒的延迟、但我希望这足够了、只是想知道在0x55命中线之前、是否值得丢弃0xFF 或一些唤醒调用?
(2)我假设我必须同时传输 OS 和 SD 才能触发单次触发、并且仍然使器件处于关断模式。 这是真的吗?
(3) TMP107数据表显示 OS 位始终读为零(表5)、但为了响应使用以下代码读取配置、我似乎接收到0x1800:
/***** 读取配置 TMP107s **** /
内部 readConfig (AA)
内部 AA; /*器件型号*/
{
fprintf (stdout、"\n4:");
serialPutchar (ftmp, cCAL);
延迟(TDLY);
serialPutchar (ftmp,cREAD +(AA <<3)); /*设备*/
延迟(TDLY);
serialPutchar (ftmp, 0xA0+cCONFIG); /*配置寄存器*/
serialFlush(ftmp);
延迟(22); /* msec */
readByte(5); /*读取预期数据*/
printByte(5);
返回(rByte[3]和0xFF)+(rByte[4]<< 8);// config */
}
(4)出于您的兴趣、我的"实验室"商店没有包含合适的 TxD 接口缓冲器、因此我使用了4N37光耦合器。 我仅运行9600波特、但即使我必须将晶体管基极接地100K 以改善信号边沿时间、也是如此。
David Whiteley
