主题中讨论的其他器件:BUF16821
你好
我的客户使用相同的平台、相同的读/写方式、读出四个终端,只有第一个数据是正确的,会发生什么情况?
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.
你好
我的客户使用相同的平台、相同的读/写方式、读出四个终端,只有第一个数据是正确的,会发生什么情况?
您好 Fandy、
有几个问题:
-这是对 DAC 寄存器还是 EEPROM 的写操作?
-这是否是对 DAC 寄存器的立即写入? (D15=1或0)
-问题是回读? 这是 DAC 输出电压 问题、还是只是 读回问题?
我的理解:
- 加电后、例程写入 DAC 寄存器0至3 "376hex"并回读:
-out1:0x376 (正确)
-out2:0x2ff (错误)
- OUT3:0x001 (错误)
-out4:0x2ff (错误)
是否发生在多个器件或仅1个器件上?
谢谢、
Costin
您好 Costin
谢谢、请参阅以下客户回答
-这是对 DAC 寄存器还是 EEPROM 的写操作? A-A:EEPROM
-这是否是对 DAC 寄存器的立即写入? (D15=1或0)-- A: D15:0;D14:1
-问题是回读? 这是 DAC 输出电压 问题、还是只是 读回问题? 答: 只是 回读问题,实际输出电压是可以的。
我的理解:
- 加电后、例程写入 DAC 寄存器0至3 "376hex"并回读:
-out1:0x376 (正确)
-out2:0x2ff (错误)
- OUT3:0x001 (错误)
-out4:0x2ff (错误)
是否发生在多个器件或仅1个器件上? a:多个部件
///----------------------
//按如下方式读取 DAC 源代码,它可以吗?
(笑声)
对于(i=0; i<4; i++) //读取 OUT1~4
{
CTP_I2C_WriteDat_BUF16821 (0x40|addr[i]); //不确定是不是正确的??
BUF = CTP_I2C_ReadDat_BUF16821 (addr[i]);
printf ("\n gamma dat[%d]= 0x%x;"、i、buf);
delay_ms (50);
}
(笑声)
///------------------------------
uint8_t CTP_I2C_WriteDat_BUF16821 (uint8_t dat)
{
I2C_Start();
I2C_Send_Byte (0x74<1);
if (I2C_WAIT_Ack ())
{
I2C_Stop ();
返回 1;
}
I2C_Send_Byte (dat);
if (I2C_WAIT_Ack ())
{
I2C_Stop ();
返回 1;
}
I2C_Stop ();
返回 0;
}
(笑声)
//------
uint16_t CTP_I2C_ReadDat_BUF16821 (uint8_t reg)
{
uint8_t tmp1、tmp2;
uint16_t tmp;
I2C_Start();
I2C_Send_Byte (0x74<1);
if (I2C_WAIT_Ack ())
{
I2C_Stop ();
返回 1;
}
I2C_Send_Byte (reg);
if (I2C_WAIT_Ack ())
{
I2C_Stop ();
返回 1;
}
I2C_Start();
I2C_Send_Byte ((0x74<<1)|0x01);
if (I2C_WAIT_Ack ())
{
I2C_Stop ();
返回 1;
}
tmp1=I2C_READ_Byte ();
I2C_Ack ();
tmp2=I2C_READ_Byte ();
I2C_NACK ();
tmp = tmp1&0x03;
tmp = (tmp<<8) + tmp2;
I2C_Stop ();
返回 tmp;
}
您好 Costin:
感谢你的帮助。
///---------------- 测试模式1:
{
BUF = CTP_I2C_ReadDat_BUF16821 (0x01);
printf ("\n 读取0x01 = 0x%x;"、buf);
BUF = CTP_I2C_ReadDat_BUF16821 (0x00);
printf ("\n 读取0x00 = 0x%x;"、buf);
}
UART 打印:
读取0x01 = 0x2ff;
读取0x00 = 0x1;
///---------------- 测试模式2:
{
BUF = CTP_I2C_ReadDat_BUF16821 (0x00);
printf ("\n 读取0x00 = 0x%x;"、buf);
BUF = CTP_I2C_ReadDat_BUF16821 (0x01);
printf ("\n 读取0x01 = 0x%x;"、buf);
}
UART 打印:
读取0x00 = 0x376;
读取0x01 = 0x2ff;
//------
结果:只需测试 mode2第一个输出正确
========================================================================================
我的问题:
如 BUF16821 DS page14描述:
"要读取特定 DAC/VCOM 通道的非易失性寄存器中存在的数据、主器件必须首先发出通用采集命令或选择相应 DAC/VCOM 通道的单个采集命令。"
您能给我一个示例代码吗? (电子邮件: guicai_wang2@tianma.cn)
非常感谢。
尊敬的 Costin:
我发现另一个问题:
如果将 dat "0x2ea"写入 NV 0x00地址、则读取 dat 不正确:
//------
ADDR[0]= 0x00;
DAT[0]= 0x2ea;
CTP_I2C_WriteReg BUF16821 (addr[0]、0x4000|dat[0]);
BUF = CTP_I2C_ReadDat_BUF16821 (addr[0]);
printf ("\n gamma dat[0]= 0x%x;"、buf);
UART 打印: gamma dat[0]= 0x2ff;
///--------
更改写入 dat "0x300"、并写入 NV 相同地址、读取 dat 正常:
///--------
ADDR[0]= 0x00;
DAT[0]= 0x300;
CTP_I2C_WriteReg BUF16821 (addr[0]、0x4000|dat[0]);
BUF = CTP_I2C_ReadDat_BUF16821 (addr[0]);
printf ("\n gamma dat[0]= 0x%x;"、buf);
UART 打印: gamma dat[0]= 0x300;
//------
我不知道为什么?
您好 Fandy、
对于一个寄存器、您需要 "单次采集命令"、多个寄存器需要"通用采集命令"
如果超过了 WRITE-16的最大数量、NVM 将停止正常工作。
我将关闭此主题、让我们继续通过电子邮件发送、请在以下地址向我发送详细信息:
此致、
Costin