Voilelec     Retour page précédente
     0 (comptage en panne, crash base SQL) connectés       Une missive s'envolera dans l'éther...
 

Cartes à Pic 16F84 et 16F628

 Pic


Introduction
Description projet minimum
Quel langage choisir ?
Le choix du microcontrôleur
Récupérer le logiciel
Acheter le matériel
Découvrir le Pic
Ecrire le petit logiciel
Compiler le logiciel
Réaliser le programmateur
Programmer et tester
Améliorer le programme
Progression possible
Conclusion
Liens

Page de notes complémentaires :
Glossaire
Port d'entrées-sorties
Pondération temporelle

Maj : 27/04/08

Abstract :
Yes an other page on Microchip Pic, but only devoted to newbies. It is a small project, described with a lot of details, from level zero to the fantastic final result, a led is blinking ! After this first phase, the newbie is now able to make a real project with a controller.
16F84 is now obslole, swap on 16F628 cheaper and with twice space.
Don’t be focused only on Pics, world is great and there are plenty of fabulous controllers.

 

Résumé :
Oui, une autre page sur les Pics Microchip, mais seulement destinée aux débutants complets. C'est un petit projet, décrit avec beaucoup de détails, du niveau zéro jusqu'au résultat final fantastique, une led clignote ! Après cette première phase, le débutant est maintenant capable de faire un vrai projet avec un microcontrôleur.
Le 16F84 est maintenant obsolète, basculez sur le 16F628 moins cher et avec le double de ressources.
Ne soyez pas focalisés seulement sur les PICS, le monde est grand et il y a d'abondance de contrôleurs fabuleux.

 

  Introduction

Mais pourquoi cette page minable sur un sujet aussi abondant que les Pics sur le Net ? Il est vrai que les ressources sur les Pics sont énormes et que cette page ne va pas révolutionner le réseau. Elle n'a comme seul but que d'être pédagogique et de permettre à celui qui n'a jamais programmé un microcontrôleur, de lui faire réaliser un projet très simple en partant de zéro. Ce projet sera décrit avec tous les détails afin que le débutant complet puisse le réaliser avec un investissement inférieur à 20 € tout compris.
Une fois le projet réalisé, le lecteur aura compris comment programmer un microcontrôleur et sera prêt à se lancer dans un vrai projet.
Cette page ne s'adresse donc qu'au débutant complet, elle fera sourire les vieux routiers du microcontrôleur qui la parcourront rapidement. Je consacrerai d'autres pages plus pointues à des projets plus délicats, réservés à ceux qui ont déjà de l'expérience.
Le jargon vous parait obscur ? Les mots principaux sont définis dans la note glossaire :
Si vous n'avez toujours pas la moindre idée à quoi peut servir un microcontrôleur, regardez la " Note sur les projets ".

 

Le pré-requis

Pour se lancer dans une activité il faut toujours un pré-requis. Il ne serait pas charitable de persuader un manchot d'apprendre à jouer du piano. Pour jouer du microcontrôleur, il faut quelques conditions.
Avoir la curiosité de découvrir ce monde, qui se révèle passionnant, sans ignorer que cela prendra beaucoup de temps, l'apprentissage est sans fin.
Avoir quelques bases en électronique pour ne pas butter sur les bases. Si vous ne comprenez pas la différence entre le courant continu et alternatif, si vous n'avez jamais vu un fer à souder, ce sera dur…
La clause rédhibitoire absolue ! Savoir lire l'anglais technique. Sans cela, point de salut, Tous les documents sont en anglais. Ce n'est pas de l'anglais littéraire, il se lit facilement, mais si vous faites une allergie, c'est sans espoir, renoncez immédiatement. Je traduirai les termes principaux.

 

 Haut de page

 

  Description du projet minimum

Ce projet va montrer comment réaliser l'application la plus simple possible. Elle consistera à mettre en œuvre avec le minimum de moyens un Pic qui fera clignoter une seule led. Pour arriver à ce résultat final, il faut décomposer les étapes :

Charger les documents de base chez le constructeur et commencer à les lire pour éclaircir le sujet. Vous commencez à voir la différence entre un processeur CISC type 8051 (C pour complet) avec son jeu très important d'instructions et le Pic avec son jeu RISC (R pour nombre Réduit d'instructions). Ce sont deux philosophies différentes, mais cela ne change rien en pratique. Moins d'instructions impliquent un apprentissage plus rapide, mais plus d'instructions pour réaliser une opération.
Approvisionner les rares composants et les câbler sur une plaque d'essai.
Concevoir le logiciel et utiliser les outils logiciels.
Réaliser un programmateur minimum.
Charger le programme dans le Pic par le programmateur.
Mettre en marche et s'émerveiller en famille devant la led qui clignote. Je suis sûr que votre compagne va s'extasier en bavant devant tant de beauté complexe, il en est toujours ainsi et vous passerez à ses yeux pour un génie (mais non, je plaisante…).

Maintenant vous êtes capable de mener à bien un vrai projet microcontrôleur. D'autres pages vous montreront ensuite qu'un petit microcontrôleur peut faire des choses extraordinaires.

 

 Haut de page

 

  Quel langage choisir ?

Le débutant en microcontrôleur se pose toujours la question de savoir quel est le meilleur langage de programmation. Le choix dépend de la culture de celui qui se lance.

Le basic
C'est le préféré du débutant. Les anciennes versions manquaient de rigueur et produisait un code médiocre, les versions récentes sont meilleures. L'inconvénient est que ce langage n'est pas portable, mais le débutant pourra créer rapidement de petites applications sans prétentions. C'est un tremplin pour ensuite passer à autre chose.
Le picbasic a fait beaucoup aidé les débutants pour le déploiement de la famille pic.
Vous trouverez ici une application qui exploite le basic : Pilotage d'un récepteur TV avec scanner

 

Le langage C
Un habitué de la programmation sur diverses plate-formes choisira le langage C. Ce langage est universel, rigoureux et efficace. Il permet de tout faire, quel que soit le support. Il existe de très nombreux compilateurs pour tous les matériels. Ce langage a pour seul défaut d'être d'une approche difficile pour le débutant qui peut avoir du mal pour décoller.

 

L'assembleur
Il effraie le débutant par son approche complexe. C'est toutefois le plus proche de la machine, il produit un code compact et rapide, mais tout doit être défini à la main. Il est parfait pour les applications en temps réel qui demandent la maîtrise de timings très courts. Il est très stimulant intellectuellement pour qui veut s'impliquer dans des projets complexes.
Il sera souvent utilisé pour créer des primitives très efficaces qui seront appelées par des routines en C. Le C combiné à l'assembleur sera l'outil de base incontournable du programmeur performant.

L'assembleur présente toutefois un gros inconvénient !
Un programme en C sera transportable facilement, quasiment sans rien changer sur des dizaines de plate-formes, il n'y a pas à se préoccuper du processeur qui fera tourner l'application, c'est le compilateur qui fera tout le travail de traduction (comme d'ailleurs en basic).
En assembleur c'est tout différent, le travail se fait au niveau de l'instruction et la même routine sera méconnaissable pour deux processeurs différents.
Chaque changement de circuit demandera à se plonger dans les data books et il faudra toujours garder sous le coude le jeu d'instruction détaillé. Il est très difficile de travailler efficacement en parallèle sur des familles différentes en assembleur.

 

Le Pascal
C'est un langage pédagogique. Il n'est pas utilisé dans l'industrie, le C est plus polyvalent, plus portable et plus riche, la complexité de l'apprentissage est du même ordre.
Ne l'utilisez que si vous l'avez appris à l'école et que si vous ne voulez pas faire d'effort supplémentaire, mais oubliez-le si vous avez l’ambition de progresser.

 

Delphi
Delphi est du Pascal habillé avec un gros environnement de programmation. Ceux qui l'utilisent en sont contents, mais l'ayant peu pratiqué je ne l'aime pas beaucoup, je préfère le C.

 

Le JAL
C'est un outil exotique particulier, voisin du C et du Basic et d'un abord simplifié pour des débutants. Il produit un code compact, mais malheureusement il ne se compile que sur quelques rares circuits. Cette limitation s'avère trop gênante quand il faut s'adapter à des circuits différents pour chaque projet, c'est la raison pour laquelle je ne le développerai pas. Vous trouverez beaucoup de liens en cherchant " jal compiler ".

 

Java
Le Java est proche du C, avec une ouverture vers les réseaux. Sur notre petit Pic, aux ressources limitées, il faut l'oublier.
Ne pas confondre évidemment avec Javascript, le langage de script pour html qui n'a strictement rien à voir.

 

 Haut de page

 

  Le choix du microcontrôleur

Cette famille Microchip est vraiment intéressante avec son jeu d'instructions RISC. Un des produits phares des annéess 90 était le Pic 16F84, qui, associé à l'eeprom 24C16, constituait la base des décodages en télévision numérique commerciale cryptée. Cela a eu pour inconvénient que le prix de ces composants a explosé chez les margoulins, certains clients étant prêts à payer ces chips à m'importe quel prix.
Je tiens à préciser qu'il ne sera décrit dans ces pages aucune application Seca (ni pipi-caca) visant à décoder éventuellement des chaînes payantes, loin de moi l'idée d'enlever le pain de la bouche des actionnaires nécessiteux.
Ne m'écrivez jamais pour me demander une quelconque information sur cette utilisation de ces pics, je ne savais même pas que cela existait avant de lire le texte que je viens d'écrire. Suis-je bien clair?

PIC signifie simplement "Programmable Intelligent Controller".

Les Pics servent aussi à bien d'autres applications et sont particulièrement à considérer pour de petites applications à faible consommation. Un de leurs avantages est de pouvoir utiliser un programmateur très économique constitué seulement de quelques composants passifs sur le port série. Faites une recherche avec "Ludipipo". Découvrez ces composants si vous ne les avez pas encore mis en œuvre.
Je décrirai ultérieurement des applications à base de Pics, souvent avec eeprom et ram associées sur bus I2C, en particulier pour les petites interfaces intelligentes.

Un Pic est-il le bon choix ?

C'est une affaire de religion ! Comme je l'ai dit plusieurs fois, tous les cpu sont bons, le choix dépend de l'application.

Un Pic est parfait pour une petite application autonome, avec très peu de hardware autour, ne demandant pas une grande vitesse ni puissance de calcul. Si vous devez l'intégrer à un environnement chargé et rajouter des mémoires, des convertisseurs externes, ce n'est pas une bonne idée. D'autres familles plus puissantes sont mieux adaptées.

Attention, le PIC 16F84 est un matériel obsolète, utilisez-le si vous en avez dans vos poubelles, mais il ne faut surtout pas en commander pour un nouveau projet. Il est remplacé par le 16F627 (ou 8) deux fois plus puissant plus rapide et moins cher. La famille Microchip comporte une quantité impressionnante de modèles.

Le Pic présente l'avantage qu'il existe en particulier chez Microchip des outils gratuits et complets pour le mettre en œuvre, alors que tout est payant chez d'autres.

 

Un Pic pour la vie ?

Ne soyez toutefois pas obsédés par les Pics parce que vous avez commencé votre carrière en faisant clignoter une led avec un Pic. Le monde et vaste et la technique progresse très vite.
Atmel propose deux familles beaucoup plus modernes et performantes, la famille AVR (qui reste dans l’esprit des Pics) et pour des puissances de traitement considérablement plus grandes que nos petits besoins, les familles ARM.

Pour un nouveau projet ambitieux, passez sur ARM, les prix sont compétitifs, la puissance et les interfaces incorporées laissent les Pics très loin derrière et ce sont les noyaux de l’avenir. Il y en a dans tous vos objets technologiques du quotidien.
La famille ARM fait peur quand on n’a bricolé que sur des petits contrôleurs, mais l’investissement intellectuel vaut la peine si l’on vise des projets ambitieux.

 

 Haut de page

 

  Récupérer le logiciel

La première démarche consiste à charger chez le fabricant "Arizona Microchip Technology" les indispensables outils de base pour le 16F84, voici par exemple le disponible de première urgence (Version 2000, il y a plus récent) :

Il existe bien des langages, mais nous commencerons en assembleur, puis en C avec l'outil MPLAB de Microchip, il est gratuit et de plus excellent.

Document Référence Longueur

Mpasm_User_Guide

33014g.pdf

2 352 821

Mpasm_ref_guide

30400d.pdf

324 686

Prog_Spec

30262c.pdf

363 051

MPLab

51100.exe

9 852 378

Il faudra ensuite récupérer les notes d'applications de base et quantité de documents complémentaires en commençant par la page : microchip.com/10/Appnote/Category/16CXX et en utilisant "search" ensuite. Ces notes sont indispensables pour commencer, car ce sont de très bons exemples montrant comment écrire les déclarations dans les règles de l'art.
Au début, il est normal que cela vous semble très confus, imprimez, prenez des notes et utilisez le surligneur; la lumière viendra peu à peu, ne paniquez pas, il faut du temps.

 

 Haut de page

 

  Acheter le matériel

La demande a été très importante sur ce modèle vers la fin du dernier siècle, en particulier liée à son utilisation dans des cartes pirates ce qui a fait flamber les prix. Les Pics se trouvent chez tous les distributeurs, il en existe beaucoup d'autres modèles moins chers. Le 16F84 n'est plus fabriqué, il est remplacé par le 16F628 directement compatible avec le double de ressources.

Les remarquables 8 pattes comme le 12c508 sont parfaits pour de minuscules applications où il suffit souvent de manipuler un seul fil, ils se trouvent encore moins cher. À l'unité à l'épicerie du coin, ce sera double ou triple. Il existe une grande variété de Pics, vous avez le choix entre bien des modèles.

 

 Haut de page

 

  Découvrir le Pic

Pour simplifier, nous le prendrons en boîtier plastique DIL, c'est le gros à 18 pattes, beaucoup plus facile pour débuter que les très petits CMS (montage de surface) qui ne se montent pas sur supports. Le 04 signifie horloge à 4 MHz, le P, "plastique".  Pic

Vous avez commencé à découvrir le Pic en parcourant les documentations, vous comprenez les fonctions des broches (ou pattes), mais un petit résumé simplifié s'impose.

Le 5, VSS est la masse (négatif), le 14, VDD en face est l'alimentation positive 5 volts. Il faudra découpler l'alimentation sur la carte par un condensateur de 100 nF, au plus près possible des pattes. L'alimentation est très tolérante.

Les 15 et 16 sont les entrées horloge, nous verrons leurs possibilités variées, par RC ou quartz.

Le 4, MCLR est le Master Clock Reset. Pour l'application minimale, il peut être relié simplement au positif, mais il est plus élégant de mettre résistance, condensateur et poussoir.

Les RA0 à 4 et RB0 à 7 sont des lignes de ports logiques, configurables par programme en entrées ou sorties, certaines ayant des fonctions supplémentaires.

Caractéristiques principales :

1024 mots (octets) de mémoire flash programme 8 bits (register file), avec bus adresse sur 14 bits.
68 octets de RAM données (volatile).
64 octets de donnéees en EEPROM (programable).

Cela peut sembler très peu au débutant, et pourtant certains font des merveilles avec cela. D'autres Pics ont des capacités plus étendues, le successeur 16F628 a le double, le 16F83 par exemple a 7 ko de mémoire programme.

La particularité de ces architectures "Harvard" est qu'il y a deux bus internes, un bus mémoire et un bus data. Dans un même cycle horloge les accès à une adresse et à une donnée peuvent être simultanés. Cela augmente la bande passante par rapport aux architectures "von Neumann" dont les mémoires programmes et données partagent le même bus.

Nous pouvons maintenant monter le circuit sur une petite plaquette d'essais. Cette plaque est quasiment vide, elle ne comporte qu'un découplage de l'alimentation 5 volts, le quartz et ses deux condensateurs (ou le montage RC) et rien d'autre pour le moment, sauf une led et sa résistance pour visualiser le fonctionnement. La consommation du Pic seul est très faible (elle dépend de la vitesse de l'horloge), la led consomme une dizaine de mA.

J'ai fait un premier essai sur une plaquette expérimentale puis sur un circuit à bandes cuivre.

Si vous alimentez par une petite boite à piles, utilisez 4 accumulateurs R6 NiMh qui dureront très longtemps. Il est moins pratique d'en utiliser seulement 3, en principe les chargeurs ne gèrent les élements que par paires. Le Pic tolère de 2 à 6 volts. Si vous alimentez par des sources bizarres, vous pouvez utiliser un régulateur 78L05 en protection, le L est important, les gros ont une perte très supérieure à la consommation du montage.

 

 Haut de page

 

  Ecrire le petit logiciel

Ce premier logiciel que nous allons écrire sera en assembleur. C'est le langage de très bas niveau, cela signifie qu'il est le plus près possible du matériel et cela n'a rien de péjoratif. Il permet d'écrire le programme le plus compact qui soit, ce qui est appréciable quand l'espace mémoire est petit. Comme la manipulation se fait au niveau des instructions élémentaires, les timings peuvent être totalement optimisés.
D'autres projets plus gros incorporeront du code en langage C mélangé à des bibliothèques écrites en assembleur. Sur un contrôleur à ressources limitées, l'assembleur sera souvent préféré pour optimiser les ressources disponibles.
Pour les débutants absolus, il faut faire une présentation très rapide de l'assembleur. Je détaillerai au maximum au début, dites-moi si ce n'est pas encore assez clair.
Nous allons créer un programme qui portera l'extension ASM, et qui est un simple fichier texte, disons "test.asm", que vous pouvez écrire avec un quelconque petit éditeur texte, le motepad (ou bloc-notes) par exemple. C'est du texte brut, et non pas un fichier .doc sous Word !

Il se compose d'une suite de lignes, chacune comportant une seule instruction qui sera comprise par le processeur après interprétation, par exemple :
MOVLW .200
Cette instruction signifie : Move literal to W, c'est à dire charge la valeur décimale 200 dans le registre W, le registre de travail (c'est une case mémoire privilégiée) qui sera sollicité en permanence. Après exécution de cette instruction, un compteur de position (pointeur) sera incrémenté (incrémenter=ajouter un saut d'une adresse) pour exécuter l'instruction suivante, ce sera par exemple :
MOVW count1
Cette instruction signifie : charge la valeur du registre W (définie à l'instruction précédente) dans la case mémoire count1. Ce "countl" en question n'est pas défini par le constructeur, ce n'est qu'une étiquette dont nous avons choisi un nom quelconque et qui pointe une adresse mémoire, par exemple :
COUNTL equ 0C
Cela définit une case mémoire (le registre C) qui nous servira de compteur utilisé plusieurs fois dans le programme. Cette adresse ne sera définie qu'une seule fois, ensuite seule son étiquette sera utilisée. Cela est très souple pour gérer tout l'espace mémoire.

Dans la première instruction, nous avons déjà manipulé une valeur littérale absolue, c'est un nombre fixé par l'auteur.
Dans la deuxième instruction, la valeur utilisée est déjà contenue dans un autre registre. Sa valeur absolue n'apparaît pas.

Le jeu d'instruction contient évidemment tout ce qui sera nécessaire pour faire le programme le plus complexe. Les instructions, bien que peu nombreuses (c'est du Risc !) permettent de manipuler les mémoires, lire et écrire les ports, faire des branchements sous diverses conditions…
Le Risc a toutefois un gros inconvénient. Le R signifie réduit, et le fait qu'il y ait peu d'instructions s'avère pénalisant, car une seule instruction d'un Cisc, C signifiant complet, demande souvent plusieurs instructions en Risc pour remplacer la fonction manquante. Il faut s'y faire.

Le programme commencera par une zone de définition de constantes que nous détaillerons puis les instructions du programme. Voir la compilation chapitre suivant.

Le code est détaillé dans une page séparée, mais voici en résumé sa structure :

En-tête. La partie définition des constantes, adresses et variables. Cette partie à un formalisme particulier, ne vous en préoccupez pas trop pour le moment. Elle sera sensiblement identique pour tous les programmes. Elle sert à fixer les conditions de travail pour l'assembleur. Pour le moment, ne faites pas de variantes sans comprendre sous peine d'échec.

Vrai début. Commence par définir le port B en sortie. Cette initialisation qui ne sera exécutée qu'une seule fois au reset. Afin de bien illustrer le fonctionnement d'un port, voici en aparté un petit exemple pour adresser un clavier matricé.
Voir le détail de l'utilisation d'un port (page séparée)
La boucle programme.
Écrit une valeur dans le port.
Attend quelques dixièmes de secondes (fait un gosub à une boucle d'attente).
Change la valeur précédente (donc l'état de la led qui va clignoter).
Bouclage infini. Repart dans la boucle programme (c'est un goto).

Il n'est pas possible de faire plus simple; mais rassurez-vous le Pic peut exécuter des tâches bien plus complexes…

Si vous avez des acquisitions à réaliser par lecture de capteur, voici un exemple simple de manipulation de données par moyennage.

Pondération temporelle pour acquisition de données :


 Boucles de pondération

 Haut de page

 

  Compiler le logiciel

Ce texte source sera ensuite passé à la compilation, ici le compilateur "Mpasmwin.exe" sous Windows, disponible gratuitement comme évoqué au début. La syntaxe sera analysée et les erreurs détectées.
Le source assembleur "test.asm" est un texte brut source commenté qui explique en détail toute la structure du programme. Les modifications et évolutions du programmes seront réalisées sur ce source. sera corrigé jusqu'à obtenir une compilation sans erreur. Tous les outils équivalents existent aussi sous DOS pour les nostalgiques. Différents fichiers seront creés par ce processus :
Un fichier erreur "test.err", qui listera toutes les anomalies à corriger.
Un fichier liste "test.lst" qui reprendra le fichier original assembleur en lui ajoutant les codes générés. Ce fichier ne sert que pour les vérifications.
Un fichier "test.hex" qui est le code final, au format Intel, prêt à être transféré par le programmateur dans le Pic.
Nous verrons ultérieurement d'autres fichiers lors de la création d'un projet plus complexe.

 

 Haut de page

 

 

  Réaliser le programmateur

Pour ce chapitre, je ne vais pas me fouler… Des réalisations très éprouvées existent, série ou parallèle. Choisissez la version que vous voulez, par exemple le ludipipo et son logiciel associé. Je me contenterai de donner les liens. Cet étrange montage est très simple et économique et fonctionne miraculeusement.
Il faudra choisir avec soin le matériel et son logiciel associé, certains ne tournent que sous DOS natif (pas dans une fenêtre). Il est préférable de choisir une version Windows pour passer rapidement du développement à la programmation sans avoir à rebooter.

Vous avez le choix entre des versions sur port parallèle ou série. Les versions parallèles sont plus rapides, mais vu la taille très réduite du programme à transférer, je préfère une version série qui demande un câble plus petit.
Vous serrez surpris du grand nombre de conceptions possibles, depuis des solutions très évoluées jusqu'à des versions dépouillées à l'extrême avec quatre composants passifs. Toutes les variantes fonctionnent, certains respectant très rigoureusement les spécifications fabricant, d'autres prenant des libertés astucieuses en exploitant les tolérances du composant. Les plus simples seront limités à un type unique et ne marcheront pas sur un portable qui ne respecte pas les niveaux RS-232 normalisés à +/- 9 volts. Commencez par un retir peogrammateur simple et éprouvé, par exemple le Ludipipo, il a une auto alimentation très étrange, mais il fonctionne.
N'oubliez pas de déclarer les flags de configuration, en particulier le type d'horloge.
Vous avez compilé votre programme sans aucune erreur, vous disposez donc maintenant d'un fichier "montest .hex", il suffit de le transférer dans le Pic et de tester.
Je suppose donc maintenant que vous avez réalisé le programmateur et qu'il fonctionne.

 

 Haut de page

 

  Réaliser la plaquette d'essais

Première solution très rapide. Utiliser une plaquette d'essais comme celle ci, il faut quelques minutes pour monter les composants (une seule led) et mettre à feu. Ce n'est pas très propre, il y a des mauvais contacts, mais cela permet de faire marcher son premier montage en un temps record. Je l'utilise souvent pour des prototypes rustiques.

 Phase 0

Cette étape réalisée, j'ai monté presque proprement une plaquette à bandes ce qui élimine le problème des mauvais contacts et permet de voir les états des 8 leds du port B.
Voici cette première carte réalisée et en 4 heures, alimentation comprise.

  Phase 1

Les leds sont montées sur des supports de circuits intégrés, les résistances sont dessous. Cela permet de reconfigurer rapidement la plaquette pour d'autres usages. Les 4 interrupteurs ne sont pas encore câblés, ils sont destinés à lire le port A en entrée pour les tests suivants.
Solution propre. Il faudra évidemment tirer un circuit propre pour une vraie application, mais ce n'est pas le moment, contentons-nous pour le moment de découvrir le Pic, ce matériel est suffisant pour la prise en main.

 

 Haut de page

 

  Programmer et tester

Vous êtes fébrile et vous voulez tester tout de suite en brûlant les étapes. Sur le plan pédagogique, ce n'est peut-être pas idéal, mais il est très motivant de voir son premier montage fonctionner rapidement. Récupérez le fichier zippé joint. Vous y trouverez, en plus d'un texte d'information :

"test0.asm" C'est le texte source comportant instructions et commentaires.

"test0.hex" C'est le fichier déjà compilé, prêt pour être transféré au programmateur.

Pour faciliter les débuts, dans ce premier exemple le ".hex" est donné. Par la suite, c'est inutile seul le source ".asm" sera transmis, vous compilerez vous même les résultats de vos modifications.
La première fois, programmez le sans réfléchir, alimentez votre Pic sur la carte prototype. En branchant une led sur une patte quelconque du port B, elle va clignoter. Mieux, en branchant les 8 leds vous allez voir un chenillard. Cela vous assurera que tout votre hardware fonctionne.

Chargement du premier exemple de chenillard à leds (version 25/12/00) :   Charger fichier   test .zip

Maintenant on se calme, et on va s'efforcer de comprendre pourquoi cela marche en reprenant le cours normal des choses. Relisez bien les documents pour comprendre les subtilités et conventions d'écriture d'un programme assembleur.

 

 Haut de page

 

 

  Améliorer le programme

Dans cette étape nous allons réaliser un logiciel un peu plus évolué. Nous avons utilisé seulement au début le port B en sortie, pour faire clignoter des leds, nous allons aussi utiliser le port A mais en entrée cette fois. Il permettra de lire 4 bits donc donnera 16 possibilités d'actions.

Le port sera palpé par une routine tournant en tâche de fond par interruption qui détectera un changement et déclenchera un changement d'activité. Nous n'utiliserons plus de boucles d'attentes pendant lesquelles le processeur ne fait que décompter, mais des vraies interruptions qui permettent de lancer diverses applications en temps partagé.
Nous pourrons alors écrire un noyau temps réel, c'est à dire découper le temps machine en multiples tranches et exécuter de multiples actions pseudo simultanées. Cela sera très utile pour manipuler ensuite les bus I2C, série, NMEA et autres.

à suivre...   

 Haut de page

 

  Progression possible

Voici une progression possible pour arriver à maîtriser le fougueux microcontrôleur.

Franchir la première étape, qui est de loin la plus difficile pour le débutant qui part de zéro, faire clignoter les leds et comprendre vraiment pourquoi cela fonctionne. Le reste viendra ensuite tout seul !

Réaliser des boucles d'attente exactement calibrées qui serviront ensuite souvent dans les premiers projets, étape facile qui permet de voir le temps pris par les instructions.

Envoyer des caractères sur le port série qui seront lus avec un simple terminal. Cela permet d'exploiter un timer, de voir les interruptions et de découvrir le très classique adaptateur entre TTL et RS-232, l'ancêtre MAX 232.

Après les caractères, envoyer des fragments de phrases, depuis le programme et depuis la ram. Cela permet de manipuler tous les pointeurs.

Recevoir des caractères par le port série, puis gérer les tampons d'entrée et de sortie série pour une communication en temps réel. Cela permet de voir la manipulation des tampons qui régularisent les flux. Interprétation de commandes simples passées en entrée par un simple terminal.
Exemple deviner un nombre de 0 à 1000.
Après un petit message de bonjour expliquant les règles, à chaque nombre entré au terminal, le contrôleur répond xxx est trop grand, trop petit, vous avez trouvé la réponse en yy coups en zz secondes.
Ce petit exercice est très simple, il permet déjà de bien manipuler le port série et les tampons.

Implanter un protocole I2C minimum . Sur le plan matériel, il faut déclarer deux pattes de port qui vont constituer le bus. Pour éviter les oscillations sur la ligne, le dernier périphérique sera tiré au positif par l'intermédiaire de résistances de charge de quelques kOhms.
Un premier fil sera SCL (Serial CLock), pour fournir l'horloge. Nous ne sommes pour le moment qu'avec un seul processeur sur le bus, c'est donc lui qui fabriquera cette horloge pour synchroniser tous les périphériques, ses "clients".
Le deuxième fil sera SDA (Serial DAta), utilisé en écriture lecture pour appeler les périphériques et lire leur réponse en retour.
Dans un premier temps, il est intéressant de reconstituer tout le dialogue "à la main" en se basant uniquement sur les nombreux documents de Philips qui l'expliquent très bien. Cette partie sera toutefois très difficile à comprendre pour le débutant complet, aussi il sera préférable pour commencer de passer directement à la phase suivante.

Installer le module logiciel I2C définitif pour interfacer divers ports, afficheurs, claviers, convertisseurs, mémoires externes. A ce stade les temporisations par boucles sont abandonnées, tout se passe par interruptions, quand le microcontrôleur n'a plus rien à faire, il s'endort pour économiser l'énergie. Les possibilités sont très vastes.
Nous utiliserons pour cela des bibliothèques I2C du constructeur. Il ne faut pas s'inquiéter de la complexité de ces petits bijoux de programmation et considérer pour le moment ce module comme une boîte noire. Nous en aurons besoin, comme d'un outil, la compréhension des subtilités viendra plus tard. Ces routines ont demandé un temps considérable aux meilleurs programmeurs pour être optimisées, il est normal qu'elles vous paraissent ésotériques.
Ce qui compte est qu'une fois ce module installé (c'est immédiat) tout fonctionne et vous n'avez plus à vous occuper du fonctionnement intime de cette partie du moteur. Vous écrivez et lisez à des adresses, tout le protocole I2C est transparent.

Commencer à mettre en place des bibliothèques personnelles en utilisant des modules astucieux.
Pour illustrer ce propos, je vais prendre quelques exemples mis dans une note séparée pour ne pas alourdir cette page
Exemple et astuces d'utilisation des "look-up tables" ou tables de conversions

Utiliser un Pic comme générateur de vidéo, qui reçoit des ordres par le port série et fonctionne comme un simple terminal en fabriquant (à la main !) tous les signaux, vidéo et synchro. Un autre mode plus évolué le fait fonctionner en générateur graphique programmable.

Implanter un moniteur multitâches en temps réel qui fait tourner plusieurs applications totalement indépendantes sur le même circuit simultanément en partageant le temps machine pour chacun des process.

Maintenant le microcontrôleur est bien maîtrisé, vous savez tout faire, c'est parti pour les vrais projets qui vont utiliser toutes ces techniques de base.

 

 Haut de page

 

  Les nouveaux PIC

Le 16F84 n'est plus fabriqué, mais la famille est de plus en plus nombreuse. Il existe plusieurs boîtiers avec des capacités différentes en mémoire données et programme. Dans un boîtier identique, les produits sont compatibles physiquement, les nouveaux offrent plus de ressources matérielles.
Un programme développé en 16F84 tournera sur un 16f628 compatible hardware, deux fois plus de capacité et moins cher, moyennant quelques déclarations, mais la réciproque n'est pas vraie, par exemple si la deuxième banque ram de 1ko a été utilisée.
Il en est de même en 24 broches pour le 873 de 4ko et le 876 de 8 ko. Voir les liens

Les petits en 1 et 8 broches sont très intéressants (par exemple 12F) et permettent dans un volume minuscule de faire de belles applications, mais la concurrence est rude, en particulier des Tiny Atmel.
Il ne faut pas hésiter à utiliser ces petits composants magiques, mais il faut des débrouiller de les payer moins d’un Euro pièce, certains distributeurs se lâchent avec des prix délirants.

 

 Haut de page

 

  Conclusion

Ce projet doit se poursuivre ainsi :
Réaliser une vraie carte qui comportera de la RAM et de l'eeprom sur un bus I2C. Ce bus I2C gèrera aussi un afficheur LCD et un clavier matricé. Deux fils de port permettront d'interfacer directement un clavier PC. Rajouter un port série, en utilisant une variante du Max 232. Interfacer un convertisseur Analogue-Digital et un Digital-Analogique.
Cette carte permettra déjà de réaliser des projets très ambitieux qui feront l'objet de pages suivantes.

 

 Haut de page

 

  Liens Pic

Quelques uns parmi les innombrables ressources du Net !
Vous en trouverez bien d'autres avec les mots magiques : pic chip, 16F84, ludipipo
Le côté noir de la Force en cherchant : Gold card, Seca et bien d'autres gros mots que ma mère m'interdit de prononcer à table.

Le site de base du constructeur Arizona Microchip: microchip.com
Le cours PIC très bien fait de Bigonoff : bigonoff.org

The 16F628: Why the 16F84 is now obsolete : finitesite.com/d3jsys/16F628 . . . claude.dreschel.free.fr/composants/16F84_16F628 Gnu Pic free tools : huizen.dds.nl/~gnupic/
Programmer heaven : programmersheaven.com/zone5/cat197
Divers projets dont du pic : kmitl.ac.th/~kswichit
Parallax, solutions soignées avec basic intégré : parallaxinc.com
Eric's PIC Page : brouhaha.com/~eric/pic
Liens : geocities.com/.../pic

Divers projets pic dont un afficheur série : bobblick.com/techref/projects
Un très bon document d'initiation en français, 43 pages : ist.jussieu.fr/~auvray/Pic1_98a.pdf
Digital sampling oscilloscope and logic analyzer with PIC16F84 designed by Bitscope (voir les détails sur la page oscilloscope) : bitscope.com
Outil Pic : pictec.org

 

Picbasic

J'ai traduit quelques pages en Français sur : mikroelektronika.co.yu/french
Vous trouverez surtout des pages très intéressantes en Anglais, et en particulier un cours et manuel de référence disponible sur le Pic Basic.

Et pour le reste, Google est mon ami...

* Liens vérifiés le 27/04/08

© Christian Couderc 1999-2007     Toute reproduction interdite sans mon autorisation

Merci aux journalistes qui pillent sans vergogne mon site,
d’avoir au moins la courtoisie de citer leurs sources…

107905

 Haut de page         Dernière retouche le 27 Avril 2008 à 11 h           Retour page précédente

    Voilelec