| |
| La Connectique |
| Le port série se présente sous la forme d'un connecteur
SUB-D9 male. Il offre un moyen simple pour communiquer avec des
appareils et microcontrôleurs jusqu'à plusieurs centaines de mètres
et les quelques signaux qu'il supporte peuvent aussi être utilisés
comme lignes d'E/S directes pour la commande de petites interfaces. |
|
|
|
Le dessin ci-contre montre l'organisation de
ce connecteur. |
|
|
| |
| |
| La DLL IO_Acces_Com |
| |
| Cette DLL s'intègre à vos Applications C++, Delphi, ou Visual Basic. Elle
exploite les fonctions de l'API Windows et est donc compatible avec
toutes les versions de ce système d'exploitation ainsi qu'avec les adaptateurs
sur port USB. |
| La Dll supporte des fonctions permettant d'établir une communication
série ainsi que des fonctions pour le positionnement et la consultation
des signaux de contrôle qui pour simplifier sont indexés avec une numérotation
allant de 0 à 1 pour les sorties et de 0 à 4 pour les entrées. |
| |
| La DLL supporte 8 fonctions qui vous sont présentés ici sous la syntaxe Pascal et en C: |
| |
int ComUsePort (int nCOM);
Function ComUsePort (No:Integer):boolean; Défini le Port
en usage. |
| Appelez ComUsePort pour ouvrir et désigner le Port en usage.
Les Ports sont désignés par un numéro d'index à partir de 1, 0 permettant
de refermer le port en cours d'utilisation. La fonction renvoie True
si le port a été ouvert sans erreur.
|
| |
int ComStateIn(char nLIG);
Function ComStateIn (Ligne:Byte):boolean; Renvoie
l'état logique d'une ligne en entrée |
| Utilisez ComStateIn pour consulter l'état logique des lignes
orientées en entrées. La fonction accepte les index 0 à 4 correspondant
respectivement aux signaux Cd, Dsr, Rts, Ctr et Ri, et la valeur renvoyée
correspond à l'état électrique de la ligne (True= +12V, False = -12V) |
| |
void ComStateOut (char nLIG, int Etat);
Procedure ComStateOut (Ligne:Byte ; Etat:Boolean);
Affecte un état logique à une ligne en sortie |
| Utilisez PrnStateOut pour affecter un état logique à une
ligne orientée en sortie. La fonction accepte les index de ligne 0 pour
DTR et 1 pour RTS et la valeur d'état correspond à l'état électrique de
la ligne (True= +12V, False = -12V) |
| |
int ComConfig (int Debit, int WorLength, int NbrStopBit, int Parity);
Function ComConfig (Debit,WordLength,NbrStopBit,Parity:Integer):Boolean;
Configure le port |
|
Utilisez ComConfig pour définir le format des communications séries.
Les paramètres autorisés en argument sont les suivants: Debit
: en Bauds. 110,300,1200,2400,4800,9600,14400,19200,38400,56000,57600,115200,256000
WordLength : longueur des mots, de 5 à 8 bits. NbrStopBit
: nombre de bit de stop, 1=un bit de stop, 2=2 bits de Stop. Parity
: parité, 0=aucune, 1=Impaire, 2=Paire,3= Toujours 0, 4= Toujours 1.
|
| La fonction ne vérifie pas la validité des paramètres et
renvoie false, seulement en cas de tentative de configuration sur un port
fermé ou invalide. |
| |
void ComSetDataOut (unsigned char Data);
Procedure ComSetDataOut(Data:Byte); Envoie une donnée |
| Utilisez ComSetDataOut pour transmettre un octet de donnée
(ou un mot de 5 à 7 bits suivant la configuration du port). ComSetDataOut
place l'octet à transmettre dans le buffer de transmission et n'attend
pas sa transmission effective. |
| |
int ComGetDataIn (unsigned char* data);
Function ComGetDataIn(Var Data:Byte):Boolean; Réceptionne une donnée
|
| Utilisez ComGetDataIn pour récupérer une donnée reçu. La
fonction consulte le buffer d'entrée et ci celui-ci est vide attend une
réception durant 100ms. La fonction renvoie True si une donnée valide
a bien été récupéré et sinon false. |
| |
void ComSetBlockOut (void* buf, int SzBlk);
Procedure ComSetBlockOut(const Buffer; SzBlk:Integer);
Envoie un Bloc de données |
| Utilisez ComSetBlockOut pour transmettre un bloc de données
: valeur numérique sur plusieurs octets, chaîne de texte, tableau binaire,
zone de mémoire,. SzBlk permet d'indiquer la taille du bloc en octets.
La fonction place les datas dans le buffer de transmission et n'attend
pas sa transmission effective. |
| |
int ComGetBlockIn (void* buf, int* SzBlk);
Function ComGetBlockIn (var Buffer; Var SzBlk:Integer):Boolean;
Réceptionne un bloc de données |
| Utilisez ComGetBlockIn pour récupérer un bloc de données.
SzBlk permet d'indiquer la taille du bloc à récupérer en octets. La fonction
consulte le buffer d'entrée jusqu'à avoir récupéré les SzBlk demandés.
Si le buffer est vide ou incomplet, la fonction attend une réception durant
100ms x par le nombre d'octets demandé. La fonction renvoie True si au moins 1 octet a été récupéré et
SzBlck indique le nombre d'octets effectivement récupéré. |
| |
Vous trouverez dans le pack zip en téléchargement, le source Pascal de cette DLL (IO_Acces_Com.dpr) ainsi que des exemples d'integration pour Delphi (DemoIoCom.dpr)
et pour le C (Test_dll_IO_Acces_Com.c).
Toutes les fonctions de la DLL sont au format d'appel StdCall.
Remarquez que contrairement au C++, le langage C, ne supporte pas les booléens. Aussi, des types int sont utilisés à la place, ceux-ci pouvant
prendre la valeur 0 pour false et sinon, toutes autres valeurs pour True.
Si vous êtes amené à faire une intégration de cette DLL pour un autre langage, il plus important de respecter la taille des
paramètres passé dans les fonctions que leur type effectif et à l'exception du type pascal Byte
(c'est à dire char pour le C) qui fait 8 bits, tous les autres types utilisés sont sur 32 bits.
|
| |
| Les montages de base |
| |
| Les niveaux électriques des signaux RS232 plutôt exotiques
de +12V et -12V n'ont rien de problématique et peuvent facilement être
adapté à une logique TTL sans forcement faire appel à un MAX232, même-ci
celui-ci à l'avantage de respecter scrupuleusement les spécifications
de la norme RS232. |
| |
| Adaptateur RS232 <-> TTL (standard) |
| Pour relier un circuit de niveau TTL (comme par exemple
un microcontrôleur) aux lignes Tx et Rx d'un port RS232, 2 transistors
et 2 paires de résistances suffisent. Théoriquement, la norme RS232
stipule que les seuils de basculement logiques sont à -1,5V pour
le niveau haut et à +1,5V pour le niveau bas. Seulement, l'électronique
de la RS232 est bien obligée de respecter un état de repos lorsqu'elle
n'est pas connectée, sinon elle réceptionnerait en permanence des
données aléatoires et le montage profite de cette "faiblesse" pratique.
Ainsi, lorsque la ligne Tx coté TTL est au repos (c'est à dire au
niveau haut à +5V) le transistor PNP est bloqué et son collecteur
en haute impédance, la ligne Rx coté RS232 prend alors " naturellement
" son état de repos, permettant ainsi de se passer d'une tension
négative. Si cette polarisation négative vous semble indispensable
(afin de respecter la norme, ou simplement pour être sur d'une totale
compatibilité ou encore pour améliorer la portée qui sinon est vite
dégradé par la capacité de la ligne), vous pouvez toujours rajouter
une résistance de 4,7K entre le collecteur du PNP et l'un des signaux
en sortie Dtr ou Rts qui au repos présentent du -12V. A noter aussi
que ce montage est valable pour les signaux de commande Cd, Dsr,
Cts et Ri. Coté émission RS232, le transistor NPN est juste là pour
effectuer une adaptation de tension. Ainsi lorsque la Ligne Tx coté
RS232 est au repos (c'est à dire au niveau haut à - 12V) le transistor
NPN est bloqué permettant à la ligne Rx coté TTL d'être au +5V à
travers la résistance de 4,7K. |
|
|
| |
| Adaptateur RS232 <-> TTL (très économique) |
| Plus simple encore, ce montage ne fait appel qu'à
deux résistances et une Zener et reste parfaitement accepté par
plupart des ports RS232. Le seul problème est que les signaux sont
inversés (coté TTL, le 1 logique correspond au 0V et le 0 logique
au 5V), mais si vous programmez vous même vos microcontrôleurs il
vous suffit de prévoir cette inversion dans les routines de transmission
série et ainsi profiter de cette simplification de l'électronique
pour vos montage. |
|
|
| |
| Commande de relais |
| Un simple transistor NPN suffit pour commander un
relais. La résistance de sa bobine dépend de la tension d'alimentation
et ne doit pas être inférieure à 50 ohms pour 5V, 120 ohms pour
12V et 240 ohms pour 24V. |
|
|
|
|
| |
| Commande de transistor de puissance |
| Rien de compliquer non plus pour réaliser une commande
à transistor. La charge est intercalée entre l'alimentation et le
collecteur du transistor de puissance et une diode protège celui-ci
des courants inverses en cas de commande d'un moteur ou d'une bobine.
Le courant maxi peut atteindre 1,5 ampère en continu sans radiateur
et jusqu'à 4A si le BD679 est équipé d'un radiateur approprié. |
|
| |
|
| |
| Commande de triacs |
| Le MOC3041, est un opto-triac permettant de commander
un triac de puissance à partir d'une commande logique. Il offre
une isolation galvanique de 7500V entre le secteur et la partie
logique et dispose d'une détection de passage par 0 de la tension
secteur, limitant ainsi les parasites sur le secteur lors des commutations.
Quel que soit le modèle de triac choisi, celui-ci pourra commander
des charges jusqu'à 2A, un radiateur sera par contre nécessaire
pour l'exploiter au maximum de ces caractéristiques. |
|
|
| |
|
|
| |
|
|
| |