J'ai voulu relever des mesures avec ce multimètre VC670 avec sa laison série, après quelques années sans l'avoir utilisée, et j'ai un peu galéré pour la faire fonctionner, donc, je fais un peu de doc. Parce que la documentation, ça peut toujours servir... Je ne sais pas si les autres multimètres de chez Voltcraft (marque de chez Conrad) utilisent la même connectique et protocole. J'eu déjà parlé de cet appareil sur cette page.


Le Voltcraft VC670 connecté par son câble RS232 DB-25 d'origine, via un adaptateur DB-25/DE-9


Avec cet appareil, il faut en premier lieu activer la transmission vers l'ordinateur en maintenant la touche "HOLD" pendant une à deux secondes. Après le second bip, un symbole spécique apparait à l'écran pour indiquer que la transmission activée.


Bizarre comme symbole, non ?


                    DB-25  DE-9    Signal
 .-------.
 |       |------        3     2    RXD
 |       |------       20     4    DTR
 |       |------        4     7    RTS
 |       |
 |       |------        2     3    TXD
 |       |------        1     -    Shield ground
 |    __/
  \--/
  |  |
  |  |
  |  |



Extrait de la documentation technique du VC670, la liaison est (heureusement !) opto-isolée


Pour fonctionner, RTS doit être maintenu à une tension négative (pour le pull-down) et DTR à une tension positive (collecteur du photo-transistor). Il serait facile de couper le câble et de le brancher directement à un convertisseur USB-TTL série : il faudrait alors brancher RTS sur la masse, et DTR sur le +5V (via une résistance de par exemple 100Ω par sécurité pour limiter le courant en cas de court-circuit. Il n'y aurait alors plus besoin de s'embêter avec DTS et DTR.

Le manuel donne du code BASIC en exemple pour ouvrir le port série :
OPEN "COM1:4800,n,7,2,rs,cs,ds,cd" FOR RANDOM AS #1
Ce qui est bien gentil, ça aurait très bien pu être du Cobol. Sous Linux, pour tester la liaison avec picocom on peut taper :
$ picocom --baud 4800 --raise-dtr --lower-rts --databits 7 --imap crcrlf /dev/ttyUSB0
Comme on ne fait que recevoir et jamais transmettre, il est inutile de spécifier la durée de 2 bits de stop. En python, rapidement, on pourrait coder quelque chose comme ceci :
import serial

with serial.Serial("/dev/ttyUSB0", 4800, bytesize=7) as ser:
	ser.rts = False
	ser.dtr = True
	while(True):
		string = ser.read_until(b'\r').decode('ascii').strip()
		if len(string) == 13:
			print(string)
Ou alors, comme cela :
import serial

with serial.Serial("/dev/ttyUSB0", 4800, bytesize=7) as ser:
	ser.rts = False
	ser.dtr = True
	string = ""
	ser.reset_input_buffer()
	while(True):
		b = ser.read()
		try:
			c = b.decode("ascii")
			if c != "\r":
				string+=c
			else:
				if len(string) == 13:
					print(string) # OK
				string = ""
		except:
			continue

Les trames font toujours 14 caractères de long (13 sans le retour chariot), c'est spécifié dans le manuel. Voilà quelques trames obtenues en pressant un peu au hasard sur les boutons des différentes fonctions :
AC  0.001   V
AC  0.001   V
DC  000.1  mV
DC -005.9  mV
DC -012.0  mV
DC -018.0  mV
AC -02.14  mA
AC  00.84  mA
AC  00.70  mA
AC  00.60  mA
AC  0.052   V
AC  0.023   V
OH  00.20MOhm
OH  40.00MOhm
OH  40.00MOhm
FR  0.065 KHz
FR  2.545 KHz
FR  0.660 KHz
FR  0.066 KHz
FR  0.066 KHz
FR  0.068 KHz
AC  0.019   V
OH  00.18MOhm
OH  40.00MOhm
CA  4.000  nF
CA  0.495  nF
DI  0228   mV
DI  0275   mV
DI  4000   mV


Oui, cette image (faite avec une scanner car il n'y avait pas d'APN à l'époque) date du début des années 2000 :x