我正在测试红外温度传感器。它连接到SP485(转换器rs485到rs232?),它连接到ZYNQ,FPGA。 enter image description here
发送Tx时我必须输入High。发送完所有消息后,我将Low输入此启用引脚。
简单的方法是使用一位宽GPIO。 在Write()之前设置为High。 Write()完成后,使GPIO为低电平。 我以为......这将是有效的。但它不是。 代码如下所示...(我使用libmodbus库使用rs485进行通信)
write(fd,"1",1); // make gpio(enable pin) high.
req_length = modbus_send_raw_request(ctx, raw_req, 6 * sizeof(uint8_t)); //write
write(fd,"0",1);//After write(), make gpio low to receive messages from sensor.
int response_length = modbus_receive_confirmation(ctx, rsp);
此代码无法正常运行。 Write()不是立即写的.. 或者这个过程是独立工作的。(因此当我输入Low时,write()有可能没有完成)。
我实际上并不了解原因。这只是我的假设。
所以我添加了usleep();
write(fd,"1",1); // make gpio(enable pin) high.
req_length = modbus_send_raw_request(ctx, raw_req, 6 * sizeof(uint8_t)); //write
usleep(9050); //waite until write is finished
write(fd,"0",1);//After write(), make gpio low to receive messages from sensor.
int response_length = modbus_receive_confirmation(ctx, rsp);
这段代码有时候工作.....它也不是最好的答案。 结果是https://www.youtube.com/watch?v=Bqzu3hi9gV4 在1 22之后,它正在工作。
使能引脚连接到FPGA(ZYNQ)
很难添加其他电路来控制使能引脚。 在FPGA上进行设计更方便。 (i.stack.imgur.com/f7Ebg.png) 我应该通过软件来控制它吗?(控制gpio) 还是硬件?
让我知道最好的方法,方法..谢谢。