古いヒューレットパッカード33120A関数発生器(Agilent 33120Aと同じタイプである必要があります)があり、MCU(ATMega)で制御したいと思います。ジェネレータにはRS232があり、SCPIコマンドを使用します。
RXおよびTXラインのみを使用して、MAX232でシンプルなRS232からTTLへのコンバーターを作成しました。よるユーザーズガイド(第4章、セクションDTR / DSRハンドシェイクプロトコル)Iが接続されていない論理TRUE(負電圧)とDTRにDSRを結びました。この構成では、ハードウェアハンドシェイクを無効にする必要があります。
これで、コンバーターを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で使用しますか?
s.readline()
関数は(私はあなたに感謝し、私の質問を編集しました)。