Travaux Pratiques. Informatique Industrielle

Documents pareils
PIC EVAL Dev Board PIC18F97J60

PIC : COURS ASSEMBLEUR

La programmation des PIC en C. Les fonctions, les interruptions.

MICROCONTROLEURS PIC PROGRAMMATION EN C. V. Chollet - cours-pic-13b - 09/12/2012 Page 1 sur 44

Flowcode - Mode d'emploi

Informatique Industrielle

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Base de l'informatique. Généralité et Architecture Le système d'exploitation Les logiciels Le réseau et l'extérieur (WEB)

Document de formation pour une solution complète d automatisation Totally Integrated Automation (T I A) MODULE A5 Programmation de la CPU 314C-2DP

AMICUS 18 (2ème partie) 4) Présentation du logiciel Amicus IDE

PIC 16F84. Philippe Hoppenot

Mini_guide_Isis_v6.doc le 10/02/2005 Page 1/15

Le langage C. Séance n 4

Carte Relais GSM (Manuel Utilisateur)

TABLE DES MATIÈRES 1. DÉMARRER ISIS 2 2. SAISIE D UN SCHÉMA 3 & ' " ( ) '*+ ", ##) # " -. /0 " 1 2 " 3. SIMULATION 7 " - 4.

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Tutoriel code::blocks

VIII- Circuits séquentiels. Mémoires

ésylog, direction technique Esylog_PeerBackup outil de sauvegarde individuelle mails & fichiers personnels documentation technique

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

1 Démarrer L écran Isis La boite à outils Mode principal Mode gadget Mode graphique...

Mini_guide_Isis.pdf le 23/09/2001 Page 1/14

ENDNOTE X2 SOMMAIRE. 1. La bibliothèque EndNote 1.1. Créer une nouvelle bibliothèque 1.2. Ouvrir une bibliothèque EndNote 1.3. Fermer une bibliothèque

Securexam Consignes pour l EFU Les 2, 3 et 4 juin 2015

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :

Messages d'erreurs. Redémarrez votre PC en cliquant sur Démarrer, en sélectionnant ensuite Arrêter puis en cochant Redémarrer

BIRT (Business Intelligence and Reporting Tools)

Contrôle d accès UTIL TP N 1 découverte

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

TRAVAUX DIRIGES D'INFORMATIQUE INITIATION A LA MANIPULATION DE WINDOWS 98

L'émulateur multi-système

La mémoire. Un ordinateur. L'octet. Le bit

Proteus VSM. manuel_vsm.doc

ET 24 : Modèle de comportement d un système Introduction à Labview et initiation à la réalisation d un Instrument Virtuel (VI).

Affectation standard Affectation modifiée (exemple)

Guide de l administrateur DOC-OEMCS8-GA-FR-29/09/05

Introduction à Eclipse

CAPTURE DES PROFESSIONNELS

LOGICIEL ALARM MONITORING

Auto formation à Zelio logic

Modules d automatismes simples

SCL LOGICIEL DE CONTROL

Cours Informatique 1. Monsieur SADOUNI Salheddine

WINDOWS SERVER 2003-R2

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

Assistance à distance sous Windows

Interface PC Vivago Ultra. Pro. Guide d'utilisation

Millenium3 Atelier de programmation

1 Introduction C+ + Algorithm e. languag. Algorigramm. machine binaire. 1-1 Chaîne de développement. Séance n 4

Contraintes, particularités. 1. Généralités Gestion de la mémoire a. Type des variables et constantes... 2

Manipulations du laboratoire

Créer une base de données

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Manuel d utilisation NETexcom

FileZilla. Sauvegarder son site Guppy à l aide de. Sommaire:

Gestion des documents avec ALFRESCO

Utilisation du visualiseur Avermedia

CONFIGURATION DE L AUTOMATE SIEMENS

Sommaire. 2. Utiliser la télécommande Télécommande Administrateur Télécommande Utilisateur Échanger une télécommande...

LES ACCES ODBC AVEC LE SYSTEME SAS

WinTask x64 Le Planificateur de tâches sous Windows 7 64 bits, Windows 8/ bits, Windows 2008 R2 et Windows bits

Préconisations Techniques & Installation de Gestimum ERP

LISA. Manuel Utilisateur

Utilisation d'un réseau avec IACA

FAQ pour tablette Windows 8 (NS-15MS0832 et NS-15MS0832B) Avril 2015

INSTALLATION MODULE WEB

Installation et paramétrage. Accès aux modèles, autotextes et clip- art partagés

Travaux pratiques Détermination de la capacité de stockage des données

Fiche technique CPU 314SC/DPM (314-6CG13)

SOMMAIRE. Travailler avec les requêtes... 3

Cours 3 : L'ordinateur

GESTION DE L'ORDINATEUR

Sélection du contrôleur

LOGICIEL DC4D MONITOR

ANALYSE TRAMEs LIAISON SERIE

Date de diffusion : Rédigé par : Version : Mars 2008 APEM 1.4. Sig-Artisanat : Guide de l'utilisateur 2 / 24

Le générateur d'activités

TD/TP 1 Introduction au SDK d Android

Projet Matlab : un logiciel de cryptage

Ladibug TM 2.0 Logiciel de présentation visuel d'image Manuel de l utilisateur - Français

TD Architecture des ordinateurs. Jean-Luc Dekeyser

MANUEL D UTILISATION - Précis Poste de Traitement d Images 1 - Déconvolution

CRÉER UN DVD VIDEO avec DVD FLICK (avec ou sans menu)

WebSpy Analyzer Giga 2.1 Guide de démarrage

Une liste des distributeurs Paxton se trouve sur le site Internet -

Objet du document. Version document : 1.00

1. PRESENTATION DU PROJET

GUIDE DE PRISE EN MAIN ISIS PROTEUS V7

Les possibilités de paramétrage réseau des logiciels de virtualisation sont les suivantes quant à la connexion réseau :

Storebox User Guide. Swisscom (Suisse) SA

CAP BOX Note utilisateurs

Accès externe aux ressources du serveur pédagogique

UltraVNC, UltraVNC SC réglages et configurations

Utilisation du client de messagerie Thunderbird

COMMANDER A DISTANCE LE ROBOT-PONG ETUDE DE LA TELECOMMANDE (2 nde PARTIE)

Réaliser un PUBLIPOSTAGE

Transcription:

Aix Marseille Université Travaux Pratiques Informatique Industrielle Julien Marot julien.marot@fresnel.fr Belgacem Jaballah belgacem.jaballah@lsis.org Marc Allain marc.allain@fresnel.fr

Formation au développement d'applications en Assembleur sur un microcontrôleur Mircrohip PIC 18F4520 en utlisant l'environnement MPLAB IDE.

1. Avant de commencer Travaux Pratiques de Microcontrôleur PIC 18F4520 Ces séances de travaux pratiques (TP) sont destinées à illustrer les notions qui vous ont été présentées en cours. Pour cela, vous aurez à concevoir et à tester un certain nombre de programmes soit en langage assembleur soit en langage C. Pour chaque tâche que vous aurez à réaliser, nous vous invitons à enregistrer votre programme sous un nom particulier pour garder une sauvegarde de travail. Pour faciliter le débogage et assurer la maintenance et la portabilité de vos codes, il est primordial que vous commenciez par rédiger un algorigramme, que vous commentiez clairement votre programme et que vous pensiez à le rendre le plus clair possible (ex : en choisissant des noms appropriés pour les labels). Concernant l'évaluation de votre travail, nous vous demanderons de nous présenter le programme correspondant à chaque tâche que vous aurez à programmer sur le simulateur ou sur le kit de démonstration (cf. plus bas). Nous corrigerons également vos codes en portant une attention particulière à la lisibilité (pensez donc aux commentaires!). Enfin, vous devrez également nous rendre les algorigrammes qui correspondent aux codes. 2. Le Matériel 2.1. Le Kit PICDEM 2 Plus et PIC 18F4520 Le kit PICDEM 2 Plus est un kit simple qui permet de mettre en évidence les capacités de différents microcontrôleurs du fabricant Microchip à travers divers périphériques et accessoires reproduits sur le schéma de la figure 1. Figure 1 : Le kit PICDEM 2 PLUS, Périphériques et Accessoires Le micro-contrôleur utilisé est le PIC18F4520 de Microchip. C'est un micro-contrôleur 8 bits disposant d'une mémoire de programme de 32 Ko, de 1536 octets de RAM (Random Access Memory), d'une EEPROM (Electrically Erasable Programmable Read Only Memory) de 256 octets et de 36 entrées/sorties. Une part importante de la difficulté pour programmer un micro-contrôleur réside dans l'acquisition d'informations. Pour acquérir cette compétence, nous vous invitons à vous référer fréquemment à la documentation technique du micro-contrôleur, ainsi qu'à la documentation technique de la carte d'évaluation, cf. les documentations électroniques. 2.2. MPLAB Integrated Development Environment MPLAB IDE est un environnement gratuit de programmation pour les micro-contrôleurs de la famille Microchip. L environnement intègre un éditeur d assembleur, un débogueur RC3 complet ainsi que tous les outils permettant

de gérer les programmateurs de composants. La possibilité d intégrer un compilateur C dans l environnement de développement MPLAB s inscrit directement dans la politique du service qui est d utiliser des langages de programmation évolués dans les développements en électronique. 2.3. Le programmateur PICSTART Plus Il permet de transférer le programme directement de MPLAB dans le micro-contrôleur via le port série (RS232) d'un PC. 3. Gestion de vos fichiers Pour chacun des binômes, un compte utilisateur a éré créé. Pour ne pas oublier votre nom d'utilisateur et votre mot de passe. vous pouvez le noter ci-dessous. Attention windows faire la déifférence entre les majuscules et les minuscules. Nom d'utilisateur : Mot de passe : Avec votre compte vous avez droit à un espace de stockage sur le serveur. Cette espace de sotckage apparait dans «Poste de Travail» sous le nom de «voir le nom». C'est ici que vous devez stocker tous vos documents afin qu'ils vous soient disponibles sur toutes les machines de TP. Il vous est fortement conseillé de bien ranger vos documents tout au long des séances. pour chacun des TP, faîtes un répertoire associé ex: tp3 pour le tp n 3. Puis pour chaque question si c'est nécessaire faîtes des sous réperoires question5 par exemple. Les documentations techniques nécessaires au TP sont disponibles à l'adresse: https://sites.google.com/site/infoindusamu/

4. TP n 1 : Initiation à MPLAB IDE Le but de ce TP est de se familiariser avec la suite logicielle «MPLAB Integrated Development Environment» (v8.91) de Microchip afin de pouvoir utiliser les fonctions de bases de cet outil développement à savoir : créer un projet, éditer et compiler un programme en assembleur, simuler son fonctionnement et enfin programmer le microcontrôleur (µc). Les différentes fonctions sont expliquées à travers deux programmes qui vous sont donnés. 4.1. Programme «Interrupteur» Le programme «Interrupteur» boucle à l infini sur les tâches ci-dessous afin de reproduire le fonctionnement d un interrupteur. Tâche 1 : lire l état du bouton poussoir S2, broche RA4 Tâche 2 : si le bouton est appuyé, on allume la diode électro-luminescente (LED) L1, broche RB0, sinon on l éteint. On notera que les boutons poussoirs sont branchés au microcontrôleur en logique négative. L'état «bouton appuyé» correspond donc à un 0 logique. Les LED sont câblées en logique positive, elles s'allument pour un 1 logique. Le fonctionnement demandé peut être reproduit par l'algorigramme ci-dessous. Initialisation du µ C oui RB0 = 1 Allumer L1 RA4 = 0 S2 appuyé non RB0 = 0 Eteindre L1 Figure 1: Algorigramme du programme «Interrupteur» L'algorigramme peut se traduire en assembleur de la manière suivante : init LIST P=18F4520 #include <P18F4520.inc> #include <CONFIG.inc> org h'0000' goto init clrf PORTB movlw b'00000000' movwf TRISB clrf PORTA movlw b'00010000' movwf TRISA boucle btfsc PORTA,4 goto eteindre bsf PORTB,0 goto boucle eteindre bcf PORTB,0 goto boucle END Définition du µc utilisé, des constantes spécifiques au µc et des paramètres de configuration encodés lors de la programmation. Adresse de départ après un reset du µc. On place l instruction goto init à l adresse (0000) Initialisation : Remise à zéro des bascules D des différents ports utilisés et configuration des entrées/sorties. Boucle infini : Allume ou éteint la LED en fonction de l état du bouton poussoir. Tout au long des travaux pratiques, nous vous demandons d'établir un glossaire des différentes instructions rencontrées avec leur explication en français. Ce glossaire vous sera très utile pour les différents programmes que vous serez amenés à réaliser.

4.2. Édition et Compilation du programme Cette partie permet d'apprendre à créer un projet MPLAB, saisir un programme en assembleur et le compiler. 4.2.1. Démarrage Avant de commencer, créer le répertoire tp1 puis dans ce répertoire créer à nouveau un répertoire interrupteur. Copier dans ce dernier répertoire les fichiers P18F4520.inc et CONFIG.inc Lancer la suite logicielle MPLAB IDE à partir de l icône qui se trouve sur votre bureau. 4.2.2. Création d un nouveau projet avec «Project Wizard» Cliquer sur Project >> Project Wizard Cliquer sur Suivant > puis sélectionner PIC18F4520 dans le menu déroulant Device. Les fichiers asmwin, asmlib, asmlink doivent ensuite être trouvés (cliquer sur Browse à chaque fois) dans le dossier MPASM SUITE en remontant dans l'arborescence des dossiers. Cliquer sur Suivant > puis sélectionner «Microchip MPASM Toolsuite» et «MPASM Assembler» afin de pouvoir programmer en Assembleur. Cliquer sur Suivant > puis dans le champ «Project Name» saisir le nom du projet (ex : interrupteur) et dans le champ «Project Directory» aller chercher à l aide du bouton «Browse», le dossier créé au début : tp1/interrupteur. Cliquer sur Suivant > et ajouter les fichiers P18F4520.inc et CONFIG.inc au projet à l aide du bouton «Add» >> Cliquer sur Suivant > puis sur Terminer. 4.2.3. Edition du programme Créer un nouveau fichier dans le projet, File >> Add New Files to Project L enregistrer dans le répertoire projet avec l extension asm (ex : prog.asm) MPLAB Editor se lance Saisir le programme «Interrupteur» et enregistrer. Penser à ajouter des commentaires au programme pour montrer que vous avez bien compris les différentes instructions. Une ligne de commentaire commence par «;». Workspace Architecture et contenu du projet Output Interface MPLAB Développeur Figure 2: MPLAB IDE, Mode Edition Editor Edition des fichiers de programme, de configuration 4.2.4. Compilation Cliquer sur Project >> Build All ou sur l icône de la barre de menu ou encore Ctrl+F10 pour compiler le projet complet. Erreurs et warnings sont signalés dans la fenêtre Output ainsi que le résultat de la compilation BUILD SUCCEEDED ou BUILD FAILED. En double-cliquant sur une erreur ou un warning dans la fenêtre Output, vous serez amener directement à la ligne concernée dans votre programme.

4.3. Simulation Avant d envoyer un programme au µc, vous pouvez tester son fonctionnement dans le simulateur (Debugger) MPLAB SIM. Pour lancer le simulateur, cliquer sur Debugger >> Select Tool >> MPLAB SIM. Une nouvelle barre d outils est ajoutée ainsi qu un onglet «MPLAB SIM» dans la fenêtre Output. Le simulateur fonctionne selon trois modes : le mode Step By Step qui permet de faire une exécution pas à pas du programme (vous êtes alors l horloge du µc). le mode Animate qui exécute automatiquement le programme mais à une vitesse réduite pour que l on puisse suivre l'éxécution. le mode Run où le programme est exécuté automatiquement à la vitesse du PC. Dans les deux premiers modes, nous obtenons des résultats au fur et à mesure de la simulation alors que dans le dernier, les résultats ne sont visibles que lorsque la simulation est stoppée. Dans ce paragraphe, nous nous intéressons aux modes Animate et Step By Step car ils nous permettent de voir qu elle est l influence des entrées sur les sorties. Le réglage de la fréquence de l oscillateur utilisé se fait dans Debugger >> Settings. Dans notre cas c est 4 Mhz. 4.3.1. Entrées : Stimulus Comme son nom l indique cette fonctionnalité permet de prévoir les événements d'entrées de manières synchrones (les dates sont connues avant la simulation) et asynchrones (les événements sont déclenchés durant la simulation par l utilisateur). Les différents événements sont enregistrés dans une table (Workbook). Pour en créer une, cliquer sur Debugger >> Stimulus >> New Workbook. Dans le cadre du projet «interrupteur» on souhaite créer les événements suivants : à t = 0, initialisation de RA4 à 1 (bouton S2 relâché), à t = 10 cycles, on appuie sur S2 (RA4 = 0), à t = 25 cycles, on relâche le bouton (RA4 = 1). on veut également pouvoir inverser l état de RA4 quand on le souhaite. L onglet «Pin / Register Actions» de la fenêtre «Stimulus» permet la saisie des événements en programmant leurs dates d arrivée (événements synchrones). Démarche de création d événements synchrones : Ajouter une colonne RA4 au tableau d événement (bouton «Clic here to Add Signals») Rechercher RA4 dans la liste «Available Signals» et l ajouter à la liste «Selected Signals» Remplir la table d événement (Time, RA4) avec (0,1) (10,0) (25,1) Choisir cyc (cycle) comme base de temps dans menu «Time Units» Enregistrer la table (bouton «Save Workbook») L onglet «Asynch» de la fenêtre «Stimulus» permet de pré-programmer des boutons (colonne «Fire») à la génération d événement (événements asynchrones). Démarche de création d événement asynchrone : Saisir RA4 dans la colonne «Pin/SFR» de la première ligne Le menu de la colonne «Action» propose cinq types d action : Set High : RA4 = 1 Set Low : RA4 = 0 Toggle : RA4 = RA4 Pulse High : RA4 = Pulse Low : RA4 = Choisir «Toggle» pour inverser RA4 Enregistrer la table (bouton «Save Workbook») Appliquer l échéancier d événement (bouton «Apply») la largeur de l impulsion est réglée dans les colonnes «Width» et «Units». Après chaque changement dans l échéancier d événement, cliquer sur «Apply» afin que ces changements soient pris en compte par la simulation.

Déclencher Figure 3: Stimuli synchrone et asynchrone 4.3.2. Sorties : Watch & Logic Analyzer Afin de suivre et de visualiser les résultats de simulation, MPLAB SIM intègre divers outils dont : La fenêtre «Watch» (menu View >> Watch) qui affiche le contenu des différents registres du µc et des différentes variables du programme. La sélection et la validation des registres et variables à afficher se fait à travers les deux menus déroulants et les deux boutons «Add SFR» et «Add Symbol». Un clic droit sur un des éléments observés permet l accès à la boîte de dialogue «Properties» afin de régler le format d affichage de l élément (ex : Hex, Binary, Single Bit,...) mais aussi de sauvegarder, exporter, le tableau «Watch». Il est aussi possible de faire glisser des éléments de la fenêtre «Editor» vers la fenêtre «Watch». La fenêtre «Logic Analyzer» permet l affichage des éléments logiques (1 bit) en fonction du «Time Base». Le choix des éléments à afficher se fait à l aide du bouton «Channels». Pour le projet «interrupteur», on souhaite afficher : les registres TRISA et TRISB sous forme hexadécimale les registres PORTA, PORTB et W sous forme binaire les bits RA4 et RB0 Configurer correctement les fenêtres «Watch» et «Logic Analyzser».

4.3.3. Simulation du programme en mode Animate Maintenant que les entrées et sorties de la simulation sont configurées, on peut lancer la simulation. Avant toutes choses, afin d initialiser le µc, il est nécessaire d effectuer un «Reset» en cliquant sur le bouton puis cliquer sur le bouton «Animate» et observer les fenêtres «Watch» et «Logic Analyzer». Arrêter l animation à l aide du bouton, faire un nouveau «Reset», relancer l animation, ouvrir l onglet «Asynch» de la fenêtre «Stimulus», agir sur RA4 et observer les résultats. Logic Analyzer Graphe d évolution de bits Editor La flèche verte symbolise le Program Counter Watch Affichage de l état courant des registres et variables Figure 4: MPLAB IDE, Mode Simulation Vous pouvez également faire avancer le programme pas à pas (mode «Step By Step») avec le bouton «Step Into». On notera que les boutons «Step Over» et «Step Out» permettent respectivement une exécution pas à pas avec une exécution automatique des sous-programmes et une exécution jusqu à la fin des sous-programmes. 4.4. Programmation du microcontrôleur Cette phase consiste à envoyer le code hexadécimal du programme dans le µc. Une fois le programme compilé avec succès, le code hexadécimal du programme se trouve dans le fichier avec l'extension hex (ex : prog.hex), voir le fichier avec la fenêtre «Program Memory» du menu «View». Le code de trouve sous l'onglet «Opcode Hex». Si on utilise le programmateur MPLAB ICD3 le programme est injecté dans le PIC qui se trouve sur la plaquette de test. Si on utilise le programmateur PICSTARTPLUS: Connecter le programmateur PICSTART Plus sur le port série du PC et au secteur Placer le µc sur le programmateur (Attention au sens!) Dans MPLAB, sous le menu Programmer > Select Programmer chosir «1 PICSTART Plus». Un nouvel onglet est alors ajouté à la fenêtre «Output». Configurer le port COM sur lequel est connecté le programmateur (COM1), menu Programmer > Settings... Activer le programmateur, menu Programmer > Enable Programmer, une nouvelle barre d'outils est ajoutée. Envoyer votre programme, menu Programmer > Program ou en cliquant sur, le transfert est terminé lorsque la LED jaune Activate du programmateur est éteinte et que le message «Programming/Verification completed successfully!» apparaît dans la fenêtre Output. Désactiver le programmateur, menu Programmer > Disable Programmer Placer le µc sur la carte PICDEM 2 Plus (Attention au sens!) mettre la carte sous tension et ça marche...

Lors des phases de manipulation du microcontrôleur, vérifier que la carte PICDEM 2 Plus ne soit pas sous tension et faîtes attention aux pattes, elles sont fragiles. Figure 5: MPLAB IDE, Code hexadécimal du programme 4.5. Programme «Clignotant» 4.5.1. Analyse et compréhension du programme Le programme ci-après fait clignoter la LED L1, broche RB0, à une fréquence d environ 1Hz. L état de la LED change donc toutes les 500ms. LIST P=18F4520 #include <P18F4520.inc> #include <CONFIG.inc> org h'0000' ;----- Déclaration de variables CBLOCK 0x00 t1 : 1 t2 : 1 ENDC Définition du µc utilisé, des constantes spécifiques au µc et des paramètres de configuration encodés lors de la programmation. Adresse de départ après un reset du µc. Les variables t1 et t2 sont rangées dans la bank 0 de la ram (adresse 0x00) et ont pour taille un octet. ;----- Initialisation Init clrf PORTB movlw h'00' movwf TRISB Remise à zéro des bascules D du port B et définition du port B en sortie. ;----- Programme Principal boucle movlw h'01' xorwf PORTB call tempo250ms call tempo250ms goto boucle Boucle infini : Allume et éteint la LED toutes les 500ms. ;----- Sous-programme tempo250ms movlw t10 movwf t1 comp1 dcfsnz t1 return movlw t20 movwf t2 comp2 dcfsnz t2 goto comp1 goto comp2 Sous programme de temporisation (à compléter) On réalise deux boucles imbriquées qui «occupe» le µc durant environ 250 ms. END

Comprendre le programme «clignotant» et réaliser l'algorigramme associé. Expliquer l utilité de xorwf dans le programme principal (utiliser une table de vérité). Calculer les valeurs d initialisation t10 et t20 pour que le sous programme de temporisation s exécute en 250 ms ± 1 ms. Le nombre de cycle requis par chaque instruction est donné dans le jeu d instruction. Créer un nouveau projet dans MPLAB et le sauver dans le répertoire tp1/cligno puis saisir le programme précédent en remplaçant t10 et t20 par leur valeur (pour informer le compilateur de la base dans laquelle la valeur est écrite on précède la valeur de la première lettre de la base, ainsi 192 en décimal s écrit d 192, h C0 en hexadécimal ou encore b 11000000 en binaire). Compiler votre programme et passer à la partie simulation. N oubliez pas de copier les fichiers P18F4520.inc et CONFIG.inc dans le répertoire tp1/cligno. 4.5.2. Simulation Vous pouvez simuler le programme de la même manière que le programme «interrupteur» mais vous vous apercevrez très vite que c est très long du fait de l animation et de la temporisation. (Vous pouvez tout de même le faire pour bien comprendre mais en initialisant t10 et t20 à 3 et 5 par exemple.) Nous allons donc faire les simulations en mode Run, exécution automatique. Pour notre programme, nous n avons besoin d aucun événement d entrée mais si besoin avait été on aurait pu saisir un échéancier comme précédemment. En mode «Run» le programme s exécute donc de façon automatique et ne s arrête que lorsqu il rencontre un point d arrêt ou à la fin du programme. Il faut donc placer correctement les points d arrêt afin de valider le fonctionnement de notre programme. Pour observer la durée de la temporisation il faut donc mettre un point d arrêt sur la ligne d appel du sous programme de temporisation et un autre sur la ligne suivante. Pour ajouter un point d arrêt, double cliquer sur la ligne du programme où vous le souhaitez, ou alors utiliser le menu Debugger >> Breakpoints disponible depuis la touche F2. Figure 6: Placement des points d'arrêt Nous allons suivre l exécution du programme à l aide de la fenêtre «Simulator Trace» disponible dans le menu «View». Nous allons nous intéresser plus particulièrement à la colonne «Time». Vous pouvez changer l unité de temps de cette colonne par un clic droit menu «Display Time». Lorsque vous affichez le temps en toutes autres unités que cycle, la valeur affichée dépend de la fréquence de l oscillateur du µc. Lancer la simulation, bouton Observer la fenêtre «Simulator Trace» lorsque la simulation s arrête au premier point d arrêt et noter le temps d appel de la temporisation (ex : t i = 250303 cycles) Relancer la simulation, bouton Noter à nouveau le temps de la fenêtre «Simulator Trace» (ex : t f = 500602 cycles) Vous pouvez alors calculer la durée de la temporisation d = t f t i = 250299 cycles soit 250,299 ms avec un oscillateur à 4 MHz. Utiliser cette méthode pour valider vos initialisations de t10 et t20.

Figure 7: Simulator Trace aux différents points d'arrêt Une fois les simulations terminées transférer le programme dans le microcontôleur, et effectuez le test : la LED connectée au port RB0 clignote-t-elle?

5. TP n 2 : Interruptions du TIMER 0 Dans ce TP, vous ferez clignoter une LED en utilisant un programme d interruption, au lieu de la temporisation utilisée dans un TP précédent. Nous devons faire clignoter la led L1, broche RB0, à une fréquence de 0.5Hz sans mobiliser le microprocesseur. Il n'est donc plus question d'utiliser une temporisation pour compter le temps (cf. TP n 1). Nous allons demander à un module externe : le TIMER0, de compter le temps et de signaler la fin du comptage au microprocesseur par une interruption dite interruption de débordement. La figure 14 montre le signal de sortie du TIMER0 et les interruptions de débordement associées. Le TIMER0 compte jusqu'à la valeur max en T secondes. Toutes les T secondes, l'état de la led L1 est inversé. Figure 8: Interruption de débordement du TIMER0 Trouver, en utilisant la datasheet, l'expression de la valeur max et de la période de comptage T en fonction de la configuration du TIMER0. (cf datasheet p123) Qu'elle est la configuration pour une période de comptage T d'environ 1s? Quels sont les bits à intialiser pour activer l'interruption du TIMER0? Expliquer la configuration du registre T0CON. L'énoncé demande de faire clignoter la led à une fréquence de 2Hz donc une période de comptage de 1s. Avec la configuration choisi précédemment, on a une interruption toutes les (1+t)s, si on souhaite mesuer le temps précisement cette erreur de t seconde n'est pas négligeable. Pour compenser cette erreur décalage, l'idée est d'initialiser les registres TMR0H TMR0L afin que le comptage ne commence pas à 0 mais à une valeur min permettant d'annuler t comme le montre la figure 15. Figure 9: Interruption de débordement du TIMER0 Calculer la valeur min pour avoir une fréquence de comptage de 1s exactement. Réaliser l'algorigramme du programme demandé, écrire et tester ce programme. Utilisez pour le test le logic analyser, en initialisant TMR0 à une valeur proche de la valeur max (par exemple 'FFFD'). Vous pourrez ainsi visualiser les changements d'état de la LED RB0.

6. TP n 3 : Ecriture d'un driver pour LCD Partie 1 L'objectif de ce TP est d'écrire et de tester un ensemble de fonctions assembleurs pour communiquer avec un afficheur LCD. La première partie de ce TP est réalisée en simulation afin d'écrire les différentes fonctions nécessaires au bon fonctionnement de l'afficheur. 6.1. Les afficheurs LCD Les afficheurs à cristaux liquides généralement appelés LCD (Liquid Crystal Display) sont des modules compacts qui nécessitent peu de composants pour leur mise en oeuvre. Plusieurs afficheurs sont disponibles sur le marché, ils se différencient les uns des autres par leurs dimensions (de 1 à 4 lignes de 6 à 80 caractères). Certains sont également dotés de fonctions de rétroéclairage. L'afficheur du kit PICDEM 2 Plus est un afficheur 16 2 c'est à dire 2 lignes de 16 caractères avec des caractères de 5 8 pixels. Pour communiquer avec l'extérieur tout afficheur à besoin d'un circuit spécialisé de gestion appelé «contrôleur d'affichage», il en existe différents modèles sur le marché mais ils ont tous le même fonctionnement. La carte d'évaluation est équipée du modèle HD44780U de SHARP. Le contrôleur sert donc d'interface entre le microcontrôleur et l'afficheur (cf. figure 9). Le but du driver est de gérer le bus CONTROL afin que le contrôleur d'affichage comprenne le bus DATA et affiche ce que l'on souhaite sur l'écran LCD. Figure 10: Communication avec l'afficheur LCD Le contrôleur d'affichage peut recevoir deux types d'information sur le bus DATA, un ordre (ex: effacer l'écran) ou une donnée (ex: le caractère A). Ordres ou données sont envoyés sur le bus DATA sous forme d'octets (8 bits). Mais pour ne pas utiliser toutes les broches de sorties d'un microcontrôleur pour communiquer avec un LCD, les contrôleurs d'affichage fonctionnent également en 4 bits, un nombre codé sur 4 bits s'appelle un quartet. En mode 4 bits, un octet est envoyé en deux fois : le quartet de poids fort puis le quartet de poids faible. Le bus CONTROL est constitué de trois lignes : La ligne RS (Register Select) qui permet au contrôleur d'affichage de savoir si le contenu du bus DATA est un ordre ou une donnée. Un niveau bas indiquera un ordre et un niveau haut une donnée. La ligne RW (Read Write) informe le contrôleur si on vient lire ou écrire dans sa mémoire, un niveau bas correpondant à une action d'écriture. La ligne E (Enable) qui informe le contrôleur d'affichage qu'un quartet (mode 4 bits) ou un octet (mode 8 bits) est disponible. Cette ligne est active sur front descendant. Elle réalise la syncronisation entre le microcontrôleur et l'afficheur. Les connexions entre le contrôleur d'affichage et le microcontrôleur sont regroupées dans le tableau 1. D'après le tableau 1 et le schéma extrait du User s Guide, quel est le mode de fonctionnement du contrôleur d'affichage?

Bus Contrôleur Microcontrôleur CONTROL DATA RS RW E DB7 DB6 DB5 DB4 RA3 RA2 RA1 RD3 RD2 RD1 RD0 a) b) a) tableau 1: Connexion entre le contrôleur d'affichage et le microcontrôleur; b) extrait PICDEM 2 Plus User's Guide (p18). On a Power-on Reset, RA5 and RA3:RA0 are configured as analog inputs and read as 0. RA4 is configured as a digital input... (cf datasheet p224). b) Attention : sur les nouvelles cartes PICDEM2+, le câblage microcontrôleur vs. Contrôleur d affichage a changé. D où la nécessité de définir les ports d entrée pour l afficheur LCD. Dans le cadre de la gestion des ports de configuration du contrôleur d affichage, l objectif de cet exercice est de paramétrer les ports E, R/W, et RS en fonction des broches du microcontrôleur auxquelles ces ports sont connectés. Seul le bus de contrôle (voir figure 10 et tableau 1 de l énoncé) est concerné. Comparaison des schémas de câblage des cartes rouge/verte/noire D après les figures ci-dessous, à quelles broches du microcontrôleur sont reliées les broches de contrôle E, R/W, RS du contrôleur d affichage, dans chaque cas? Schéma de câblage du LCD pour la carte PICDEM2PLUS rouge

Schéma de câblage du LCD pour les cartes PICDEM2PLUS verte et noire i. Proposez un fichier de configuration My_Config_LCD.inc dans lequel vous définirez les variables E, RS, et RW, en fonction des broches correspondantes du microcontrôleur. Considérez tout d abord la configuration des cartes rouges. Par exemple, l une des lignes de code sera : #define RS PORTA,3 Considérez maintenant la configuration des cartes verte/noire. Créez le fichier My_Config_LCD_Noir.inc correspondant. En incluant cette définition dans votre fichier de configuration, vous pourrez utiliser la notation RS au lieu de la notation PORTA,3 ou PORTD,4 dans les fichiers assembleur que vous allez créer désormais. Par exemple, pour passer à 1 le bit 4 du port D, et donc la broche RS d un contrôleur d affichage vous pourrez utiliser la ligne de commande suivante : bsf RS Pour que votre fichier de configuration soit pris en compte dans votre programme principal, vous devez l inclure dans le projet et le fichier principal de la même façon que le fichier CONFIG.inc. ii. Ecrivez deux lignes de code qui permettent de passer à 1 la broche E du contrôleur d affichage, d attendre 2 cycles, puis de passer à 0 la broche E. On suppose que E est initialisé à 0. Par extension, on parlera indistinctement des lignes E, R/W, RS et des broches E, R/W, RS. Le terme ligne se réfère plutôt au bus de contrôle. Vous êtes maintenant prêt à aborder les fonctions de gestion.

6.2. Fonctions de gestion 6.2.1. Transfert d'un octet L'écriture d'un ordre ou d'une donnée en mode 4 bits se fait selon la séquence reproduite en figure 10, l'octet à transférer étant b 7b 6b 5b 4b 3b 2b 1b 0 avec b 7 bit de poids fort. Figure 11: Transfert d'un octet en mode 4 bits Phase I : RW=0 et E=0. RS et DB7...4 sont positionnés à la valeur souhaitée : quartet de poids fort (MSB) Phase II : E=1. Phase III : E=0, le quartet transféré (poids fort) est pris en compte par le contrôleur lors du front descendant. Phase IV : DB7...4 sont positionnés à la valeur souhaitée : quartet de poids faible (LSB) Phase V : E=1. Phase VI : E=0, le quartet transféré (poids faible) est pris en compte par le contrôleur lors du front descendant. Réaliser l'algorigramme et écrire la fonction «lcd_ecrire_quartet» qui génère la séquence IV, V, VI sans tenir compte de l'état de RS pour l'instant, E étant déjà initialisé à 0. Le quartet à écrire est stocké dans les 4 bits de poids faible du registre de travail «W». La ligne E restant à l'état haut durant 2 cycles. Vous pourrez utiliser les instructions nop, bsf, bcf, movwf, andlw (cf. datasheet). Tester cette fonction avec le simulateur de MPLAB. Nous allons maintenant écrire la fonction «lcd_ecrire_octet» (c'est à dire la séquence I...VI) en utilisant bien évidemment la fonction «lcd_ecrire_quartet». On ne tient toujours pas compte de l'état de RS et E étant initialisé à 0. L'octet complet à transférer se trouve dans le registre «W» et sera sauvegardé dans la variable «lcd_db» stockée en ram. L'instruction swapf pourrait vous être utile. Écrire et tester cette fonction en simulation. Les fonctions d'écriture sont maintenant quasiment terminées. Il reste à gérer l'état ligne de la ligne RS, il suffit pour cela d'ajouter une instruction avant l'appel de la fonction «lcd_ecrire_octet». Réaliser les algorigrammes et écrire les deux fonctions «lcd_ecrire_ordre» et «lcd_ecrire_donnee». 6.2.2. Lecture de l'état du contrôleur d'affichage Lorsque que l'on demande au contrôleur d'exécuter une action (ordre ou commande), ce dernier met un certain temps à la réaliser. Si une nouvelle action lui est demandée alors que la précédente n'est pas encore terminée, elle ne sera pas prise en compte. Pour résoudre ce problème il est nécessaire de savoir si le contrôleur est disponible. On ne va donc plus «écrire» mais «lire» dans le contrôleur.

Figure 12: Lecture de l'état de l'afficheur en mode 4 bits Phase I : RW=1 et RS = 0, il s'agit d'une instruction (ordre) de lecture et E=0 Phase II : E passe à 1 pour demander le quartet de poids fort. Phase III : On vient lire la valeur du quartet MSB sur DB7...DB4. Phase IV : E passe à 0 pour signaler la fin de la lecture du premier quartet. Phase V : E repasse à 1 pour demander le quartet de poids faible. Phase VI : On vient lire la valeur du quartet LSB sur DB7...DB4. Phase VII : E repasse à 0 pour signaler la fin de la lecture du deuxième quartet. Note : Pour venir lire DB7...DB4 il faut que les broches RD3...RD0 soient configurées en entrées. Mais il faut pense à les remettre en sortie pour la suite. Sur la figure 12, l'octet reçu est de la forme BF AC 6AC 5AC 4AC 3AC 2AC 1AC 0 avec BF bit de poids fort. BF qui signifie Busy Flag vaut 1 si l'afficheur est occupé. Les bits AC 6...1 représentent l'address Counter c'est à dire la valeur courante du pointeur de RAM du contrôleur cette information doit être lue mais ne nous est pas utile, elle ne sera donc pas mémorisée. Réaliser l'algorigramme puis écrire la fonction «lcd_dispo» qui boucle tant que le bit BF n'est pas égal 0. C'est à dire tant que l'afficheur n'est pas prêt à effectuer une nouvelle action. Au début de la fonction mettre les broches RD3...RD0 en entrée et penser à les remettre en sortie avant de quitter celle-ci, gérer également les lignes RS et RW. Avant de lire le quartet on attend 2 cycles. Tester ce sous-programme avec le simulateur.

6.2.3. Procédure d'initialisation du contrôleur d'affichage Quand le contrôleur démarre on ne sait pas si il est positionné en 4 ou 8 bits, comme le montre la procédure d'intialisation reproduite en figure 12, il est donc nécessaire d'envoyer la commande de passage en mode 8 bits (Function Set 8-Bit Interface) plusieurs fois pour qu'elle soit bien comprise. Puis on demande le passage en 4 bits (Function Set 4-Bit Interface). Figure 13: Procédure d'initialisation 4 bits du contrôleur d'affichage (extrait de la datasheet du HD44780U )

En analysant la procédure on remarque qu'il y a trois temporisations (>15ms, >4,1ms et >100µs). Pour simplifier le code nous allons écrire deux fonctions de temporisation, une d'environ 5 ms (15 = 5 3) et une autre d'environ 100µs. En vous inspirant de la temporisation réalisée au TP n 1. Réaliser les algorigrammes puis écrire les fonctions «tempo_5ms» et «tempos_100us» et les valider par simulation. Si besoin est vous pouvez créer des variables en mémoire. La dernière partie de la procédure consiste à régler les caractéristiques de l'écran. Dans notre cas nous prendrons : N = 1 pour fonctionner sur deux lignes. F = 0 règle la taille des caractères (5 8 dots). I/D = 1 afin que le curseur se déplace vers la droite après avoir affiché un caractère. Réaliser l'algorigramme puis écrire la fonction «lcd_init» qui réalise cette procédure, pensez à utiliser les fonctions que vous avez déjà créées. Intégrer l'intialisation des ports dans «lcd_init». Valider la procédure par simulation. Les principales fonctions de transfert et de lecture d informations vers le contrôleur d affichage sont maintenant conçues. L objet du TP 4 est de se rapprocher de la partie hardware en gérant le choix de la ligne pour l affichage par exemple, et en écrivant une chaîne de caractères.

7. TP n 4 : Ecriture d'un driver pour LCD Partie 2 Dans ce TP, on complétera la fonction lcd_ecrire_octet, on contrôlera le basculement entre les lignes de l écran LCD, et enfin on affichera une chaîne de caractères. 7.1 Basculement entre les lignes Le contrôleur d'affichage dispose d'une mémoire DDRAM représentant l'afficheur. Dans notre cas la taille de la mémoire utilisée est de 2 lignes de 16 octets chacune. Pour changer de ligne, il suffit de venir positionner l'address Counter au début de ligne souhaitée. Figure 14: DDRAM du contrôleur En utilisant vos différentes fonctions écrire les fonctions «lcd_l1» et «lcd_l2» permettant de choisir la ligne sur laquelle on souhaite écrire. Écrire la fonction «lcd_cls» qui efface tout l'écran. (cf. figure 12) Modifier la fonction «lcd_ecrire_octet» : au début pour se placer en mode écriture, et à la fin pour attendre que le contrôleur ait pris en compte l'action. Dans le fonction d initialisation, mettez le contrôleur d affichage sur ON en fixant à 1 la valeur de PORTD,7. C est nécessaire au bon fonctionnement des cartes noires ou vertes. 7.2 Tests des différentes fonctions Voilà nous sommes maintenant prêts à utiliser l'afficheur LCD. Pour faciliter l'utilisation des fonctions que vous venez de créer il est conseillé de toutes les mettre dans un fichier «lcd.asm» afin de pouvoir les inclure dans vos futurs programmes. L'utilisation de ce fichier par la suite est très simple, il suffit de taper la commande «#include lcd.asm» à l'endroit de votre programme où vous souhaitez intégrer vos fonctions et de définir les variables «lcd_db,...» au début de votre programme. Le fichier «lcd.asm» doit se trouver dans le même répertoire que votre programme. Écrire le programme qui reproduit l'écran ci-dessous sur l'afficheur. I n f o I n d u s Si vous taper «movlw 'I'» le registre «W» sera chargé avec le code ascii du caractère I.

7.3 Écrire une chaine de caractères Travaux Pratiques de Microcontrôleur PIC 18F4520 La méthode qui nous a permis de tester les fonctions de gestion de l'afficheur n'est pas des plus efficace car il est nécessaire de retaper le même code pour chacun des caractères. Nous allons donc écrire une fonction qui affiche une chaine de caractères complète. La chaine de caractères est stockée dans la mémoire programme. Pour stocker une chaîne en mémoire programme, il suffit d'utiliser la directive «db» comme dans l'exemple suivant :... org h'0000' goto main ch db "Microcontroleur",'\0' ;ecrire en mémoire programme main nop... La chaîne «Microcontroleur» est stockée dans la mémoire programme, elle se termine par le caractère «\0». Le label «ch» pointe vers le premier caractère de la chaîne, c'est donc l'adresse de début de la chaine. Dans la mémoire programme du PIC 18F4520, les adresses sont codées sur 21 bits donc 3 octets. Comme nous disposons d'un microcontrôleur 8 bits nous utiliserons les directives «UPPER(ch), HIGH(ch), LOW(ch)» pour obtenir respectivement l'octet de poids le plus fort, de poids intermédiaire et de poids faible. Pour lire dans la mémoire programme, il faut tout d'abord initialiser le pointeur d'adresse de mémoire programme «TBLPTR» avec l'adresse de l'octet à lire. Pour lire un octet on utilse l'instruction «TBLRD» qui transfère le contenu de la mémoire dans le registre «TALBAT». Consulter la datasheet du pic p73-76 et p305. Configurer correctement l'instruction «TBLRD». Réaliser l'algorigramme de la fonction «lcd_ecrire_chaine». Écrire et tester cette fonction. L'afficheur LCD ne peut afficher que 16 caractères par ligne... NOTES : Comment améliorer ces TPs?