Ad Code

Techniques de Programmation des entrées/sorties parallèles : ST6225

LE ST6225: TECHNIQUES DE PROGRAMMATION DES ENTREES/SORTIES PARALLELES APPLICATION: COMMANDE PROPORTIONNELLE DE 2 MOTEURS PAS A PAS
L'article est composé de deux parties: 
* une approche technique des E/S parallèles du ST6225 (configuration, interruptions). 
* une réalisation mettant en évidence ce qui y a été détaillé. 
Il s'agit là d'une commande proportionnelle de deux moteurs pas à pas, utilisée pour commander vos réalisations mécaniques (modélisme, maquettes, prototypes...) ou simplement pour tester des moteurs usagés.
Etude technique des E/S parallèles
Les entrées/sorties parallèles
Avant d'aborder de façon approfondie l'étude et la mise en oeuvre des entrées/sorties du ST6225 nous allons faire brièvement quelques rappels fondamentaux.
Les sorties parallèles correspondent à un ensemble de sorties logiques accessibles physiquement sur une ou plusieurs broches du circuit intégré. Ces sorties logiques sont programmables à un niveau logique 1 ou 0 à l'aide d'instructions plus ou moins spécialisées selon le micro-contrôleur utilisé. Le fait que ces sorties soient rendues accessibles matériellement permet d'envoyer vers des dispositifs extérieurs des informations et/ou commandes, comme cela est illustré par le schéma ci-dessous.
en voit immédiatement l'intérêt: il devient possible de commander l'allumage d'une lampe, de mettre en fonctionnement une pompe... Bref, de commander une partie opérative quelconque (à condition qu'il y ait entre les deux un interface de puissance adapté à l'utilisation).
Les entrées parallèles correspondent à un ensemble d'entrées logiques accessibles physiquement sur une ou plusieurs broches du circuit intégré. Les états logiques de ces entrées parallèles peuvent être "lus" (niveau logique 0 ou 1 de chacune des entrées) par le micro-contrôleur, ce qui permet de conditionner l'exécution de tout ou partie du programme en fonction d'informations "extérieures". Le fait que ces entrées soient rendues accessibles matériellement permet de prendre en compte des informations et/ou commandes en provenance de dispositifs extérieurs comme cela est illustré par le schéma suivant.
L'intérêt est qu'il devient possible de détecter: l'état de charge d'une batterie, le dépassement d'une température limite, une fuite d'eau... Bref, de prendre en compte des informations (ou commandes) provenant de l'environnement extérieur (capteur de température, détecteur d'humidité, contact de butée...), à condition qu'il y ait entre les deux un interface de conditionnement et de détection adapté à l'utilisation.

Les entrées et les sorties parallèles sont regroupées en ports . Un port est généralement un ensemble de 8 entrées/sorties (mais il peut en comporter moins selon les micro-contrôleurs). A chaque port parallèle correspond un nombre de broches du circuit intégré identique au nombre d'entrées/sorties. C'est à ces broches que peuvent être connectés les interfaces de puissance (pour la commande) et les interfaces de détection et de conditionnement (pour le captage). Ainsi un port de 8 entrées/sorties parallèles est donc un port de 8 bits et possède 8 broches du circuit intégré qui lui sont physiquement dédiées.
Généralement une broche du circuit intégré correspondant à une entrée/sortie peut servir d'entrée ou de sortie . Ces deux fonctions ne peuvent être que rarement utilisées simultanément (mais cela reste possible dans certains cas). Par exemple, on ne peut espérer avec une même broche détecter une fin de course d'un organe mécanique (fonction d'entrée associée à un capteur de butée) et commander l'inversion du déplacement de celui-ci (fonction de sortie associée à un étage de puissance). Afin de remédier au problème, chaque port est généralement doté d'un registre de direction permettant de configurer physiquement chaque broche d'un même port en entrée ou en sortie.
Mode de fonctionnement des entrées/sorties parallèles du ST6225
Le micro-contrôleur ST6225 dispose de 20 lignes d'entrées/sorties parallèles réparties en 3 ports qui sont :
* Le port A de 8 bits (PA0 à PA7)
* Le port B de 8 bits (PB0 à PB7)
* Le port C de 4 bits (PC4 à PC7)
Pour chacune de ces lignes correspond une broche physique du ST6225 comme on le voit ci-contre.
ce qui concerne le port C, il s'agit d'un port de 8
incomplet dont l'utilisateur n'a accès qu'aux 4
de poids le plus fort. Chaque bit de chacun des ports peut être configuré en entrée ou en sortie .
Un bit défini en sortie peut être configuré selon deux modes de fonctionnement différents:

* Sortie à drain ouvert , capable d'absorber un courant vers la masse de 20mA pour le demi port PA0 à PA3 et de 5mA pour l'autre demi port PA4 à PA7 ainsi que les ports B et C. Ceci permet de commander directement en courant des LED, des segments d'afficheurs, des étages à transistors... et permet également d'adapter les niveaux de tensions logiques entre deux technologies différentes (ex: commander un circuit CMOS alimenté en 3,3V...).
* Sortie symétrique (étage push-pull) , plus classique, autorisant également la commande de LED mais avec risque de dégradation des niveaux logiques. Cette configuration est plus adaptée pour la commande directe de circuits logiques de technologies compatibles (ex : commande d'un compteur, d'un multiplexeur...).
* Un bit défini en entrée peut être configuré selon quatre modes de fonctionnement différents:
Entrée avec résistance de rappel au +VDD sans interruption , autorisant la détection d'un niveau logique dont l'état 0 peut être un forçage à la masse (0V). Ce type de configuration est privilégié lorsqu'on souhaite détecter la fermeture d'un contact (ou transistor à collecteur ouvert), par exemple configuration par des mini-interrupteurs du mode de fonctionnement d'un appareil, contact d'une alarme... et permet également d'adapter les niveaux de tensions logiques entre deux technologies différentes.
Entrée sans résistance de rappel et sans interruption , autorisant la détection d'un niveau logique en sortie d'un circuit logique extérieur au boîtier du ST6225 (par exemple la sortie Q d'un compteur, la sortie d'un multiplexeur logique...).
* Entrée avec résistance de rappel au +VDD avec interruption . Les caractéristiques électriques sont les mêmes que celles énoncées dans le premier cas (forçage possible à la masse) mais à cela est ajoutée une caractéristique logicielle: au front descendant du signal appliqué sur l'entrée logique, le déroulement du programme principal est momentanément arrêté et un saut à une routine d'interruption est effectué. On peut donc associer une action logicielle à une action matérielle (électrique).
* Et enfin
- pour les broches PA0 à PA3: entrée sans résistance de rappel ni interruption ;
- pour les autres broches: entrée analogique , autorisant la conversion analogique/numérique du signal appliqué à l'entrée.
L'état initial de tous les ports parallèles est: Entrée avec résistance de rappel au +VDD sans interruption.
Configuration du mode de fonctionnement des entrées/sorties parallèles
Les registres de configuration sont adressables en mode direct dans une zone d'espace adressable comprise entre 00h et FFh:
Registres de direction DDRx (Data Direction Register)
Pour chaque port X (ici X = A, B, C), le registre de direction permet de définir chacun de ses bits en entrée ou en sortie selon l'usage:
* 0 = bit défini en Entrée.
* 1 = bit défini en Sortie.
Registres d'option ORx (Option Register)
- Lorsqu'un bit n°k du port X (ici X = A, B, C) est défini en entrée, les bits du même indice des registres d'option ORx et de données DRx permettent de configurer le mode de fonctionnement de cette entrée. Les différents modes sont rassemblés ci-dessous:
* Lorsqu'un bit n°k du port X (ici X = A, B, C) est défini en sortie, le bit du même indice du registre ORx définit le mode de fonctionnement de la sortie. Ainsi si la broche k (donc le bit k) du port X est définie en sortie, les différents modes de fonctionnement sont obtenus selon les combinaisons suivantes:
Registres de données DRx (Data Register)
- Lorsqu'un bit du port X (ici X = A, B, C) est défini en entrée, on se retrouve dans le cas de figure énoncé précédemment, à savoir: la combinaison des bits de même indice des registres DRx et ORx permet de définir le mode de fonctionnement de chaque broche définie en entrée.
- Lorsqu'un bit du port X (ici X = A, B, C) est défini en sortie: l'état logique du bit de même indice du registre DRx est recopié sur la broche du port définie comme une sortie logique.
Tout ce qui a été détaillé précédemment est résumé dans le tableau ci-dessous:
Effets d'une action d'écriture ou de lecture d'un registre de donnée DRx
Lorsqu'un port possède des bits configurés en entrée et d'autres en sortie, la lecture du registre DR relatif au même port fournit "l'image" de l'état logique de chacun d'eux. C'est à dire que le registre DR renseigne sur l'état logique imposé à chaque sortie et sur celui présent à chaque entrée. Cependant le registre DR sert également à configurer le mode de fonctionnement des entrées. On voit donc là un aspect important du micro-contrôleur ST6225 concernant les ports parallèles: les actions d'écriture et de lecture du registre DR n'ont pas le même effet , comme cela est indiqué ci-dessous:
Dans un tel cas de figure on ne peut modifier l'état d'une sortie par une suite d'actions logicielles du type lecture - modification - écriture, comme par exemple:
LD A,DRA ; lecture
ANDI A,0B3h ; modification
LD DRA,A ; écriture
En effet, l'écriture du résultat de l'opération ANDI A,0B3h dans le registre DRA peut modifier le mode de fonctionnement des bits déclarés en entrée. Pour cette raison, il faut utiliser avec précaution les instructions RES et SET (manipulation de bits) puisqu'elles sont basées sur le principe lecture - modification - écriture. La solution est simple, dans le cas où un port peut regrouper une combinaison mixte d'entrées et de sorties: il faut travailler sur des registres "images" des registres DR (variables en RAM utilisateur). La lecture des états des entrées sera effectuée directement par la lecture du registre DR. La modification de l'état d'une ou plusieurs sorties sera effectuée en deux étapes:
* Modification des bits concernés dans le registre "image" du registre DR.
* Recopie du contenu du registre "image" dans le registre DR.
Ceci est illustré par l'exemple ci-dessous dans lequel le port A a les bits 0 à 3 en sortie et les bits 4 à 7 en entrée:
Les interruptions générées par les entrées parallèles
Le ST6225 offre la possibilité de détecter une interruption matérielle générée par une entrée parallèle. Ainsi, à un ou plusieurs bits d'un port parallèle configuré(s) en entrée avec interruption, il peut correspondre une routine logicielle (exécutée lorsque la condition d'interruption requise est présente). Cette partie du programme est généralement destinée à traiter une ou plusieurs informations de façon spécifique et asynchrone telles qu'un comptage d'impulsions, une détection de fin de course d'un mécanisme provenant d'un capteur de butée...
Autorisation/inhibition des interruptions
Les interruptions relatives aux ports parallèles sont de type "masquable", l'action logicielle associée à celles-ci peut être autorisée ou non. Les bits autorisant ou non la prise en compte de ces interruptions sont contenus dans un registre spécialisé, le registre IOR (Interrupt Option Register), dont les différentes configurations sont présentées ci-dessous:
Programmation d'une routine d'interruption relative aux ports parallèles
La programmation d'une routine d'interruption liée à l'apparition d'un front descendant sur une entrée d'un port parallèle nécessite de savoir, du point de vue du micro-contrôleur, où se trouve précisément cette routine. Cette précision est fournie par le programmeur, lors de l'écriture du programme, à une adresse particulière appelée vecteur d'interruption . Le mécanisme est simple: Lorsque survient l'interruption, le programme est "détourné" de son chemin principal et le compteur ordinal (le PC) est chargé avec l'adresse du vecteur correspondant. Le programme poursuit alors son "chemin" à partir de cette adresse et si le programmeur n'y a rien écrit de particulier, le micro-contrôleur peut tout bonnement "planter" ! A l'adresse correspondant au vecteur, doit donc absolument être spécifié où se trouve la routine de traitement. Ceci est effectué par une instruction de saut de type:
JP Adresse_routine_interruption .
Les vecteurs d'interruption relatifs aux ports parallèles sont les suivants:
* Port A (vecteur n°1): Adresses FF6h , FF7h
* Port B et C (vecteur n°2): Adresses FF4h , FF5h.
Comme tout programme d'interruption, celui relatif aux ports parallèles doit se terminer obligatoirement par l'instruction RETI si l'on souhaite reprendre le cours normal des choses...
Exemple de routine d'interruption relative aux ports parallèles Dans l'exemple ci-dessous on suppose qu'une ou plusieurs des broches du port A ont été programmées en mode de fonctionnement avec interruption. La routine d'interruption est arbitrairement libellée GEST_INT.

Enregistrer un commentaire

0 Commentaires

Close Menu