Professional Documents
Culture Documents
TP ATR :
Benjamin Becquet
Nicolas de Dreuille 1
Sbastien Durand
Introduction :
Nous avons tudi en cours larchitecture des microcontrleurs PIC et leur mode de programmation. Lobjectif de ce TP est de mettre en pratique la partie thorique afin de concrtiser les concepts tudis. A cette fin, nous tenterons dutiliser la carte PICmicro Education Board II comme interface dun programme que nous raliserons pour le microcontrleur.
Prsentation du matriel :
Le Microcontrleur :
La carte dinterface :
La programmation dun Microcontrleur ne serait daucune utilit sans une carte dinterface permettant de concrtiser les actions du programme :
Benjamin Becquet
Nicolas de Dreuille 2
Sbastien Durand
Cest la fonction de lEducation Board II, celle ci permet en effet de communiquer avec le PIC via un clavier de boutons, un ensemble de LEDS, un cran LCD, des potentiomtres et des capteurs de temprature. Dans ce TP, nous utiliserons les LEDS et les boutons. Attention : lalimentation doit tre comprise entre 7 et 12 volts mais nous avons constat quen dessous de 10 ou si le courant nest pas assez important, la carte a des difficults fonctionner.
Le programmeur :
La programmation dun Microcontrleur ncessite enfin une interface entre le PC et le PIC. Il en existe de plus ou moins sophistiqus, certains permettant mme deffectuer un debuggage temps rel, nous utiliserons le PIC-01 qui a lavantage dtre le moins cher. (avantage certain en ces temps de disette pr-cloture du budget).
Les logiciels :
Nous utiliserons lenvironnement de dveloppement intgr MPLAB dvelopp par Microchip pour programmer le PIC. Comme tout IDE qui se respecte, il permet de crer des projets, dditer les fichiers quil contient et de compiler et linker le tout. MPLAB peut aussi permettre le debuggage du Microcontrleur mais cette opration ncessite un programmeur plus volu et nettement plus onreux. ICPROG sera utilis pour charger les fichiers .hex gnrs par MPLAB.
Benjamin Becquet
Nicolas de Dreuille 3
Sbastien Durand
Il est tout dabord ncessaire de prsenter la structure dun programme assembleur pour MPASM :
LIST P=16F877 #include "P16F877.INC" __CONFIG _BODEN_ON&_CP_OFF&_WRT_ENABLE_ON&_PWRTE_ON&_WDT_OFF&_HS_OSC
Lentte inclut la spcification du Microcontrleur utilis et des paramtres qui ne sont pas le sujet de ce TP.
org goto org goto 0x000 init 0x004 int ;indique la marche suivre en cas d'interruption ;Indique le dbut du programme
La fonction org permet de dfinir les vecteurs de dmarrage du programme et dexcution des interruptions, on utilise gnralement des branchements.
init BSF STATUS , RP0 . . . RETFIE END ;Page d'Adresse 1 -> on a accs aux TRIS (CF M14)
int
Sensuit le corps du programme fini par END. Les instructions sont dtailles partir de la page 26 du cours et les CF en fin de lignes renvoient au cours.
Benjamin Becquet
Nicolas de Dreuille 4
Sbastien Durand
Comme vous pourrez le voir sur le schma de la carte, les huit LEDS sont montes en sortie des huit pattes du port :
Il suffit donc de mettre un bit sur le registre PORTC afin dobtenir une tension de 5 volts sur la patte correspondante, mais pour cela, il faut tout dabord le configurer en sortie car les ports sont configurs comme entres par dfaut. Le registre TRISC est utilis pour dfinir les entres sorties des ports. Le nime bit du registre dfinit la qualit dentre ou sortie de la nime ligne du port correspondant, un 0 comme Output reprsentant une sortie et un 1 comme Input, une entre (1 par dfaut). Le registre PORTC sera donc mis 0 afin de pouvoir agir sur les LEDS. Nous sommes maintenant assez balaises pour crire le programme. Le premier groupe qui me rend un truc nickel aura la chance de voir son programme excut sur la carte sur sa propre paillasse. Ouaaaah.
; Prcise le PIC utilis LIST P=16F877 #include "P16F877.INC" __CONFIG _BODEN_ON&_CP_OFF&_WRT_ENABLE_ON&_PWRTE_ON&_WDT_OFF&_HS_OSC&_DEBUG_OFF&_CPD_OFF&_LVP_OFF ; Dbut du programme ORG GOTO ORG GOTO init BSF CLRF CLRF BCF 0x000 init 0x004 int STATUS , RP0 INTCON TRISD STATUS , RP0 ;Indique le dbut du programme ;indique la marche suivre en cas d'interruption
;Page d'Adresse 1 -> on a accs aux TRIS (CF M14) ;Mise 0 du vecteur d'interruption -> pas d'interruptions (CF M20) ;Met le TRIS du port D 0 -> port en mode Output ;Page d'Adresse 0 ;Allume la premire LED
MOVLW b'10000000' MOVWF PORTD debut CLRWDT GOTO debut RETFIE END
;clear wdt
int
Benjamin Becquet
Nicolas de Dreuille 5
Sbastien Durand
Utiliser MPLAB :
Nous avons un IDE de professionnel, autant ne pas le ngliger, voici la marche suivre pour diter et compiler le programme : 1. Dmarrez MPLAB : Menu Dmarrer/Programmes/Microchip_MPLAB/MPLAB 2. Crez un nouveau projet : Project/New_Project Je vous laisse linitiative du nom et du rpertoire, mais votre fichier .asm devra se trouver au mme endroit. Attention noubliez pas de changer le mode de dveloppement et dajouter comme nud le fichier pralablement crit. (soit avec notepad comme un vrai dur, soit avec fichier/Nouveau dans MPASM)
3. Project/Make et le fichier .hex est gnr si tout se passe bien. Utiliser ICPROG :
Attention, il vous faut dabord insrer le PIC dans le programmeur : 1. Assurez-vous dabord fond davoir coup toute source de courant susceptible dalimenter le PIC avant de lenlever ou de linsrer dans un support. 2. Insrez-le maintenant dans la carte. 3. Allumez ensuite le courant. Vous pouvez maintenant ouvrir le programme C:\PIC-01\ICPROG.EXE.
Benjamin Becquet
Nicolas de Dreuille 6
Sbastien Durand
Puis ouvrez le fichier .hex gnr prcdemment. Ensuit cliquez sur Command/Erase All Et Command/Program All Caf !!!! Une fois le PIC programm remettez le sur la carte en prenant les prcautions susmentionnes. Voil, a fonctionne. Nous allons maintenant tenter dallumer cette LED en appuyant sur un bouton.
Benjamin Becquet
Nicolas de Dreuille 7
Sbastien Durand
En gros, si RA2 est 0 et S3 enfonc alors RB4 est 0 et cest tout ce quon veut savoir pour linstant. Nous sommes maintenant en mesure de comprendre le programme suivant : Afin de dtecter le bouton, nous utiliserons le polling : mthode qui consiste tester en boucle le registre correspondant.
; Prcise le PIC utilis LIST P=16F877 #include "P16F877.INC" __CONFIG _BODEN_ON&_CP_OFF&_WRT_ENABLE_ON&_PWRTE_ON&_WDT_OFF&_HS_OSC&_DEBUG_OFF&_CPD_OFF&_LVP_OFF
; Ddut du programme ORG GOTO ORG GOTO init BSF CLRF BCF CLRF 0x000 init 0x004 int STATUS , RP0 INTCON OPTION_REG,7 TRISD ;Indique le dbut du programme
;Page d'Adresse 1 -> on a accs aux TRIS (CF M14) ;Mise 0 du vecteur d'interruption -> pas d'interruptions (CF M20) ;Mise 0 du bit 7 d'option (CF M19) (The big @#$ truc de fouine) ;Met le TRIS du port D 0 -> port en mode Output
Benjamin Becquet
Nicolas de Dreuille 8
Sbastien Durand
;Page d'Adresse 0 ; ; ;Teste la troisime colonne ;clear wdt ;Teste l'appui du bouton ;S'il est appuy, on va KeyOn ;Sinon on eteint tout.
CLRWDT BTFSS PORTB,4 GOTO KeyOn MOVLW b'00000000' MOVWF PORTD GOTO debut MOVLW B'11111111' MOVWF PORTD GOTO debut RETFIE END
KeyOn
int
Le premier qui finit a encore une fois le droit dexhiber, hum, son programme devant tout le monde. Et gagne un BN.
; Variables cblock H'20' W_TEMP STATUS_TEMP endc ; Ddut du programme org goto ORG goto init BSF BCF CLRF BCF 0000h init 0004h int STATUS , RP0 OPTION_REG,7 TRISD TRISC,2 ;Page d'Adresse 1 -> on a accs aux TRIS ;Mise 0 du bit 7 d'option (CF M19) ;Met le TRIS du port D 0 -> port en mode Output ;Met le bit 2 du port C et les bits 2 et 5 du port A en sortie
;Nous aurons besoin de variables afin de ;stocker les registres susceptibles d'tre modifis lors de l'interruption
Benjamin Becquet
Nicolas de Dreuille 9
Sbastien Durand
BCF
STATUS , RP0
;Page d'Adresse 0
MOVLW b'10001000' MOVWF INTCON boucle clrwdt MOVLW b'10101010' MOVWF PORTD BSF PORTC,2 BSF PORTA,5 BCF PORTA,2 goto boucle
int
;On teste la provenance de l'interruption ;on inhibe les IT ;On sauve tout dans la RAM ;On peut le faire aussi ans la pile mais pas l :)
MOVLW MOVWF boucle2 clrwdt BTFSS goto swapf movwf swapf swapf MOVLW MOVWF RETFIE END
fin
STATUS_TEMP,W ;voil c'est fini STATUS ;on retablit tout mme Z W_TEMP,F ; W_TEMP,W ; b'10001000' INTCON ;On finit l'IT
Maintenant vous savez tout et il vous reste un peu de temps pour mettre vos connaissances profit : Celui qui crit le programme le plus original et le plus beau remporte le paquet de BN !!! Par exemple : un programme pourra afficher diffrentes squences sur les LEDS selon le bouton enfonc.
Benjamin Becquet
Nicolas de Dreuille 10
Sbastien Durand