Professional Documents
Culture Documents
d’applications à
base de
microcontrôleurs
« PIC 16F84»
1
Développement d’applications à base de microcontrôleurs « PIC 16F84»
Introduction
C ) Mise en oeuvre…………………………………………12
C-1 ) Tests sans carte ni soudure : Utilisation d’une plaquette d’essais…………….13.
C-2 ) Carte 1 : afficheur, bouton et relais……………………………………………14
C-3 ) Carte 2 : Variation de vitesse d’un moteur à courant continu ….. ……………15
C-4 ) Carte 3 : liaison infra-rouge et liaison calculatrice TI…………………………17
C-5 ) Carte 4 : relais, boutons, LEDS et lignes libres. ………………………………18
C-6 ) Carte 5 : relais, liaison calculatrice TI, LEDS, boutons et quatre lignes libres.19
C-7 ) Carte 6 : afficheur LCD……………………………………………………….20
D ) Programmation en basic………………………………...21
D-1 ) Le programme « WinPicBasic »………………………………………………..22
D-2 ) Structure des programmes ………………………………………….…………24
a ) Partie commune à tous les programmes
b ) Parties spécifiques à chaque programme
D-3 ) Exemples de programmes pour le robot « climber »…………………..…..….25
a ) Faire clignoter les LED D2,D3 et D4 …………………………………..…..……..……25
b ) Faire clignoter le portB …………………………………………….……………..……26
c ) Test des capteurs …………………………………………………….……..…….…..…27
d ) Jouer une mélodie …………………………………………………….…………...……28
e ) Résumé des instructions principales ……………………………………..……………29
F ) Annexes
Résumé des caractéristiques du PIC 16F84 …………………………………………31
Page 1 du datasheet du PIC 16F84 ………………………………………………….32
Dossier de fabrication du programmateur « jdm »…………………………………...33
2
Introduction
Ce petit dossier a pour simple ojectif de fournir les moyens de créer des programmes à base
de PIC, à peu de frais et sans connaissances particulières dans ce domaine , en dehors de la
numération.
Les typons ont été dessinés, mais aujourd’hui, seul celui concernant la commande des
moteurs à courant continu a été réalisé. La partie logicielle a été testée avec le robot que nous
venons d’acheter au lycée. Tous les programmes donnés fonctionnent.
Bon courage.
TFT. Le 28 Novembre 2002.
3
A ) Présentation des microcontrôleurs « PIC 16F84»
A-1 ) Les PIC :
Un PIC est un microcontrôleur, c’est à dire un circuit intégré contenant :
- une unité de traitement de l’information de type microprocesseur
- des périphériques internes, qui permettent de réaliser des montages sans nécessiter l’ajout de
composants externes.
De technologie relativement récente, les microcontrôleurs PIC s'inscrivent dans la nouvelle génération
de structures programmables. Leur facilité de mise en oeuvre permet de proposer une solution micro
programmée simple à des problèmes plus ou moins complexes, sans avoir à supporter la lourdeur de
mise en place relative aux autres systèmes à microcontrôleurs.
Le microcontrôleur PIC présente des caractéristiques techniques performantes, bien qu’il semble
limité, si on le compare à ses homologues. C’est pourquoi il est couramment employé dans des
applications industrielles et domestiques (appareils électroménagers, télévisions, télécommandes,
thermostats électroniques...).
La dénomination PIC est sous copyright de Microchip. Les autres fabricants ont donc été dans
l’impossibilité d’utiliser ce terme pour leur propre microcontrôleurs.
Les PICs sont des composants dits RISC (Reduce Instructions Construction Set), pour
composant à jeu d’instructions réduit. Un nombre d’instructions réduites rend leur décodage plus
rapide, ainsi que leur exécution..
Toutes les PICs « Mid-Range » ont un jeu de 35 instructions, stockent chaque instruction dans
un seul mot de programme, et exécutent chaque instruction (sauf les sauts) en 1 cycle. On atteint donc
de très grandes vitesses, et les instructions sont de plus très rapidement assimilées.
L’horloge interne utilisée par PIC est prédivisée par 4 par rapport à l’externe. La base de
temps, qui donne le temps d’un cycle, est donc ¼ de celle de la période de l’horloge externe.
Exemple : Avec un quartz de 4MHz , on obtient 1 000 000 cycles/seconde. Comme le pic exécute
pratiquement une instruction par cycle, hormis les sauts, cela vous offre une puissance de l’ordre de
1MIPS (1 Million d’Instructions Par Seconde).
La fréquence d’horloge peut aller jusqu’à 20MHz. La vitesse de traitement est donc plus
qu’honorable.
4
A-1 2 Les différentes familles des PICs
Le circuit 16F84, seul utilisé ici, appartient la famille Mid-Range. Vous pouvez bien sûr
utiliser facilement une autre famille, et même un autre microcontrôleur.
Notez dès à présent que le datasheet de la 16F84 n’est qu’une petite partie de la documentation
complète. Pour obtenir la documentation complète, il faut télécharger chez Microchip les
« datasheet » pour la gamme Mid-Range.
Cependant, la documentation de base suffit pour 99,9% des applications, et, de plus, les
datasheet Mid-Range sont disponibles sous la forme d’un fichier par chapitre.
16 F 84 -04
*Seule une mémoire FLASH ou EEPROM est susceptible d’être effacée, donc n’espérez pas
reprogrammer vos PICs de type CR. Pour les versions C, voyez le datasheet
Donc, une 16F84-04 est une PIC Mid-Range (16) donc la mémoire programme est de type
FLASH (F) donc réinscriptible de type 84 et capable d’accepter une fréquence d’horloge de 4MHz.
Une dernière indication que vous trouverez est le type de boîtier. Nous utiliserons pour nos
expérience le boîtier PDIP, qui est un boîtier DIL 18 broches, avec un écartement entre les rangées de
0.3’’ (étroit). La version 4MHz sera amplement suffisante.
Remarque importante : Les PICs sont des composants STATIQUES, c’est à dire que la fréquence
d’horloge peut être abaissée jusqu’à l’arrêt complet, sans perte de données et sans dysfonctionnement.
Une version –10 peut donc toujours être employée sans problème en lieu et place d’une –04.
Si vous voulez passer commande pour un PIC que nous allons utiliser dans le reste de cet
ouvrage, demandez donc un PIC16F84-04 en boîtier PDIP .
5
A-2 ) Le circuit de mise en œuvre minimale :
Le circuit 16F84 est l’un des plus simples de la famille, mais il permet néanmoins de travailler avec 12
broches d’entrée/sortie !
Il se présente sous la forme d’un boîtier DIP 18 broche, facilement implantable sur une platine
d'essais.
Schéma minimum :
Les outils de développement associés aux PIC sont des logiciels peu coûteux et d'excellente
qualité (assembleurs, compilateurs, simulateurs, émulateurs, programmateurs… sous environnement
Windows). On trouve facilement des compilateurs permettant de développer en assembleur, en C ainsi
qu’en langage basic. Ceux qui sont utilisés ici sont tous gratuits. Il vous faudra simplement réaliser les
cartes. Mais ce ne doit être un problème pour quelqu’un qui se lance dans la programmation des
microcontrôleurs.
6
A-2.1 La mémoire programme
La mémoire programme est répartie en 1K mots de 14 bits. Vos programmes seront stockés dans
cette zone. Une instruction est codée sur 1 mot. Cela permet jusqu’à un millier d’instructions dans un
seul programme.
Il faut 2 octets pour coder 14 bits. Lorsque vous lisez le contenu d’une PIC vierge, vous allez lire
des suites de 14 « un », soit ’11111111111111’, ou « 0x3FFF »en hexadécimal. Ceci explique
pourquoi vos fichiers sur PC font 2Kbytes.
La mémoire eeprom (Electrical Erasable Programmable Read Only Memory), est constituée de 64
octets que vous pouvez lire et écrire depuis votre programme. Ces octets sont conservés après une
coupure de courant, et sont très utiles pour conserver des paramètres semi-permanents. Leur utilisation
implique une procédure spéciale que nous verrons par la suite, car ce n’est pas de la RAM, mais bien
une ROM de type spécial. Il est donc plus rapide de la lire que d’y écrire. Si vous programmez souvent
des eeproms (2416) vous auvez déjà constaté ce phénomène.
La mémoire RAM est celle que nous allons sans cesse utiliser. Toutes les données qui y sont
stockées sont perdues lors d’une coupure de courant. La mémoire RAM est organisée en 2 banques
pour la 16F84. La RAM est subdivisée de plus en deux parties. Nous allons trouver, dans chaque
banque, des « cases mémoires spéciales », appelées REGISTRES SPECIAUX, et des cases mémoires
« libres » dont vous pouvez vous servir à votre guise.
Pour le cas de la 16F84, vous disposerez de 68 octets libres. L’organisation de la RAM est
montrée dans le tableau 4-2 page 13. Vous voyez la séparation verticale en 2 banques, et tout en bas
vous voyez deux banques de 68 octets de RAM.
Vous voyez dans la partie supérieure le nom de tous les registres spéciaux utilisés dans la PIC.
Nous les verrons tous, rassurez-vous.
Remarquez que la banque 0 utilise les adresses de 0x00 à 0x7F, la banque 1 allant de 0x80 à
0xFF. Les zones en grisé sont des emplacements non utilisés (et non utilisables). L’emplacement 0x00
est un emplacement auquel on ne peut pas accéder.
Pour la grande majorité des registres, chaque bit a une fonction spéciale. Il faut pour cela consulter
le « data sheet », c’est-à-dire le dossier technique fourni par le constructeur, sous forme d’un fichier au
format « Portable Document File ».
7
A-2 4) Broches disponibles
Les lignes d’entrées sorties sont regroupées, sous forme ee deux « ports ». Vous pouvez lire ou écrire depuis vos
programmes sur chacun de ces ports.
8
B ) Carte et logiciel de programmation
La carte de programmation jdm, dont une photo est représentée ci-dessous, est simple à réaliser, et se
connecte directement sur le port série de votre PC.
Il vous faudra également installer le logiciel permettant de télécharger votre programme dans le PIC.
Celui choisi ici est « IC-prog », disponible à « www.h2deetoo.demon.nl »
Les plans de cette carte de programmation extrêmement simple peuvent être trouvés un peu partout
sur Internet.
Son plus gros avantage : Cette carte est alimentée par la liaison série qui le raccorde à l’ordinateur.
Pas d’alimentation à prévoir !
Schéma électrique :
Remarque: Il existe d’autres programmateurs. Celui que nous avons réalisé, tiré de la revue
« Electronique Pratique », permet de programmer d’autres types de PIC, ainsi que des
mémoires « EEPROM » série.
9
B-2 ) Le logiciel de programmation « IC-Prog » :
Une fois le PIC installé sur sa carte de programmation et le câble de transfert relié à un des
ports série de l’ordinateur, il faut utiliser un logiciel de programmation pour réaliser l’opération.
Le logiciel IC-Prog, disponible gratuitement sur www.ic-prog.com remplit parfaitement cette
fonction.
La fenêtre ci-dessous apparaît la première fois qu’on utilise le logiciel. On peut ensuite la faire
réapparaître à tout moment en cliquant sur l’outil Hardware.
Il faut bien entendu sélectionner JDM Programmer dans la liste déroulante et choisir le port
série utilisé.
Le paramètre I/O Delay permet de déterminer la vitesse de transfert.
10
La fenêtre principale ressemble à celle-ci :
Attention ! Si on n’utilise pas le chien de garde du PIC, il faut désactiver celui-ci en retirant
l’option WDT (à droite de la fenêtre) avant de lancer la programmation. Nous avons passé
énormément de temps à comprendre cela car IC-Prog vous remet cette option par défaut à chaque fois
que vous ouvrez un nouveau fichier.
11
C ) Mise en oeuvre :
TROIS METHODES SONT ENVISAGEABLES :
Il est possible de réaliser un câblage sur plaquette d’essais, pour procéder aux premiers essais.
Dans ce cas, la méthode la plus logique est de câbler le minimum ( alimentation, horloge ), puis, en
fonction de l’application sur laquelle vous travaillez, d’ajouter des composants supplémentaires. Cela
demande, pour ceux qui n’ont jamais utilisé de plaquette d’essai, un petit temps d’adaptation, mais
cela impose aussi à l’utilisateur d’entrer dans les détails de câblage.
Une autre solution, plus « généraliste », consiste à créer plusieurs cartes d’application, dotées
chacunes de modules différents. On peut ensuite tester facilement, sans câblage, les différentes
possibilités offertes par les microcontrôleurs.
Pour illustrer cette seconde approche, trois cartes ont été conçues :.
Les modules sont les suivants :
- communication ( série bidirectionnelle avec un « PC » ou une calculatrice « TI », liaison infra-
rouge avec modulation/démodulation )
- interface de puissance (commande de relais et PWM, sur un moteur à courant continu )
- interface homme machine (afficheur 7 segments, LED, boutons )
Le dossier de fabrication complet des cartes ( schéma, typon t implantation ) est regroupé dans un
fichier séparé, pour ne pas trop alourdir cette partie ( et pour ne pas trop ennuyer ceux que cela
n’intéresse pas…
Basic stamp :
Cette dernière solution présente l’avantage de la rapidité de mise en œuvre, le « Basic Stamp »
regroupe en effet sur un seul circuit au format DIP, un PIC, et tout ce qu’il faut pour le commander.
La seconde solution été développée ici. Les plans de fabrication des cartes sont terminés, avec sans
doute quelques ajustaements à faire.
12
C-1 ) Tests sans carte ni soudure : Utilisation d’une plaquette d’essais :
Un exemple est proposé ici . Il n’est bien sûr pas exhaustif, mais « une photo vaut mieux que tous les
discours ».
Image montrant le schéma ci-dessus réalisé sur plaquette d’essais. (Source: Deaubonne Patrick )
Le support de circuit en bas à droite est à enficher directement sur la carte de programmation.
Temps approximatif de câblage : 30minutes.
13
C-2 ) Carte à modules afficheur 7 segments , boutons et relais
Schéma de principe
Interface de
Appui Interface puissance Sorties
bouton commande puissance
élevée
X3
Calculateur
Affichage
7 segments
Module interface de puissance : Elle est constituée de trois relais 2RT. La présence de six
borniers de connexion vers l’extérieur autorise alors la connexions de moteurs pas à pas, à
courant continu, de LED …
Schéma :
14
C-3 ) Variation de vitesse d’un moteur à courant continu:
Schéma de principe
Interface de
Appui Interface puissance Sortie PWM
bouton commande puissance
élevée
Calculateur
PC Liaison Affichage
ou série 7 segments
TI
15
16
C-4 ) Carte de liaison infra-rouge et liaison TI ou PC :
Schéma de principe
Modulate Emetteur IR
ur
Calculateur
Démodulateur Récepteur IR
Interface
série TI
ou
PC (ajouter alors un max 232 )
17
C-5 ) Carte de test à relais, boutons, LEDS et lignes libres.
Cette carte de test comporte :
- un bouton poussoir d’entrée
- trois commandes de 2 relais 2RT
- quatre LEDS
- quatre lignes du port B laissées libres pour liaison avec d’autres cartes.
18
C-6 ) Carte avec relais, liaison calculatrice TI, LEDS, boutons et quatre
lignes libres.
Comme la précédente, cette carte de test comporte :
- un bouton poussoir d’entrée
- trois commandes de 2 relais 2RT
- quatre LEDS
Mais les quatre lignes du port B laissées libres précédemment sont ici utilisées pour une
liaison avec une calculatrice TI89, TI92, TI92plus ou V200.
19
C-7 ) Carte afficheur LCD
6 lignes du pic sont utilisées pour la liaison avec le pic. Les autres sont laissées libres
d’utilisation.
20
D ) Programmation en basic :
Remarque : Quelques « bugs » de ce logiciel, qui, s’il est gratuit et fonctionne très bien, n’en
est pas moins imparfait :
A ) Pas de nom de plus de 8 caractères, ni de caractères spéciaux ( espace,… )
B ) La fonction « Enregistrer sous » pour changer le nom d’un programme ne change
pas. C’est très déroutant si on ne le sait pas ! Il suffit pour s’en sortir, de jongler avec
les fonctions copir/coller et avec l’explorateur.
21
Pour le debuggage ( la correction des erreurs ) :
Un numéro est indiqué : Il suffit de cliquer sur « code erreurs », pour aller voir ce que signifie
le numéro donné.
L’onglet « erreurs assembleur » parfois des indications comme « tris portb… ». ???? Ne pas
en tenir compte. Il semble que seuls les messages d’erreur du debuggeur basic comptent.
22
D-2 ) Structure des programmes :
'
***************************************************************
**
' *********** Zone des déclarations pour la compilation ***********
'
***************************************************************
**
device 16f84
'
***************************************************************
**
' ************* Zone des déclarations des constantes **************
'
***************************************************************
**
define INDIR 0H
define OPTION_REG 01H
define PCL 2H
define STATUS 3h
define FSR 4h
define PORTA 5h
define PORTB 6h
define _EEDATA 8h
define EEADR 9h
define PCLATH 0aH
define Z 2
define CY 0
23
b ) Parties spécifiques à chaque programme :
Tous les programmes doivents comporter un certain nombre de parties, dont certaines ne
devront pas être touchées.
L’en tête :
Il se place dès les premières lignes. Il permet d’indiquer un certain nombre d’informations :
Ce que fait votre programme.
Vos nom et prénom
Date
Version du programme
Son état d’avancement : « a faire… »
Les symboles permettent de remplacer un texte par un autre. C’est l’équivalent des macros
dans las autrs langages.
Si la broche « PB3 » est reliée par exemple à une LED appelée « D4 », par exemple, il est
plus simple et plus parlant de l’appeler « D4 », que « B.4 », dans votre rogramme. Pour cela,
il suffit d’écrire la ligne de programme suivante :
« symbol D4 B.3 »
Les variables sont déclarées pa leur nom, précédé du mot clé « dim ». Par exemple :
« dim e,i,f» définit trois variables appelées « e », « i » et « f ».
Un « 0 » signifie que la broche sera utilisée comme sortie, du point de vus du pic. Un « 1 »
signifie que la broche sera considérée comme une entrée.
Exemple :
Programme principal :
Si vous souhaitez créer et utiliser des procédures, comme « tempo » pour la temporisation,
celles-ci doivent être placées ici.
24
D-3 ) Exemples de programmes pour le robot « climber » :
Init porta=%00000000
Init portb=%00001111
start:
PORTA = %00000111 ‘ On allume les trois LEDS.
next:
gosub tempo ' attendre 1/4 de seconde
gosub tempo ' attendre 1/4 de seconde
gosub tempo ' attendre 1/4 de seconde
gosub tempo ' attendre 1/4 de seconde
25
b ) Faire clignoter le portB :
dim k,d ' définition de deux variables appelées k et d
Init portb=%00001111
Init porta=%00000000
PORTB = %11010000
next:
d = PORTB ' Lecture de l’état du port
d = d xor 255
‘ OU EXCLUSIF POUR CHANGER L’ETAT DU PORTB A CHAQUE FOIS
PORTB = d ‘ ecriture du complément.
26
c ) Test des capteurs :
Symbol capG "PORTB 0"
Symbol capM "PORTB 1"
Symbol capD "PORTB 2"
Symbol D4 "PORTA 2"
Symbol D3 "PORTA 0"
Symbol D2 "PORTA 1"
start:
d=0
suite:
' Les capteurs sont affectés à PB0, PB1 et PB2.
' Il suffit de lire d'état de ces broches pour connaître l'état des capteurs
‘ 0 si détection.
ifnbit PORTB 0 goto next3 ' Allumer D4
ifnbit PORTB 1 goto next4 ' Allumer D2
ifnbit PORTB 2 goto next5 ' Allumer D3
gosub tempo
next6:
if d<10 then d = d+1 else d=0
f = 20 * d
sound(f, 100,B.4)
gosub tempo
gosub tempo
gosub tempo
goto suite
‘ FIN PROGRAMME PRINCIPAL
next3:
PORTA=0
set A.2 ' D4 si B.0
gosub tempo
goto next6
next4:
PORTA=0
set A.1 ' D2 si B.1
goto next6
next5:
PORTA = 0
set A.0 ' D3 si B.2
goto next6
27
d ) Jouer une mélodie
symbol micro B.3
symbol HP "B.4"
' Le haut-parleur est relié à la broche B.4
Init portb=00001111
Init porta=00000000
start:
reset e
restore
for i = 1 to 20
read e
sound(e,100,HP)
next i
goto start
28
e ) Résumé des instructions principales :
SHL "shift left" décalage à gauche en fait il s'agit d'une rotation à gauche
le bit de poids fort passe dans la retenu (carry)
IF (condition) THEN
si la condition est juste les instructions suivant le THEN sont exécutées
IFZ (variable) GOTO
si la dernière opération est EGALE à 0 aller à la ligne indiquer par le GOTO
IFNZ (variable) GOTO
si la dernière opération est DIFFERENTE de 0 aller à la ligne indiquée par le GOTO
restore Remet le compteur Data à zéro, le prochain octet lu, sera le premier
reset Met une variable à 0 équivalent à (Variable=0)
29
IFNBIT Si le bit est a 0 alors allez à l'adresse
IFNBIT PORTA pin GOTO Adress
PORT est PORTA ou PORTB ou PORTC
ex: ifnbit PORTA 1 goto Adress
avec SYMBOL BTN1 "PORTA 1"
ex: ifnbit BTN1 goto Fonction
30
F ) Annexes :
1 ) Résumé des caractéristiques du PIC 16F84
31
2 ) Page 1 du datasheet du PIC 16F84
32
3 ) Dossier de fabrication du programmateur « jdm »
33