programmation mikro c

Upload: elhaitar-achraf

Post on 20-Jul-2015

455 views

Category:

Documents


8 download

TRANSCRIPT

Programmation C sur PIC (EasyPIC5 - MikroC)

Geii - S2 - II2 - Travaux pratiques

7 juin 2010

F. Morain-Nicolier http ://pixel-shaker.fr

A Ce document a t ralis avec L TEX, en utilisant lditeur Emacs et le mode auctex, le tout tant excut sur le syst`me e e e e e e e e e dexploitation GNU/Linux.

Table des mati`res e1 Prise en main 1.1 Prambule . . . . . . . . . . . . e 1.2 Observation de la maquette . . 1.3 Cration dun premier projet . e 1.4 Excution pas-`-pas, dboguage e a e 2 Des 2.1 2.2 2.3 2 2 2 3 3 5 5 5 5 6 6 7 7 7 7 7

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

leds, des leds Rappels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 Ports en entre/sortie e 3.1 Slection des E/S . . . . . e 3.2 Scrutation de niveau . . . 3.3 Attente de fronts . . . . . 3.3.1 Changement dtat e 3.3.2 Compteur . . . . . 3.4 En attendant la n du TP

. . . . . . . . . . . . . . . . . . . . . dune diode . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

4 Multiplexage - acheurs sept segments 4.1 Matriel . . . . . . . . . . . . . . . . . . e 4.2 Logiciel - test . . . . . . . . . . . . . . . 4.3 Logiciel - multiplexage . . . . . . . . . . 4.4 Logiciel - avec interruptions . . . . . . . 4.5 Si vous avez encore du temps . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

8 . 8 . 8 . 9 . 9 . 10 11 11 12 12 13 14 14 15 15 16 17 17 18

5 Acheur GLCD - capteur de temprature DS1820 e 5.1 Achage sur le GLCD . . . . . . . . . . . . . . . . . 5.2 Communication one-wire avec le capteur DS1820 . . 5.2.1 Mise en place . . . . . . . . . . . . . . . . . . 5.2.2 Communication . . . . . . . . . . . . . . . . . 5.2.3 Dcodage de la temprature . . . . . . . . . . e e 5.3 Supplment . . . . . . . . . . . . . . . . . . . . . . . e

liaison one-wire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

6 Timer et interruption - mesure de temps et production de e 6.1 Elments de documentation . . . . . . . . . . . . . . . . . . . 6.2 Test de fonctionnement . . . . . . . . . . . . . . . . . . . . . 6.3 Mesure de dure dxcution dun morceau de code . . . . . . e e e 6.4 Production dun signal priodique . . . . . . . . . . . . . . . e 7 Interfaage dun cran tactile c e

signaux priodiques e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

1

TP 1

Prise en mainObjectifs Identier les lments de la maquette, crer un projet, le compiler et lexcuter sur la maquette, observer ee e e les chiers crs, tracer le programme et des variables. ee

1.1

Prambule e

une documentation est disponible dans C:\doc_mikroc for PIC\ ; sur le site du constructeur (http://www.mikroe.com/), vous pourrez consulter divers lments de documenee tation et tlcharger une version dessai de lenvironnement (IDE et compilateur). ee Vous devez vous connecter en usant le login ge1 (sans mot de passe).

1.2

Observation de la maquette

Voici une vue de maquette comportant des numros. e

2

Manipulation Identier les lments suivant sur cette reproduction (donner les numros) : ee e Switch dalimentation, programmateur USB (mikroICD), micro-contrleur PIC, o bouton de reset, diodes de contrle des ports A ` E, o a boutons poussoir de test de ports A ` E, a acheurs 7 segments multiplexs, e

1.3

Cration dun premier projet e

Vous disposez dun petit fascicule (en anglais) intitul Creating the rst project in mikroC for PIC. Ce texte e vous indique la marche ` suivre pour crer et compiler un projet. a e Manipulation Suivre les instructions (jusqu` lexcution - run) avec les recommandations suivantes : a e Nom du projet : tp1a Chemin du projet : D:\rep_perso\tp1. Ce dossier doit tre cr en remplaant rep_perso par un nom e ee c qui vous est propre. Le type (device) de PIC est ` lire sur la puce elle-mme. a e Le programme ` saisir est le suivant : a void main () { PORTC = 0; // Init PORTC TRISC = 0; // PORTC as output while (1) { PORTC = ~ PORTC ; // toggle PORTC Delay_ms (1000); // 1s delay } }

Manipulation Aller dans le dossier de votre projet. Ouvrir les chiers .hex, .mcl, asm, .lst. Que contiennent ces chiers, quelle est leur utilit ? e Par quelles instructions assembleur sont traduites les lignes suivantes ? PORTC = 0; et TRISC = 0;

1.4

Excution pas-`-pas, dboguage e a e

Crer un nouveau projet (toujours dans votre dossier tp1) nomm tp1b. Le programme ` saisir est le suivant : e e a

void main () { int k; PORTC = 0; // Init PORTC TRISC = 0; // PORTC as output for (k = 0; k < 256; k++) { PORTC = k; } }

Manipulation Pour utiliser le dbogueur (voir la photocopie jointe) : e Modier les options du projet pour activer le dbogueur ICD (dans Project Setup Window, sur la gauche) : e cocher mikroICD Debug sous Build Type, vrier que mikroICD Debugger est activ sous Debugger. e e Compiler le projet (Build - CTRL+F9). Programmer la puce (Program - F11). Lancer le dbogueur (Start Debugger - F9) e 3

Manipulation Exploiter le dbogueur pour : e Suivre en pas-`-pas lexcution du programme (Step Into par exemple). Vrier lallumage correct des a e e diodes du port C. Ajouter le suivi des variables PORTC et k lorsque vous tes en mode pas-`-pas. Contrler la bonne volution e a o e des valeurs de ces variables. Exprimenter les autres possibilits du dbogueur. e e e

4

TP 2

Des leds, des leds2.1|

Rappels

On rappelle quen C le ou boolen se fait par ||, le et boolen par &&. Nous aurons besoin du ou bit ` bit e e a et du et bit ` bit &. Soit le contenu dun registre B sur huit bits, a b7 1 b6 1 b5 1 b4 0 b3 0 b2 0 b1 1 b0 . 1

Prparation e 1. Vous dsirez mettre ` 1 le bit b2 sans changer les autres bits, comment faites-vous ? e a 2. Vous dsirez mettre ` 0 le bit b6 sans changer les autres bits comment faites-vous ? e a

2.2

Exemple

On vous donne un programme C qui fait clignoter une led (poids faible mais ` gauche) sur le port C. a

void main(void ){ TRISC = 0; // Tous les bits du PORTC en sortie . PORTC = 0; while (1) { PORTC = 0x01; Delay_ms (1000); PORTC = 0x00; Delay_ms (1000); } }

Manipulation Ecrire ce programme pour lessayer, le compiler, le charger et lexcuter. Modier-le pour faire e clignoter la led RC1.

2.3

Exercices

1. Ecrire un chenillard simple : une led se dplaant sur le PORTC (de haut en bas) et en utilisant le mme e c e type de temporisation que dans le programme exemple. 2. Ecrire un chenillard double : un chenillard de haut en bas et simultanment un autre de bas en haut qui se e croisent. 3. Ecrire un chenillard ` entassement (1 led se dplaant et saccumulant en bas). a e c Note : les oprateurs de dcalage sont >> et > 1; / Q = A0.11 / Q = ((Q >> 4) + Q) ; / Q = A 0.110011 / Q = ((Q >> 8) + Q) >> 3; / Q = A 0.00011001100110011 / / either Q = A/10 or Q+1 = A/10 for all A < 534 ,890 / return Q; }

1. Ecrire un programme utilisant cette fonction pour acher le rsultat (sur le GLCD) de la division par 10 du e nombre 171. 2. On souhaite maintenant connaitre la dure dxcution de cette fonction en utilisant le timer TMR0. Ecrire un e e e programme qui mesure cette dure, avec lalgorithme suivant : e (a) Initialisation du timer (b) Appel de la fonction (c) Lecture du timer (d) Calcul de la dure (en fonction de la frquence dhorloge et du prescaler. e e (e) Achage de la dure mesure. e e

6.4

Production dun signal priodique e(a) calculer la valeur de pr-division, e (b) calculer la valeur de comptage, (c) crire le programme. e

1. Gnrer un signal de frquence 1 KHz sur PB0. Pour cela : e e e

2. Gnrer un signal de frquence 1 KHz de rapport cyclique 1/4. e e e

17

TP 7

Interfaage dun cran tactile c eLobjectif est dinterfacer lcran tactile pour commander lallumage et lextinction dune LED. Voici le schma e e dtaillant la connection de lcran au microcontrleur : e e o

Divers ressources sont rcuprable ` ladresse e e a http://pixel-shaker.fr/fr/enseignements/geii-programmation-pic-en-c-easypic5-mikroc : un article (en franais) sur le fonctionnement et lutilisation de lcran tactile ; c e un premier programme (` terminer) dinterfaage : touchscreen1.c a c un second programme ` tester (en n de TP) : touchscreen2.c a 1. Lire le document, en particulier le paragraphe principe de fonctionnement et expliquer pourquoi seuls quatre ls sont ncessaires pour interfacer lcran tactile. e e 2. Expliquer alors le fonctionnement des fonctions GetX() et GetY() dans le programme touchscreen1.c 3. Placer le chier touchscreen1.c dans un projet et complter le programme pour dans une boucle innie, acher e (sur le GLCD) les coordonnes x et y acquises via les fonctions GetX() et GetY(). e Quelles sont les valeurs min et max que peuvent prendre ces coordonnes ? e Quelle est lorientation des axes ? 4. A partir des coordonnes x et y, calculer les coordonnes x_screen et y_screen correspondant ` la position e e a courante dans le GLCD.

18

5. Ajouter le code suivant en dbut de la fonction main : e Glcd_Fill (0); // Clear GLCD Glcd_Write_Text (" TOUCHPANEL EXAMPLE " ,10 ,0 ,1); // Display Buttons on GLCD: Glcd_Rectangle (8 ,16 ,60 ,48 ,1); Glcd_Rectangle (68 ,16 ,120 ,48 ,1); Glcd_Box (10 ,18 ,58 ,46 ,1); Glcd_Box (70 ,18 ,118 ,46 ,1); Glcd_Write_Text (" BUTTON1 " ,14 ,3 ,0); Glcd_Write_Text ("RC6 OFF" ,14 ,4 ,0); Glcd_Write_Text (" BUTTON2 " ,74 ,3 ,0); Glcd_Write_Text ("RC7 OFF" ,74 ,4 ,0);

Vrier que deux boutons sont dessins. Ajouter alors le code ncessaire dans la boucle innie pour quune e e e pression sur le bouton 1 provoque lextinction de la LED n 6 du PORTC, et quun appui sur le bouton 2 commande sont allumage. 6. Tlcharger et tester le programme du chier touchscreen2.c ee

19