TP PIC I/ Objectifs: - connaître les structures de base; - connaître les instru
TP PIC I/ Objectifs: - connaître les structures de base; - connaître les instructions réalisant les structures de base; - connaître quelques instructions spécifiques du langage C de CSS dédiées au PIC; - faire exécuter un programme sur une maquette; - savoir modifier un programme existant. II/ Description du système d'initiation à la programmation L’écriture du programme dans la mémoire flash du PIC 16F876 se fait par l'intermédiaire d'un module connecté au PC (ICD) identique à celui utilisé avec MPLAB , ce module permet également un dialogue avec le PIC de la cible ( maquette pédagogique) afin de faire le "debuggage" du programme ( pas à pas, points d'arrêts, modification directe des registres . . ). Le logiciel CCS PCW permet de réaliser toutes les étapes nécessaires à la conception d'un programme en C pour PIC. - édition (écriture du programme source), - compilation sur PC (génération du programme binaire au format HEX ), - chargement par le module ICD du programme en mémoire flash, - exécution ou "débuggage" du programme. Le programme source a une extension .c (ex : prog1.c), lors de la compilation, le fichier binaire (ex:prog1.HEX) est généré, un fichier listing ou apparaissent les instructions en assembleur réalisant le programme en C, ce fichier a l’extension lst( ex : prog1.lst). III/ Utilisation du système de développement Le TP se fera à l’aide d'une maquette pédagogique possédant: - deux boutons poussoir - une LED - deux afficheurs à anodes communes multiplexés. Connecter l'ensemble comme représenté ci-dessus. PC + CCS (PCW) Module ICD dialogue PC-ICD par liaison série - édition - compilation - mise au point RB6, RB7 RB3, MCLR INITIATION A LA PROGRAMMATION DU MICROCONTROLEUR PIC 16F876 EN LANGAGE C PIC à programmer maquette pédagogique 1) exécution d'un programme existant avec module ICD Il faut au préalable que le module ICD ait été programmé afin de pouvoir fonctionner avec CCS. (si cela n'a pas été fait, lancer le programme ICD et changer le firmware en choisissant celui pour PIC16) On désire faire exécuter le programme en C exécutant la même chose que celui étudié en assembleur, c'est-à- dire allumer la led quand on appuie sur le bouton poussoir connecté 0 RB1, pour cela réaliser les opérations suivantes : - lancer le logiciel de développement PCW (PIC C compiler ou PIC demo) et exécuter les opérations suivantes Ouvrir le programme "prog1.c" placé dans le répertoire "D:\tpccs" Compiler le programme, c'est-à-dire transformer les instructions en C en instructions en assembleur puis en code binaire. Lancer le debugger comme indiqué ci-dessous, la programmation se fait automatiquement A partir de maintenant, plusieurs opérations sont possibles, on peut: faire exécuter le programme en appuyant sur GO. arrêter le programme en appuyant sur S. une fois le programme arrêté, l'exécuter en pas à pas (symbole de pieds), modifier des données en RAM et placer des points d'arrêt. Faire exécuter le programme et vérifier son fonctionnement. Arrêter le programme et le faire exécuter en pas à pas en vérifiant que le déroulement change quand on appuie sur le bouton poussoir. 2) exécution d'un programme existant sans module ICD Comme pour MPLAB, pour que le programme puisse fonctionner sans module ICD, il faut dévalider le mode débuggage en plaçant en commentaire ou en supprimant la ligne suivante: //#device ICD=TRUE et recompiler. Il faut ensuite programmer le PIC par le programme ICD. Faire les opérations nécessaires afin que le programme s'exécute avec la maquette seule. (il faut programmer le PIC avec le fichier .HEX généré lors de la compilation après avoir dévalidé l'option ICD) 3) modification d'un programme existant Modifier le programme afin que ce soit SW2 qui agisse sur la led et que celle-ci s'éteigne quand on appuie sur SW2. Sans rajouter de ligne au programme modifier le programme afin que ce soit l'appui sur SW1 et SW2 qui allume la led. (utiliser le ET logique) Dans le programme précédent nous avons utilisé « IF … ELSE » (si SW1 actionné, on allume la led sinon on éteint la led), on peut également présenter le fonctionnement de la manière suivante: Tant que l'on appuie sur SW1 on allume la led. Dessiner l'algorigramme correspondant à l'instruction WHILE en pensant à éteindre la led après l'appui sur BP1 Ecrire et tester le programme utilisant l'instruction WHILE. 4) Quelques instructions spécifiques au PIC Dans le programme précédent, il a été possible de voir les points suivants: définitions des broches: ex: "#define LED pin_c7" La variable LED correspond au bit 7 du PORTC. mise à zéro ou à un d'une sortie: ex: "output_high(LED);" ou "output_low(LED);" La broche correspondant à LED est soit mise à un, soit mise à zéro. lecture de l'état d'une entrée: ex: "input(SW1)" Cette instruction renvoie 0 ou 1 correspondant à l'état logique de la broche nommée SW1. Il peut être rapidement nécessaire de connaître les instructions suivantes: temporisation: Il existe les instructions de temporisation en millisecondes ("delay_ms()") ou en microsecondes ("delay_us()")ex: delay_us(25); = temporisation de 25µs. écriture de 8 bits sur un port: ex "output_a (value)" Il y a écriture de la donnée 'value' sur le port A, pour les autres ports il faut modifier la lettre du port (ex: output_b pour le port B). lecture des 8 bits d'un port: ex: "value = input_a()" La variable 'value' prend la valeur correspondante au code formé par les 8 bits du port A, comme précédemment, if faut changer le lettre pour les autres ports. Validation ou dévalidation des résistances de rappel du portB: " port_b_pullups(FALSE ou TRUE);" Ecriture dans les registres de direction TRIS: "set_tris_a (value)" Ecriture de 'value' dans TRISA. Pour les autres ports, changer la lettre. remarque: Beaucoup d'autres fonctions sont fournies avec CCS, pour se renseigner, il faut utiliser l'aide et aller dans la rubrique 'Built-In Function'. 5) exercices 1) Faire clignoter la led à 1Hz 2) Faire clignoter la led à 1Hz quand on appuie sur SW1. 3) Faire clignoter la led à 1Hz quand on appuie sur SW1et à 2Hz quand on appuie sur SW2. 4) Faire afficher '18' en permanence sur les afficheurs. 5) Réaliser un dé électronique sur un des deux afficheurs. 6) Réaliser un compteur de 0 à 10 s'incrémentant toutes les secondes en utilisant un tableau. a) compléter le tableau digit[10], qui permet d'afficher les valeurs de 0 à 10. (pour accéder à une valeur du tableau, il faut utiliser: digit[n], ou 'n' est le rang de la valeur dans le tableau. ex: x=digit[1], x prend la deuxième valeur du tableau parce que l'indice du premier élément d'un tableau est 0) b) écrire le programme en utilisant l'instruction FOR. RA0/AN0 2 RA1/AN1 3 RA2/AN2/VREF- 4 RA4/T0CKI 6 RA5/AN4/SS 7 OSC1/CLKIN 9 OSC2/CLKOUT 10 RC1/T1OSI/CCP2 12 RC2/CCP1 13 RC3/SCK/SCL 14 RB7/PGD 28 RB6/PGC 27 RB5 26 RB4 25 RB3/PGM 24 RB2 23 RB1 22 RB0/INT 21 RC7/RX/DT 18 RC6/TX/CK 17 RC5/SDO 16 RC4/SDI/SDA 15 RA3/AN3/VREF+ 5 RC0/T1OSO/T1CKI 11 MCLR/Vpp/THV 1 U1 PIC16F876 R1 330 R2 330 R3 330 R4 330 R5 330 R6 330 R7 330 VDD VDD VDD X 1 4MHz C1 22pF C2 22pF R8 10k C3 1nF D1 BAT85 SW 1 S W 2 R9 10k R10 10k R13 10k K2 R15 10k Q1 BC547 D2 R16 330 VDD VDD VDD VDD K5 D3 1N4001 VI 1 VO 3 GND 2 U3 7805 C4 100nF C5 100nF C6 100uF VSS VDD a b c d e f g a 7 b 6 c 4 d 2 e 1 f 9 g 10 dp 5 AC 3 AC 8 A FF1 a b c d e f g a 7 b 6 c 4 d 2 e 1 f 9 g 10 dp 5 AC 3 AC 8 A FF2 Q2 2N2907 Q3 2N2907 R17 10k R18 10k VDD RB7 RB6 MCLR IC1 LM35 RV1 10k 1 2 3 4 5 6 K3 RJ11 RB3 RB3 RB6 RB7 D4 1N4001 J1 C7 100nF R11 1k MCLR R12 220 uploads/Litterature/ tp-pic-en-c.pdf
Documents similaires










-
53
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Oct 02, 2021
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 0.1000MB