主题中讨论的其他器件: PGA460、 ENERGIA、 BOOSTXL-PGA460、 LMP91000、 SN65HVDA100-Q1
大家好、团队、
我遇到了 pga460-Q1、它非常适合我的距离传感应用。 我对 UART 通信有些困惑。 我想将 pga460与 Arduino uno 相连接。 有人能帮我解决这个问题吗? 并与 EEPROM 写入和刻录方法相混淆。 请帮我解决这个问题。 请向我推荐适用于 pga460和 Arduino 的精确编码过程。
提前感谢...
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.
大家好、团队、
我遇到了 pga460-Q1、它非常适合我的距离传感应用。 我对 UART 通信有些困惑。 我想将 pga460与 Arduino uno 相连接。 有人能帮我解决这个问题吗? 并与 EEPROM 写入和刻录方法相混淆。 请帮我解决这个问题。 请向我推荐适用于 pga460和 Arduino 的精确编码过程。
提前感谢...
您好 Akeem Whitehead。 这就是我的算法和电路。
PGA TX 到 Arduino 的10引脚。
从 PGA RX 到 Arduino 的11引脚。
首先是使用批量命令写入 EEPROM
它们正在使用解锁和编程命令进行编程
最后读取 EEPROM 值、但它仅提供一组255个值。 我认为批量写入和编程在我的算法中无法正常工作。
您能不能帮助我解决这个问题...

#include
软件串行 mySerial (10、11);
#define synctyte 0x55
字节 EEBW = 0x60;//EEPROM 批量写入
字节 EE_UNLCK = 0x50;// EEPROM 解锁
字节 EEREAD = 0x48;// EEPROM 读取
字节 USER_DATA[20];
字节 BurnStat = 0;
字节 temp = 0;
void setup()
{
引脚模式(10、输入);
引脚模式(11、输出);
mySerial.begin(9600);//pga 通信
Serial.begin(9600);//serial 显示器打印
EEPROM_bulkwrite();
EEPROM_UNLOCK_PRgrm ();
EEPROM_READ();
}
void loop()
{
}
void EEPROM_bulkwrite()
{
for (int i=0;i<20;i++)
{
USER_DATA[I]= 0x11;
}
字节 TVGAIN0 = 0xAA;
字节 TVGAIN1 = 0xAA;
字节 TVGAIN2 = 0xAA;
字节 TVGAIN3 = 0x51;
字节 TVGAIN4 = 0x45;
字节 TVGAIN5 = 0x14;
字节 TVGAIN6 = 0x50;
字节 init_gain = 0x54;
字节频率= 0x32;
字节死区时间= 0xA0;
字节 PULSE_P1 = 0x08;
字节 PULSE_P2 = 0x10;
字节 CURR_LIM_P1 = 0x55;
字节 CURR_LIM_P2 = 0x55;
字节 REC_LENGTH = 0x19;
字节 FREQ_DIAG = 0x33;
字节 SAT _FDIAG_TH = 0xEE;
字节 FVOLT_DEC = 0x7C;
字节 DECPL_TEMP = 0x4F;
字节 DSP_SCALE = 0x00;
字节 TEMP_TRIM = 0x00;
字节 P1_GAIN_CTRL = 0x09;
字节 P2_GAIN_CTRL = 0x09;
字节 buf1[46]={synctyte、EEBW、USER_DATA[0]、USER_DATA[1]、USER_DATA[2]、 USER_DATA[3]、USER_DATA[4]、
USER_DATA[5]、USER_DATA[6]、USER_DATA[7]、USER_DATA[8]、USER_DATA[9]、
USER_DATA[10]、USER_DATA[11]、USER_DATA[12]、USER_DATA[13]、USER_DATA[14]、
USER_DATA[15]、USER_DATA[16]、USER_DATA[17]、USER_DATA[18]、USER_DATA[19]、
TVGAIN0、TVGAIN1、TVGAIN2、TVGAIN3、TVGAIN4、TVGAIN5、TVGAIN6、
INIT_GAIN、FREQUENCY、死区时间、
PULSE_P1、PULSE_P2、CURR_LIM_P1、CURR_LIM_P2、
REC_LENGTH、FREQ_DIAG、SAT_FDIAG_TH、FVOLT_DEC、DECPL_TEMP、
DSP_SCALE、TEMP_TRIM、P1_GAIN_CTRL、P2_GAIN_CTRL};
mySerial.write (buf1、sizeof (buf1));
延迟(50);
}
void EEPROM_UNLOCK_prgrm ()
{
字节 regAddr = 0x40;
//将"0xD"写入 EE_UNLCK 以解锁 EEPROM
字节 regData = 0x68;
字节 buf2[4]={synctyte、EE_UNLCK、regAddr、regData};
mySerial.write (buf2、sizeof (buf2));
延迟(1);
//将 EE_CNTRL 寄存器的 EEPRGM 位写入"1"
字节 regData1 = 0x69;
字节 buf3[4]={synctyte、EE_UNLCK、regAddr、regData1};
mySerial.write (buf3、sizeof (buf3));
延迟(1000);
}
空 EEPROM_READ ()
{
//读回 EEPROM 程序状态
//pga460SerialFlush();
字节 regAddr = 0x40;// EDD 开始
字节 buf4[3]={synctyte、EEREAD、regAddr};
mySerial.write (buf4、sizeof (buf4));
延迟(10);
for (int n=0;n<44;n++)
{
如果(n=1)
{
burnStat = mySerial.read();
serial.println (burnStat);
}
其他
{
temp = mySerial.read();
serial.println (temp);
}
}
}
以及从 EEPROM 读取后获得的结果
您好 Pradeep、
如何为 PGA460-Q1供电? 最低电源电压要求为6V。 如果您使用 Arudino 的5V 电源轨为 PGA460-Q1供电、我们的器件将无法正常工作。
您是否能够从 PGA460-Q1成功读取任何数据?
Arduino 3.3V 或5V 逻辑电平是否被引用? 如果逻辑电平为3.3V、则 PGA460-Q1的 TXD 和 RXD 引脚默认设置为3.3V、并应正常工作。 如果逻辑电平必须为5V、则:
TEST 引脚执行的数字电压电平选择在器件加电时执行。 上电时、
器件检查 TEST 引脚的电平。 如果电平为低电平、则数字输出引脚以3.3V 电压运行。如果进行测试
引脚连接高电平(3.3V 或5V 均被视为高电平状态)、数字输出引脚以5V 电压运行。这一点很重要
PGA460-Q1器件中锁存了条件、以便测试多路复用器可以像以前一样进一步使用 TEST 引脚
所述。 如果应用要求使用5V 数字输出、并且必须提取测试多路复用器输出
然后、可以在测试引脚上连接一个弱上拉电阻器、如所示
图40 (数据表的)。