La carte universelle à Picbasic




L’intégralité de cette page est téléchargeable ici en PDF sous forme de rapport imprimable.(400ko)





La carte de poche à PB3H est une carte microcontrôlée universelle pouvant réaliser aussi bien de la mesure embarquée que le pilotage d'un robot mobile. Elle est simple à réaliser et peu coûteuse, de plus elle se programme en Basic, langage à la portée de tous. Ses caractéristiques lui permettent de trouver sa place dans bon nombre de montages électroniques, par ailleurs elle est un très bon outil d'apprentissage et d'expérimentation. Un vrai couteau Suisse !.

.

Caractéristiques







Le schéma de principe de ce montage est accessible ici !













Vue générale



Le microcontrôleur

Le microcontrôleur retenu pour cette carte est un PicBasic PB3H de la société coréenne Comfile Technologie, disponible en France chez Lextronic. Ce µC est en fait un PIC 16F877 pré chargé d'un bootloader et d'un interpréteur Basic. J'ai choisi ce µC pour sa très grande facilité d'utilisation, la puissance de son langage et parce qu'un PIC 16F877 vierge lui est parfaitement substituable, si on souhaite utiliser la carte avec un autre langage (assembleur, compilateur C ou Basic).

Par rapport à un 16F877 vierge, le PB3H possède certaines restrictions sur l'usage de ses broches. Ainsi les broches 39 et 40 sont réservées à la programmation grâce au bootloader et seront câblées comme le préconise le fabriquant et reliées à une prise jack 3.5mm stéréo plus solide et fiable à l'usage que le connecteur prévu d'origine. Ce montage évitera l'usage d'un programmateur et autorisera la programmation in-situ. (Pour plus d'info consultez la page de Lextronic).

La broche 38 est quant à elle réservée à l'usage d'un écran LCD à liaison série. Comfile commercialise des interfaces série permettant d'utiliser n'importe quel écran alphanumérique standard. C'est ce choix qui a été fait et un écran 16 x 2 est donc relié à la sortie PICBUS via une telle interface.

La broche 6 est réservée pour faire du comptage d'impulsions (20kHz). Elle est reliée au connecteur des entrées via un buffer (74HCT541). Notons qu'au repos elle est tirée à la masse par une résistance de pull-down.

Enfin la broche 1 est réservée au reset du µC et sera donc tirée à l'état haut par une résistance de 10k et pourvue d'une touche de reset la reliant à la masse.

Toutes les autres broches du µC sont libres d'usage et sont conformes à celles du 16F877 d'origine.

L'assignation des broches est résumée dans le tableau suivant :





La programmation se fera grâce au logiciel fourni avec le composant et grâce au câble également fourni qui se connecte au port parallèle du PC. Pour l'édition des programmes et leur programmation dans le microcontrôleur, consultez l'excellente documentation française (un peu succinte) réalisée par l'importateur : la société Lextronic (documentation disponible sur leur site internet.) Pour information le prix de ce microcontrôleur est de 29€. (prix début 2009). Le logiciel de programmation dispose également d'une fonction intéressante puisqu'on peut faire tourner le programme " pas à pas " dans le µC en étant relié au PC et ainsi suivre à l'écran l'évolution des variables. Le débugage est ainsi très facile.





Alimentation

L'alimentation de la carte sera assurée par un accumulateur rechargeable Ni-Cd 8.4v 500 mAh disposant d'une prise de charge en face avant du boîtier. Ce choix est motivé par la grande disponibilité de ce type d'accus dans le commerce et son faible coût. La charge de l'accu se fera carte éteinte, par le biais d'un petit chargeur constitué d'un bloc secteur très ordinaire et d'un montage limiteur de courant à 50 mA (voir la page des fribottes dans les liens), la charge dure 14 heures et procure à la carte une autonomie de plus de 10 heures puisque sa consommation est de 45 mA (sans périphériques).


La tension de 8.4v est régulée à 5V par un régulateur trois pattes type 7805 qui dispose bien des deux volts de marge de tension nécessaire à son bon fonctionnement. Cette tension est découplée par des condensateurs de diverses capacités (470µF et 220nF) qui assureront une protection contre les parasites et pourvoiront aux chutes de tension dues aux appels de courant éventuels. Une led est montée en sortie de régulateur et fera office de témoin lumineux de mise sous tension. Enfin cette tension régulée sera disponible sur un bornier à vis afin de pouvoir alimenter les montages extérieurs ou bien de permettre l'alimentation de la carte avec une source extérieure.

Un amplificateur opérationel est utilisé pour indiquer quand l'accu est vide. Il reçoit la tension brute de l'accu (divisée par 2 par le pont R1 R2) et la compare avec la tension fixe de 3.6v délivrée par la zener D9. Si la demie tension de l'accu descend sous 3.6V (0.9V /élément) l'AOP bascule et allume la diode rouge D8 pour le signaler à l'utilisateur.

Notons enfin que le 5v est également présent sur le connecteur HE10 des sorties. (voir assignation des broches dans le zip de fin de document)




Les trois touches programmables

La carte dispose de trois touches qui sont reliées à une entrée analogique du µC (A0) en réalisant un pont diviseur de tension. Cette disposition est astucieuse car elle permet de relier ces trois touches à une unique entrée du µC. Ces touches seront les bienvenues pour interagir avec le programme et seront facilement intégrables dans celui-ci puisque cette possibilité a été prévue par le fabriquant du µC et qu'une instruction Basic dédiée est prévue :

Cette instruction assure le traitement du signal reçu et renvoie une variable indiquant la touche pressée. Elle peut gérer jusqu'à 10 touches par entrée analogique mais j'ai jugé que trois suffisaient à l'usage prévu.



Le buzzer

Un petit résonateur piezzo est relié à la broche I/O28 et sera très appréciable pour agrémenter les programmes de confirmations sonores. De plus une instruction Basic est prévue pour utiliser ce périphérique et programmer très facilement de petite "phrases musicales" donnant plus de vie à ce montage.


L'écran LCD

Un écran LCD alphanumérique de 2 lignes de 16 caractères est relié à la carte via une interface série (vendue par le fabriquant). Cet écran est connecté au µC sur son entrée spécialisée " picbus " par un seul fil. Un ensemble d'instructions spécialisées permet de le piloter très facilement. La société Comfile Technologie, qui produit le Picbasic propose une gamme complète d'écrans jusqu'à 4 x 20 substituables à celui-ci.
Voici un exemple d'utilisation de l'instruction print qui permet de gérer cet écran, pour plus de détails sur la programmation consultez le manuel du microcontrôleur.

Il est également possible de piloter l'écran directement avec les instructions de liaison série pour diriger plus en détail le fonctionnement de l'afficheur et ainsi de réaliser des animations visuelles telle que : bargraphe, texte défilant etc.

Voici un exemple de programme de texte défilant :

Le programme de test réalisé pour cette carte contient également un exemple de bargraphe.


Le bus I2C

Je vais présenter brièvement le principe d'un tel bus, pour plus de détails consultez la page de liens et notamment le site de Pierre Col, il est très pédagogique.

Le bus I2C à été développé par Philips dans les années 80 pour servir de bus universel entres composants électroniques. Il s'agit d'un bus bifilaire (Serial DAta et Serial CLock plus la masse) sur lequel est réalisé un dialogue sériel synchrone entre un maître (le composant qui prend le contrôle de la ligne) et un ou plusieurs esclaves (le ou les composants qui écoutent le message).

Le protocole de communication est le suivant. Le maître prend le contrôle du bus en réalisant une "condition de start" c'est-à-dire qu'il passe la ligne SDA et ensuite SCL à l'état bas. Dès lors les autres composants sont attentifs au bus et attendront la "condition de stop" pour prendre le contrôle du bus s'ils en ont besoin. Une fois le contrôle pris, le maître envoie sur la ligne un premier octet qui est l'adresse du composant I2C à qui il parle. Chaque bit transmis est matérialisé par la clock (SCL) pour que le receveur puisse différencier les bits qui se succèdent. Les quatre premiers bits sont fixés par les fabriquants pour désigner le type de composant (0101 pour les mémoires par exemple), les trois bits restant sont laissés libres à l'utilisateur pour désigner son composant (on peut donc mettre 8 composants du même type sur un même bus I2C. Le huitième bit sert à préciser si on désire lire le composant ou y écrire. Une fois cet octet envoyé le maître laisse la ligne SDA à l'état haut et l'esclave doit la forcer à l'état bas pour confirmer sa bonne réception, c'est l'acquittement (acknowledge). Ensuite les octets suivants (données) peuvent être transmis, chacun devant être suivi d'un acquittement. Quand le message est terminé le maître réalise la condition de stop en passant SCL et ensuite SDA à l'état haut, le bus est libre.

Cette carte est pourvue d'un bus I2C disponible sur le connecteur HE 10 des sorties et sur trois connecteurs " tulipes ". La ligne est réalisée par les broches I25 et I26 du µC. Une instruction Basic dédiée est prévue et permet d'utiliser facilement ce type de bus.

Le programme de test présent en fin de page comporte des routines de lecture / écriture qui pourront vous servir dans vos propres programmes.

L'intérêt d'un tel bus est simple à comprendre tant ses possibilités sont nombreuses. En effet on trouve toute sorte de composants compatibles I2C : des capteurs, des mémoires (24C16), des horloges (DS1302), des modules entrées / sorties (PCF8574), des convertisseurs analogiques/numériques, des cartes de pilotage de servos etc...
Des interfaces pour PC existent aussi si on souhaite intégrer un PC au bus.




La mémoire EEPROM externe

La carte dispose d'une EEPROM externe sur bus I2C (24LC16) d'une capacité de 2k octets. Elle est câblée sur le bus I2C et est montée sur un support tulipe afin de pouvoir être changée facilement par un autre modèle. Son adresse est 000 (pattes A0 A1 A2). Pour plus de détails concernant le protocole de communication avec les eeproms voir le site de Pierre Col, il est au top. Cette mémoire permettra de stocker des mesures, des données etc..

Les routines suivantes pourront être utilisées pour piloter ce composant.



Le module d'acquisition analogique max1270

Les conversions analogiques/numériques sont réalisées par un composant spécifique cité sur la page toiletoine (voir liens), le MAX1270. Ce composant est un octuple CAN 12 bits à liaison série (type SPI). Les mesures peuvent se faire sur 4 échelles différentes. 0/5v 0/10v ±5v ±10v de plus il est protégé des surtensions jusqu'à ±16.5v. Ce sont toutes ces qualités qui me le font préférer aux entrées analogiques dont dispose le PB3H. De plus cela permet de gagner en E/S supplémentaire.





Il est relié au µC via quatre lignes SCLK / CS / Din / Dout (Sstrb est inutilisé) et se commande selon le protocole illustré sur le chronogramme ci-contre.




Le résultat de la mesure est émis sur la broche Dout sous la forme d'un mot de 12 bits.

L'octet de commande émis sur Din déclenche la mesure et permet de la paramétrer. Par ailleurs il permet de contrôler le CAN en choisissant son mode de fonctionnement. Les tableaux ci-dessous décrivent en détail la composition de cet octet.


Le câblage de ce composant est particulier dans ce montage. En effet il est monté de façon peu conventionnelle puisqu'il partage des lignes de données avec le bus I2C bien qu'il fonctionne selon un protocole différent. En fait en utilisation normale, jamais ce composant ne sera utilisé simultanément avec le bus I2C (il faudrait 2 maîtres). En conséquence et afin de mobiliser le moins de broches possibles la ligne Din est commune avec la ligne Sda du bus I2C et la ligne Dout commune avec la ligne Scl du bus I2C. Ce partage ne pose pas de problème particulier comme l'illustre le diagramme ci-contre. (Le fonctionnement de l'I2C est rappelé dans l'encadré rouge.)

Quand le bus I2C est actif le MAX1270 est rendu inactif par l'état haut de son entrée CS, toutes ses broches de liaison série sont en haute impédance, il ne perturbe donc pas le bus I2C et est transparent à l'utilisateur. Quand c'est le MAX1270 qui travaille, le chronogramme montre bien que la ligne Din ne change jamais d'état pendant que Dout est à l'état haut, dès lors les conditions de start (et de stop) ne sont jamais réunies et les composants I2C restent inactifs. Combien même un composant I2C penserait percevoir une condition de starts il ne recevrait aucun message puisque quand Din (Sda) transmet un octet, Dout (Scl) est au repos et inversement. De fait, les essais avec cette configuration ont confirmé ce raisonnement et aucun problème n'a été rencontré à ce jour.



Voici un exemple de routine de dialogue avec ce composant.

    max: out csb,0
      shiftout scl,din,1,octet de commande
      résultat=shiftin(scl,dout,1,16)
      out csb,1
      return


L'étude du chronogramme ci-dessous nous montre que la lecture du résultat qui se fait sur 12 bits ne permet de lire que les 11 premiers bits du résultat car celui-ci apparaît après un délai de 5 clock. Ce retard ne serait pas facile à prendre en compte dans la programmation et j'ai jugé qu'une résolution de 2048 pas était suffisante pour une grande majorité de cas.



Notons enfin que l'entrée ch0 du convertisseur est attaquée par un potentiomètre de 20k qui permet de disposer sur la carte d'une tension analogique modifiable manuellement. Cet accessoire est très appréciable et permet de programmer des applications réglables manuellement (variateur de vitesse, variation de vitesse d'échantillonnage, variation de la vitesse de défilement d'un chenillard etc.)




La liaison RS232

Rappelons que les liaisons RS232 sont des liaisons asynchrones très utilisées en informatique (port série). Elle nécessite que l'émetteur et le récepteur soit informé de la vitesse choisie pour le transfert. Dès lors, chaque octet transmis est encadré d'un bit de start et d'un bit de stop qui en précise le début et la fin. Puisque le récepteur connaît la vitesse du transfert il peut se passer de signal de synchronisation.

Trois lignes sont nécessaires à cette liaison. TD (transmission de donnée), RD (réception de donnée) et la masse.
Les vitesses de transfert possible avec le PB3H sont de :


Pour plus d'information sur les liaison asynchrone consultez la page de liens. (page de Christian Tavernier par exemple)

Grâce à cette liaison la carte peut devenir une sonde de mesure ou bien servire d'interface entre un PC et un montage extérieur. Les données transmisent peuvent être de tout type : mesures, consignes, état de capteurs etc L'intérêt de ce port de communication est qu'il ouvre les portes des PC.
Afin d'adapter les signaux TTL du µC au standard RS232 un MAX232 est monté de façon classique. Les lignes RX, TX et la masse sont disponible sur un connecteur SUB9 mâle qui permet ainsi de relier la carte au PC avec un simple câble série croisé.



Une instruction Basic est là encore prévue pour piloter très facilement ce port

      serout port, param1, mode,param2,[var1]
      serin port, param1,mode,param2,adress,[var1]

Voici un exemple de programme qui envoie à un PC munis d'un terminal adéquat le message " INSA Strasbourg " lorsque l'on presse une touche.

        vitesse 9600bps ; pas de parité ; 1 bits de stop

    10 dim touche as byte
      touche = adkeyin(port)
      if touche=1 then
      serout 16,103,0,1,["INSA Strasbourg"]
      delay 1000
      end if
      goto 10

Le terminal à utiliser doit être compatible RS232. Sous Windows l'hyperterminal convient très bien mais d'autres logiciels plus sophistiqués sont téléchargeable sur internet.

Les entrées numériques

La carte dispose de 8 entrées numériques avec buffers (74HC541). Rappelons que le buffer est un circuit intégré chargé de servir d'interface entre un microcontrôleur et le monde extérieur. Il est là pour être détruit à sa place en cas de problème quand on le met en entrée et pour amplifier les signaux quand on le place en sortie. Un microcontrôleur ne peut débiter que quelques mA sur chaque sortie alors que le buffer peut tenir 20 mA. Ces buffers non inverseurs possèdent des triggers, la tension minimum des états hauts est de 2V et la tension maximum des états bas est 0.8V. Ces entrées numériques sont tirées à la masse par un réseau de résistance de 100k. Elles sont toutes disponibles sur le connecteur HE10 des entrées. Le réseau de résistance est monté sur un support tulipe et peut ainsi passer à un tirage a l'état haut si nécessaire en le retournant.


Notons enfin que 7 d'entres-elles sont utilisables en entrées analogiques 5v/10bits après avoir passé les buffers en haute impédance grâce au cavalier prévu. Ceci fait, les entrées analogiques sont accessibles via les supports tulipes prévus à cet usage (voir schéma de principe), il conviendra d'être particulièrement vigilant sur la nature des signaux appliqués sur ces broches. En effet elles sont alors reliées au µC sans aucune interface et ne supportent pas de tension supérieure à 5v. Si une telle tension devait être appliquée, il conviendrait de réaliser un pont diviseur de tension afin qu'elle ne dépasse jamais 5v.

La mesure de tension analogique devra de préférence se faire grâce au MAX1270 cité précédemment qui est protégés des surtensions et qui préserve le µC des erreurs de manipulation.



L'entrée de comptage d'impulsion

La carte possède une entrée spécialisée dans le comptage d'impulsion. Les signaux acceptés auront une fréquence maximum de 20kHz et seront comptabilisés sur front montant, cette entrée est elle aussi suivie d'un buffer avec trigger. Cette entrée est particulièrement utile pour comptabiliser les impulsions gérées par un montage externe comme par exemple une fourche optique sur un dispositif odomètre. Dommage qu'il n'y en ait qu'une.

L'instruction dédiée à l'usage de cette entrée sera appelée quand on le souhaite dans le programme puisque le comptage s'effectue en " tâche de fond ". La valeur du compteur est accessible en rappelant la fonction count. Notons enfin que cette fonction est gérée sur 16 bits (cad 65536 impulsions) et qu'au-delà elle repasse à 0.

On peut utiliser le montage ci-contre pour générer les impulsions à comptabiliser. Il utilise une fourche optique CNY37 et un transistor BC550 pour l'interfaçage.



Les sorties numériques

La carte dispose de 11 sorties numériques avec buffers capables de supporter 15mA à l'état haut et 20mA à l'état bas. Ces 11 lignes sont accessibles via le connecteur HE10 des sorties. Je rappelle que ces signaux sont de type TTL et qu'en conséquence ils doivent être interfacés pour pouvoir débiter un courant plus important.
Deux cavaliers sont prévus pour pouvoir passer les sorties en haute impédance et ainsi isoler le µC de ses périphériques. Des connecteurs tulipes sont également prévus entre les buffers et le microcontrôleur, il est donc possible d'utiliser les sorties comme entrées si nécessaire (avec les précautions de rigueur) en se repiquant à cet endroit. (Voir schéma de principe)


Deux de ces lignes de sortie peuvent produire des signaux PWM à 1.22kHz qui seront utilisés pour alimenter des moteurs via un étage de puissance adapté. Rappelons que la PWM est un signal qui ne connaît que deux états, haut et bas. C'est la différence de temps passé entre l'état haut et bas qui détermine la vitesse du moteur. Ce rapport est appelé rapport cyclique. Dans le langage Picbasic ce rapport cyclique est codé sur 8 bits. L'instruction de pilotage des PWM est des plus simple à utiliser :




Les sorties sur relais

2 sorties sur relais 2 RT sont disponibles sur un bornier à vis. Les caractéristiques des relais dépendent bien sur des modèles choisis mais les modèles courant pour CI ont les spécificités suivantes :

Les relais sont pilotés via un transistor de commande et leur état est visualisable par une led, précieuse lors de la programmation. Ne pas omettre la diode " de roue libre " montée en inverse au borne du relais sous peine de destruction du transistor.










Réalisation pratique de la carte

La carte est réalisée en époxy simple face. Le circuit est réalisé de façon classique mais avec soin en raison de la densité importante de piste. Après gravure le circuit pourra être étamé afin de le préserver de l'oxydation. L'ensemble des trous sera percé à 0.8mm et les trous des composants ayant des broches plus importantes (diodes, inter, prise sub9 etc) seront percés à 1mm. Enfin nous percerons les trous de fixation de la carte, de l'écran LCD et de passage de l'interrupteur. J'ai également passé une couche de peinture en bombe sur le coté composant du circuit pour en améliorer l'aspect (ca devient ma signature !).

La soudure débutera avec les straps très nombreux sur cette carte, ensuite les résistances, les supports de CI et ainsi de suite par ordre croissant de taille. Plusieurs éléments sont à connecter au circuit par soudure de leurs fils directement sur les zones cuivrées prévues à cet effet. (voir figure d'implantation) L'écran LCD sera fixé grâce au deux trous prévus via deux tiges filetées M3 misent en forme.

Avant de mettre en place les CI on procèdera aux contrôles d'usage en vérifiant que les tensions en divers points du montage sont bien conformes au schéma de principe. Enfin on pourra mettre en place les différents CI et charger un premier programme.

Pour finir la carte sera montée dans un boîtier sur mesure (le mien est en bois) adapté qui renfermera tous les éléments (buzzer, accus, connections diverses, prise jack de charge et de programmation) et qui participera à finir proprement ce montage.

Voici le schéma de câblage car les différents éléments se soudent à même le typon:







Un dossier ZIP contenant le typon, le schéma d'implantation et de cablage ainsi que le programme de test est téléchargeable ici (500ko)



Le programme de test

Je propose dans le fichier ZIP du typon un programme de test qui permet de vérifier l'ensemble des fonctions de la carte et de s'assurer de leur bon fonctionnement. Le programme propose à l'utilisateur via un menu déroulant manipulable par les trois touches les différentes fonctions de la carte. Une fois la fonction à tester sélectionnée le programme de test débute et se termine par un rapport de fonctionnement que l'on quitte pour retourner au menu de départ.

Les routines de fin de programme pourront être facilement réutilisées pour d'autres applications.



Perspectives

Si vous souhaitez construire une carte semblable pensez aux points suivants, positifs et négatifs que je tire de cette construction.






Exemples d'utilisations



Test d'un driver de servos (SD20) avec des nappes adaptées et une plaquette de test.



Transfert et tracé de données sous Excel par la liaison RS232



Liaison par bus I2C avec Vizz







Si vous avez des questions techniques ou besoin de précision vous pouvez m'écrire.
Cependant par manque de temps je ne pourrai pas :
Vérifier vos programmes, débugger vos montages, examiner vos schémas ou faire vos projets scolaires à votre place !
Par contre je réponds avec plaisir aux questions PRECISES et bien formulées.

Alex_narbonne@yahoo.fr