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).
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


Cette image - réalisée avec un scanner car je ne disposais pas pas d'APN à l'époque - date du début des années 2000 !


Il est assez facile de couper le câble et de le brancher directement à un convertisseur USB-TTL série : il faut brancher l'émetteur de l'optocoupleur à la masse (au lieu de RX), et le collecteur sur RX (au lieu de DTR). Il suffit alors d'ajouter une résistance de pull-up dans le câble (de 10kΩ par exemple) entre RX et l'alimentation positive fournie par l'adaptateur usb-ttl. Il n'y a plus besoin de régler DTS et DTR en logiciel pour l'alimentation. J'ai fait la modification en mars 2024.