100% ont trouvé ce document utile (1 vote)
327 vues7 pages

PIC Hmidi

Ce document décrit les commandes et fonctionnalités de base pour l'utilisation d'un afficheur LCD, d'un clavier matriciel et d'une conversion analogique-numérique avec un microcontrôleur PIC. Il présente les broches, librairies et exemples de code pour la gestion de ces périphériques.

Transféré par

Mouad Memni
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
100% ont trouvé ce document utile (1 vote)
327 vues7 pages

PIC Hmidi

Ce document décrit les commandes et fonctionnalités de base pour l'utilisation d'un afficheur LCD, d'un clavier matriciel et d'une conversion analogique-numérique avec un microcontrôleur PIC. Il présente les broches, librairies et exemples de code pour la gestion de ces périphériques.

Transféré par

Mouad Memni
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Chapitre : Microcontroleurs

Leçon N°2 : Applications a base de PIC


1-Commande d’un afficheur LCD
2- Gestion d’un clavier
3-Conversion Analogique-Numérique
4-Modulation de largeur d’une impulsion
Activité n°3 : Commande d’un afficheur LCD
-Réaliser l’activité n°3, voir manuel d’activité pages : 93 et 94

I- Les afficheurs LCD :


Les afficheurs à cristaux liquides, autrement appelés afficheurs LCD .

1-Brochage
Un circuit intégré spécialisé est chargé de la gestion du module. Il remplit
une double fonction : d'une part il commande l'affichage et de l'autre se
charge de la communication avec l'extérieur (PIC).
Broche Type Fonction
VSS Masse
Alimentation
VDD Alimentation positive +5V
VEE réglage du contraste de l'afficheur (0 à 5V) .
RS sélection : commande ou données
Commande
R/W Lecture ou écriture (Read/Write)
E Entrée de validation (Enable)
D7,D6,D5,D4,D3,D2,D1,D0 Mode 8bits : Données de 8 bits bidirectionnelles
Données
D7,D6,D5,D4 Mode 4bits : Données de 4 bits bidirectionnelles

2-La mémoire
-L'afficheur possède deux types de mémoire : mémoire d'affichage (stocke des caractères) et mémoire du
générateur de caractères.
-L'afficheur est en mesure d'afficher 200 caractères :( 8 caractères définissables par l'utilisateur + 96
caractères ASCII + 64 caractères japonais + 32 caractères spéciaux (accent, lettres grecques, ...)
3-Le jeu de commandes prédéfinies par le langage MikroPascal :
*Lcd_Init
Prototype procedure Lcd_Init();
Description Initialiser le module LCD en respectant les connexions déclarées
Exemple // connexion du module LCD var LCD_RS_Direction : sbit at TRISB4_bit;
var LCD_RS : sbit at RB4_bit; var LCD_EN_Direction : sbit at TRISB5_bit;
var LCD_EN : sbit at RB5_bit; var LCD_D4_Direction : sbit at TRISB3_bit;
var LCD_D4 : sbit at RB3_bit; var LCD_D5_Direction : sbit at TRISB2_bit;
var LCD_D5 : sbit at RB2_bit; var LCD_D6_Direction : sbit at TRISB1_bit;
var LCD_D6 : sbit at RB1_bit; var LCD_D7_Direction : sbit at TRISB0_bit;
var LCD_D7 : sbit at RB0_bit; …
Lcd_Init();

*Lcd_Out
Prototype procedure Lcd_Out(ligne: byte; colonne: byte; var texte: string);
Imprime le texte sur l'écran LCD à partir de la position spécifiée.
Description • ligne: la position de départ numéro de ligne
• Colonne: la position de départ numéro de colonne
• Texte: texte à rédiger
Le module LCD doit être initialisé. Voir routine Lcd_Init.
Exemple1 Lcd_Out(1, 3, "Hello!"); // écrire texte « Hello! » sur LCD à la position ( ligne 1, colonne 3) :
Exemple2 Lcd_Out_CP ("Hello!"); // écrire texte « Hello! » sur LCD à la position actuelle du curseur

Microcontrôleur Page 9/23


*Lcd_Chr
Prototype procedure Lcd_Chr(ligne: byte; colonne: byte; caractere: byte);
Afficher caractère sur l'écran LCD à la position spécifiée.
Description • ligne: écrire position de numéro de ligne
• colonne: écrire position de numéro de colonne
• caractère : caractère à écrire
Le module LCD doit être initialisé. Voir routine Lcd_Init.
Exemple1 Lcd_Chr(2, 3, 'i'); // écrire le caractère « i » sur LCD à la position (ligne2, colonne3)
Exemple2 Lcd_Chr_CP( 'i'); // écrire le caractère « i » sur LCD à la position actuelle du curseur

*Lcd_Cmd
Prototype procedure Lcd_Cmd( commande: byte);
Description Envoie une commande à LCD
• commande: commande à envoyer
Le module LCD doit être initialisé. Voir routine Lcd_Init.
Exemple Lcd_Cmd(_LCD_CLEAR); //effacer l’écran LCD

*Liste des commandes LCD


Commande LCD Description Commande LCD Description
_LCD_FIRST_ROW Déplacez le curseur sur le 1er rang _LCD_BLINK_CURSOR_ON Activer Curseur clignote
_LCD_SECOND_ROW Déplacez le curseur sur le 2eme rang _LCD_MOVE_CURSOR_LEFT Déplacer le curseur à gauche
_LCD_CLEAR Effacer écran _LCD_MOVE_CURSOR_RIGHT Déplacez le curseur à droite
_LCD_RETURN_HOME Curseur Retour à la position initiale _LCD_TURN_ON Activer l’affichage LCD
_LCD_CURSOR_OFF Désactiver curseur _LCD_TURN_OFF Désactiver l’affichage
_LCD_UNDERLINE_ON Activer Souligner curseur

*Evaluations :
A partir du programme de l’activité N°3, vérifier par simulation sous ISIS quelques commandes

Activité n°4 : Serrure codée

-Réaliser l’activité n°4, voir manuel d’activité pages : 94 et 97

II- Clavier matriciel :


1-/ Principe du clavier matriciel : Un clavier matriciel 4*4 (16 touches) dispose uniquement de 8 broches
pour la gestion de ses touches. L’organisation est de 4 colonnes et 4 lignes. (COM : vers la masse)

2-/ Décodage : correspondance Code-Touche :


Code Touche Code Touche Procédure décodage
1 0 9 8 procedure decodage; 5: a := 4; 12: a := 'B';
2 1 10 9 begin 6: a := 5; 13: a := ‘C';
3 2 11 A case kp of 7: a := 6; 14: a := ‘D';
4 3 12 B 1: a := 0; 8: a := 7; 15: a := ‘E';
5 4 13 C 2: a := 1; 9: a := 8; 16: a := ‘F';
6 5 14 D 3: a := 2; 10: a := 9; end;
7 6 15 E 4: a := 3; 11: a := 'A'; end;
8 7 16 F

Microcontrôleur Page 10/23


3-/ Le jeu de commandes prédéfinies par le langage MikroPascal :
*Keypad_Init( );
procedure Keypad_Init( );
Description Initialiser le port pour travailler avec clavier.
var keypadPort : byte at PORTB;
Exemple Keypad_Init(); // Initialiser PORTB pour communication avec keypad

*Keypad_Key_Click( );
function Keypad_Key_Click( ): byte;
-Si une touche enfoncée : le code est de 1 à 16.
Description
-Si aucune touche n’est actionnée (au repos) : le code est 0.
var kp : byte;
Exemple kp := Keypad_Key_Click(); // kp={0,1,2,…,16}

4-/ Bibliothèque du son :


*Sound_Init
procedure Sound_Init(var son_port : byte; son_pin : byte);
Configurer la broche du PIC pour la production sonore.
Description son_port: adresse de port de sortie audio
son_pin: broche de sortie son
Exemple Sound_Init(PORTC,3); // Initialiser le son sur la broche RC3

*Sound_Play
procedure Sound_Play(freq_in_hz, duration_ms : word);
Génère le signal d'onde carrée sur la broche appropriée.
Description freq_in_hz : la fréquence du signal en Hertz (Hz)
duration_ms : durée du signal en millisecondes (ms)
Exemple Sound_Play(1000, 100); // générer un son de 1KHz et de durée de 100ms

Microcontrôleur Page 11/23


III- Conversion Analogique Numérique : CAN ou ADC
1-/ principe de fonctionnement :
Le convertisseur analogique-numérique (CAN ou ADC) permet de convertir une grandeur analogique (tension Ue) en
une valeur numérique (nombre N) :

Activité : afficheur de température

Pour lire et afficher la température on utilise un microcontrôleur PIC16F876A, un afficheur LCD2*16 et un capteur
de température LM35 qui fournit à sa sortie une tension proportionnelle à température (10mV/°C) :
1-/ exprimer T en fonction de Uc :
T ---> Uc T =………………………………………
1°C ---> 10mV
2-/ exprimer Uc en fonction de N, en déduire T en fonction de N:
Uc ---> N
5V ---> 1023
Uc =…………………………………………………
T = ……………………………………………………

Microcontrôleur Page 12/23


2-/ Programmation en langage Mikropascal
Programme conversion ; // entête : non du programme

Var // déclaration des variables


valeur_conversion : word ; // 2 octets car le résultat de conversion est sur 10 bits
variable_calcul : real ; // 4 octets pour le calcul pour ne pas avoir un dépassement de taille lors de la
multiplication
temperature : byte; // 1 octet car la température est comprise entre 2 et 150
valeur_afichage : string[3]; //chaine de 3 caractères pour afficher la température
LCD_RS : sbit at portc.0; // Connections de l'LCD
……………………………………………;
LCD_D4 : sbit at portc.2;
LCD_D5 : sbit at portc.3;
…………………………………………….;
LCD_D7 : sbit at portc.5;

LCD_RS_Direction : sbit at TRISC.0;


LCD_EN_Direction : sbit at TRISC.1;
……………………………………………………;
LCD_D5_Direction : sbit at TRISC.3;
……………………………………………………;
…………………………………………………..;

Begin // début
lcd_init(); // initialisation de l'LCD
lcd_cmd(……………………………………..); // désactivation du curseur de l'LCD
lcd_out(1,1,'T='); // préparation de l'affichage, afficher « T= »
adc_init(); // initialisation du module CAN

while true do // boucle tant que infinie


begin // début boucle
N := adc_read(…….); // convertir la tension Uc au RA0 en un nombre N
Tr := …………………………………..; // conversion N en Tr (réel)
Te:= byte(Tr ); // conversion : Tr (réel) ---> Te (entier)
byteToStr(Te,Ta); // conversion : Tr (entier) ---> Ta (caractère) « si Tr=25 alors Ta=25 »
lcd_out(1,3,Ta); // affichage de la contenue de Ta
lcd_chr(1,6,%11011111); // affichage du symbole degré: ° « voir code ASC II»
lcd_chr(1,7,…………………); // affichage de C pour Celsius
delay_ms(500); // attente de 500ms puis rafraichissement de l'affichage
end; // fin boucle
end. // fin programme

3-/ Bibliothèque d’un CAN :


*ADC_Init();
procedure ADC_Init();
Description -Initialiser le module ADC de PIC.
Exemple ADC_Init(); // Initialiser le module ADC

ADC_Read( )
function ADC_Read(channel : byte) : word;
- lire la tension analogique sur le channel et le convertir en une valeur numérique
Description
-initialiser le module et configurer le channel spécifié comme entrée.
var tmp : word; // tmp : valeur numérique de 0..1023
Exemple
tmp := ADC_Read(2); // Lire la valeur analogique sur canal 2 dans tmp

Microcontrôleur : Programmation en langage évolué : MikroPascal Page 13


4-/ Conversion d’un nombre en une chaine de caractère :

ByteToStr
procedure ByteToStr(nombre : byte; var chaine : array[3] of char);
Description Convertir un nombre en une chaine de caractères,
var N : byte;
txt : array[3] of char;
Exemple
N := 24;
ByteToStr(N, txt); // N = 24 = nombre , txt ="˽24" = 3 chaines de caractère
5-/ Autres procédures de conversion des données :
ByteToStr( ) ShortToStr( ) WordToStr( ) IntToStr ( ) LongIntToStr ( ) LongWordToStr( ) FloatToStr( )
byte(260) // égale à 4 Word(20,5) //arrondit à 20

IV-Modulation de largeur d’une impulsion : MLI ou PWM


Activité n° 7: Ventilateur sur un concentrateur USB
-Réaliser l’activité n°4, voir manuel d’activité pages : 94 et 97

1-/ Principe :
La PWM est un module intégré dans le PIC qui consiste à générer un signal carré de période constante mais à
rapport cyclique α variable. (C’est le principe d’un hacheur série)

2-/ Programmation en langage Mikropascal :


Programme Commentaires
program ACT7; // Programme
var // déclaration variable
alpha : byte; // rapport cyclique alpha
N : word; // nombre numérique ( 0 à 1023)
begin // début programme
PWM1_init(………); // initialiser le MLI à une fréquence 250Hz
ADCON1:=$80; // configuration du registre ADCON1
…………………………………; // démarrer le MLI
while true do // boucle infinie
begin // début boucle
N:= adc_read(……..); // convertir tension au canal RA0 en nombre N
alpha:=N/4;
// alpha =Nx255/1023 = N/4
PWM1_set_duty(alpha);
// fin boucle while
end;
// fin programme
end.

2-/ Bibliothèque d’un MLI :

*PWM1_Init( );
procedure PWM1_Init(const freq : longint);
Description -Initialise le module de PWM avec rapport cyclique 0.
- freq : une fréquence constante souhaitée de PWM en Hz (dépend de Fosc)
Exemple PWM1_Init(1000); // Initialiser PWM module at 1KHz:

Microcontrôleur : Programmation en langage évolué : MikroPascal Page 14


*PWM1_Start();
procedure PWM1_Start();
-Démarrer PWM.
Description -PIC possède un module CCP1.
-PWM1_Init doit être appelée avant d'utiliser cette routine.
Exemple PWM1_Start();

* PWM1_Set_Duty( );
procedure PWM1_Set_Duty(alpha : byte);
-alpha peut prendre des valeurs de 0 à 255.
Description
-PWM1_Init: doit être appelée avant cette routine.
Exemple -PWM1_Set_Duty(192); / / Mettre le rapport cycle à 75%:

3-/ Registre ADCON1 :


ADCON1
ADFM - - - PCFG3 PCFG2 PCFG1 PCFG0

Microcontrôleur : Programmation en langage évolué : MikroPascal Page 15

Vous aimerez peut-être aussi