TP pic en C
Click here to load reader
Transcript of TP pic en C
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 moduleconnecté au PC (ICD) identique à celui utilisé avec MPLAB , ce module permet également un dialogue avec lePIC 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 Cpour 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, cefichier a l’extension lst( ex : prog1.lst).
III/ Utilisation du système de développementLe 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 ICDdialogue PC-ICDpar liaison série
- édition- compilation- mise au point
RB6, RB7RB3,MCLR
INITIATION A LA PROGRAMMATION DU MICROCONTROLEUR PIC 16F876EN LANGAGE C
PIC à programmer
maquette pédagogique
1) exécution d'un programme existant avec module ICDIl 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érationssuivantes :
- lancer le logiciel de développement PCW (PIC C compiler ou PIC demo) et exécuter lesopé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éroulementchange 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 modedébuggage en plaçant en commentaire ou en supprimant la ligne suivante: //#device ICD=TRUE etrecompiler. 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 fautprogrammer 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 onappuie sur SW2.
Sans rajouter de ligne au programme modifier le programme afin que ce soit l'appui sur SW1 et SW2qui allume la led. (utiliser le ET logique)
Dans le programme précédent nous avons utilisé « IF … ELSE » (si SW1 actionné, on allume la ledsinon on éteint la led), on peut également présenter le fonctionnement de la manière suivante: Tant que l'onappuie 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 7du 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()") ouen 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' surle 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 valeurcorrespondante au code formé par les 8 bits du port A, comme précédemment, if faut changer le lettre pour lesautres ports.
Validation ou dévalidation des résistances de rappel du portB: " port_b_pullups(FALSE ouTRUE);"
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'aideet aller dans la rubrique 'Built-In Function'.
5) exercices1) Faire clignoter la led à 1Hz2) 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. (pouraccé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/AN02
RA1/AN13
RA2/AN2/VREF-4
RA4/T0CKI6
RA5/AN4/SS7
OSC1/CLKIN9
OSC2/CLKOUT10
RC1/T1OSI/CCP212
RC2/CCP113
RC3/SCK/SCL14
RB7/PGD28
RB6/PGC27
RB526
RB425
RB3/PGM24
RB223
RB122
RB0/INT21
RC7/RX/DT18
RC6/TX/CK17
RC5/SDO16
RC4/SDI/SDA15
RA3/AN3/VREF+5
RC0/T1OSO/T1CKI11
MCLR/Vpp/THV1
U1
PIC16F876
R1 330
R2 330
R3 330
R4 330
R5 330
R6 330
R7 330
VDD
VDD
VDD
X1
4MHzC122pF
C222pF
R810k
C31nF
D1BAT85
SW1 SW2
R910k
R1010k
R1310k
K2
R15
10k
Q1BC547
D2R16
330
VDD
VDD
VDD
VDD
K5
D3
1N4001
VI1
VO3
GN
D2
U37805
C4100nF
C5100nF
C6100uF
VSS
VDD
a
b
c
d
e
f
g
a7
b6
c4
d2
e1
f9
g10
dp
5
AC
3
AC
8
AFF1
a
b
c
d
e
f
g
a7
b6
c4
d2
e1
f9
g10
dp
5
AC
3
AC
8
AFF2
Q2
2N2907
Q3
2N2907
R17
10k
R18
10k
VDD
RB7RB6
MCLR
IC1LM35
RV110k
123456
K3
RJ11
RB3
RB3RB6RB7
D41N4001
J1
C7100nF
R111k
MCLR
R12220