|
|
Cartes à Pic 16F84 et 16F628 |
|
Introduction Page de notes complémentaires : |
Maj : 27/04/08
|
|
![]()
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.
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.
![]()
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.
![]()
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.
![]()
|
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. |
|
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.
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.
![]()
|
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.
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.
![]()
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.
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.
![]()
Réaliser la plaquette d'essais
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.
![]()
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)
:![]()
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.
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.
![]()
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.
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.
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.
![]()
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