Un Tutoriel LDmicro

(translated from the English original; thanks to Marcel Vaufleury)

Dans ce tutoriel, je vais vous montrer comment écrire un programme simple. Je considère que vous avez déjà fait des programmes en langage à contacts avant, et que vous avez les connaissances de base pour l’utilisation des microcontroleurs, mais que vous n’avez jamais utilisé LDmicro. Si vous n’avez pas assez de connaissances dans l’utilisation des langages contact (ladder) ou des API (automates programmables industriels), le tutoriel plcs.net peut vous aider.

Notre système comporte un bouton poussoir SW1 et une diode électroluminescente LED1. Au démarrage la LED reste éteinte, si vous pressez SW1 une fois la LED s’allume et reste allumée, une deuxième pression sur SW1 fait clignoter la LED, un nouvel appui sur SW1 éteint de nouveau la LED. Les pressions suivantes font recommencer le cycle.

Sélection du Microcontrolleur et Schéma

Nous allons utiliser un PIC16F876, qui est très facile à trouver chez différents distributeurs ou en vente en ligne (voir FARNELL, RADIOSPARES où autres). Il existe en différents boitiers, pour des raisons pratiques, j’ai choisi le DIP.

Voici le shéma:

Le microcontroleur IC1 est PIC16F876-20I/SP. L’oscillateur est basé sur un résonateur 3 fils 20 MHz U1.

La seule chose qui peut entrainer une confusion est que le bouton poussoir est connecté au Vdd. Une résistance connectée à ce poussoir permet le rappel de la broche au niveau bas. Pour les circuits TTL ceci peut paraitre normal mais pour les circuits CMOS modernes, cela ne parait pas logique. Je trouve que le câblage actif à l’état HAUT (1) est moins confus que le traditionnel actif à l’état BAS (0).

Aussi, j’ai choisi d’utiliser un résonateur céramique avec condensateurs intégrés, U1, à la place d’un quartz et deux condensateurs d’environ 20 pF. Un quartz est un peu plus précis, mais il coute un peu plus cher et nécessite plus de composants.

Vous pouvez câbler votre circuits de différentes manières. Je l’ai câblée sur une plaquette à contacts sans soudure. Elle ressemble à ceci quand elle est terminée :

(La valeur de la résistance utilisée sur la photo n’est pas identique à celle du schéma mais ceci n’est nullement critique.)

Diagramme à contacts (ladder) pour le programme

D’abord je vais faire un oscillateur pour faire clignoter la LED. Ceci est une façon standard de le faire en langage à contacts :

         ||      Rosc            Tosc_on         Tosc_off           Rosc       ||
       1 ||-------] [--------[TON 250.0 ms]---[TOF 250.0 ms]---------(/)-------||

La fréquence de clignotement est 1/((250+250) ms), ou 2 Hz, ou deux fois par seconde. Le rapport de cycle est de 50%—250 ms allumé, et 250 ms éteint. Ce circuit peut faire ce que l’on veut d’un oscillateur, modifier la période ou le rapport cyclique, il est bon de s’en souvenir.

Il faut aussi noter que le choix d’un relais interne (‘Rfoo’) à été fait, à l’inverse de ce que pourrait être un relais connecté à une broche d’Entrée / Sortie (‘Yfoo’ or ‘Xfoo’). Ceci a été fait parce qu’il n’y a pas de raison particulière pour sortir le signal sur une broche d’E/S. LDmicro affecte automatiquement la mémoire pour les relais internes.

Le programme peut avoir trois états : à l’arrêt, maintenu allumé et clignotant. Le programme change d’état à chaque front montant du signal en provenance du bouton poussoir. Ceci est une bonne application pour un compteur cyclique. Ce qui donne “ Etat 0 > LED éteinte” , “ Etat 1> LED maintenue allumée ” , “ Etat 2 > LED clignotante ” . Le compteur compte 0 , 1 ,2 , 0 , 1 , 2 , 0, ... C’est donc la valeur du compteur, donnée par le comptage des impulsions du poussoir qui fait allumer la LED suivant ce que l’on désire :

         ||     Xbutton                                            Cstate      ||
       2 ||-------] [---------------------------------------------{CTC 0:2}----||

Maintenant le seul élément utilisé est l’état du compteur pour fixer l’état de la LED, ce qui donne ceci :

         ||   [Cstate ==]                                           Yled       ||
       3 ||---[ 1       ]-------------------+------------------------( )-------||
         ||                                 |                                  ||
         ||   [Cstate ==]         Rosc      |                                  ||
         ||---[ 2       ]----------] [------+                                  ||

Il ne doit pas être difficile de comprendre ce que cela peut donner. A l’étape 1, ‘Cstate == 1’ l’instruction alimente ‘Yled’, comme désiré. A l’étape 2, ‘Cstate == 2’ l’instruction alimente ‘Yled’, mais uniquement quand ‘Rosc’ est aussi vrai . Mais comme ‘Rosc’ est un oscillateur, cela fait clignoter la LED, comme désiré. Finalement, à l’étape 0, aucune des instructions d’égalité n’est vraie, il n’y a donc aucune raison pour que ‘Yled’ soit allumée.

Entrer le diagramme à contacts

Maintenant que vous avez votre circuit, vous pouvez dessiner dans LDmicro. Quand vous démarrez LDmicro, vous pouvez voir une seule ligne:

Nous voulons rentrer la première ligne comme sur le listing ci-dessus. Nous allons commencer par la bobine (de relais), choisir l’instruction à Insérer Bobine. Ceci crée une bobine nommée ‘Ynew.’ C’est ce que nous voulons excepté le nom qu’il faut changer et devrait être inversé (NC au repos). Faire un double clic sur la bobine, ce qui permet d’ouvrir la boite de dialogue suivante :

Maintenant, il est possible d’insérer le reste de la ligne de ligne de la même façon . Cliquer sur le bord gauche de la bobine, ce qui met le curseur vertical et à gauche de la bobine, insérer instruction -> Insert TON (temporisation travail). Maintenant faire un double clic comme avant pour le renommer et fixer la temporisation. Ensuite ajouter une tempo TOF (temporisation repos) de la même façon.

Maintenant nous allons entrer la deuxième ligne choisir à Edition à Insérer ligne Après et cliquer sur la deuxième ligne pour y positionner le curseur comme:

La seconde ligne est simple: juste mettre dans le bon ordre les deux instructions, en plaçant le curseur à l’emplacement où vous voulez insérer l’instruction, choisir Instruction à Insérer …. Souvenez vous que vous devez donner un nom au contact (‘Xbutton’) , et fixez aussi le nom et la limite maxi du compteur. Maintenant faire Edition -> Insérer ligne après une nouvelle fois. Votre programme doit ressembler à ceci :

La troisième ligne est plus délicate, parce qu’il y a une branche parallèle . Il est préférable de suivre l’ordre suivant pour entrer les instructions. En premier, insérer la bobine et la renommer :

Maintenant insérer la première instruction d’égalité à gauche de la bobine, et comme usuellement, mettre le nom correct ainsi que la valeur. Après cela, ajouter la branche parallèle, vous pouvez faire cela en cliquant sur la partie basse de l’instruction d’égalité que vous venez d’insérer, le curseur devient horizontal et au dessous de l’instruction d’égalité :

Maintenant choisir Instruction -> Insérer EQU (Compare si égal). Comme votre curseur est sur la première instruction d’égalité, la nouvelle instruction va être insérée au dessous de cette instruction, en parallèle avec elle. Renommez comme usuellement. Pour finir la ligne, vous devez insérer le contact ‘Rosc’ à droite de la deuxième instruction d’égalité . Pour faire cela, cliquer sur le bord droit de la seconde instruction d’égalité :

A ce point vous pouvez choisir Instruction -> Insérer Contact ; le contact est inséré en série avec la deuxième instruction d’égalité, renommez et c’est fini :

Simulation du programme

Maintenant nous sommes prêts pour simuler le programme. Choisir Simulation -> Mode Simulation. L’affichage change; le diagramme à contact apparait maintenant en grisé, mais rien ne change en fonction du temps. Ceci parce que l’API (automate programmable) n’est pas en cycle. Pour démarrer le cycle, choisir Simulation -> Démarrer Simulation en temps réel. Maintenant vous voyez quelque chose qui bouge : on observe que l’oscillateur fonctionne , mais la LED (‘Yled’) reste éteinte, ce qui est normal, parce qu’il n’y a pas eu de pression sur le bouton poussoir. Pour simuler l’appui sur le bouton poussoir faire un double clic sur le texte ‘Xbutton’ dans la liste au bas de l’écran. Maintenant vous avez simulé le passage à 1 (état haut) du poussoir.

Vous pouvez voir que votre programme fonctionne: le compteur ‘Cstate’ est maintenant égal à 1, qui correspond à l’état ‘Permanent allumé’, c’est effectivement ce que l’on voulait. la LED est à l’état HAUT; vous pouvez voir que sa valeur est à 1 dans la liste, et que la bobine ‘Yled’ apparait en rouge sur le diagramme. Faire un double clic sur ‘Xbutton’ de la liste pour simuler un relâchement de ce poussoir, ensuite refaites un nouveau double clic toujours sur le ce même poussoir pour simuler une autre pression, la LED ‘Yled’ commence à clignoter, comme dessiné. Vous pouvez ensuite continuer la simulation pour éteindre maintenant la LED.

Compiler dans un fichier IHEX

Comme maintenant vous savez que votre programme fonctionne. A ce point vous être prêt pour générer le code et le tester dans un microcontroleur. D’abord sortir du mode simulation par Simulation -> Mode Simulation Mode, ou en pressant Echap.

Vous devez choisir un microcontroleur. Vous aviez déjà décidé de prendre un PIC16F876, donc choisir Paramètres -> Microcontrolleur -> Microchip PIC16F876 28-PDIP or 28-SOIC. Vous devez aussi choisir quelle fréquence de quartz et quel temps de cycle LDmicro utilisera : choisir Paramètres -> Paramètres MCU , spécifier 20 MHz pour fréquence d’horloge. Laisser le temps de cycle à 10 ms; c’est une bonne valeur courante.

Maintenant vous pouvez affecter les broches d’Entrées et de Sorties. Double clic sur ‘Xbutton’ dans la liste au bas de l’écran, et choisir broche 14 du PIC, qui correspond au port RC.3. (Il n’y pas en général pas de raison de se soucier du port utilisé ; voir seulement le numéro de broche, adapter en fonction de la carte si elle est déjà existante.)

Cliquer ‘OK,’ et répéter le processus pour ‘Yled’, que vous pouvez voir sur le schéma et utiliser le broche 15. Les autres éléments de la liste sont des variables internes et des bits en mémoire, il n’y à pas besoin de leur affecter des broches. LDmicro va leur allouer de la mémoire en cours de compilation.

Maintenant vous êtes prêt pour compiler. Choisir dans le menu Compilation -> Compiler, et spécifier où vous voulez enregistrer le fichier IHEX . Maintenant vous pouvez utiliser le matériel dont vous disposez pour mettre le programme créé par le compilateur dans le microcontroleur et faire le contrôle final en situation réelle.

Pour compléter mon tutoriel. Bien sur, il est possible d’écrire des programmes bien plus complexes que celui-ci. Un programme aussi simple utilise une très faible partie de la mémoire du processeur, et il y a de la place pour beaucoup de lignes de programme. LDmicro offre aussi des instructions spécialisées, pour faire des calculs arithmétiques, Entrées analogiques (A/D), PWM, et d’écriture des textes sur des afficheurs LCD (à commande série). Consulter le manuel pour les détails.

Je ne vois pas pourquoi ce serait nécessaire, mais vous pouvez télécharger le tutoriel du programme.

Décembre 2005, Cambridge MA