Académique Documents
Professionnel Documents
Culture Documents
I- LES COMPOSANTS........................................................................................1
I-1-PIC18F452......................................................................................................................................................1
I-2-L'AFFICHEUR LCD.........................................................................................................................................1
I-3-PCF8591.........................................................................................................................................................2
I-4-POTENTIOMÈTRE...............................................................................................................................................................................3
FIGURE 1 : PIC18F452............................................................................................................1
FIGURE 2 : LCD.......................................................................................................................2
FIGURE 3 : PCF8591................................................................................................................2
FIGURE 4 : Potentiomètre........................................................................................................3
FIGURE 5 : potentiometre pinout.............................................................................................3
FIGURE 6 : Simulation sur ISIS...............................................................................................9
I- Les composants
I-1 PIC18F452
Ce puissant microcontrôleur 8 bits basé sur CMOS FLASH de 10 MIPS (exécution
des instructions en 100 nanosecondes) et facile à programmer (seulement 77
instructions d'un seul mot) intègre la puissante architecture PIC® de Microchip dans
un boîtier de 40 ou 44 broches. Il est compatible avec les dispositifs PIC16C5X,
PIC12CXXX, PIC16CXX et PIC17CXX et offre ainsi une voie de migration
transparente du code logiciel vers des niveaux plus élevés d'intégration matérielle. Le
PIC18F452 dispose d'un environnement de développement convivial avec le
compilateur 'C', d'une EEPROM de 256 octets, de l'autoprogrammation, d'un ICD, de
2 fonctions de capture/compare/PWM, de 8 canaux de convertisseur analogique-
numérique (A/D) de 10 bits, du port série synchrone qui peut être configuré comme
interface périphérique série (SPI) à 3 fils ou comme bus I²C à 2 fils et d'un émetteur-
récepteur asynchrone universel adressable (AUSART). Toutes ces caractéristiques en
font un produit idéal pour les équipements de fabrication, l'instrumentation et la
surveillance, l'acquisition de données, le conditionnement d'énergie, la surveillance de
l'environnement, les télécommunications et les applications audio/vidéo grand public.
Figure 1: PIC18F452
—1
—
français "Écran à cristaux liquides". D’où afficheur LCD. L'afficheur LCD est en
particulier une interface visuelle entre un système (projet) et l'homme (utilisateur).
Son rôle est de transmettre les informations utiles d'un système à un utilisateur. Il
affichera donc des données susceptibles d'être exploiter par l'utilisateur d'un système.
Figure 2: LCD
I-3 PCF8591
Figure 3: PCF8591
—2
—
I-4 Potentiomètre
Un potentiomètre (appelé familièrement potard) est un type de résistance variable à
trois bornes, dont une est reliée à un curseur se déplaçant sur une piste résistante
terminée par les deux autres bornes. Ce système permet de recueillir, entre la borne
reliée au curseur et une des deux autres bornes, une tension qui dépend de la position
du curseur et de la tension à laquelle est soumise la résistance.
Figure 4: Potentiomètre.
1 et 3 sont des bornes fixes. L'une ou l'autre peut être VCC ou GND. 2 est la borne de
l'essuie-glace /movale.
Le convertisseur analogique-numérique (ADC) est un appareil qui peut lire une valeur
de tension d’entrée analogique et la convertir en valeur numérique. Les ADC sont
—3
—
utilisés pour lire les valeurs des thermistors, des potentiomètres et d’autres appareils
qui modifient la résistance en fonction de certaines conditions.
III- Code:
#include "includes.h"
#include <adc.h>
#include "ftoa.c"
/* */
#pragma config OSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config STVR = ON
/* */
OS_STK piletache1[128];
OS_STK piletache2[128];
OS_STK piletache3[128];
OS_STK piletache4[128];
/* */
void tache1 (void *pdata);
void tache2 (void *pdata);
void tache3 (void *pdata);
void tache4 (void *pdata);
/* */
—4
—
OS_EVENT *SemLCD;
OS_EVENT *SemADC;
/* */
void main (void){
BSP_Init ();
OSInit();
OSTaskCreate(tache1,(void *)0, &piletache1[0],0);
OSTaskCreate(tache2,(void *)0, &piletache2[0],1);
OSTaskCreate(tache3,(void *)0, &piletache3[0],2);
OSTaskCreate(tache4,(void *)0, &piletache4[0],3);
SemLCD = OSSemCreate(1);
SemADC = OSSemCreate(1);
OSStart();
}
/* tache1 */
void tache1(void *pdata){
int result;
char buf [20];
float r;
char chaine[20];
INT8U err;
while(1){
OSSemPend(SemADC,0,&err);
SetChanADC(ADC_CH0);
ConvertADC();
while( BusyADC() );
result = ReadADC();
—5
—
OSSemPost(SemADC);
r = result * 0.0048875855327468;//r = result * (5/1023)
ftoa( r,(unsigned char*)chaine,2,'f');
sprintf(buf,"Pot 1 = %s V \n\r ",chaine);
OSSemPend(SemLCD,0,&err);
SetDDRamAddr(0x00);
putsXLCD(buf);
OSSemPost(SemLCD);
OSTimeDlyHMSM(0,0,1,0);
}
}
/* tache2 */
void tache2(void *pdata){
int result;
char buf [20];
float r;
char chaine[20];
INT8U err;
while(1){
OSSemPend(SemADC,0,&err);
SetChanADC(ADC_CH1);
ConvertADC();
while( BusyADC() );
result = ReadADC();
OSSemPost(SemADC);
r = result * 0.0048875855327468;//r = result * (5/1023)
ftoa( r,(unsigned char*)chaine,2,'f');
sprintf(buf,"Pot 2 = %s V \n\r ",chaine);
—6
—
OSSemPend(SemLCD,0,&err);
SetDDRamAddr(0x40);
putsXLCD(buf);
OSSemPost(SemLCD);
OSTimeDlyHMSM(0,0,1,0);
}
}
/* tache3 */
void tache3(void *pdata){
int result;
char buf [20];
float r;
char chaine[20];
INT8U err;
while(1){
OSSemPend(SemADC,0,&err);
SetChanADC(ADC_CH2);
ConvertADC();
while( BusyADC() );
result = ReadADC();
OSSemPost(SemADC);
r = result * 0.0048875855327468;//r = result * (5/1023)
ftoa( r,(unsigned char*)chaine,2,'f');
sprintf(buf,"Pot 3 = %s V \n\r ",chaine);
OSSemPend(SemLCD,0,&err);
SetDDRamAddr(0x14);
putsXLCD(buf);
OSSemPost(SemLCD);
—7
—
OSTimeDlyHMSM(0,0,1,0);
}
}
/* tache4 */
void tache4(void *pdata){
int result;
char buf [20];
float r;
char chaine[20];
INT8U err;
while(1){
OSSemPend(SemADC,0,&err);
SetChanADC(ADC_CH3);
ConvertADC();
while( BusyADC() );
result = ReadADC();
OSSemPost(SemADC);
r = result * 0.0048875855327468;//r = result * (5/1023)
ftoa( r,(unsigned char*)chaine,2,'f');
sprintf(buf,"Pot 4 = %s V \n\r ",chaine);
OSSemPend(SemLCD,0,&err);
SetDDRamAddr(0x54);
putsXLCD(buf);
OSSemPost(SemLCD);
OSTimeDlyHMSM(0,0,1,0);
}
}
—8
—
V- Simulations
—9
—