Vous êtes sur la page 1sur 24

Chapitre 5: Applications des microprocesseurs et microcontrôleurs

5.1- Introduction
Dans ce cinquième chapitre nous allons aborder :
i) Interface : LCD
ii) Moteur- Contrôle ;
iii) Génération de signaux des ports pour convertisseurs
iv) Contrôle des appareils DC/AC ;
v) Mesure de la fréquence et
vi) Système d'acquisition de données

5.2- Interface : PIC-LCD


5.2.1- Définitions
a) Etat de cristal liquide
Les cristaux liquides sont caractérisés par un état
intermédiaire entre la phase cristalline, où règne un ordre de
position tridimensionnel et la phase liquide où aucun ordre
n’existe. Grâce à leur ordre de position partiel (dimension 1
ou 2), les cristaux liquides possèdent les propriétés d'être
dépendant de la direction (anisotropie) des cristaux tout en ayant un aspect fluide.

b) Dipôle électrique
Les cristaux liquides sont, généralement, constitués de molécules (molécules organiques).
Les molécules, globalement neutres, peuvent posséder un moment dipolaire ce qui permet
de les assimiler à un dipôle électrique permanent.

c) Constituants d’une cellule

Entre deux plaques de verres collées, une cavité de quelques dizaines microns d’épaisseur
est remplie de cristaux liquides dans la phase nématique (la plus employée pour les applications en
électronique. Elle est caractérisée par l’absence d’ordre de position. Seul un ordre d’orientation est
présent et une direction moyenne est définie)
Toutes les molécules sont orientées localement dans
la même direction. Elles sont parallèles aux surfaces de la
cavité, qui leur imposent de plus un axe préférentiel grâce au
dépôt d’une couche de polymères qui sont striés dans une
direction. Les deux surfaces imposent des directions
perpendiculaires de sorte que l’orientation locale des
molécules est forcée de tourner de façon continue de 90° à
l’intérieur de la cellule. On dit que le liquide nématique est

twisté.

d) Fonctionnement
Pour un ensemble de segments de cristaux liquides :

- Lorsqu'ils ne sont pas dans un champ électrique, les cristaux sont organisés selon un
modèle aléatoire.
1
Chapitre 5: Applications des microprocesseurs et microcontrôleurs

- Quand un champ électrique est appliqué, les cristaux


s'alignent sur le champ

- Les cristaux eux-mêmes n'émettent pas de lumière, de


la lumière qui peut passer à travers eux.

- Les cristaux alignés perpendiculaire à une source de


lumière empêchera la lumière de passer à travers eux.

- Une source de lumière (rétroéclairage) est nécessaire


pour conduire la lumière à travers le champ de cristal
aligné.

Les afficheurs LCD sont des modules compacts


intelligents et nécessitent peu de composants externes pour
un bon fonctionnement. Ils sont relativement bons marchés
et s'utilisent avec beaucoup de facilité.

Plusieurs afficheurs sont disponibles sur le marché et


ne diffèrent les uns des autres, non seulement par leurs
dimensions, (de 1 à 4 lignes de 6 à 80 caractères), mais aussi par leurs caractéristiques techniques et
leurs tensions de service. Certains sont dotés
d'un rétro éclairage de l'affichage. Cette
fonction fait appel à des LED montées
derrière l'écran du module, cependant, cet
éclairage est gourmand en intensité (250 mA
max.).

5.2.2- Schéma fonctionnel interne et


connexion

Comme le montre, le schéma fonctionnel, le système LCD-affichage comporte d'autres


composants que l'afficheur à cristaux liquides (LCD) seul. Un circuit intégré de commande
spécialisé, le LCD-controller, est chargé de la gestion du module. Le "contrôleur" remplit une
double fonction : d'une part il commande l'affichage et de l'autre se charge de la communication
avec l'extérieur.

2
Chapitre 5: Applications des microprocesseurs et microcontrôleurs

Les connexions à réaliser sont simples puisque l'afficheur LCD dispose de peu de broches. Il
faut, évidement, l'alimenter, le connecter à un bus de donnée (4 ou 8 bits) d'un microprocesseur, et
connecter les broches Enable (validation), Read/Write (écriture/lecture) et Register Select
(instruction/commande).

Description des différentes broches

1 à 8 : D7 à D0 : Bus de donnés bidirectionnel 3 états  (Haute impédance lorsque E=0)

9 : E : Entrée de validation (ENABLE); elle est active sur front descendant. Il est important ici de
tenir compte des 2 seuils durées de commutation importantes en pratique: lorsque RS et R/
ont atteint un niveau stable, il doit se passer un intervalle de 140 ns minimum avant que la
ligne "E" ne passe au niveau haut. Cette ligne doit ensuite, être maintenue à ce niveau pendant
450 ns au moins et les données doivent rester tables sur le bus de données jusqu'au début du
flanc descendant de ce signal. Lorsque E=0 les entrées du bus de l'afficheur sont à l'état haute
impédance.

10 : R/ : Lecture ou écriture.(READ/WRITE)

Lorsque R/ est au niveau bas, l'afficheur est en mode "écriture", et lorsque R/ est au niveau
haut, l'afficheur est en mode "lecture".

3
Chapitre 5: Applications des microprocesseurs et microcontrôleurs
11 : RS: Sélection du registre.(REGISTER SELECT)Grâce à cette broche, l'afficheur est capable
de faire la différence entre une commande et une donnée. Un niveau bas indique une
commande et un niveau haut indique une donnée.

12 : VLC : Cette tension permet le réglage du contraste de l'afficheur. C'est une tension négative et
tournant autour de -1,5 V.(selon l'angle de visualisation)

13 : VDD : + 5 V

14 : VSS : Masse.

NB : Voir l’annexe pour Le contrôleur LCD HD44780

5.2.3- Brochage et programmation


5.2.3.1- Schéma fonctionnel PIC-LCD

5.2.3.2- Programmation en Mikroc du PIC-LCD


La programmation en assembleur d'un écran LCD en mode parallèle ou en série est
généralement une tâche complexe et nécessite d’une bonne compréhension du fonctionnement
interne de l'écran LCD. La langue MikroC fournit des fonctions pour les deux modes de
programmation basée sur le texte déjà préparé, ce qui simplifie l'utilisation d'écrans LCD :

4
Chapitre 5: Applications des microprocesseurs et microcontrôleurs
Lcd_Config
Lcd_Init
Lcd_Out
Lcd_Out_Cp
Lcd_Chr
Lcd_Chr_Cp
Lcd_Cmd

Lcd_Config
La fonction Lcd_Config est utilisée pour configurer l'interface LCD. La connexion
par défaut entre le LCD et le microcontrôleur est la suivante :

LCD Patte du port de microcontrôleurs

FR → 3
D4 → 4
D5 → 5
D6 → 6
D7 → 7

La patte R / W de l'écran n'est pas utilisé et doit être reliée à la masse. Cette fonction devrait
être utilisée pour modifier la connexion par défaut. Il devrait être appelé avec les paramètres dans
l'ordre suivant :

nom de port, RS patte, EN patte, R/W patte, D7 patte, D6 patte, D5 patte, D4 patte

Le nom du port doit être spécifié en passant son adresse. Par exemple, si RS patte
est connectée à RB0, EN patte à RB1, D7 patte à RB2, D6 patte à RB3, D5 patte à RB4, et D4
patte à RB5, alors la fonction doit être appelée comme suit :

Lcd_Init
La fonction Lcd_Init est appelée pour configurer l'interface entre le microcontrôleur et
l'écran
LCD lorsque les connexions sont faites par défaut que vient d'être illustré. Le nom du port doit être
spécifié en passant son adresse. Par exemple, en supposant que LCD est reliée à PORTB et les
connexions par défaut précédentes sont utilisées, la fonction doit être appelée en tant que:
Lcd_Init();

Lcd_Out
La fonction Lcd_Out affiche du texte à la ligne indiquée et la position des
colonnesde l'écran LCD. La fonction doit être appelée avec des paramètres dans l'ordre suivant :
ligne, colonne, texte Par exemple, pour afficher du texte "Ordinateur" à la ligne 1 et la colonne 2 de
l'écran LCD nous devrions appeler la fonction comme suit :
Lcd_Out (1, 2, "Ordinateur");

Lcd_Out_Cp
La fonction Lcd_Out_Cp affiche le texte à la position actuelle du curseur.Par
exemple, pour afficher le texte "Ordinateur" à la position actuelle du curseur, la fonction
devrait être appelé en tant que :
Lcd_Out_Cp ("Ordinateur");

5
Chapitre 5: Applications des microprocesseurs et microcontrôleurs
Lcd_Chr
La fonction Lcd_Chr affiche un caractère à la ligne indiquée et la colonne la position du
curseur. La fonction doit être appelée avec les paramètres dans le l'ordre suivant :
ligne, colonne, caractère

Par exemple, pour afficher caractère "K" à la ligne 2 et la colonne 4 de l'écran LCD nous devrions
appeler la fonction de :
Lcd_Chr(2, 4, ‘K’);

Lcd_Chr_Cp
La fonction Lcd_Chr_Cp affiche un caractère à la position actuelle du courser. Par exemple,
pour afficher le caractère "M" à la position actuelle du curseur, la fonction doit être appelée en tant
que :
Lcd_Chr_Cp ('M');

Lcd_Cmd
La fonction Lcd_Cmd est utilisée pour envoyer une commande à l'écran LCD. Avec
ce commande, nous pouvons déplacer le curseur vers n'importe quelle ligne, désactiver
l'écran LCD, faire clignote le curseur, décaler l'affichage, etc. Une liste des plus couramment
utilisés commandes LCD est donnée dans Tableau 3.4.

Par exemple, pour effacer l'écran LCD nous devrions appeler la fonction comme suit :
Lcd_Cmd (Lcd_Clear);

6
Chapitre 5: Applications des microprocesseurs et microcontrôleurs

Un exercice ci-dessous illustre l'initialisation et l'utilisation de l'écran LCD, où un contrôleur


de texte LCD est relié à un microcontrôleur PIC16F887 dans le mode par défaut comme illustre la
figure précédente.
Ecrire un programme pour envoyer le texte Mon Ordinateur à la ligne 1, à la colonne 4 de
l’écran LCD.

Le programme est donné dans le code-source suivant, où :


Au début le PORTB est configuré en sortie par la déclaration TRISB = 0. L'écran LCD est alors
initialisé, l'affichage est effacé, et le texte (AFFICHAGE et display_LCD_4bit) est affiché sur
l'écran LCD.

Code source
/****************************************************************************
REDACTION D'UN TEXTE A L’ECRAN LCD
==================================
Un contrôleur de texte LCD est relié à un microcontrôleur PIC dans le mode
(4,5,3,2,1,0). Ce programme affiche les textes "AFFICHAGE" sur la 1 ère ligne
et ”display_LCD_4bit” sur la 2ème ligne d'écran LCD.
Microcontrôleur: 16F887
Oscillateur: HS, 10.0000 Mhz
Compilateur: microC PRO v.1.56
Fichier: LCD.c
Date: Juillet 2016
***************************************************************************/
// Connections de LCD
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// Fin de connections

void main()
{
C1ON_bit = 0;
C2ON_bit = 0;

TRISB = 0;
PORTB = 0xFF;
TRISB = 0xff;

/* Configurer E/S du portB comme numériques*/


ANSELH = 0;
7
Chapitre 5: Applications des microprocesseurs et microcontrôleurs
ANSEL = 0;

Lcd_Init(); // Initialiser LCD


Lcd_Cmd(_LCD_CLEAR); // Effacer un texte sur l’ecrant LCD
Lcd_Cmd(_LCD_CURSOR_OFF); // Curseur est en off
Lcd_Out(1,2,"-- AFFICHAGE -- "); // Ecrire le texte sur la 1ère ligne
Lcd_Out(2,1,"display_LCD_4bit"); // Ecrire le texte sur la 2ème ligne
}

5.3- Moteur- Contrôle


NB : Pour la commande des moteurs pas à pas, voir CH2, CH3 et CH4.

5.3.1- Entraînement d’un MCC


5.3.1.1- Schémas de principe
Entraîner un moteur DC, ou CC dans les deux sens exige la
présence d’un pont en H, car la connexion directe d’un moteur au
microcontrôleur n‘est pas possible à cause de beaucoup de choses, à
savoir : le courant demandé, BEMF, etc… Le schéma de principe du
pont H est donné par :

Le principe de fonctionnement de ce pont en H c’est que les


interrupteurs fonctionnent deux par deux. Le A est associé au D et le
B est associé au C. Dans le schéma ce, rien ne se passe car tous les interrupteurs sont ouverts. Le
moteur est arrêté. Lorsqu'on actionne en même temps les interrupteurs A et D (schéma de gauche),
ou les interrupteurs B et C (schéma de droite) : le moteur tourne dans un sens ou dans le sens
inverse.

8
Chapitre 5: Applications des microprocesseurs et microcontrôleurs

Reste à protéger les interrupteurs du BEMF (tensions de retours) avec les diodes placées au
bon endroit (diodes anti retours ou diodes roues libre):

Pont en H : 4 Transistors NPN, 4 Diodes et 2 Entrées deux à deux

5.3.1.2- Circuits intégrés (CI) double ponts en H


Il existe des CI qui servent de pont en H, exemple la L293D. Le pont en H L293 et la L293D
sont les plus utilisés. Le D signifie diodes. Ce sont les diodes roues libre qui protègent les
transistors. La différence entre la L293 et la L293D est donc simple : la L293 ne contient pas de
diodes roues libres.

NB :

Dans nous applications, nous utiliserons la L293D car cela nous évite de
régler nous-mêmes le problème des diodes.

A partir du DATASHEET, nous observons, que le document


s'appelle "quadruple half-H driver" qu'on peut traduire par "pilote de
quadruple demi-pont en H". Donc double pont en H. Alors pourquoi ce nom de quadruple? Tout
simplement parce qu’avec ce circuit, nous pouvons piloter un moteur dans un sens à l’aide d’un
demi-pont, soit 4 moteurs en sens unique, ou 2 moteurs dans les deux sens. Les caractéristiques
principales sont résumes dans :

9
Chapitre 5: Applications des microprocesseurs et microcontrôleurs

NB :
Les tabes de vérités suivantes doivent être pris en considération pour en avoir une rotation
donnée : Vérifier les dans le TP5

10
Chapitre 5: Applications des microprocesseurs et microcontrôleurs
5.3.1.3- Commande d’un moteur DC par un microcontrôleur (16F887)

a) Schéma de principe (Proteus)

Où on observe, que :
i- La broche Vss et EN1 sont toujours au niveau 1 ;
ii- Vs sur 12V ;
iii- IN1 et IN2 sont alterner entre 1 et 0 (ou 3).

b) Programme en Mikroc
void main()
{
ANSEL = ANSELH 0; // To turn off analog to digital converters
C1ON_bit = C2ON_bit = 0; // To turn off comparators

TRISB = 0; // PORT B as output port


PORTB = 1; // Set RB0 to high

while(1)
{
//To turn motor clockwise
PORTB.F0 = 1;
Delay_ms(2000); // 2 seconds delay

//To Stop motor


PORTB = 0; // or PORTB = 3 (3 = 0b00000011)
Delay_ms(2000); // 2 seconds delay

//To turn motor anticlockwise direction


PORTB.F1 = 1;
Delay_ms(2000); // 2 seconds delay

11
Chapitre 5: Applications des microprocesseurs et microcontrôleurs

//To Stop motor


PORTB = 0; // or PORTB = 3 (3 = 0b00000011)
Delay_ms(2000); // 2 seconds delay

Alors, le moteur tourne ‘clockwise’ pendent 2sec puis il s’arrête 2sec ensuite il tourne sens inverse ‘anticlockwise’ 2sec
et s’arrête 2sec, et le cycle se répète.  Vérifier le dans le TP5

EXERCICE TP5
Reprendre l’application précédente ; de laquelle on demande de développer deux applications :
a) Insertion deux boutons poussoirs pour commander la rotation et la rotation inverse
b) En plus des deux boutons poussoirs, insertion d’un afficheur LCD indiquant les deux directions
de rotation.
Où les schémas des applications sont donnés par ;

5.4- Génération de signaux des ports pour convertisseurs ML

Dans les chapitres précédents, CH2CH4, on abordé la génération des différents types de
signaux (numérique, analogique), mais on n’a pas cité le signal MLI (PWM), en tant fréquence et
rapport cyclique. Dans cette partie, nous allons voir comment petons nous l’obtenir à partir du
module PWM/CCP1/CCP2 du MC16F887.

5.4.1- Génération d’un signal MLI (PWM)


Principe de l’MLI/applications
Une vitesse (w) d’un moteur CC
commandé ou d’un éclairage réglé d’une
lampe, etc.. sont des fonction de la
tension moyenne reçue d’une source à
découpage (Fig. 3.3a .3.3b, en bas).
Une tension hachée (par un hacheur) ou
découpée peut être produite des sorties
du PIC16f887 désignées par RC2/CCP1, RC1/CCP2, etc..

12
Chapitre 5: Applications des microprocesseurs et microcontrôleurs
A titre d’exemple, si on veut entraîner un moteur à courant continu (MCC) avec un demi-
pont, bien sûre avec deux sources de tension, le schéma principe de ce système d’entraînement est
donné sur la Fig. 3.4, où l’amorçage deux interrupteurs MOSFET est obtenu des broches RC2/P1A
et RC2/P1B. A noter qu’il est très dangereux de fermer les deux MOSFET en même temps court-
circuit sur des circuit d’amorçage. Pour cette raison, toujours en trouve un retard td entre les deux
états : fermeture ‘ on’ et ouverture ‘off’, comme le montre la figure suivante.

Charge
MCC

Schéma de principe d’un demi-pont entraînent un MCC

Il est possible d’utiliser le même schéma de principe précédent pour réaliser un système
d’entraînement de quatre quadrants ou en pont complet, seulement des inverseurs de signes.
Puisque le PIC16F887 possède 4 sorties PWM, on peut les utiliser pour alléger la demande du
courant qui ne doit pas dépasser 20mA.

Système d’entraînement à quatre quadrants

13
Chapitre 5: Applications des microprocesseurs et microcontrôleurs

RC2/P1A

RD7/P1D

Entraînement à 4 quadrants par le biais des 4 broches : P1A….P1D

PWM : Hardware et software

Hardware

On ne trouve pas des broches sur le PIC16f887 nommés PWM. On a vue dans les cours
précédents (architecture du PIC16f887) qu’il y a un module responsable de ça désigné par
CCP/PWM (Figure 3.9). Les 4 sorties de ce module sont indiquées par RC2/P1A, RC1/P1B, etc.. (.

Module CCP/PWM

Sorties MLI : P1A…P1D du


module CCP/PWM
Software

Quatre routines (fonctions), de mikroc, peuvent nous aider à générer des signaux MLI
(PWM). Ces routines sont gérées par la fonction PWM qu’on trouve dans le manager des fonctions
de bibliothèque:

1- PWM1_Init
14
Chapitre 5: Applications des microprocesseurs et microcontrôleurs
2- PWM1_Set_Duty
3- PWM1_Start
4- PWM1_Stop

L’utilisation de ces routines est mieux expliquée par des exemples

Exemple 1 (TP5) intégrer le HEX du programme dans le schéma Protus et déduire le but du
programme

Exercice1: TP5
Après une bonne lecture de ce programme :
1- déduire la tâche de ce programme
2- pour quel schéma de principe est utile ce programme pour entraîner une charge en boucle
ouverte
3- Suggérer un montage qu’on peut réaliser en TP5
4- Tracer le son schéma Proteus et confirmer sa tâche déduite.

unsigned short current_duty, old_duty; // Définition des variables


// current_duty et old_duty
void initMain()
{
ANSEL = 0; // Tous les A/D sont configures comme des E/S numériques
ANSELH = 0;
PORTA = 255; // Initialisation du PORTA à 255
TRISA = 255; // Tous les broches du port A sont des entrées
PORTB = 0; // Initialisation du PORTB à 0
TRISB = 0; // Tous les broches du port A sont des sorties
PORTC = 0; // Initialisation du PORTC à 0
TRISC = 0; // Tous les broches du port A sont des sorties
PWM1_Init(5000); // Initialisation du module MLI (PWM) à 5KHz
}
void main()
{
initMain();
current_duty = 16; // Initialisation de la variable ‘ current_duty’
old_duty = 0; // mise à zéro de la variable ‘ old_duty’
15
Chapitre 5: Applications des microprocesseurs et microcontrôleurs
PWM1_Start(); Activation du module PWM1

while (1)
{
if (Button(&PORTA, 0,1,1)) // Si le bouton connecté à RA0 est poussé
current_duty++ ; // incrémentation de la variable current_duty

if (Button(&PORTA, 1,1,1)) //Si le bouton connecté à RA1 est poussé


current_duty-- ; // décrémentation de la variable current_duty

if (old_duty != current_duty) // Si ‘ current_duty’ # de ‘ old_duty’


{
PWM1_Set_Duty(current_duty); // Met la valeur de PWM égale à la
//valeur nouvelle,
old_duty = current_duty; // Sauvegarde la valeur nouvelle
PORTB = old_duty; // puis montrer la sur le port B
}
Delay_ms(200); // un retard de 200mS
}
}

On observe de ce programme l’utilisation de 3 routines de la fonction PWM : PWM1_Init(),


PWM1_Start( ) et PWM1_Set_Duty( ) ; et bien sûre la fonction Button( ).

Remarque :
Quelques MCs possèdent plus d’un module PWM, donc les routines précédentes s’écrivent :
PWMx_Init(), PWMx_Set_Duty( ), PWMx_Start( ) et PWMx_Stop( ) ;

où x 1 et 2 (voir ton compilateur Mikroc).

Syntaxes des routines de la function PWM


La syntaxe nous donne la forme générale de la structure d’une fonction (routine) Elle
nous permet de l’utiliser d’une manière correcte et efficace.

1- syntaxe de PWM1_Init() void PWM1_Init(long freq);

Elle initialise le module PWM par ‘freq’ en Hz. Elle est appelée avant l’utilisation de
n’importe quelles autres fonctions

Exemple PWM1_Init(5000); // Initialisation du module MLI (PWM) à 5KHz

2- syntaxe de PWM1_ Set_Duty() void PWM1_Set_Duty(unsigned short duty_ratio);

16
Chapitre 5: Applications des microprocesseurs et microcontrôleurs
Introduit le rapport cyclique ‘duty_ratio’, qui prend les valeurs de 0 à 255 ; où 0 correspond
à 0%, 127 correspond à 50% et 255 correspond à 100%. Les autres valeurs du rapport cyclique
peuvent être calculées par :

duty_ratio = (Percent*255)/100

Exemple: 75% du ‘duty_ratio’ correspond à 75*255/100= 191.2500 ≈ 192

3- PWMx_Start( ) void PWM1_Stop(void);


Elle fait en marche le module PWM

Remarque :
Toutes ces routines ne renvoient pas de valeurs void et cette dernière ne demande
pas de valeur comme argument.

Exercice2: TP5
Après une bonne lecture de ce programme :
1- déduire la tâche de ce programme
2- pour quels schémas de principe est-il utile ce programme pour entraîner une charge en
boucle ouverte.
3- En TP5, confirmer le fonctionnement de ce programme par:
a) Schéma Proteus de la Figure en bas
b) Schéma Proteur (a) avec deux moteurs DC

unsigned short current_duty, old_duty, current_duty1, old_duty1;


void InitMain() {
ANSEL = 0; // Tous les A/D sont configures comme des E/S numériques
ANSELH = 0;
PORTA = 255; // Initialisation du PORTA à 255
TRISA = 255; // Tous les broches du port A sont des entrées
PORTB = 0; // Initialisation du PORTB à 0
TRISB = 0; // Tous les broches du port A sont des sorties
PORTC = 0; // Initialisation du PORTC à 0
TRISC = 0; // Tous les broches du port A sont des sorties
PWM1_Init(5000); // Initialisation du module 1 MLI (PWM) à 5KHz
PWM2_Init(5000); // Initialisation du module 2 MLI (PWM) à 5KHz
}
void main()
{
initMain();
current_duty = 16; // Initialisation de la variable ‘ current_duty’ 41%
current_duty1 = 16; // Initialisation de la variable ‘ current_duty’41%
PWM1_Start(); Activation du module PWM 1
PWM2_Start(); // Activation du module PWM 2
PWM1_Set_Duty(current_duty); // mise du rapport cyclique ‘current_duty’ pour PWM 1
PWM2_Set_Duty(current_duty1); // mise du rapport cyclique ‘current_duty’ pour PWM 2

while (1)
{
17
Chapitre 5: Applications des microprocesseurs et microcontrôleurs
if (RA0_bit) // Si le bouton de RA0 est poussé
{
Delay_ms(40);
current_duty++; // incrémentation de ‘current_duty’
PWM1_Set_Duty(current_duty);
}

if (RA1_bit) Si le bouton de RA1 est poussé


{
Delay_ms(40);
current_duty--; // décrémentation de ‘current_duty’
PWM1_Set_Duty(current_duty);
}

if (RA2_bit) Si le bouton de R21 est poussé


{
Delay_ms(40);
current_duty1++; // incrémentation de ‘current_duty1’
PWM2_Set_Duty(current_duty1);
}

if (RA3_bit) Si le bouton de RA3 est poussé


{
Delay_ms(40);
current_duty1--; // décrémentation de current_duty1
PWM2_Set_Duty(current_duty1);
}

Delay_ms(5); // ralentir un peu le change de la vitesse


}
}

Exercice 3TP5 (Mêmes questions que l’EXO1)


Pour un profile infini de changement des effets PWM
unsigned short current_duty, i; // Définition des variables current_duty et i
void initMain()
{
ANSEL = 0; // Tous les A/D sont configures comme des E/S numériques
ANSELH = 0;
PORTA = 255; // Initialisation du PORTA à 255
TRISA = 255; // Tous les broches du port A sont des entrées
PORTB = 0; // Initialisation du PORTB à 0
TRISB = 0; // Tous les broches du port A sont des sorties
PORTC = 0; // Initialisation du PORTC à 0
18
Chapitre 5: Applications des microprocesseurs et microcontrôleurs
TRISC = 0; // Tous les broches du port A sont des sorties
PWM1_Init(5000); // Initialisation du module MLI (PWM) à 5KHz
}
void main()
{
initMain();
current_duty = 16; // Initialisation de la variable ‘ current_duty’
PWM1_Start(); Activation du module PWM1

while (1)
{
For(i=0 ; i<=255, i=i+25)
{
current_duty = current_duty + i; // incrémentation de la variable current_duty
PWM1_Set_Duty(current_duty); // Met la valeur de PWM égale à la valeur nouvelle,
Delay_ms(40);
}

PWM1_Set_Duty(current_duty); // Met la valeur de PWM égale à la valeur nouvelle,


Delay_ms(100);

For(i=254 ; i>0, i=i-25)


{
current_duty = current_duty - i; // incrémentation de la variable current_duty
PWM1_Set_Duty(current_duty); // Met la valeur de PWM égale à la valeur nouvelle,
Delay_ms(40);
}

Delay_ms(200); // un retard de 200mS


}
}

5.5- Contrôle des appareils DC/AC

19
Chapitre 5: Applications des microprocesseurs et microcontrôleurs

20
Chapitre 5: Applications des microprocesseurs et microcontrôleurs

5.6- Mesure de la fréquence

21
Chapitre 5: Applications des microprocesseurs et microcontrôleurs

5.7- Système d'acquisition de données

22
Chapitre 5: Applications des microprocesseurs et microcontrôleurs

Annexe
Le HD44780 est l'un des contrôleurs de cristaux liquides les plus appréciés, étant utilisé
dans l'industrie et dans les applications commerciales. Le module est monochrome et vient dans
différentes formes et tailles. Des modules avec 8, 16, 20, 24, 32 et 40 caractères sont disponibles.
Selon le modèle, l'écran LCD est fabriqué avec 14 ou 16 pattes pour l'interface.

Le tableau en bas présente la configuration des pattes et les fonctions des pattes d’un LCD à
14 pattes. La patte VSS est à 0V ou du sol. La patte VDD doit être connectée à la borne
positive d’alimentation. Bien que les fabricants spécifient une alimentation 5V DC, les modules
travaillent habituellement aussi avec une alimentation un peu bas que 3V ou aussi haut que 6V.

La patte 3 VEE est désigné pour réglage du contraste de l'affichage et doit être reliée à une
alimentation en courant continu. Un potentiomètre est généralement connecté à l'alimentation avec
son curseur raccordé à la patte VEE et l'autre patte du potentiomètre relié à la masse. De cette
façon la tension à la patte VEE, et où le contraste de l'affichage, peut être réglée à volonté.

La patte 4 est le registre de sélection (RS) et lorsque cette patte à 0 V, les données
sont transférés à l'affichage à cristaux liquides. Lorsque RS est à +5 V, les données de caractères
peuvent être transférés à partir du module LCD.

La patte 5 est le registre de sélection de lecture / écriture (R / W). Cette patte est reliée avec
la masse (état logique bas) afin d'écrire des données de caractères au module LCD. Lorsque
cette broche est à +5 V (états logique haut) donc les informations sortants du module LCD
peuvent être lues.

La patte 6 est la validation (EN), qui est utilisé pour initier le transfert de commandes
ou de données entre le module et le microcontrôleur. Lors de l'écriture à l'écran, les données
sont transférées uniquement sur le front descendant (haut-bas) sur cette patte. Lors de la lecture de

23
Chapitre 5: Applications des microprocesseurs et microcontrôleurs
l’affichage, les données deviennent accessibles après le front montant (bas-haut) de la patte de
validation, et ces données demeurent tant que la patte de validation est au niveau logique haut.

Les broches 7 à 14 sont les huit lignes de bus de données (D0 à D7). Les données peuvent
être transférées entre le microcontrôleur et le module LCD à l'aide soit d'un seul octet de 8 bits soit
de deux 4-bits. Dans ce dernier cas, seuls les quatre lignes de données supérieures (D4 à D7) sont
utilisées. Le 4-bits mode a l'avantage de nécessiter moins de lignes d'E / S pour communiquer
avec l'écran LCD.

24

Vous aimerez peut-être aussi