我有旧的 Hewlet Packard 33120A 函数发生器(它应该与Agilent 33120A相同类型),我想用 MCU(ATMega)控制它。发生器具有 RS232 并使用 SCPI 命令。
我用 MAX232 做了简单的 RS232 到 TTL 转换器,只有 RX 和 TX 线。根据用户指南(第 4 章,DTR/DSR 握手协议部分),我将 DSR 连接到逻辑 TRUE(负电压)并且 DTR 未连接。此配置应禁用硬件握手。
现在,我可以将转换器连接到 MCU 或计算机。对于我的第一个实验,我使用了计算机和这个 Python 脚本:
import serial, sys, time
if __name__ == '__main__':
if len(sys.argv) < 2:
print 'Usage: %s <serial_port>' % sys.argv[0]
sys.exit(1)
s = serial.Serial(port=sys.argv[1], baudrate=2400, bytesize=8, parity='N', stopbits=2, timeout=None, xonxoff=0, rtscts=0)
time.sleep(0.5)
s.write('\n*CLS\n')
time.sleep(0.5)
s.write('SYST:REM\n')
time.sleep(0.5)
s.write('APPL:SIN 30E+3, 0.1\n')
s.close()
这没有任何问题。发生器按预期将其输出设置为 30kHz。问题是,当我尝试从生成器读取一些响应时。例如,这应该返回设备名称:
s.write('*IDN?\n')
print s.realine()
我很确定响应存储在生成器的输出缓冲区中,但实际上没有数据传输。
是否有任何命令可以触发从缓冲区传输数据?还是我需要启用硬件握手?
有人有这个发电机吗?您是否将它与 RS232 和 SCPI 一起使用?