Logiciel CALM pour la carte Starlet / 16F690



Documents pareils
ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

AUTOPORTE III Notice de pose

PIC EVAL Dev Board PIC18F97J60

2013 Nos nouveaux outils basés sur Arduino

Notice d installation de la Centrale VIGIK DGM1

LE SYSTÈME D'ALARME DE GSM

Carte Relais GSM (Manuel Utilisateur)

1. PRESENTATION DU PROJET

opti-vm Serveur Vocal et Standard Automatique Siemens HiPath 11xx et Hipath 12xx Installation et Guide Utilisateur Version 1.0

Présentation et installation PCE-LOG V4 1-5

CONSOLE D ALARME AUTONOME POWERGUARD 2000

Fiche technique CPU 314SC/DPM (314-6CG13)

COMMANDER A DISTANCE LE ROBOT-PONG ETUDE DE LA TELECOMMANDE (2 nde PARTIE)

CENTRALE D ALARME SANS FILS

epowerswitch 8XM+ Fiche technique

Systèmes pour la surveillance et la commande lors de l entreposage et du transvasement de liquides. BA

Dossier technique. Présentation du bus DMX et Utilisation des options EL13 / EL14 ERM AUTOMATISMES INDUSTRIELS 1 LE PROTOCOLE DMX 2

HA2000 RTC Transmetteur téléphonique

epowerswitch 4M+ Fiche technique

MANUEL D INSTRUCTION

ROTOLINE NOTICE DE POSE

Manuel d aide à la pose

NOTICE D UTILISATION

PetPorte.de Seul mon animal peut entrer! La chatière avec lecteur de puce électronique. Mode d emploi. Guide d installation

Manuel d utilisation. Système d alarme sans fil avec transmetteur téléphonique. Réf. : AL-800. En cas de problèmes

Modules d automatismes simples

Transmetteur téléphonique vocal

Astra Elite AM/3 Manuel d'installation

ALARME COMMUNAUTAIRE. - Mode d emploi -

Centrale d alarme DA996

Système d alarme sans fil GSM / SMS / RFID.

REALISATION d'un. ORDONNANCEUR à ECHEANCES

TP N 7 «ALARME INTRUSION» TP découverte «Alarme intrusion filaire LEGRAND»

LOGICIEL DC4D MONITOR

Manipulations du laboratoire

Connected to the FP World

Enregistreur de données d humidité et de température

HA33S Système d alarme sans fils

IV- Comment fonctionne un ordinateur?

Gamme. Manuel à l usage du personnel qualifié. Climatiseurs Bi, Tri et Quadri split

Acquisition et conditionnement de l information Les capteurs

smart flap guide de 'utilisateur

La programmation des PIC en C. Les fonctions, les interruptions.

INSTALLATION MODULE WEB

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

EL70x1 en mode position. Mise en œuvre rapide. VERSION : Beta / DATE : 31 Juillet 2011

Catalogue de composants expliqué Note: Ce document est repris de qui ne sera plus mis à jour

Mode d emploi Flip Box

Notice d utilisation de l alarme EMATRONIC

PRODUIRE DES SIGNAUX 1 : LES ONDES ELECTROMAGNETIQUES, SUPPORT DE CHOIX POUR TRANSMETTRE DES INFORMATIONS

VOCALYS LITE.

Caractéristiques techniques du module électronique Témoin lumineux rouge

INSTRUCTIONS D INSTALLATION SOUS WINDOWS 7 / WINDOWS VISTA / WINDOWS XP

L informatique en BCPST

HAM841K CENTRALE D'ALARME POUR SYSTEMES DE SECURITE COMMERCIAUX ET D'HABITATION

Modules d entrées/sorties pour FX série XM07 et XM14

Pilotec confort 10/Pilotec confort 20 réf réf

CINEMA SB100 barre de son amplifiée

Merci d'avoir choisi notre système d'alarme intelligent. Veuillez lire ce manuel avant l'installation afin de la faire fonctionner correctement.

Bien commencer avec un LaunchPad MSP430G et un Breadboard

MELODIA 2605 NOTICE D UTILISATION ET D EXPLOITATION

Gobius 1 ¾ alarme pour des fosses septiques

SYSTEME D ALARME. Etude d un objet technique : Centrale d alarme. LP Porte d Aquitaine - Thiviers Page 1/13

COMMUNICATION ENTRE DEUX ORDINATEURS PAR LASER MODULE EN CODE MORSE OU BINAIRE.

Une liste des distributeurs Paxton se trouve sur le site Internet -

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre

SIRENE SANS FIL SOLAIRE 433MHz 30/80m SSFS = SG-1100T

Notice de montage, d utilisation et de maintenance

AMICUS 18 (2ème partie) 4) Présentation du logiciel Amicus IDE

Carte transmetteuse téléphonique vocale pour centrale d alarme filaire

Fournir un guide visuel des différentes étapes nécessaires à l utilisation d une imprimante µdelta.

SOMMAIRE MONTAGE DU COMPTEUR ET CAPTEURS...3 LE MOT DU CHEF DE PRODUIT...5 L ORGANISATION DE L ECRAN...5 LES PICTOGRAMMES UTILISES...5 LES BOUTONS...

Ecran programmable. Testez la différence grâce. à sa puissance, sa rapidité. et ses possibilités réseaux

NOTICE D INSTALLATION CENTRALE 260

Système d alarme GSM XMD-3200.pro avec connexion via radio et réseau de téléphonie mobile

TP 7 : oscillateur de torsion

Multichronomètre SA10 Présentation générale

Système de contrôle d accès Codelock avec clavier de codage CL12

LA MAIN A LA PATE L électricité Cycle 3 L électricité.

CAA/SE N O T I C E D E M O N T A G E E T D U T I L I S A T I O N KIT DE MONTAGE. Clavier lumineux codes DIGICODE

Un ordinateur, c est quoi?

COMMANDER la puissance par MODULATION COMMUNIQUER

UGVL : HOMOLOGATION PS ZAC du bois Chaland 6 rue des Pyrénées LISES EVRY Cedex FRANCE Tel Fax

Projet audio. Analyse des Signaux ELE2700

Table des matières. Pour commencer... 1

Système d alarme. Agréé assurance

User guide Conference phone Konftel 100

VIII- Circuits séquentiels. Mémoires

Mode d emploi Konftel 250

T500 DUAlTACH. JAQUET T500 DualTach Instrument de mesure et de surveillance équipé de 2 entrées fréquence TACHYMETRE 2 CANAUX

CASSY -Display ( )

Notice d utilisation de la : Pro-Ject Debut & Debut Phono SB

Link GSM idp Manuel v1.0

Boîtier disque dur SATA 3,5 pouces Fonction économie d énergie

Janvier 2013 AUDIO/VIDEO PLAYER AUDIO VIDEO OEM DIVERS

Guide de programmation FLEXIVOZ PABX OD308

Installation Guide Serveur d impression et de stockage multifonctions à 2 ports USB 2.0 haute vitesse Manuel de l utilisateur

MICROCONTROLEURS PIC PROGRAMMATION EN C. V. Chollet - cours-pic-13b - 09/12/2012 Page 1 sur 44

CONFIGURATION ET UTILISATION

Transcription:

Didel - 1092 Belmont Suisse www.didel.com -- info@didel.com Logiciel CALM pour la carte Starlet / 16F690 http://www.didel.com/starlet/starletsoft.pdf Le logiciel Starlet est modulaire. Un ensemble de fichiers insérés permet de gérer les périphériques prévus sur les connecteurs, dans l optique de la commande d un robot ou d un automatisme avec 2 moteurs 5V, un ou deux servos et des capteurs de distance infrarouges. La télécommande infrarouge compatible Bimo n est pas documentée ici. Les programmes existent, mais ne sont pas compatible avec l encodeur et les servos. Si les encodeurs moteur ne sont pas utilisés, l interface série peut être mis en service pour faciliter le déverminage ou permettre d autres applications, avec par exemple de l I2C sur l autre connecteur. Le processeur installé pour le logiciel décrit ici est un 16F690. Ce logiciel tourne aussi sur la carte Dev877 qui a 10 entrées-sorties supplémentaires. La mise au point de nouveaux programmes en CALM est facilitée avec les Microdules qui permettent de visualiser des variables sans interférer avec l application ; voir à la fin de ce document. Pour programmer en C, il faut installer un processeur 18F13K50 qui permet de s accrocher à la documentation du PicStar www.z-control.ch/ Structure des programmes pour le Starlet Les programmes se trouvent sous www.didel.com/starlet/starletsoft.zip. Un échange de programmes avec les utilisateurs se fera sous http://sourceforge.net/projects/picstar-starlet/ Nos programmes commencent tous par Bs et ont la forme ci-contre. Ces fichiers son intouchables! Si on les modifie, on doit changer leur nom. Conservez les possibiliés de déverminage Microdule (T877=0, T976=0), même si cela ne vous intéresse pas. L échange de programmes sera facilité et cela devrait vous intéresser. Le texte final entre appaît dans la fenêtre hexa du Pickit2. Si vous retrouvez un processeur dont vous ne savez pas quel est le contenu, il suffit de le relire et de voir son nom. Après le.end, vous trouverez parfois des explications supplémentaires, des exercices. ListAll = 0 T690 = 1 T877 = 0 T946 = 0.Ins BsSet.asi.Ins BsDef.asi.Ins BsVar.asi.Loc 0 Call Init Jump Debut ; Tables éventuelles.ins BsInit.asi.. fichiers de librairie éventuels Debut :. programme et fichiers insérés de l applic. Nom N o m, d a t e.end Commentaires libres non assemblés La déclaration ListAll = 0 cache dans le listing que vous voulez imprimer les fichiers insérés, et vous ne verrez que votre code. Si vous voulez tout voir, il faut déclarer ListAll = 1 Le fichier BsSet.asi apelle les définitions du processeur et contient des valeurs.des constantes et des macros Le fichier BsDef.asi contient le nom des périphériques câblés ou prévus sur les ports Le fichier BsVar.asi déclare les variables. Pour les programmes utilisateurs, 4 variables ont été déclarées : Cy1 Cy2 (pour des compteurs locaux) Cnt1 Cnt2 X Y. Vous pouvez en ajouter ou les renommer en déclarant MonNom = X

Didel Logiciel CALM pour la carte Starlet - 2 - Le fichier BsInit.asi initialise le processeur, met à zéro toutes les variables et clignote. D autres fichiers seront insérés plus loin. Notre approche est d acquérir l expérience en testant avec des programmes qui nécessitent peu de connaissances en assembleur les routines de notre librairie. Ces exemples de programmes peuvent être facilement modifiés. Dans une première partie les programmes sont monotâche. La deuxième partie montre que la gestion par interruption n est pas plus compliquée et permet de lancer plusieurs tâches en parallèle. Ce document n explique pas les instructions des microcontrôleurs Microchip 16Fxx. Plusieurs documents sont à disposition sous www.didel.com/pic/ L environnement SmileNG est décrit sous www.didel.com/pic/smileng.pdf Pour progresser dans l art de structurer des programmes (quel que soit le langage) et de mettre en œuvre des capteurs, plusieurs documents sont à disposition sur le site Didel. Signalez à info@didel.com si la progression est trop difficile, et ce qui vous bloque. 1ere partie - Routines simples monotâches Les groupes d instructions exemples sont à insérer à la place prévue dans le fichier BsSimple.asm. Renommez ce programme après l avoir chargé, pour le conserver sur votre disque avec un nom adéquat. Tapez les premiers exemples pour vous familiariser avec l éditeur. Utilisez la touche Tab pour encolonner. Attentes Les boucles d attente sont nécessaires dans une programmation monotâche pour régler la vitesse d évolution des tâches. On apelle des routines qui font tourner le processeur en rond. Un paramètre définit la durée. Comme ce paramètre, préparé dans W, est 8 bits, il faut plusieurs routines pour couvrir le spectre de nos applications. DelWx4us Délai de 4 à 1024 µs \in : W Delai1ms Délai de 1ms \in : - Des exemples sont donnés plus loin. DelaiWx1ms Délai de 1 à 255 ms \in : W Delai01s Délai de 0.1s \in : - DelaiWx01s Délai de 0.1 à 25.5 s \in : W. Clignotements Les Leds prévues et que l on peut ajouter sur des sorties non utilisées sont activées par les instuctions Set Port:#bLedx Clr Portx:#bLedx On doit préciser si c est le PortA, B ou C, et donner le numéro du bit du port. Il faut encore savoir comment la Led et sa résistance est câblée : si l anode est au +, un Clr allume. Si la cathode est au moins, un Set allume. Pour une Led bicolore, les combinaisons 10 et 01 allument. 00 et 11 éteignent. Les Leds L1 L2 sont sur le porta avec les noms bledv bledr bledv2 bledr2. Si vous avez mis un connecteur, vous pouvez jouer à allumer 4 diodes différentes ; elle doivent avoir une résistance de 220 Ohm à 1k vers le + ou vers le -. La routine CliWx est appelée dans la routine BsInit.asi, pour montrer avec 3 clignotements que le programme s est initialisé correctement. S il ne fait ensuite pas ce que vous voulez, le coupable n est pas loin! CliWx \in : W \mod : W Cx1 Cx2 Clignote W fois la Led à droite Set PortA:#bLedV ; vert à droite Clr PortA:#bLedR Clr PortA:#bLedV2 ; rouge à g. Set PortA:bLedR2 Stop: Jump Stop Move #4,W Call CliWx Call Del01s Call Bip Move #10,W ; 1s Call DelWx01s

Didel Logiciel CALM pour la carte Starlet - 3 - Haut-parleur Le haut-parleur, souvent appelé abusivement buzzer, est une membrane attirée quand le courant passe. Il faut faire attention de ne pas la laisser attirée : elle consommerait du courant sans faire de bruit! Quelques routines sont à disposition dans BsSons.asi. Ces routines accaparent complètement le processeur et ne sont utilisées dans une application complexe que pour aider au déverminage. L exemple précédent montre comment on peut appeler ces routines, avec éventuellement des silences entre deux pour les distinguer. Call Bip Call WxBip \in :- \in :W (0 256) \mod : W Cx1 Cx2 Cx3 \mod : W Cx1 Cx2 Cx3 1 bip de 0.2s Des routines mélodie sont expliquées plus loin Call SireneUp \in :- \mod : W Cx1 Cx2 Cx3 Call SireneDown \in :- \mod : W Cx1 Cx2 Cx3 Poussoir Ce n est pas si facile de lire un bouton poussoir. Il a des rebonds de contact, et on peut être intéressé à agir différemment selon le nombre et la durée des actions. La routine GetPous dans le fichier BsPous.asi (ajouter après la ligne.ins BsSons.asi) compte les actions et revient si on a relâché pendant 0.5s. Le poussoir est mal placé, presser avec le dos d un crayon. GetPous \out : CntPous \mod : W CntOn CntOff Cx1 Cx2 Compte les actions sur le poussoir Call GetPous Move CntPous,W Call WxBip Moteurs en tout-ou-rien Les connecteurs M1 M2 permettent de brancher un moteur, 0.8A max. Le kit du Starlet contient 2 diodes bicolores supplémentaires qui pementtent de remplacer les moteurs pour les tests, ou parce que vous n avez pas de moteur. Si vous utilisez un moteur inconnu, mettez la lampe Gabriel en place! Pour tester des programmes moteurs, vous apprécierez les LEDs. Les macros M1Av M1Rec M1Stop M2Av M2Rec M2Stop utilisent deux instructions chacune. Il ne faut pas les mettre après un Skip. ; On avance en ondulant Long = 4 ; durée en 0.1 ms d activation des moteurs M1Av M2Stop Move #Long,W Call DelWx01s M1Stop M2Av Move #Long,W Call DelWx01s Moteurs en proportionnel Les variables Pfm1 Pfm2 commandent la vitesse des moteurs, si la routine StepPfm est appelée toutes les 1ms (durée non critique). La valeur Pfm est un nombre 8 bits signé, entre 128 et +127. A noter que pour un PFM positif, si le câblage correspond à nos définitions, (voir www.didel.com/starlet/starletrome.pdf ) les moteurs tournent en sens inverse, donc un robot à 2 roues avance. Entre chaque appel de la routine StepPfm, en principe toutes les 1ms, on peut faire des dizaines d instructions, mais on ne peut pas appeler des routines sons ou délais longs (essayez!). Si on veut avancer x secondes à vitesse constante, il faut se fabriquer une boucle comme cidessous, que l on peut transformer en routine (on prendra une meilleure approche plus loin). Dans le fichier BsSimple, il faut ajouter après le.ins BsSons.asi un.ins BsMotServ.asi. Le fichier complet existe sous BsSimplePfm.asm. ; On tourne à vitesse constante Move #90,W ; 60% vit max Move W,Pfm1 ; On augmente la vitesse toutes les 0.1 sec ; On atteint la vitesse max en 2-3s IniCnt1 = 100 ; 100x1ms = 0.1s ; Pfm1 Pfm2 = 0 (les variables ; sont toutes à zéro après un reset)

Didel Logiciel CALM pour la carte Starlet - 4 - Move #127,W ; vitess max L$ : Move W,Pfm1 Call StepPfm Call Del1ms Jump L$ Avance: Move #IniCnt1,W Move W,Cnt1 Att: Call StepPfm Call Del1ms Dec Cnt1 Jump Att Move #4,W ; incrément de vitesse Add W,Pfm1 ; on accélère en avant Sub W,Pfm2 ; en reculant TestSkip,BS Pfm1:#7 ; négatif? Jump Avance ; On stoppe tout Clr Pfm1 Clr Pfm2 Fin: Call StepPfm Call Del1ms Jump Fin Que se passe-il si on temine le programme par Fin : Jump Fin? Quand on arrive à cette instruction, la routine StepPfm vient d activer ou de désactiver les moteurs, difficile de savoir. Arrêt ou vitesse max? C est imprévisible. Mais on pourrait écrire M1Stop M2Stop Fin: Jump Fin On peut aussi assigner une vitesse nulle et continuer à appeler la routine StepPfm Servos Les servos ont en général les connecteurs avec dans l ordre - + signal avec des couleurs de fil qui laissent parfois deviner ou est le Mettez l ampoule Gabriel si vous hésitez. Dans le fichier BsSimple, il faut ajouter un.ins BsMotServ.asi. Le fichier complet existe sous BsSimpleServo.asm. BsSimpleServo2.asm balaye lentement et revient à zéro. Comme pour le PFM, la routine StepServo ne sert que pour tester un servo et vous familiariser avec les paramètres de commande Servo1 Servo2, qui valent de 0 à 255 pour générer des impulsions servo de 0.95 à 2.1 ms. La valeur 128 donne 1.50 ms. StepServo doit être appelé toutes les20ms et dure 2 à 4ms. ; On alterne entre 2 positions ; toutes les 1 secondes Move #10,W ; 1ere position Move W,Servo1 Move W,Servo2 Move #50,W ;Prépare 2s Move W,Cnt1 ; On doit appeler la routine toutes les 20ms L1$: Move #20,W Call DelWx1ms Call PulseServos ; toutes les 2s = 100 x 20ms on change Dec Cnt1 Jump L1$ ; On prend l'autre position Move #250,W ; 2e position Move W,Servo1 Move W,Servo2 Move #50,W ; 100x20ms = 2s Move W,Cnt1 L2$: Move #20,W Call DelWx1ms Call PulseServos Dec Cnt1 Jump L2$

Didel Logiciel CALM pour la carte Starlet - 5 - Potentiomètre ou entrée analogique Le 16F690 a 10 entrées analogiques. Les routines dans le fichier BsPot.asi permettent de lire une valeur analogique sur les prises Z1 et Z2. Le programme doit initialiser l entrée analogique. ; On lit le pot sur Z1 et active le servo Z2 Toutes les 20 ms, on fait une lecture et copie la Call GetAn8 valeur sur le servo. Move W,Servo2 Le programme complet se trouve sous Move #20,W BsSimplePot.asm Call DelWx1ms Call PulseServos Un programme un peu plus long n utilise que le potentiomètre et teste si la valeur lue est inférieure ou supérieure à deux valeurs limites. Charger BsSimpleMinMax.asm Pour les explications, voir www.didel.com/pic/surveiller.pdf Encodeur Le principe des encodeurs est expliqué sous www.didel.com/picg/picg87x/picg5.pdf et avec des détails orientés Starlet et Picstar sous www.didel.com/mot/romenco.pdf Les connecteurs N1 N2 sont directement compatibles avec les moteurs avec encodeur Rome. pour se connecter sur un Maxon, Minimotor ou Portescap qui a un encodeur à faible résolution, il faut faire un câble qui se répartit sur M1 ou M2 pour la puissance, et N1 ou N2 (4 premières pins) pour l encodeur. Avec les définitions choisies, si le Pfm est pair, les moteurs tournent en sens inverse (par rapport à eux-même) et les compteur de position-distance augmentent. Le programme BsEnco surveille les 4 lignes des deux encodeurs et compte/décompte sur 16 bits. Les signaux de l encodeur peuvent changent rapidement, on va les lire sans ajouter d attente, 600 us est la période d échantillonnage minimale avec le RomEnco à 5V. A notre niveau nous ne pouvons que vérifier superficiellement que cela marche. Plus loin, nous utiliserons l interface série pour afficher ces compteurs. Dans le fichier BsSimple, il faut ajouter un.ins BsEnco.asi. Le fichier complet existe sous le nom BsSimpleEnco.asm Le programme affiche sur la Led bicolore à droite la direction, et sur l autre Led les 2 bits de poids faible. ; On est câblé sur N1. Cnt1High/Low déjà à zéro Call StepEnco ; on affiche les 2 bits de poids faible Move Cnt1Low,W And #2'00000011,W Move W,PortA ; L2 rouge/vert ; on affiche le signe du compteur sur L1 TestSkip,BC Cnt1High:#7 ; signe? Jump Neg Pos: Set PortA:#bLedV ; L1 vert Clr PortA:#bLedR Jump Next Neg: Clr PortA:#bLedV ; L1 rouge Set PortA:#bLedR A cause d une incompatibilité voulue, pour tester l encodeur sur un BimoPlus, il faut insérer les fichiers BpDef.asi et BpEnco.asi à la place des Bsxx correspondant. Mélodies Une solution simple et compacte permet de générer des mélodies en utilisant le Pickit2 pour modifier la mémoire EeProm. A l adresse 16 20 commence la mélodie 2 qui est appelée par 4 pressions dans le programme BsSimpleSon.asm. Dans BsDemo.hex, il faut 7 pressions. Le programme contient les instructions Move #Melo2.And.16'FF,W ; pointeur en EE Move W,PtMelo Call Joue ; ou Jump APC Toute le travail est fait par la routine Joue dans BsSons.asi et les routines qu elle appelles. Les notes sont codées de 1 à 14=16 E. Le code 0 dit que la mélodie est terminée. Le code 15=16 F joue un silence. Dans chaque byte il y a 2 notes. Dans le source, les notes ont été codées (n2 est la macro qui compactifie).

Didel Logiciel CALM pour la carte Starlet - 6 - Les notes do, dodi (do#) etc ont été déclarées valant 1, 2,.. Melo2: n2 do,mi n2 do,sol n2 do,si n2 do,do n2 do2,sil n2 F,F En mémoire EeProm, on voit ce qui a été généré à l adresse 20 15 do, mi 18 do,sol etc 00 F,F (pour fin) Le Pickit2 permet de modifier ces valeurs, et de les reprogrammer. 2e partie Gestion par interruption Il y a beaucoup de façons de gérer plusieurs tâches. Nottre approche met dans une routine d interruption des timers, la commande moteur par Pfm, la lecture des encodeurs avec calcul de la vitesse, la commande des servos et l option capteur de distance. Cela couvre toutes les entréessorties du Starlet sauf le son et les Leds. Le programme de l utilisateur travaille avec les variables mises à jour par les interruptions. Il ne connaît plus les routines que l on vient de voir! Le programme de l utilisateur est donc plus simple puisque l interruption s occupe de toutes les contraintes de timing. La routine d interruption, dans le fichier BsInter.asi, doit être à l adresse 4. Elle est appelée toutes les 500 microsecondes par l interruption du timer 0 et elle dure de 30 à 200 microsecondes. Le programme principal a donc à disposition l équivalent d un processeur à 2 MHz. Comme il n a presque rien à faire, ce n est pas un problème. Mais si la routine SireneUp est appelée, le son sera plus bas et rauque à cause des irrégularités de la durée d interruption. Gérer des sons par interruption en même temps que d autres tâches n est pas possible. Des circuits synthésiseurs sont utilisés pour générer des sons écoutables. Pour les programmes de test qui suivent, les programmes principaux s insèrent dans le fichier BsTestInter.asm que vous trouvez comme pour les programmes complets dans StarletSoft.zip. A noter que ces programmes ne sont pas représentatifs des applications. Ils utilisent des timers car nous n avons pas d entrées qui peuvent modifier le comportement, à part le poussoir. A noter que le porta n est pas modifié par les interruptions. Les bits 0,1, 4,5 sont liées aux 2 LEDs bicolore, ce qui peut aider parfois au déverminage : par exemple, si on affiche un compteur lent on voit qu il évolue. Attentes Le principe des attentes, dans un environnement multitâche est différent du monotâche. On charge une variable timer qui décompte et se bloque à zéro, jouant le rôle de sémaphore. Le programme principal ne se bloque pas à attendre la fin du timer. Il teste si le compteur est à zéro, comme l américaine qui regarde de temps en temps par la fenêtre pour voir si le facteur a passé. La programmation des timers par interruption et la structure du programme sont expliquées dans www.didel.com/pic/timerssoft.pdf. Nous nous contentons de 2 timers gérés par interruption : Les variables Timer20ms et Timer1s sont des décompteurs. On les initialise à la valeur du retard voulu (entre 1 et 255) et on teste pour savoir quand ils sont arrivés à zéro. comme on fait plusieurs choses en même temps la durée peut être un peu augmentée. La fin d un timer pourrait être servie dans la routine d interruption. Ce serait une autre technique de programmation (on parle de noyau temps réel) ou le programme principal dirait dans x secondes fait ceci Contrairement aux timers du PIC, qui incrémentent et tournent en rond, nos timers décomptent et se bloquent à zéro. Ils n activent pas un sémaphore (flag), la valeur zéro jour le rôle de sémaphore.

Didel Logiciel CALM pour la carte Starlet - 7 - Le programme ci-contre allume la led pour 40ms toutes les secondes. Le programme complet peut se charger sous le nom BsTestInterTimer.asm Set PortA:#bLedV ; on allume Clr PortA:#bLedR Move #2,W Move W,Timer20ms W1$: ; On pourrait faire qqchose ici, tester d'autres timers Test Timer20ms Jump W1$ ; Timer à zéro, on passe plus loin Clr PortA:#bLedV Move #1,W Move W,Timer1s W2$: ; On pourrait faire qqchose ici, tester d'autres timers Test Timer1s Jump W2$ Poussoir Le poussoir est géré par interruption et donne dans la variable CntPous le nombre d actions. L interruption apelle le fichier BsPousI.asi qui n est pas le même que le fichier bpous.asi car le programme n attend pas que l ont ait relâché. La routine d interruption signal que c est relâché en. activant le bit de poids fort de la variable CntPous. Le nombre d actions est dans les poids faibles (donc cela limite à 127 pressions). Il faut mettre ce sémaphore CntPous:#bNewPous à zéro ; il sera réactivé par la routine d interruption si on represse. Le bit testé est le bit 7, mais on l appelle bnewpous. On peut tester si la dernière pression a été longue (plus de 0.6 secondes en regardant si le bit CntOn :#blongpous est à 1. Le programme joue un nombre de Bips égal au nonbre d actions. Le bit testé est le bit 7, mais on l appelle bnewpous. Le programme complet se trouve sous le nom BsTestInterPous.asm Exercice : Si la dernière pression est longue, jouer des sirenes. At$: TestSkip,BS CntPous:#bNewPous Jump At$ ; Attente sur poussoir Clr CntPous:#bNewPous Move CntPous,W Call WxBip Moteurs en Pfm L interruption Pfm doit être mise en service par l instruction Set ModeInter:#bPwmOn On peut dans une autre application ne pas avoir besoin des moteurs et si on ne met pas cette instruction l interruption est plus courte. Les variables Pfm1 Pfm2 commandent les moteurs. Il suffit de charger la variable avec la valeur voulue. A l initialisation la valeur de Pfm1 Pfm2 est zéro, moteurs arrêtés. Les impulsions envoyées au moteur durent 1ms et à 50% de Pfm, elles sont répétées toutes le 2ms, donc à 500 Hz. Le programme augmente puis ralentit la vitesse des moteurs. On veut que le robot tourne sur lui-même, mais si on inverse une prise, il ira en ligne droite. Le programme complet se trouve sous le nom BsTestInterPfm.asm Set ModeInter:#bPfmOn Move #0,W ; Vitesse nulle Move W,Pfm1 Move W,Pfm2 ; on augmente la vitesse toutes les 10ms Av$: Move #2,W ; selon vitesse évolution Add W,Pfm2 Add W,Pfm1 TestSkip,BC Pfm1:#7 ; négatif? Jump Rec$ Move #5,W ; pour 0.1s Move W,Timer20ms W1$: Test Timer20ms

Didel Logiciel CALM pour la carte Starlet - 8 - Jump W1$ Jump Av$ ; on réduit la vitesse toutes les 10ms Rec$: Move #-2,W Add W,Pfm2 Add W,Pfm1 Skip,NE Jump Stop$ ; ou Av Move #5,W Move W,Timer20ms W2$: Test Timer20ms Jump W2$ Jump Rec$ Stop$: Stop: Jump Stop ; si on veut ; recommencer Servos L interruption servo doit être mise en service par les instructions Set ModeInter:#bServo1On et si on veut aussi le 2 e servo Set ModeInter:#bServo2On Les variables Servo1 Servo2 définissent la position des servos connectés sur Z1 et Z2. A l initialisation la valeur de Servo1 Servo2 est de 128, servos au centre. On peut redéfinir cette valeur au début du programme. Il n y a pas de fichier inséré pour les servos, car ils sont gérés par une 2 e interruption du Timer1 du PIC. Toutes les 20ms, on teste si les servos sont en route. Si oui, on active le servo1 qui va faire une interruption au bout de 1-2ms. Cette interruption lance l impulsion sur le servo 2, s il est en service. Le programme de test change la position du Servo1 à chaque action sur le poussoir. Exercice : le retour à la position précédente se fait après 1 seconde. Le programme complet se trouve sous le nom BsTestInterServo1.asm Pos1 = 100 Pos2 = 200 Set ModeInter:#bServo1on ; 1er servo seul A1$: TestSkip,BS CntPous:#bNewPous Jump A1$ Clr CntPous:#bNewPous Move #Pos1,W Move W,Servo1 A2$: TestSkip,BS CntPous:#bNewPous Jump A2$ Clr CntPous:#bNewPous Move #Pos1,W Move W,Servo1 Encodeur La gestion de l encodeur par interruption fournit la vitesse en plus de la distance parcourue. La vitesse est le nombre d impulsions lues par 20 ms. Cette vitesse est signée et donne la direction. La valeur absolue est inférieure à 20 et elle est peu précise. Mais cela suffit pour asservir approximativement la vitesse en passant par des tables. Un réglage PI ou PID nécessite des paramètres précis et des calculs qu il serait absurde de demander à un PIC 16F. Les variables concernées sont Cnt1High Cnt1Low Speed1 Le programme de test fait que le robot oscille entre deux positions. Si Cnt1High est négatif, le robot tourne à droite et Cnt1 doit augmenter. Si Cnt1High est supérieur à 10 (donc 10x256 pas) on revient en arrière. On commande une seule roue pour que le robot reste sur place. Que se passe-t-il si la prise moteur est à l envers? Dès que le comptage est négatif le programme passe dans la boucle où il teste si c est supérieur à 10, ce qui est le cas. Il change Cnt2High Cnt2Low Speed2 IniVit = 100 Amplitude = 10 < 128 Set ModeInter:#bPfmOn Set ModeInter:#bEncoOn Move #IniVit,W ; pas trop vite Move W,Pfm1 A1$: TestSkip,BS Cnt1High:#7 ; négatif? Jump A1$ Move #IniVit+1,W ; change de sens Move W,Pfm1

Didel Logiciel CALM pour la carte Starlet - 9 - immédiatement de sens et repart pour beaucoup de tours jusq à la valeur 128 et oscille autour de cette valeur (vrai?) Rester entre 2 valeurs prédéfinies serait prudent: Les nombres négatifs sont difficiles à maîtriser. (programme BsTestInterEnco.asm) A2$: Move #-Amplitude,W Add Cnt1High,W Skip,CS ; CS si CntHigh>Amplitude Jump A2$ Capteur de distance IR Le connecteur N3 permet de câbler 3 capteurs de distance. Le circuit et le principe du logiciel est expliqué sous www.didel.com/kit/dist3ir.pdf Les paramètres à ajuster dépendent du capteur de distance, de la puissance envoyée dans les diodes infrarouges. Il faut des Microdules et un oscilloscope pour maîtriser le problème. La routine par interruption mesure en lumière ambiante puis éclairé par infrarouge. Elle calcule leur logarithme puis les différences qui créent les variables LogDistGauche LogDistCentre LogDistDroite. Le programme complet se trouve sous BsTestInterCaptIr.asm Le programme de test BsTestInterDis.asm ne s occupe que du capteur du centre et affiche sur une sur une LED une valeur selon un seuil, pour mettre au point le Gripsou dans son environnement.! plusieurs instructions de préparation au début, charger le programme complet. Move LogDistGauche,W Call PutWBCD Call PutSpace Move LogDistCentre,W Call PutWBCD Call PutSpace Move LogDistDroite,W Call PutWBCD Call PutCr ; On fait une mesure par seconde pour ; ne pas remplir l'écran trop vite Move #50,W Move W,Timer20ms A$: Test Timer20ms JumP A$ Test avec des microdules Pour chaque fonction documentée ici, on dispose de programmes qui permettent de tester le module soft sur le Starlet, ou sur Microdule M28/40-877, ou M64-946, avec ou sans liaison série. L avantage des Microdules est de pouvoir facilement visualiser un signal avec un microdule ou le testeur logique, accrocher une sonde d oscilloscope. Pour développer des routines ayant des contraintes de temp réel, c est indispensable. M877 avec liaison série M946 en test encodeur Pour les tests avec Microdules, qui sera surtout intéressant quand vous voudrez inventer des programmes complexes, les utiliser avec d autres processeurs de la famille 16F. jdn 100424/100507/100612