You are on page 1of 6
‘792020 PICTRAINV Cette rubrique PieTrain est toute nouvelle, elle a débuté il y trois semaines ! Vous pouvez aisément nous rattraper et sauter en marche ! Aujourd”hui a notre menu : Le programme Debut du programme Boucle principale 4. Notre premiére application : le Youbitonmatic Un des aspects ennuyeux de la programmation est qu'il faut retenir tout un tas de signes sans grande signification, car toujours des abréviations ou acronymes venus de I’ anglais. Désolé, li je n’y peux rien, m: il faut par exemple se souvenir que GPT0 est Je surnom du registre qui contient les valeurs des bits d’entrée/sortie. Savoir que ca veut dire “General Purpose Input Output register” n “est pas obligatoire. Dans I’applications que nous allons étudier maintenant, jintroduirai au fur et A mesure les instructions dont nous avons besoin. Le YouBiTonMatic, on va I’ examiner globalement, puis ligne par ligne de programme. FAQ Je n'ai rien compris & la présente page, je suls largué, je suis foutu, je pense que suis un c#n.... — JIDE : Non, cest faux. Il y a dans cette page, et dans la suivante un concentré de connaissances totalement nouvelles qui doit étre longuement digéré, et en plusieurs fois. Lire, re-live, re-reclire... Et ai eu la méme réaction que vous quand je Iai lue pour la premiére fois ! 4.1. Conception générale Je reprends le méme montage que celui du Meccano électronique, c’est-i-dire un Klaxon SNCF. & deux tons de 370 Hz (grave, ta) et 660 Hz (aigu, t). Je combine ces sons en une séquence ti-ti-ti-ta-ta-t-t (tii trés long, taa long, ti long) [N.D.L.R. Pour écouter le son réel de ce klaxon, rendez-vous sur Ia page Youbitonmatic, ot nous | “avions déja construit, mais cette fois-ld avec des composants électroniques “discrets’, cest-a-dire séparés, non intégrés..] 4.2. électronique Le schéma est des plus simple V, il ne comprend plus qu’un bouton poussoir pour déclencher le son, un haut-parleur (8 ohms) avec une résistance de 150 ©, un condensateur de 1 uF, et un condensateur de découplage de 10 ou 100 nF. (Ce dernier sera présent dans tous nos montages.) cL-00nF R1-180.0 c2, wer Le branchement du microP est donné ci-dessous : hitps:wwn ptrain.comlslectraniquelmicropipageddindsx. him ‘792020 PICTRAINV + 5V—+>| GPS/TICKVOSC1/CLKIN + GPO/ANO/CIN+/ICSPDAT SPA4AN3/TIG/OSC2/CLKOUT + GP1/ANAICIN-/VREFACSPCLK GP3IMCLR/Ve> —e GP2/AN2/TOCKV/INT/COUT Beaucoup de sigles, n’est-ce pas ? & On y trouve : i Broche 1: le plus (plus 5 volts stabilisés) de I’ alimentation, 1 Broche 8 : la masse (zéro volt) de I’alimentation. “Toutes les autres pattes peuvent servir A plusieurs emplois, jusqu’a cing ! Elles portent done des surnoms complexes. Retenons simplement celles soulignées en jaune 1 Broches 2 a7 : les 6 entrées/sorties (E/S) du microP. Attention, elles sont en I’ occurrence dans ‘ordre inversedes numéros de pattes : de G?5 a GP9, dans ie sens des aiguilles d’ une montre),, Dans Ie montage d’aujourd’hui de Pictrain, n’utilisera que deux bornes (en plus de 1 “alimentation '), "entrée (bouton poussoir) sur I’ entrée/sortie GPS ; la sortie vers le haut-parleur sur Ventrée/sortie GP1 ; il faudra tenir compte de ceci dans le programme. 4,3. Le programme Remarque (une nouvelle fois) pour les puristes : tr8s souvent je ferai I’impasse sur certaines explications, et il m’arrivera méme d étre a la limite de la vérité, uniquement parce que je souhaite présenter les microP de la maniére la plus simple possible, Je ne parle done que de ce qui est strictement nécessaire pour comprendre ce que nous faisons, pour le reste vous trouverer. des commentaires plutdt du style “c’est comme ca et ne cherchez pas & comprendre”, car cela n “apporte rien & notre propos. Plus tard, pour ceux que cela intéresse vraiment, il y a sur Internet des tas de bonnes présentations des microP, vous pourrez. vous y reporter si vous devenez.“mordus’, Par ailleurs, installez-vous confortablement, éteignez la télé et concentrez-vous un peu. Ce qui suit n’est pas difficile, mais malheureusement on va se retrouver, comme déja dit, avec pas mal de sigles et abréviations, toujours basés sur la langue anglaise, et de I’ attention est nécessaire si on ne veut pas étre perdu. N “ayer pas peur, nous vous prenons par la main, mais il faudra peut-étre ‘quand méme lire tout ga deux ou trois fi 4.3.1. Début du programme p=PIC12F675 €PD_OFF & BODEN_OFF & _CP_OFF & WOT_OFF & _PWRTE_ON & & _NTRC_os¢_NocLKOUT Cette premiére partie A comprend d’ abord des commentaires généraux, puis des éléments de paramétrages du microP. C’est obligatoire, absolument standard (dans nos montages) et done oubliez tout ga. cPT_256 ‘saV_THRIH ‘SAV_TARLL hitps:wwn ptrain.comlslectraniquelmicropipageddindsx. him ‘792020 PICTRAINV Dans cette partie A, on regroupe toutes les définitions des registres généraux que nous utiliserons, dans le programme (ily en a 64 disponibles). Un registre ne peut étre utilisé que s il est identifé ici. Chaque registre est “nommé”, ici CPT_256, SAV_TWRAH et SAV_TMRAL, le ‘:1" indiquant qu’un seul ‘octet est utilisé. C’est ce nom qui sera utilisé plus loin lorsque I’on utilisera un registre. ‘CBL0ck @x620" et ‘eNOC” ne sont que des indications de début et de fin des définitions. 2 23 24 ‘Javais indiqué plus haut que notre microP comprend 35 registres spéciaux, qui servent & paramétrer les différentes fonctions, mais que & notre niveau nous n’en utiliserons que 3 ou 4. Il faut ependant mettre des paramétres correspondant & nos besoins dans ces rgistres, valeurs qui sont toujours les mémes dans tous nos programmes. La commande ‘#include’ A signifie qu’il existe un fichier externe appelé " ‘Paran_std_12F. inc ‘qui fait partie de notre programme. Le contenu de ce fichier est done un morceau de programme (2 “une centaine de lignes), mais qui n’ apparait pas dans notre liste d’ instructions, ce qui améliore sa Hsbiite (de toute fagon vous n’avex pas besoin, pour instant, de savoir ce qu’ eatien) isto4o4 4 PARAMETRES SPECTFIQUES Banka. clrf TaISIO Jport en sortie ost TRISIO,5 }Sauf 5 pour déclenchenent bet wu, 5 jrésistance de rappel sur le port 5 + registre controle interruptions crf TINTON 3 ost INTCON, GIE Hinterruptions activées en permanence bet INTCON, PETE Jautonise interruption périphéniques. H(notanment Tiert) i registre interruptions périphériques clr jautorise les interruptions Timer ber THRATE Banko bef 10,1 Dans cette partie A, on initialise justement les registres spéciaux spécifiques & notre programme. Pour I'instant, oubliez cette partie, nous y reviendrons plus tard, je ne la laisse ici que parce que la construction du programme fait qu’ elle se trouve ici 4.3.2, Boucle principale ‘Nous revoila dans notre boucle principale V telle que définie précédemment. j BouclePrincipale BouclePrincipale otfse er0,5 4} attente déclenchesent goto BouciePrincipale 5 call Son_tii 5 appel des sons call SON-TEi 5 call SSON_TEL : call SON-Taa 5 call SON-Taa : call 5 call : goto BouclePrincipale 3 Sivous avez un peu de mémoire vive, cela doit quand méme vous rappeler quelque chose. ‘Que ce passe-t-il dans ce morcean de programme ? D’abord on teste ’entrée du bouton poussoir par btfsc P10,5 ! Oui ga parait incompréhensible, mais pas tant que ¢a : 1 GPIO est un registre spécial qui contient la valeur Iue (ou éerite) sur les entrées/sorties ; ‘comie ily a 6 E/S dans mon microP, j’ai 6 bits (numérotés de 0 a 5) dans GPIO et qui me donnent i “état de mes 6 E/S. Mon entrée, correspondant au bouton poussoir (voir le montage électronique) est la 5, je vais, donc tester GPT0,5, ce qui veut dire tester Ie bit 5 du registre GPIO. IW Je teste par l’instruction bt¢sc (Bit Test File, Skip if Clear) ce qui donne en frangais “test d’un_ bit dun registre et saut s'il est & 0”. En clair, je vais done tester le bit 5 du registre GPIO, et “sauter”’ s“il est a 0 (c’est-d-dire si le bouton poussoir est appuyé). Sauter dans ce cas veut simplement dire que je saute I’instruction suivante, qui est un goto. @\Sauter instruction ne veut pas dire Sauter a 'instruction ! En d’autres termes, si mon bit est 1 Ge ne saute pas), j“exéeute le goto, ¢”est-A-dire que je hitps:wwn ptrain.comlslectraniquelmicropipageddindsx. him ‘792020 PICTRAINV retourne & BouclePrincipale (= au début), sinon, si mon bit est a o, je saute le retrouve done sur |’ instruction call SON_T1i, e’est-d-dire que je lance la séquence d’émission des sons. 1m On exécute alors I’ appel des sous-programmes SoN_Tii et SON_Taa, et finalement on retourne au début par le goto BouclePrincipale. Nous avons ici Ie principe général de tous Tes tests : on teste si un bit est a1 (Set) ou a zér0 (Clear), et si oui on saute UNE instruction. Les deux instructions sont btfsc, test d’un bit & 0 (Skip if Clear) et btfss, test d”un bit A 1 (Skip if Set) On va done souvent retrouver Ia construction m Test du bit, IW Sile test n’est pas OK, goto pour aller ailleurs, I Sile test est OK, suite des instructions. Et deux instructions de plus ! Résumé des instructions rencontrées jusqu Tastruction ‘Opérande. Fonction peo Tiguette Deplss Texicuton Go programme vers un sate endro WeneAe par =r weiquette “Appel un sous-programme MlentIR@ par Stiquette return pas d opérande Fin de sous-programme, le programme revient& | iastruction suivante cal burse regisire, bit Test duit bit danse rogisire registre, si le pit est 3 @, on saute instruction suivante, sinon on 1 exécute Test du bit bit dans Te registe registre, si le BE instruction suivante, sinon on I'exéeute ‘Vous avez suivi ? $i oui, vous avez & peu prés tout compris de la programmation des microP, sinon faites ‘goto pagel’ et revenez au début du texte... et ET on sauteT bers registre, bit PTI+ Anti-rebond : puisaue vous suivez les montages du Meccano électronique, vous devez vous souvenir des problames de “rebond” qu’ engendrent les boutons poussoirs. Notre programme élimine ce probléme : en effet, |’appui sur le Bouton (Pr0,5), on déclenche la séquence 4’ émission des sons, et durant tout ce processus le programme ne teste pas Ientrée et donc le bouton est inactit Ge nest qua la fin de cette séquence que I’on revient au test du bouton et que le ti-ta peut de nouveau étre déclenché, 4.3.3. Les “timers” et les interruptions Dans ce paragraphe nous allons aborder les deux derniers éléments un peu difficiles que sont les timers et les interruptions. Les timers (compteurs) : c’est tout simplement... des compteurs qui comptent les titac de 1 “horloge. Tls vont nous servir & retrouver les fréquences, tout simplement en comptant les microsecondes correspondant a la période du son que nous voulons émettre. Iya deux timers dans le 12675, le Tiner@ qui compte jusqu’ 256 et le Timert qui compte jusqu “4.65596 c’ est-i-dire 256 fois 256). Dans ce montage, nous allons utiliser le Finer. Le principe des timers est simple : & chaque tic d’horloge ils s“incrémentent de 1 ; lorsqu’ils arrivent & 255 (Tinert) ou 65535 (Tirer®), ils repassent a zéro et continuent de compter. Mais au moment od ils sont revenus & zéro, ils ont déclenché une interruption Les interruptions : ce terme barbare recouvre exactement la méme notion que votre réaction lorsque votre épouse vous appelle pour diner alors que vous étes en train de ballaster 10 métres de voie sur votre réseau. Normalement, vous allez interrompre votre travail (et sans maugréer !), mais vous ne laissez pas tout en plan comme ga : vous allez. ranger — fermer le bocal de colle et celui de ballast, mettre le pinceau dans I’eau pour qu’il ne séche pas, etc. Aprés le diner, vous récupérez pinceau et ballast, et vous continuez, Dans notre microP, ¢“est un peu la méme chose ; durant l’exécution du programme normal (notre BouclePrineipate), il peut y avoir des interruptions qui font arréter ce qui est en cours, font exécuter un sous-programme particulier, et on reprend le programme principal a la fin du sous- programme. En détal, i se passe : 1 Déclenchement de I’interruption, votre femme vous appetle, m Sauvegarde de|l’état du programme, vous rangez le pinceau, 1m Exécution du sous-programme, vous diner, 1m Restauration de I’état du programme, vous récupérez le pinceau, Suite du programme principal. vous continuez le ballast. Heureusement, toutes les parties un peu compliquées (sauvegarde et restauration) sont toujours les mémes, et je les ai done cachées (elles sont dans le fameux fichier Paran_std_v1_@. inc que nous avons vu au début). hitps:wwn ptrain.comlslectraniquelmicropipageddindsx. him ‘792020 PICTRAINV Tine nous reste done que deux choses & faire : @ Paramétrer les interruptions, im Ecrire lesous-programme. Plusieurs sources d’interruptions sont possibles, nous n’en utiiserons qu’une pour I’ instant, celle attachée au Timert. 4.3.4, Principe de |’ interruption Timert Le Timers est un des registres spéciaux, qui permet le comptage des tics de I’horloge (rappelez- vous le paragraphe “Et pourtant il tourne”), C’ est done un “compteur de temps écoulé”, A.quoi ¢a sert ? Ici cela nous servira & trouver les fréquences de 370 et 660 Hz pour notre Klaxon, en divisant la vitesse du microP (1000000 Hz) par la valeur adéquate pour obtenir des interruptions aux fréquences voulues. période période 4 Regardons d’abord comment générer + or tun signal comme ci-contre. En pratique, on BV va, A chaque demi-période, inverser la valeur dela sortie deo a 1et de 10 (basculement).. On voit que cette fréquence des Dasculements devra done étre le double de la fréquence du signal de sortie. Pour la fréquence de sortie de 370 Hz, la fréquence des basculement devra étre de —ov 740 Hz, et done la période de 1/740" de ' Seeonde , soit 1,3513 millisecondes, ou en d | “autres termes, il faut 1.351 tics entre chaque basculemant basculement basculementtasculement basculement. On va done utiliser le Finer pour déelencher une interruption tous Tes 1351 ties, et on inversera la sortie & chaque interruption. Attention : un compteur... compte (1, 2 3, 4.« il ne sait pas “décompter” : 4,3, 2,1), et comme] “interruption se déclenche au maximum (65 535 dans notre cas), il nous faut charger 65.535 moins 1351, soit 64 184 dans le compteur. Petite difficulté : comme toutes les valeurs dans notre microP, le Tinera est basé sur les registres spéciaux, qui sont des octets ne contenant au maximum que 255. est done nécessaire d’ avoir deux ‘octets pour stocker des valeurs qui vont jusqu’ 65 535, octets appelés TARIH et TARAL (H pour high, ‘octet de poids fort et L pour low, octet de poids faible). PTI+ Poids fort, poids faible ? Prenant comme exemple la date de la Révolution P, on @ vu qu “on donnait, meme en francais de tous les jours”, une importance [chiffre de poids Fore diferente aux chiffres selon leur position dens un nombre. Stun | Glave se trompe sur le 9 et met un'S, ga donne 1785.7 perd un point mais ne redouble pas sa classe, Sil se gourre sur le 7, en 1j7|8|9 Eerivant 1089 par exemple, ¢ est la catastrophe, les parents Sont = convoqués... Donc le 7 est un chiffre de poids plus fort que le 9... | chiffre de poids faible Test le plus fort de tous. penere serovars Dans les octets informatiques, c’est pareil. Admettons qu’on soit riches, au point d’acheter un “super-microP” qui ait des registres de 16 bits, ¥ comme ci-dessous. Avec ‘ce nombre, on pourrait compter de 0 8 65'535 (c’est-b-dire 32.768 + 16-384 + 8 192..., etc.) Le bit n° 0, bit de poids faible, vauldrait un ; celui de poids fort, le 15e, vaudrait 32 768 ! bitun: 35 bitn’ o y Of [00/0 [0/111 [Ot [OTOL OTOra [a a bit de poids fort bit de poids faible Hélas, nous sommes des pauvres : notre petit microB (1) & hult pattes ne connait que des reaistres 8 hult bits ;-( Pour comoter lusau’d 65535, il faut aul mette deux octets & la aueue-leu- leu! On a donc non’ seulement dans chaque octet un’bit falble et un bit fort, mais aussi un octet de poids faible et un octet de poids fort... Le bit 0 de I"octet de gauche vaut deux fois le poids du plus ‘ros bit de droite. bit n 7 bit nto bit ne 7 bit neo v v v ¥ oOji[ofolfoyoyali Oji][ Of 0) [ofolif1 octet de Poids fort octet de poids faible Notons, enfin, que pour une fois les anglophones sont bien embétés — I’ abréviation LSB (last significant bit, bit'de poids faible) est la méme que LSB (last significant byte, octet de poids faible). La différence est... dans le contexte | Le contraire est MSB (most significant bit ou byte). {Tout cet fencadré est de Jide.) hitps:wwn ptrain.comlelectraniquelmicropipageddindsx. him ‘792020 PICTRAINV Dans I’ octet de poids fort on stocke les multiples de 256, et dans I’ octet de poids faible le reste ; exemple : 64 184 est composé de 250 fois 256 plus 185, on mettra done 250 dans ‘octet de poids fort isa) et 185 dans “octet de poids faible (1HR31). Vous suivez ? Dans notre programme, on fera done 1 Chargement de 1’ octet de poids fort, m Chargement de I’ octet de poids faible, im Lancement du Tinert, (il compte) _Alinterruption (rinert = 0), i se sera écoulé exactement 1.351 HS, et on recommence. Si A ‘interruption on inverse la sortie du haut-parleur, on génére un son de 370 Hz, Si vous avez compris, vous étes capables de faire le méme calcul pour la fréquence de 660 Hz 1 Fréquence des basculements : 660 x 2 I Nombre de ties entre deux basculements : 1-00.00 / 1320 = 757 ties, mA charger dans le Timer : 65.535 ~ 751 = 64.778, i C’est-i-dire 253 dans TRiH et 10 dans THRLL, 0, Durée d’un son Pour simplifier le programme et ne pas vous égarer, on ne va pas introduire ici le contréle exact d “une demi-seconde pour la durée de chaque son. On va simplement utiliser un registre général tout simple, et compter les basculements jusqu’& 256. Nous aurons done : 256 x 1351 = 345 856 US, soit 0,35 seconde pour le son fa (370 Hz). 256x757 = 193.792 HS, soit 0,2 seconde pour le son ta (660 Hz). Pour les besoins de la démonstration, je pense que cette approximation est suffisante, on fera peut-étre mieux dans une version finale du montage (vous devinez qu’on peut utiliser I’ autre compteur Tiner® pour réaliser des durées précises dune demi- seconde). N.B. — Textes, schémas, programmes © Psi_pour Ptitrain. Photos Jidé ou D.R. quand signalé. — Toutes vos remarques et commentaires sont bienvenus, et les pages de Ptitrain ne sont pas statiques : les erreurs sont corrigées sitét connues, les Psi améliorations, éclaireissements, etc. feront |’objet de mises jour 15/32/07 fréquentes. D Pritrain > Ele ronique P PicTrain D> Page suivante titrin, 'e-magazine eu traln éclectique. — Directeur de la publication : Christophe Frenchinl Rédacteur an chef ?Jean-Denis Rondinet hitps:wwn ptrain.comlelectraniquelmicropipageddindsx. him

You might also like