http://www.didel.com/ [email protected] www.didel.com/PetraPub.pdf Petra – un bus pour interfaces robots et pour la mise au point d’applications Vous avez un robot qui roule, programmé avec Pinguino, en Basic ou en assembleur CALM. Que peut-on souhaiter lui ajouter pour le rendre beaucoup plus intéressant si on a un seul bit de libre sur le processeur ? Des capteurs de distance, une caméra linéaire, un affichage pour visualiser des variables pendant la mise au point. Mais il faut que cela soit facile à brancher, et facile à intégrer dans votre programme, pour lire la valeur d’un capteur ou afficher une variable et décider d’un comportement plus intéressant. Les modules Petra répondent à cette attente et se connectent sur n’importe quel processeur de la famille 16F et sur les cartes Picstar et KiCar programmées en Pinguino/SDCC avec la librairie Z-Petra ou en assembleur CALM. Les modules Petra sont reliés sur un bus 3 fils (- + P) sur un connecteur de servo, avec un logiciel qui, sans que vous vous en occupiez, mets à jour l’information. Vous voyez un bloc de 32 variables dans votre processeur qui correspondent aux registres des modules Petra. Vous voulez connaître la distance mesurée par le capteur numéro 3 branché sur le bus ? Vous lisez la 3e position mémoire du bloc de variable. Vous voulez positionner le servo sur le connecteur numéro 6 du module Petra interface pour 2 servos ? Vous écrivez la valeur de position dans la 6e position du bloc de variables. Vous voulez afficher cette valeur envoyée au servo #6 ? Branchez un affichage #6 ! Le noyau logiciel Petra s’occupe de tout par interruption. Le valeurs sont mis à jour toutes les 20 ms et 70% de la puissance du processeur reste disponible. Modules Petra prévus Les modules esclaves sont connectés par 3 fils et n’ont pas d’alimentation propre. Leur adresse est fixe (modifiable avec un Pickit2) ou programmable par un multiswitch à 4 positions. La dimension des modules simples est de Un connecteur au pas de 2.47 et au pas de 1.27 sont prévus (molex mâle). Des câbles Molex présertis seront alors nécessaires. P-aff Affichage hexa 4 switch et un strap permettent de choisir l’adresse bus visualisée P-potoda Valeur pot affichée et envoyée Si le pot linéaire est soudé derrière avec un switch, le module affiche et envoie la valeur du pot. P-Af2x8 Affichage de 2 lignes de 8 caractères Cet affichage est configuré (dialogue avec le poussoir et l’affichage) pour afficher jusqu’à 8 variables en hexa, Ascii, BCD ou binaire. P-dist1 Capteur de distance avec affichage 8 bits du log de la distance évaluée. Le capteur LIT301 est fixé dessus ou dessous le PCB. Un pot permet de modifier la valeur transmise. P-dist4 Interface pour 4 capteurs Une led par capteur clignote prop à la mesure. Deux pots permettent de modifier la valeur transmise 4 connecteurs Molex 4 pins vont vers les capteurs P-camli Caméra linéaire de 128 pixel L’affichage du profil d’intensité est visible sur les 12 LEDs. Deux variables sont fournies à l’utilisateur : le centre et la largeur de la tache à 50% d’intensité. P-servo4 Commande de 4servos Un affichage n’est pas nécessaire puisque l’on voit la position des servos. Deux LEDs clignotent pour dire quels servos recoivent. 4 switch permettent de choisir l’adresse du groupe. P-8io Lit ou écrit 8 valeurs (et mode 4/4) Pas réalisé en première étape. Exemple pratique On veut commander deux affichages, deux capteurs de distance et deux servos. . Le câblage est trivial. Chaque module a une prise mâle et une prise femelle en parallèle, ce qui permet de n’utiliser que des câbles mâle-femelle, comme liaison et comme rallonge. Chaque unité a un numéro qui correspond aux 32 variables dans la mémoire du maître. Dans le bloc des variables, il faut donner des noms explicites aux variables correspondant à ce qui a été câblé. Le bus Petra à un fil impose des contraintes temporelles qui sont respectées dans la gestion par interruption du maître et par chaque esclave. Les solutions traditionelles, I2C, SPI, CAN, qui n’auraient de toute façon pas été implémentées efficacement sur les petits processeurs qui n’ont pas ces périphériques câblés. La prise Petra est compatible avec les connecteur pour Servo, il suffit de remplacer par logiciel une sortie servo par une sortie Petra. Le câblage peut être fait en étoile, mais avec le double connecteur mâle-femelle sur chaque carte, le câblage en guirlande et très pratique. Principe du bus Le principe du bus est inhabituel ; son rôle est de synchroniser les transferts, qui peuvent se faire entre esclaves. Le maître ne teste pas la présence des esclave : il balance 32 paquets et recommence même si personne écoute. Après chaque adresse, le maître teste s’il y a une réponse (ligne activée à zéro) et dans ce cas il lit le mot de 8 bits envoyé par l’esclave et le place dans son tampon. Il n’y a pas de contrôles. La programmation des esclaves, qui n’ont pas nécessairement des interruptions, se fait en appelant toutes les 12us une routine qui teste le bus. Au retour, un flag est activé et l’information peut ètre lue, ou préparée pour le prochain transfert dans 625 us. Les esclaves ont des adresses prédéfinies, mais ils sont tous facilement reprogrammables avec un Pickit2 ou autre. La routine d’interruption qui gère le bus Petra dans le maître est appelée en général toutes les 0.625 ms et s’occupe du transfert des registres en balayant toutes les adresses. Toutes les 20ms, les registres de communication des modules et les registres image dans le maître sont mis à jour (ces 20ms très approximatifs sont nécessaires si des modules servo sont utilisés. En résumé, c’est simple et stupide, donc programmé avec très peu d’instructions. Le logiciel maître utilise 81 bytes dans un processeur 10F 12F 16F, un esclave (16F seulement) qui envoie : 50 instructions et qui reçoit : 48 instructions. KISS (Keep It Simple Stupid) jdn 110215