Hello,
Avec le module PySerial, il est relativement facile d'envoyer des mots de 9 bits sur un port série. Il suffit d'avoir une table de parité et de configurer en Odd ou Even à la volée, comme dans le code ci dessous.
Par contre, pour recevoir un mot de 9 bits, il faut réceptionner le mot de 8 bits envoyé (ainsi que son bit de parité inaccessible pour nous), CALCULER la parité du mot de 8 bits reçu, VOIR SI LE PC DETECTE UNE FAUTE DE PARITE ET INVERSER LE BIT SI IL Y A FAUTE. Tout mon problème est là... Sauf erreur de ma part, la parité en reception est innaccessible, il me reste un espoir dans la détection d'erreur... Au cas où Win32 le gère, est-ce implémenté dans PySerial? J'avoue que j'ai du mal avec la doc, je n'ai d'ailleurs que celle générée par Doxygene sur le module PySerial.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 partab=[ \ 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,\ 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,\ 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,\ 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,\ 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,\ 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,\ 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,\ 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,\ 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,\ 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,\ 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,\ 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,\ 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,\ 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,\ 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,\ 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0] def putdata(data): byte=data & 0xff if data & 0x100: bit8 = 1 else: bit8 = 0 if partab[byte] ^ bit8 : port.setParity('O') else: port.setParity('E') port.write(chr(byte))
N.B On peut parfaitement inverser la parité à la volée, Win32 le fait sans problème. Par contre, il lui faut 2.5msec sur mon PC et beaucoup plus pour une liaison série sur module USB...
A+
Pfeuh
Partager