You are on page 1of 11
‘792020 PICTRAIN-VIl > Ptitrain P Electronique P PicTrain Page précédente Cette rubrique PicTrain est assez nouvelle (deux mois) pour que vous puissiez aisément nous rattraper et sauter en marche ! Aujourd’hui a notre menu . Deuxiéme APPLICATION : PICTRAIN1 2 Résumé des épisodes précédents Le projet Pictraint . Definitions . Le programme NNNN BLN 7. Deuxiéme application : Pictrain1 7.1, Résumé des épisodes précédents 7.1.1, Introduction Avertissement : cette série est Ia suite de I’introduction aux microP (pages 1.6), et ne reprend done pas tout ce qui a déja été dit. 11 faut done avoir lu (et si possible a peu pres compris #) la premiére partie PTI+ Dans cette premiére partie, j’al quelquefois utilisé des termes simplificateurs ou "imagés” pour certaines notions, dans le but de rendre la présentation plus vivante. A partir de maintenant, j ‘tliseral les termes consacrés par |’ usage, gui sont malneureusement souvent en anglais, mais cela ‘est nécessaire — sinon vous ne comprendrez plus rien si vous allez par exemple vous informer sur Internet. 7.1.2, Les éléments constitutifs d‘ un microP Lhorloge : Ie fonctionnement dun microP est “eadencé” par une horloge, qui dans notre cas est interne au microP et & la fréquence de 4 MHz. Un ‘tic’ d’horloge est appelé un “eycle d’horloge”. Le programme : suite d’ instructions exécutées par le mieroP et qui réalisent, si tout va bien, le but recherché dans le montage. Les entrées-sorties : le microP communique avec I’ extérieur par I’intermédiaire de “ports” (attention : nouveau terme pour designer les F/S, entrées-sorties). Les registres : ce sont les mémoires de travail du microP, divisés en “registres spéciaux”, qui contiennent les valeurs de paramétrage du fonctionnement, et les “registres généraux” qui sont & notre disposition comme zone de manceuvre. Le registre W : registre de travail, passage presque obligé de toute opération, car aucune instruction ne concerne deux registres généraux, mais toujours un registre général et W. Les interruptions : le cours normal d’un programme peut étre interrompu par des événements, qui déclenchent une séquence spéeifique dinstructions avant de revenir au programme normal, Les timers : registres spéciaux qui comptent les cycles d’horloge ; les timers provoquent une interruption lorsqu’ ils passent par zéro (débordement), 7.1.3. Les interruptions Un des concepts importants des microP est I‘ utilisation des interruptions. Le déroulement d’un programme est essentiellement “linéaire”, c'est-A-dire que les instructions sont exéeutées les unes aprés les autres dans I’ordre d’éeriture, et méme si nous disposons d “instructions nous permettant de se déplacer dans le programme (call, return, goto), tout ceci se passe sans en séquence et surtout sans interruption, Cette partie du programme est appelée dans nos rojets BouclePrincipaie, Les interruptions sont un dispositif permettant de déclencher un autre traitement en fonction “événements internes ou externes. Lorsque cet événement survient, la bouele principale est arrétée, le traitement spécifique est activé et se déroule ; la fin de ce traitement la boucle principale reprend son cours &l’endroit od elle s’était arrétée. existe un grand nombre d’ interruptions possibles dans un microP, nous n’en utiliserons que deux pour I’instant : les timers. Les timers sont des compteurs qui comptent les eycles d“horloge, de zéro jusqu’a 255 pour le Tinerd et de zéro jusqu’é 256 x 256, soit 65.536, pour le Tinert. Lorsque le timer arrive & ce ‘maximum, il repasse & 0 et déclenche | interruption correspondante. Le traitement réel des interruptions est relativement complexe, mais il est toujours le méme ; je “ai done “caché” dans notre fichier Paran_std_v1_@. inc ; dans nos programmes on ne retrouve done que les sous-programmes spécifiques & ces interruptions. hitps:iwn ptrain.comlelectraniquelmicropipaged7/indx. him mm ‘792020 PICTRAIN-VIl 7.1.4, Résumé des instructions rencontrées jusqu ‘ici: betsc reise, le Te Gab BEE ds I ei nists, STE ot oom ste] 7.1.5. Ordre et méthode Dans tout ce qui concerne le petit train, vous procédez avec ordre et méthode (du moins en principe...). Ici aussi, les mémes principes s’ appliquent. On a déja vu I importance des commentaires (aprés Jes point-virgule), on va maintenant définir quelques principes s"appliquant au “nommage”. (Out, je sais, ce terme est horrible, mais son utilisation est consacrée dans l'environnement des programmeurs, de l'anglais naming, et cela consiste a definir des régles pour la construction des noms, ou conventions de nommage — naming rules.) FAQ Ah, la, 1a, marre de I' anglais ! — JIDE : Oh, ca n'est rien... 30 pour cent de nos mots informatique viennent de Vanglals, et alars ? Pour les antateurs opera, cest 60 pour cent ditalien ; Pour les aficionados des corridas, c'est 95 pour cent d'espagnol... Quant aux fans de sushis, les auvres, n'en parlons méme pas. Non, croyez~mol, on n'a pas a se plaindre. Dans la programmation de nos microP, il n'y a que quelques éléments que nous pouvons nommer comme nous le souhaitons : Les étiquettes : endroit du programme oi Ion saute par un goto; Les sous-programmes : appelés par un call; Les registres : es registres généraux que nous utilisons dans nos programmes ; Les entrées/sorties, qui sont les bits du registre cPro. PTT+ Naming encore, mais la c'est les programmeurs de chez Microchip qui ont fait le travail pour nous, pour les registres spéciaux, tels GPIO ou TICON, et les bits de ces registres, tels GIE ou GPIF... Tous ces noms de baptéme sont connus de MPLAB Uniquement car ils figurent dans le fameux fichier p12F675.ine que nous lui indiquons a chaque début de programme (fichier qu‘on peut aller lire sans probleme, note pour les curieux, mais pas modifier). La structure des noms est relativement libre, & condition de ne pas oublier les régles suivantes = Im Pas de earactéres accentués : nous sommes dans un univers anglo-saxon, ils ne savent pas ce que c'est que aéidu : Pas de caractéres spéciaux : c'est trés joli d’avoir des % ou des & dans les noms, mais en général nos machines n’aiment pas beaucoup. Le seul utilisé (utilisable) est le — (underscore ou espace souligné, celui qui est sous le 8 de votre clavier), & ne pas confondre avec le — (tiret) qui, lui, est interdit. Attention, pas non plus d’apostrophes (’) en forme de virgule, ce que certains traitements de texte ajoutent gentiment sans qu'on leur demande. Dans nos programmes, pour s’y retrouver un peu plus facilement, nous allons done définir une régle de construction de ces noms, en identifiant chaque catégorie par un préfixe HE ET_pour une étiquette : ET_x0000000000000% I SP_ pour un sous-programime : SP _x300090210000002 EVAL pour une variable (registre) : VA_}000000000000000000 10 pour une entrée-sortie : 10_3000000000000000 vooq009000000Xx étant le nom que nous avons choisi, dans les régles définies ci~dessus. PTI+ Noms et adresses. — Il faut bien comprendre que tout cela n“est qu'une “facilté” proposée par le logiciel de programmation (nommé MPLAB). In fine, dans notre microP, il ne reste plus qu ‘une suite de bits, d ‘octets, definissant des adresses et des instructions . est MPLAB qui transforme les noms en adresses, par exemple le registre GPIO est & |'adresse 05. Done quand j’écris dans mon programme "bsf GPIO,2", qui veut dire "mettre 3 1 le bit 2 du registre GPIO”, MPLAB met donc simplement & 1 le bit 2 de'|’ adresse 05. ‘Traduit en langage machine dans notre microP, cette instruction devient 0101 040 0000201, qui signifie 0101 = code pour I"instruction ‘pst 010 = 2e bit (0000101 = de “adresse 05 . Heureusement que nous avons MPLAB pour faire ce travail & notre place ! hitps:iwn ptrain.comlelectraniquelmicropipaged7/indx. him am ‘792020 PICTRAIN-VIl A Notre projet de ce jour testé dans des conditions desthétigue douteuses ‘mais ea marche, bien siir ! 7.2 Le projet Pictrain1 7.2.1, Cahier des charges (On appelle “cahier des charges” la description des fonctions que doit remplir un montage.) On va faire trés simple ii, et & la limite cela ne sert & rien de plus que ce que font nos 555, il s’agit juste de faire une révision générale de tout ce que nous avons déja vu, et aussi de voir comment, pas, pas, on écrit un programme, =e ee 7 Le montage & comprendra done deux boutons ech Bovtonsoussst + GE5 Bin 2 poussoirs, religs a la masse et aux pattes 2 et 3 du larét__Boutonpoussor 2_GP4 Pin né3 mieroP, une led et une résistance en série de Led 0 Finn 7 470 ohims entre la patte 7 du microP et la masse, Sans oublier un petit condensateur de 10 uF et paralléle sur I’alimentation du microP, pattes + a8. Difcite de fair pls simple, et est le premier programme de nombreux livres sur les PIC... Que fait le montage ? Pas grand-chose ‘Au départ, la led est éteinte ; si on appuie sur le bouton 1 (pate 2, GP5), la led s’allume, et elle clignote. 7 Par appui sur le bouton 2 (patte 3, GP4), la led 82 s"éteint et on se retrouve au début ; allumé, éteint, Marche | Arét —allumé... +5V Cane fait done rien d'extraordinaire, mais c’est finorau git Sijoli! 7.2.2. Les préalables La démarche que je vous propose est de refaire pas & pas toutes les étapes d’éeriture du programme, en partant de zéro. Je ne fournis pas de fichier programme tout prét, vous allez vous= mémes rentrer tout ga dans MPLAB. Il faut done avoir installé MPLAB sur votre PC, et ouvrir en méme temps cette page et MPLAB. Si vous avez un grand écran, ce sera plus simple ! Test aussi préférable de créer tout de suite quelque part le répertoire qui va contenir notre projet, et d’y copier le fichier Paran_Std_12F inc que nous avons déja utilisé pour le klaxon, et un “squelette” de fichier de programme appelé Pictraini.asn 7.2.3. Création du projet ‘Au départ, si votre écran est assez grand, vous devriez avoir quelque chose comme ceci hitps:iwwn ptrain.comlelectraniquelmicropipaged7/indsx.hlm amt ‘792020 PICTRAIN-VIl gear abba neem ses 1. Intreduction avec MPLAB a gauche, et Ptitrain a droite (vous avez le droit de les changer de cété). 7.2.4. On va done d’abord eréer le projet MPLAB : m 1, menu Project, Project wizard... + suivant ; 2 step one : sélection du micro?, dans notre cas 12F675 + suivant ; 3. step two : choix des outils, en standard MPASM toolsuite + suivant ; 4. step three : eréation du projet = choix du répertoire + nom du projet (ici je suppose PICTRAIN1) + enregistrer ; 5. suivant ; IH 6. step four : inclusion de fichiers, ici, comme vous avez en principe déja copié les deux fichiers, vous pouvez les inclure dans le projet par double clie sur le nom, Step Four: ‘Add any existing fils to your prciect e0a 4 Ptirain (20 Klaran el Nr (2 PicTraint asi Renu (20 test. NUMERA Boose icprogl OEE zie etnias backup APEC pst ¥ Check the bos to copy the file to the em! eae hitps:iwwn ptrain.comilectronique/micropipaged7/index.him am ‘792020 Step Four ‘Adc any existing files to your preject PICTRAIN-Vil saa Cy Pitrain © @ Klason MINAS 2G Pictraint Paran_ Ste BB PicTosint 2 tes NUMERA BB ioprag.exe icprog OSE. ic & O tect_Klaronie backun APEC ost é il 7. suivant 8. derniére étape : summary: terminer 7.2.5, Voila, votre projet est eréé, méme si le programme est vide pour I'instant. Si vous allez dans le répertoire du projet, vous y trouverez dja trois fichiers supplémentaires Votre écran MPLAB se présente maintenant ‘comme ci-contre Pour travailler, il suffit d’ ouvrir (double-clic) le fichier Pictraint.asn On va maintenant écrire notre programme, et au far et & mesure on va revoir toutes ies notions des microprocesseurs que nous avons balayées durant la premiere partie. CAAA\PEirain\PicTraint\Param_! Cy CAAA\Ptitein\PicT rain \PicTrair Check the bex to copy the foto tho project drectary j Cae Fie tak Ven Prec Debupe [osu) seals, C Veran tite ea ol ba) © PleTraini.mep = SeurceFies Pica. asm = Header Fes Petam_Sid_v1_O.nc Object Fes library Fes Linker Scripts Other Fes PTI+ Majuscules et minuscules. — En standard, le logiciel MPLAB fait la distinction entre les majuscules et les minuscules, c'est “et_boucleprincipale Si cette contrainte vous est génante, il est possible de modifier ce contréle = ire que 'ET_BouclePrincipale” n'est pas la méme chose que il faut aller dans le menu Project, puis Build options... puis Project ; ensuite, dans |'onglet MPASM Assembler, il faut cocher la case Disable case Sensitivity. MPLAB ne tiendra plus compte des majuscules et minuscules. ‘Attention : cela n'est valable que pour un projet, il faudra le refaire pour chaque projet. Note de Jidé : le plus simple encore sera de ne pas tenter le diable ! N'essayez tout simplement pas. d’appeler une variable VitesseDuTrain et une autre, différente, vitesseduTrain et vous verrez comme tout ira bien... 7.3. Définitions 7.3.1. Commentaires et présentation ‘Tout programme doit comporter le maximum de commentaires, car sinon méme vous ne vous ¥ retrouverez plus. Un commentaire est tout ce qui se trouve aprés le ; (point-virgule) sur une ligne. On peut done avoir des commentaires n’importe of, lignes de commentaire “pures” ou ‘commentaires aprés une instruction, En général, on commence un programme en donnant quelques informations générales, auteur, date, version... comme par exemple ci-dessous : dire joli ! ‘J’en profite pour donner une autre recommandation : soyez.“esthétique”, cest- Faire joli dans les microP peut sembler curieux, mais regardez.ces deux exemples : ceci ¥ hitps:iwwn ptrain.comlslectraniquelmicropipaged7/indx.hlm sm ‘792020 PICTRAIN-VIl se | 61 62 movlw d°253" 63 movwf — SAV_THRIH 64 movwf TRIN 65 moviw 27 66 ‘SAV_THRIL etcela ¥ SON_T# movie 4259: val pds fort du timer movwfSAV_TMRIE sauvegarde movef TMRIE chargement timer poids fort moviv 427: val.pds faible du timer movi SAV_TMRIL: sauvegarde Tis font tous les deux strictement la méme chose, mais je préfére nettement le premier. Si vous écriver.dans le style du deuxiéme exemple, je vous garantis que vous étes complétement perdu aprés 15 lignes. Voila ce que j“appelle “faire joli” ! 7.3.2. Définitions générales Au début du programme, on_ trouve un certain nombre d’indications sur la maniére de. programmer et d’ utiliser le microP ¥. 7 PICAZFGTS ® epl2F675. ines ° 508 16 "CPD OFF & _BOOEN_OFF & _CP_OFF & NOTLOFF & pWRTE_OW & NCLRE_OFF &_INTRC_OSC_NOCLKOUT n Je ne donne pas de détail, car ils n’ont pas d’importance au niveau Pictrain of nous nous trouvons, et ce sont toujours les mémes lignes. Attention cependant de ne pas se tromper dans la ligne __CONFIG, elle peut entrainer la destruction du microP. PTI+ Horloge. — Vous saver déja que le rythme dans notre microP est donné par une horloge interne, qui fonetionne 8 4 MHz, et qu il faut en général 4 cycles d“horloge pour une instruction. Cette maniére d utiliser les micraP est la plus simple, et Sera toujours utilise dans nos montages. 1 faut cependant savoir que ce microP peut fonctionner jusqu’8 20 MHz (5 fois plus vite), avec un coscillateur (8 quartz) externe. Dans I’ autre sens, on peut aussi le faire fonctionner plus lentement avec une, horloge externe, jusqu"a 4 Hz par exemple, cest-a-dire une instruction par seconde. Cela ne présente en général ‘aucun intérét, mais techniquement c’est possible. Tiny a que deux cas ob cela peut étre utile . + sion fait fonctionner le microP moins vite, il consomme moins de courant, utile pour les systémes sur ples ; . . “a fréquence de 3.276.800 hertz est utilisée pour des systémes devant donner une heure exacte (*horioge” au sens traditionnel), 7.3.3. Constantes et mnémoniques ‘Au début du programme, on peut aussi définir des constantes et des mnémoniques, qui seront utilisés plus loin dans le programme. Pourquoi faire ? uniquement pour des raisons de lisibilité. Par exemple, lorsque nous utilisons ans notre programme Klaxon I’entrée-sortie 5 pour Ie bouton, nous éerivons 6PI0,5. On peut aussi définir, au début du programme, que notre entrée s’ appelle 10 Bouton Declenchenent, pa 2 1 nen t GPIO,5 Bou ton_DecLencl Dans toute la suite du programme, nous utiliserons 10_souton_Declenchenent @ la place de 6°10,5, par exemple : 24 btfsc GPIO,5 25°; devient : 26 btfsc 10_Bouton_Declenchenent _j Attente déclenchenest Dans cet exemple simpiste, intérét semble minime, mais lorsque vous aver toutes les entrées sorties uses, ct que pat ailleurs vous utiliserez des bits de registres généraux dans vos instructions, tapes porn confomcretnsopTIndecn on ‘792020 PICTRAIN-VIl De méme, on peut définir des constantes par la directive Fu (Equivalence), c'est-a-dire que I’on va nommer des valeurs. Par exemple dans notre premier programme, klaxon, pour les valeurs qui nous permettent d’ obtenir les bonnes fréquences, on pourrait définir : © CPoidsFort ii EU d'255" 9 CPoidsFaible tii EQU 4°27 10 CPoidsFort_Taa —E0U d°250" TLC PoidsFaible Tea £QU d'201' Et lorsque I’on charge un registre, on aura : B movlw C_PoidsFort_Taa 16 movwf _ SAV_THRIA au lieu de 20 movlw d 25 21 movwf — SAV_THRIM Ce ne parait pas grand-chose mais, lorsque les constantes sont nombreuses, cela facilite aussi la lecture, et permet de regrouper toutes les constantes au méme endroit, plutdt que de les disséminer dans le programme,et de faciliter la mise au point (et plus tard la maintenance) du programme. 4J’en profite pour introduire une nouvelle norme (voir au début “Ordre et méthode”), les noms de constantes seront de la forme C_}00000000000000% sideFine et €QU sont des directives & destination du logiciel MPLAB, qui dans le fond ne fait que remplacer dans Te programme le nom ainsi défini par la valeur donnée au début. Ce ne sont done pas des instructions, mais des facilités d’écriture. PTI+ _ Instructions et directive “directive” Les instructions sont les "vrales” instructions, qui sont traduites en binaire et écrites dans le ricroP pour étre exécutées par celui-c Les directives ne sont que des “ordres” donnés au logiciel MPLAB : soit pour indiquer au logiciel ce que nous souhaitons faire ; exemple : la directive LIST p-PIC12F675 qui indique au logiciel que nous utlisons le microP de type 12F675 ; ‘« soit pour nous faciliter la vie, comme define ou EQU — Il faut bien faire la distinction entre “instructions” et Revenons maintenant & notre programme. Nous avons défini au début trois entrées-sorties, les bouton sur les pins 4 et 5 et la led sur la pin 0, ce qui se traduit dans le programme par G?10,0 G°10,4 et GTO, 5, En appliquant les prineipes ci-dessus, nous aurons done : 4 15 16 ay 1s 10_Bouton_Marche 10_Bouton_Arret 0_LED Ainsi chaque entrée-sortie est maintenant identifige par un nom plus explicite. 7.3.4. Variables Ce programme trés simple ne comporte pas de variable, cest-A-dire d'utilisation d'un registre ‘général. Copendant, voila, ci-dessous V, les principes de la déclaration : HH CBLOCK @x020 : cette directive signale le début de la définition des variables I vacPT_256 : 1: définition d’une variable nommée vA_CPT_256 NOC : directive de fin de la définit va_cPr_2s6 : i 26 En application des conventions définies au début (par nous), le nom d’une variable commence toujours par VA_, 7.3.5. Fin des définitions ‘Ala fin des définitions, nous trouvons I inclusion du fichier standard 19 Paran Std_vi_o hitps:iwwn ptrain.comlelectraniquelmicropipaged7/indsx.hlm mm ‘792020 PICTRAIN-VIl include est également une directive, qui inclut a cet endroit Ie contenu du fichier Paran_Std_v1_@.inc. Le contenu de ce fichier a été écrit spécialement pour nos applications Pictrain, et ne devrait intéresser que les puristes. PTI+ _Param_Std_v1_0.inc ? Sans rentrer trop dans les détails, ce fichier contient : | ~ La aéfinition de variables standards. — La definition de BANKG et BANK1. — Le démarrage du programme. — Le traitement des interruptions. — L’initalisation de |"oscillateur. — L effacement de la memoire, — Lintialisation des registres spécifiques est suffisant pour les projets simples que nous allons développer pour | “instant. 7.3.6, Rappel sur les sous-programmes Le sous-programme est un élément clé de la structure des programmes, mais son principe en est simple : il s’agit dune suite ‘instructions que I’on veut exécuter plusieurs fois, & partir d’endroits, différents de notre programme. Un sous-programme est défini par son nom, $?_xoxx (commengant par 5° selon nos conventions), et se termine par return. Il est appelé par instruction call $P_s000x. Dans notre programme Pictraini, nous n’avons pas de sous-programme particulier, uniquement Jes deux sous-programmes standards appelés chaque interruption de Timer@ et Tiner1. Nous n’aurons done pas instructions coll, qui se trouvent dans le fichier de paramétres, uniquement les deux étiquettes SP inttine eet 5p inttinerd. 7.4. Le programme 7.4.1, Structure du programme Si vous avez eréé le programme au fur et A mesure des étapes ci-dessus, et si vous avez inclu les lignes des deux sous-programmes inttiner@ et inttiner1, vous devez avoir ce résultat : Now: ant : Version: 1.0 Dave: 18/04/2006 - hs Hineiude ptitrain P Electronique P PicTrain P Page suivante Putra, I"e-magazine cu train éclectique, — Directeur de la publication : ‘Redacteur en chef: Jean-Denis Rondinet hitps:iwn ptrain.comlelectraniquelmicropipaged7/indx. him wm

You might also like