TP 1 : Premier projet - Entrées/Sorties tout ou rien

Cette première séance de travaux pratiques permet de prendre en main le logiciel MPLabX de Microchip avec la création d'un programme écrit en C.

Le compilateur utilisé est le XC8 de Microchip dans sa version gratuite. L'édition de lien du programme généré s'effectue avec un offset de 0x1000 afin d'obtenir un fichier exécutable (HEX) compatible avec le bootloader HID de Microchip.

1. Introduction : création du projet

Menu Fichier -> Nouveau projet
Catégorie : Microchip Embedded - Projet : type Standalone Project
Famille : Advanced 8-bit MCUs (PIC18) - Composant : PIC18F4550
Hardware tools : PicKit2
Compilateur : XC8
Donner un nom au projet : PremierProjet
Et choisir un chemin pour stocker le projet : InfoEmbarquee sur votre compte réseau par exemple ou sur un dossier InfoEmbarquee sur une clé USB.

2. Ajouter maintenant un fichier source en C pour la fonction main()

Menu Fichier -> Nouveau fichier ...
Catégorie : C - Type de fichier : C main file
Nom du fichier : main

Le fichier se place implicitement dans le dossier du projet.

3. Configuration initiale

 MPLabX dispose d'un assistant pour élaborer le code fixant la configuration initiale du microcontrôleur.

Menu Window -> PIC Memory Views -> Configuration bits

La configuration est fixée avec les paramètres vus au TD 1.
S'ajoute à cela :

  • activation du régulateur pour l'USB,
  • power-up timer désactivé (PWRT off),
  • brown out detect activé (BOR on) avec un niveau 3,
  • chien de garde désactivé (WDT off),
  • PORTB en tout ou rien au moment du reset (PBADEN off),
  • programmation basse tension désactivée (LVP off),
  • pas de protection des différentes zones mémoire

Pour générer le code correspondant, il suffit de cliquer sur Generate Source code to Output.

Sélectionner tout le code généré et le coller sous les #include du programme source main.c et donc avant le code de la fonction main().

Note :

Pour plus de lisibilité du fichier main.c, il peut être judicieux de mettre l'ensemble des définitions des bits de configuration dans un fichier d'entête séparé noté config.h .
Il suffit alors d'ajouter une ligne d'include dans le fichier main.c pour ajouter la prise en compte des informations de configuration initiale.

 

4. Assurer la compatibilité avec le bootloader

Par défaut, le programme généré par l'éditeur de lien commence à l'adresse 0x0000 (l'adresse du vecteur RESET des PIC).

Lorsque le bootloader est utilisé, celui-ci se place à l'adresse 0x0000 pour prendre la main à la mise sous tension.
Si le bouton BP1 est maintenu appuyé au moment de la mise sous tension, le bootloader entre en action et attend un programme en provenance de l'USB.
Dans le cas contraire, le bootloader lance le programme utilisateur qui doit être placé à l'adresse 0x1000.

Il est donc nécessaire de préciser à l'éditeur de lien (le linker) d'utiliser un offset pour décaler le code généré vers l'adresse 0x1000.

Menu Run -> Set Project Configuration -> Customize ...
Catégorie : XC8 linker - Option catégorie : Options additionnelles - Code Offset : 0x1000
Terminer par OK

5. Exercice 1 : Allumer une diode électro-luminescente

Allumer une LED avec le microcontrôleur consiste à configurer la broche reliée à la LED en mode sortie digitale (tout ou rien).

5.1. Etude de la section 10 de la datasheet du PIC18F4550

Les broches d'entrées/sorties tout ou rien du microcontrôleur sont regroupées sur différents ports. Sur le PIC18F4550, on trouve 5 ports :

  • le port A comprenant 7 bits dont les broches sont notées RA0 à RA6 en utilisation tout ou rien,
  • le port B comprenant 8 bits dont les broches sont notées RB0 à RB7 en utilisation tout ou rien,
  • le port C comprenant 7 bits dont les broches sont notées RC0 à RC7 en utilisation tout ou rien (RC3 n'existe pas),
  • le port D comprenant 8 bits dont les broches sont notées RD0 à RD7 en utilisation tout ou rien,
  • le port E comprenant 4 bits dont les broches sont notées RE0 à RE3 en utilisation tout ou rien.

Dans cet exercice, on considère que :

  • Les boutons poussoirs BP0, BP1, BP2 sont respectivement reliés aux broches RB3, RB4 et RB5 du port B.
  • Les LED1, LED2, LED3 et LED4 sont reliées respectivement aux broches RC2, RE0, RE1 et RE2 du port E et du port C.

En mode tout ou rien, chacune de ces broches repose sur la structure générale donnée sur la figure 10.1

  1. Analyser la figure 10.1 et expliquer le rôle des bits TRIS, PORT et LAT.
  2. Quelle valeur faut-il donner à TRIS pour que la broche fonctionne en sortie ? Idem pour avoir une entrée ?
  3. Sur quel bit se fait la lecture d'une entrée ? (PORT ou LAT)
  4. Sur quel bit se fait la lecture d'une sortie (pour contrôle par exemple) ? (PORT ou LAT)
  5. Sur quel bit réalise-t-on l'écriture d'une sortie ? (PORT ou LAT)
  6. Indiquer les configurations à réaliser pour que les broches RB3, RB4 et RB5 puissent fonctionner en entrée tout ou rien.
  7. Idem pour obtenir un fonctionnement en sortie des broches reliées au LED1 à LED4.

5.2. Codage

  1. Ecrire un programme permettant de recopier l'état des boutons poussoirs BP0, BP1 et BP2 sur les leds LED1, LED2 et LED3.
  2. Compiler le programme.
  3. Connecter la carte au PC en maintenant le bouton BP1 appuyé pour lancer le bootloader.
  4. A l'aide de l'application PC du bootloader, charger le fichier HEX du projet dans la carte.

Notes :

  • tous les registres du microcontrôleur sont prédéfinis comme des variables. Conséquence : on peut directement utiliser leur nom pour y accéder en C.
  • les bibliothèques de chaque composant permettent également d'accéder à chacun des bits d'un registre par l'intermédiaire de structures. Par exemple : pour accéder au bit de direction de la broche RC2, il suffit d'écrire TRISCbits.RC2 où TRISCbits et le regroupement associé au registre de direction du port C noté TRISC.
  • le fichier HEX du programme se trouve dans le dossier du projet puis dans \dist\default\production

6. Exercice 2 : interrupteur bistable

Compléter le programme de l'exercice 1 pour que la LED4 s'allume sur une pression de BP0 et s'éteigne sur une nouvelle pression de BP0. Ce programme ne doit pas utiliser de boucles bloquantes. Autrement dit, la boucle infinie du programme doit être parcourue en permanence dans sa totalité.

Conseil : penser à une mise en oeuvre reposant sur une machine d'états comportant 4 états et respectant les principes d'une programmation synchrone.

 Complément : Utilisation de l'afficheur LCD

Pour utiliser l'afficheur LCD, il faut ajouter deux fichiers au projet. Le fichier d'entête de la bibliothèque LCD (lcd.h) et le fichier de code de la bibliothèque LCD (lcd.c).

Les fichiers sont téléchargeables dans la zone de téléchargement du site, catégorie Informatique Embarquée.

 

/*******************************************************************************
 * Exemple d'utilisation de la bibliothèque LCD
 * File:   main.c
 * Author: eperonnin
 * Created on 3 février 2015, 16:09
*******************************************************************************/
#include 
#include 
#include          // Définition des registres internes du uC choisi
#include "lcd.h"        // Bibliothèque d'utilisation de l'afficheur LCD
#include "config.h"     // Définition des bits de configuration initiale du uC
/*******************************************************************************
 * Fonction:   main
*******************************************************************************/
int main(int argc, char** argv) {
    LCD_init();
    LCD_printf("\fEssai");
    // Boucle infinie du programme principal
    while(1)
    {
    }
    return (EXIT_SUCCESS);
}

Ajouter un Commentaire


Code de sécurité
Rafraîchir