Dernière mise à jour :
08/05/2011
Présentation
Cet
article décrit une interface de puissance 32 voies que j'ai
spécialement conçue pour interfacer un port série
RS232 avec des lampes 230 V, ces dernières étant
pilotées par mon
logiciel
séquenceur ProgSeq. Cette interface 001, contrairement à l'
interface
001b,
possède un microcontrôleur qui lui confère un usage assez universel,
puisqu'il suffit de lui envoyer cinq octets pour décider des sorties
qui doivent être activées (détails plus loin). D'un point de vue gestion des données
série, le procédé utilisé ici est fort
similaire à
celui employé dans ma
télécommande 002.
Schéma
Schéma complet de l'interface RS232, mais sans la partie puissance.
Principe général de fonctionnement
L'interface réceptionne l'état des 32 sorties du séquenceur
ProgSeq selon une
transmission série, effectuée au travers
d'une liaison de type RS232 (port COM1, COM2 ou autre sur le PC). Les
données
reçues sont traitées par un PIC, qui assure une "traduction" des
données reçues et qui les envoie ensuite dans des registres à
décallage de type CD4094. Ces derniers jouent le rôle de
convertisseurs série / parallèle, permettant ainsi de
récupérer l'état de chaque sortie sur des sorties
électriques individuelles. Afin d'éviter tout
"scintillement" des sorties pendant les transferts de données,
les registres sont "bloqués" via une liaison STROBE (STR), qui valide
la prise en compte des données quand l'état des 32 sorties a
été intégralement transféré depuis
le PIC.
Interface RS232
Les signaux véhiculés par la liaison série RS232 présentent
des amplitudes de l'ordre de -12V et +12V, et on a recours ici à
un circuit
spécialisé d'interface du type MAX232 pour faire la
transition avec les niveaux logiques TTL 0V / +5V.
A noter que l'usage
d'un MAX232 n'a rien d'obligatoire et que l'on peut employer des
transistors tout bêtes (bipolaires ou FET style 2N3819) pour faire
l'adaptation de niveau.
Surtout
ici où il s'agit uniquement de
travailler avec deux signaux de réception (plus facile que pour les
signaux RS232 à émettre). Notez que la broche 3 du connecteur Sub-D9
RS232 est la broche d'où partent les données côté PC, et que ces
données arrivent sur la broche 2 du connecteur côté PIC. Il vous faudra
donc utiliser un câble de liaison croisé. Si vous êtes allergique aux
câbles croisés, il vous suffit de réceptionner les données émises par
le PC sur la broche 3 du connecteur côté PIC. Après tout vous êtes
maître de vos liaisons, faîtes comme vous le sentez.
Format des données attendues
(en entrée du PIC)
Le
format de la trame de données que le PC (ou autre système) doit
envoyer au PIC doit être composé de cinq octets qui se suivent, selon
les paramètres indiqués ci-après.
Paramètres de communication- Vitesse 9600 bauds
- 8 bits Données
- 1 bit Stop
- Aucune parité
- Aucun contrôle de flux (ni matériel, ni logiciel)
Contenu de la trame
Une trame comporte cinq octets.
-
Le premier octet de la trame indique le type des données
contenues dans
les octets qui suivent. Cet octet porte actuellement la valeur $02, et
indique que les données reçues doivent être
traitées
immédiatement. Je prévois en effet dès
maintenant la possibilité
de stocker dans la mémoire du PIC un ensemble d'états,
qui pourront
être rejoués de façon autonome (chenillard
sans connexion au PC).
Les données reçues pour stockage en EPROM
débuteront par un octet
d'entête différent.
- Les
quatre octets suivant contiennent l'état des 32 sorties, en 4 groupes de
8
sorties : le deuxième octet de la trame concerne
l'état des sorties 1 à 8, et le cinquième octet concerne l'état
des sorties 25 à 32.
Signal de validation et prise en compte des données reçues
Afin de minimiser le risque d'activation de mauvaises sorties
lié à la réception de données
erronnées, le logiciel du PIC inclue deux méthodes de validation des données reçues.
- validation par signal électrique encadrant les données reçues;
- validation par ouverture d'une fenêtre temporelle d'autorisation de traitement des données reçues.
Validation par signal électrique encadrant les données reçuesla
ligne RTS (Ready ToSend) de la liaison
série (côté PC) doit être activée avant l'envoi des cinq
octets, et doit être désactivée juste après.
Selon le câblage de votre cordon de liaison (il en existe une multitude
de sortes possibles), le point du connecteur
RS232 qui devra être utilisé côté PIC sera la broche 1 (DCD), la broche
7 (RTS) ou la
broche 8 (CTS). En cas de doute avec votre cordon (surtout s'il s'agit
d'un cordon moulé acheté dans le commerce), il faudra jouer du
contrôleur de continuité si le câblage n'est pas indiqué. Bien que cela
soit déconseillé, le signal de validation peut être ignoré si
votre cordon de liaison RS232 n'est pas entièrement câblé et que le
signal RTS n'arrive pas au PIC. Pour cela, il suffit de mettre en place
le cavalier JP1/Mode de sorte que l'entrée RB2 du PIC soit porté à
l'état logique bas (signal [En] non requis). En temps normal ce
cavalier ne doit pas être mis en place (RB2 à l'état logique haut via
la résistance R2 câblée au +5 V, signal [En] requis).
Remarque
: en mode de transmission "COM32", le logiciel ProgSeq envoie le
signal de
validation sur la broche RTS. Cette ligne de contrôle RTS est activée
juste avant l'envoi des 5 octets et est désactivée juste après. Sur
certains ports virtuels (obtenus par exemple avec une interface
USB/RS232), les données sont parfois transmises avec un peu de retard
par rapport à l'ordre d'envoi, ce qui peut être perturbant pour
l'interface qui dans ce cas peut voir la ligne de contrôle RTS retomber
avant que la totalité des données ne soit transmise. Pour cette raison,
le logiciel ProgSeq permet désormais de spécifier un petit retard (de
quelques ms) entre fin de transmission des données et désactivation du
signal de validation.
Validation par ouverture d'une fenêtre temporelle d'autorisation de traitement des données reçuesUne
fenêtre d'autorisation des données reçues est ouverte à la condition
qu'aucune donnée n'ait été reçue pendant au moins 15 ms, et que le
dernier octet reçu ait la valeur $02. A partir de cet instant, le
logiciel n'accepte que les quatre octets suivants, qui doivent arriver
dans un laps de temps maximal de 15 ms. A titre d'info, il faut environ
6 ms pour transmettre 5 octets à la vitesse de 9600 bauds. La fenêtre
d'ouverture est fermée après réception des cinq octets attendus.
Conversion série / parallèle
(en sortie du PIC)
Elle est assurée par les quatre registres à
décallage CD4094 montés en cascade. Les données
représentatives de l'état des 32 sorties sont
véhiculées sur la ligne DATA, et arrivent en premier lieu
sur la broche D du premier registre (borne 2). La mise en série
des registres s'effectue en reliant la sortie QS d'un registre à
l'entrée DATA du registre suivant. Cette façon de faire
conduit à obtenir un fonctionnement tel que celui que l'on
aurait avec un seul registre à décallage de 32 sorties.
L'entrée CLK reçoit les données d'horloge qui vont
faire avancer d'un cran l'état logique qui été
présenté à l'entrée D du premier registre
le coup d'horloge précédent. Ainsi, l'état logique
présenté au premier coup d'horloge sur l'entrée
DATA, va se retrouver sur la sortie O5 au bout de 5 coups d'horloge, et
va se retrouver sur la sortie O27 au bout de 27 coups d'horloge. Le
dernier état logique présenté sur l'entrée
DATA du premier registre à décallage va ainsi se
retrouver sur la sortie O1. Lors du transfert des données, il
convient donc de transmettre en premier l'état logique de la
sortie O32, puis ensuite l'état logique de la sortie O31, puis
celui de la sortie O30, etc., pour finir par la transmission de
l'état logique de la sortie O1. Pendant le transfert des
données (état des 32 sorties), les sorties des registres
sont verrouillées sur les anciennes valeurs. Les nouvelles
valeurs ne sont appliquées que lors de l'envoi d'une impulsion
sur la ligne STROBE.
Pour résumer :
- La ligne DATA véhicule l'état des 32 sorties, les unes après les
autres;
- La ligne CLOCK permet aux registres à décallage de
transmettre ces états sur les lignes de sorties, les unes
après les autres;
- La ligne STROBE n'est utilisée qu'après envoi de
l'état des 32 sortie, pour indiquer aux registres qu'ils peuvent
prendre en compte les nouveaux états.
Interface de puissance
Non représentée sur le premier schéma, elle pourra prendre la forme de l'interface décrite à la page
Interface
de puissance 5V / 230V 001, multipliée en autant de fois que nécessaire (4 blocs de 8 voies).
Pour
un fonctionnement impeccable de l'interface de puissance, vous pouvez
aussi inclure un réseau de transistors darlington ULN2803 entre les
sorties commande et les entrées des optotriacs. Le câblage est un poil
différent car on attaque les leds des optotriacs par leru cathode et
non plus par leur anode, mais ça ne change rien et ça ne coute qu'un
seul petit CI supplémentaire.
Voir aussi les pages
Interface
port parallèle 001 et
Interface
port parallèle 003 (deuxième lien conseillé) pour des exemples de mise en forme pratique.
Trames de données attendues par le PIC
Si cette interface est destinée à être utilisée avec mon logiciel
séquenceur
ProgSeq,
vous n'avez pas besoin de connaitre les détails concernant la structure
de la trame. Mais si vous souhaitez utiliser l'interface dans un
autre contexte, les exemples suivants devraient vous aider à comprendre
ce qu'il faut envoyer au PIC pour qu'il réponde correctement à vos
commandes. En tout état de cause, je vous invite à consulter la page
Les nombres en informatique si vous n'êtes pas encore bien habitué à passer du monde binaire au monde décimal ou hexadécimal.
Exemple N° 1
On veut activer immédiatement les sorties 1 à 8,
13 à 16 et 26 à 28. Chaque groupe de huit sorties correspondant à un
octet, il convient au préalable de convertir la valeur binaire qui
correspond à l'état des quatre groupes de huit sorties, en code
hexadécimal. Connaissant les sorties à activer, on en déduit les
valeurs binaires et hexadécimale suivantes, en mettant à 1 les sorties
qui doivent être activées et en mettant à 0 les sorties qui ne doivent
pas l'être :
|
Entête
trame |
Groupe sorties N° 1
(sorties 1 à 8) |
Groupe sorties N° 2
(sorties 9 à 16) |
Groupe sorties N° 3
(sorties 17 à 24) |
Groupe sorties N° 4
(sorties 25 à 32) |
en binaire |
00000010 |
11111111 |
00001111 |
00000000 |
01110000 |
en hexa |
$02 |
$FF |
$0F |
$00 |
$70 |
La trame à envoyer - incluant l'entête - est donc :
02 FF 0F 00 70
Remarque
: pour chaque groupe de huit sorties, la sortie dont le numéro est le
plus faible correspond à l'état binaire le plus "à gauche" de la série
de huit bits (ce qu'on appelerait le MSB - bit de poids ford - en temps
normal). Par exemple
pour le groupe de sorties N° 2, l'activation de la seule sortie N° 9
s'écrit "10000000" (valeur hexa $80), et l'activation de la seule
sortie N° 16 s'écrit "00000001" (valeur hexa $01).
Exemple N°2
On veut activer toutes les sorties paires et désactiver les sorties
impaires. Dans ce cas, on a ceci :
|
Entête
trame |
Groupe sorties N° 1
(sorties 1 à 8) |
Groupe sorties N° 2
(sorties 9 à 16) |
Groupe sorties N° 3
(sorties 17 à 24) |
Groupe sorties N° 4
(sorties 25 à 32) |
en binaire |
00000010 |
01010101 |
01010101 |
01010101 |
01010101 |
en hexa |
$02 |
$55 |
$55 |
$55 |
$55 |
La trame à envoyer - incluant l'entête - est donc :
02 55 55 55 55
Et
si on veut faire l'inverse, c'est à dire activer toutes les
sorties impaires et désactiver les sorties paires, on a ceci :
|
Entête
trame |
Groupe sorties N° 1
(sorties 1 à 8) |
Groupe sorties N° 2
(sorties 9 à 16) |
Groupe sorties N° 3
(sorties 17 à 24) |
Groupe sorties N° 4
(sorties 25 à 32) |
en binaire |
00000010 |
10101010 |
10101010 |
10101010 |
10101010 |
en hexa |
$02 |
$AA |
$AA |
$AA |
$AA |
La trame à envoyer - incluant l'entête - est donc :
02 AA AA AA AA
Prototype
Interface testée avec un PIC programmé avec le code adéquat et pilotant le circuit d'
affichage leds 005, le tout piloté par le
logiciel séquenceur ProgSeq.
Ca
fonctionne au poil et les enfants adorent jouer avec les figures du
logiciel ProgSeq. De ce point de vue ils ont plus d'imagination que moi.
Logiciel du PIC
Le programme compilé binaire au format (*.hex), ainsi que les
fichiers de code source (format MikroPascal Pro V3.80) sont disponibles dans
l'archive suivante.
Interface serie 001 - 16F628A (version du 04/05/2011)
Remarque
: vous trouverez dans l'archive deux fichiers compilés *.hex. Un prévu
pour tourner avec un quartz 4 MHz et l'autre prévu pour tourner avec un
quartz 8 MHz. Mes tests n'ont pas été intensifs, mais il me semble
avoir observé un ou deux ratés d'affichage avec la version à 4 MHz.
Difficile à dire car ce n'était pas flagrant et pouvait aussi venir du
port série du PC envoyant les commandes. En tout état de cause, je
conseille la version 8 MHz.
Si vous souhaitez recevoir par la poste un PIC
préprogrammé et prêt à utiliser, merci de
consulter la page
PIC - Sources.
Circuit imprimé
Non réalisé.
Corrections et remarques
08/05/2011-
Remise en place des bons fichiers dans l'archive zip du logiciel du
PIC. Contrairement à ce que j'indiquais dans le texte, l'archive ne
comportait pas les deux versions de fichiers compilés pour quartz 4 MHz
et 8 MHz, et les fichiers étaient ceux d'une version antérieure. Je
rappelle que la version 8 MHz est conseillée.
01/08/2010- Portage du code en MikroPascal Pro V3.80.
-
Correction erreur indexage des sorties par rapport aux données envoyées
par le logiciel ProgSeq. La sortie appelée "sortie 1" dans le logiciel
ProgSeq ne correspondait pas à la sortie appelée "O1" de l'interface
RS232 mais à la sortie appelée "O8". L'erreur n'était pas très grave
dans le sens où on remettait les pendules à l'heure en faisant pivoter
de 180 degrés les connecteurs 8 points des quatre blocs de sortie. Mais
il me semble tout de même mieux d'avoir une correspondance "aux
normes". Attention, la correction est apportée au niveau du logiciel du
PIC et non au niveau du logiciel ProgSeq, ce qui signifie que
si les données sont fournies par un soft de votre cru, vous devez
adapter les données envoyées en inversant bit de poids fort avec bit de
poids faible.
- Protection accrue du logiciel contre les erreurs
d'interprétation des données reçues en cas de connexions / déconnexions
répétées (il pouvait arriver que le logiciel du PIC mette plusieures
secondes pour se resynchroniser).
- Ajout bouton Reset sur le PIC
pour éviter l'arrêt / marche secteur en cas de "plantage" (activation
aléatoire des sorties due à un décallage dans le traitement des octets
reçus). Cela arrivait avec la version précédente et je n'en ai pas
constaté avec la dernière version, mais on ne sait jamais.