我有旧的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一起使用吗?