Vous êtes sur la page 1sur 7

Microcontrôleurs Iset de Nabeul

Leçon N°7
COMMUNICATION SERIE
I- INTRODUCTION
Les nouveaux microcontrôleurs exigent dans certains cas, la mise en œuvre des communications en
série pour établir le transport de données avec d'autres appareils tels que des mémoires, des capteurs,
des ordinateurs, et même d'autres microcontrôleurs.
Afin d'effectuer des communications série, certains microcontrôleurs ont des modules série comme
I²C, SPI, USART et USB. Chacun de ces formats de communication permettent la communication
avec les différents modules.
Le module I²C est idéal pour communiquer avec des mémoires série comme 24LC64,
24LC128, 24LC512, etc.
Le protocole SPI permet la communication avec les périphériques de stockage de masse tels
que la mémoire SD.
Le module USART est l'un des plus utilisés ; Ce module permet la communication avec des
dispositifs tels que des capteurs, la transmission et la réception des modules XBee,
ordinateurs personnels, les modules GPS, et d'autres microcontrôleurs.
Le module USB, construit autour de quelques microcontrôleurs comme le 18F2550 et
18F4550, permet la communication avec un ordinateur personnel par l'intermédiaire d'un port
USB.
II- LE MODULE USART
Le USART est un module de communication série standard, de manière asynchrone. Il nécessite un
seul support de transmission pour envoyer des informations et ne nécessite pas un moyen pour
l'horloge.
Le signal d'horloge ou de synchronisation doit prendre, indépendamment l'un de chacun des
éléments, l'émetteur et le récepteur.
Un autre avantage de ce module est qu'il a une communication full-duplex, ce qui signifie qu'il peut
transmettre et recevoir des informations en même temps. A cet effet, deux moyens de transmission
dédiés sont utilisés, un pour émettre et un pour recevoir.
Remarque : en général, une communication comprend 4 phases :
- Etablissement d’un circuit entre 2 correspondants
- Initialisation de la transmission
- Transmission proprement dite
- Libération de la transmission
La transmission étant du type asynchrone (pas d'horloge commune entre l'émetteur et le récepteur),
des bits supplémentaires sont indispensables au fonctionnement : bit de début de mot (start), bit(s) de
fin de mot (stop).
Ce protocole est utilisé par les ordinateurs personnels et d'autres dispositifs, et est connu comme
RS232, pour le cas spécifique des niveaux de tension sont différents au microcontrôleur. Le protocole
RS232 représente la valeur d'un 0 logique à une tension de +12 volts, et la valeur d'un 1 logique à -12

Mr Nizar TOUJENI 65
Microcontrôleurs Iset de Nabeul

volts. Les ordinateurs personnels et autres appareils qui mettent en œuvre le port RS232 à l'aide d'un
connecteur DB9, qui dispose de 9 broches, qui sont identifiés dans la figure suivante :

Figure 1

Pin Nom

1 DCD

2 RXD

3 TXD

4 DTR

5 GND

6 DSR

7 RTS

8 CTS

9 Non utilisé

Aux fins de connexions de communication asynchrones doivent être configurés comme suit :

Figure 2
Pour établir et joindre une communication PIC avec un dispositif RS232, il faut utiliser un
convertisseur connu comme MAX232. La mise en œuvre de cela, il doit être comme indiqué dans la
figure suivante :

Mr Nizar TOUJENI 66
Microcontrôleurs Iset de Nabeul

Figure 3
Pour utiliser ce protocole de communication du mikroC PRO, la bibliothèque UART est disponible
dans les librairies et la palette a les fonctions suivantes pour l'utilisation :
UART1_Init (const unsigned long BAUD_RATE) : cette fonction initialise le module USART
et établit la vitesse de communication défini dans le paramètre : BAUD_RATE.
char UART1_Data_Ready( ) : cette fonction détermine s'il y a des données prêtes à être lues à
l'arrivée du module de mémoire tampon, la fonction renvoie 1 si les données peuvent être lues,
sinon pas de nouvelles données dans la mémoire tampon.
char UART1_Tx_Idle ( ) : cette fonction permet de définir si le tampon de transmission est
occupé à envoyer des données, car il renvoie 1 si le tampon est occupé, ou 0 si le module est
disponible pour envoyer de nouvelles données.
char UART1_Read ( ) : cette fonction retourne la valeur de la mémoire tampon d'entrée qui est
utilisé pour lire une entrée.
UART1_Read_Text (char *Sortie, char *x, char y) : cette fonction lit une chaine de caractères.

Mr Nizar TOUJENI 67
Microcontrôleurs Iset de Nabeul

UART1_Write (omble de _data) : transmet les données saisies dans le paramètre d'entrée pour
le USART.
UART1_Write_Text (char *UART_text) : transmet une chaîne de texte terminée par le
caractère nul ou une chaîne de texte nulle est fournie par le paramètre UART_text.
Pour l'exemple suivant doit être mis en œuvre dans ISIS, le circuit avec les appareils suivants :
16F877A PIC et l'instrument virtuel : TERMINAL VIRTUEL. Avec ces deux éléments, le circuit
suivant est construit:

Figure 4
L'outil terminal virtuel, est une communication série de simulateur et dispose d'un outil similaire pour
le comportement de Windows HyperTerminal. Cet outil vous permet de modifier les fonctions de
communication telles que: le nombre de bits de données, la vitesse de transmission, le nombre de bits
d'arrêt, entre autres. Cependant, l'instrument est configuré avec un taux de défaut de 9600 bps, et prêt
à utiliser avec des fonctionnalités PIC USART.
Pour vérifier le fonctionnement de ce module, vous pouvez compiler et simuler l'exemple suivant:
void main( void )
{
//Declaración de variables.
char DATO;
UART1_Init(9600); //Inicio del módulo USART.
//Se transmite el texto: de bienvenida.
UART1_Write_Text("Bienvenido al simulador:");

Mr Nizar TOUJENI 68
Microcontrôleurs Iset de Nabeul

UART1_Write(13); //Se transmite el ASCII del ENTER.


UART1_Write(10); //Se transmite el ASCII del retroceso del carro.
//Se trasmite el texto de pulsar tecla.
UART1_Write_Text("Pulse una tecla!...");
UART1_Write(13); //Se transmite el ASCII del ENTER.
UART1_Write(10); //Se transmite el ASCII del retroceso del carro.
while(1)//Bucle infinito.
{
//La sentencia if evalúa si un dato está listo para leer.
if(UART1_Data_Ready()==1)
{
//Se lee el DATO del bufer.
DATO = UART1_Read();
//Se imprime el texto de realimentación.
UART1_Write_Text("Usted pulso la tecla: ");
UART1_Write(DATO); //Se transmite el DATO recibido.
UART1_Write(13); //Se transmite el ASCII del ENTER.
UART1_Write(10); //Se transmite el ASCII del retroceso del carro.
}
}
}
Pendant la simulation, l'utilisateur peut envoyer des données à travers le terminal virtuel et voir les
commentaires que le PIC, il émet.
III- LE MODULE I²C SERIE
Certains microcontrôleurs ont ce module et de la même manière MikroC PRO dispose d’une
bibliothèque pour une utilisation facile de cette bibliothèque de protocole. Cette bibliothèque a 7
fonctions principales pour le fonctionnement du module.
I2C1_Init (const unsigned long clock) : initialise broches de communication dans le PIC et
ajuste la vitesse de communication.
unsigned short I2C1_Start (void) : cette fonction génère la condition de démarrage et renvoie 0
si aucune erreur dans la transmission, une autre forme retourne une valeur autre que 0.
void I2C1_Repeated_Start (void) : cette fonction génère début de répétition.
unsigned short I2C1_Is_Idle (void) : cette fonction est utilisée pour déterminer si le bus de
données est occupé, et renvoie 1 si le bus est disponible ou retourne 0 si elle est occupée.

Mr Nizar TOUJENI 69
Microcontrôleurs Iset de Nabeul

unsigned short I2C1_Rd (unsigned short ack) : cette fonction lit des données de bus de
données et envoie la confirmation ack pour le bus. Si ack=1 la confirmation est positif et si
ack=0 la confirmation est négatif ou NO ACK.
unsigned short I2C1_Wr (unsigned short data) : cette fonction envoie les données via le bus
de données et renvoie 0 si la transmission a réussi, ou quelque chose autre que 0 si des erreurs se
produisent.
void I2C1_Stop (void) : génère la condition finale dans le bus de communication.

Figure 5
Le programme de simulation correspondant de code est le suivant :
void main( void )
{
unsigned short DIRECTION;
unsigned short DATA;
//Configuration des ports.
ADCON1 = 6;
TRISE = 7;
TRISB = 0;
PORTB = 0;

Mr Nizar TOUJENI 70
Microcontrôleurs Iset de Nabeul

I2C1_Init(100000);
while(1)
{
DIRECTION = (~PORTA)&0x0F;
I2C1_Start();
I2C1_Wr(0b10100000);
I2C1_Wr(DIRECTION);
I2C1_Repeated_Start();
I2C1_Wr(0b10100001);
DATO=I2C1_Rd(0);
I2C1_Stop();
PORTB = DATA;
delay_ms(100);
if( Button( &PORTA, 4, 50, 0) )
{
DATA = ~PORTD;
I2C1_Start();
I2C1_Wr(0b10100000);
I2C1_Wr(DIRECTION);
I2C1_Wr(DATA);
I2C1_Stop();
delay_ms(50);
}
}
}
Après l'édition et la simulation dans ISIS, vous pouvez voir les valeurs spécifiées dans la direction de
l'ADRESSE DIP-SWITCH sur les LEDs. Lorsque le bouton REC est pressé, la valeur du DIP-
SWITCH, DATA est enregistré dans le sens du courant. Broches d'horloge et de données pour ce
PIC, sont déjà prédéfinis par le fabricant pour le RC3 broches et RC4, respectivement.

Mr Nizar TOUJENI 71

Vous aimerez peut-être aussi