구형 Hewlet Packard 33120A 함수 발생기 ( Agilent 33120A 와 동일한 유형 이어야 함 )가 있으며 MCU (ATMega)로 제어하고 싶습니다. 발전기에는 RS232가 있으며 SCPI 명령을 사용합니다.
RX 및 TX 라인을 사용하여 MAX232를 사용하여 간단한 RS232 to TTL 변환기를 만들었습니다. 에 따르면 사용 설명서 (4 장, 절 DTR / DSR 핸드 쉐이크 프로토콜) 나는 연결되어 있지 않은 논리 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()
기능은 (내가 당신을 감사합니다, 내 질문을 편집).