70

Microcontrôleur PIC Microchip part2/2

Embed Size (px)

Citation preview

Page 1: Microcontrôleur PIC Microchip part2/2
Page 2: Microcontrôleur PIC Microchip part2/2

MICROCONTRÔLEUR-PIC-

2015-2016

Page 3: Microcontrôleur PIC Microchip part2/2

PLAN

Introduction au microcontrôleur (PIC)

Programmation des PICs

PIC 16F84A

PIC 16F877

Page 4: Microcontrôleur PIC Microchip part2/2

Microcontrôleur PIC 16F887Les caractéristique essentielles du Pic 16F887 :

- Consommation : moins de 2mA sous 5V à 4 MHz

RISC architecture (Reduce Instructions Construction Set ) ( 35 instructions)

33 Ports Entrée-Sortie bidirectionnels pouvant produire 25 mA par sortie

Operating frequency/ speed 0-20 MHz

Tension d’alimentation :2.0-5.5V

33 Ports Entrée-Sortie bidirectionnels pouvant produire 25 mA par sortie

convertisseur analogique 10 bits à 8 entrées

368 bytes of Data RAM (Data memory ; volatile)

256 bytes of Data EEPROM (Data memory ; non-volatile) : 10.000.000 typical erase/write cycles

8K of program memory flash: 10.000.000 typical erase/write cycles

2 modules pour PWM avec une résolution de 10 bits

Page 5: Microcontrôleur PIC Microchip part2/2

Microcontrôleur PIC 16F887

-4 sources d'interruption :- Externe par la broche partagée avec le Port B : PB0- Par changement d'état des bits du Port B: PB4 PB5 PB6 ou PB7- Par un périphérique intégré dans le chip: écriture de Data en EEPROM

- TIMER

2 Compteurs 8 bits et 1 compteur 16 bits avec pré diviseur programmable (TMR0 , TMR1 et TMR2)

Watch-dog timer (chien de garde)

USART pour transmission série synchrone ou asynchrone

Page 6: Microcontrôleur PIC Microchip part2/2

1-Description des pins (Pic 16F887) :

Page 7: Microcontrôleur PIC Microchip part2/2
Page 8: Microcontrôleur PIC Microchip part2/2

Configuration de l’oscillateur :

• L'horloge interne est constituée d'un oscillateur à quartz (XT,LP,HP) ou d'un oscillateur RC (voir chapitre précédent )

Page 9: Microcontrôleur PIC Microchip part2/2

2-les registres spéciaux SFR :

( Overview )

Page 10: Microcontrôleur PIC Microchip part2/2

2-1- STATUS Register :

Contient les différents bits flags liés aux opérations arithmétiques, les indicateurs de RESET et le bit de sélection de la BANK mémoire.

Page 11: Microcontrôleur PIC Microchip part2/2

2-2- OPTION Register :

Ce registre en lecture écriture permet de configurer les prédiviseurs du TMR0 et du WATCHDOG, la source du TIMER, le front des interruptions et le choix du Pull up sur le PORTB.

Page 12: Microcontrôleur PIC Microchip part2/2

2-3- Gestion des interruptions:

2-3-1 INTCON register:

Ce registre en lecture écriture permet de configurer les différentes sources d'interruption;

Page 13: Microcontrôleur PIC Microchip part2/2

2-3-2 PIE1 Register:

Ce registre contient les bits individuels d'autorisation pour les Interruptions des périphériques. Le bit 6 de INTCON (PEIE) doit être mis à "1" pour autoriser une quelconque IT de périphérique

Page 14: Microcontrôleur PIC Microchip part2/2

2-2-4 PIR1 Register:

Ce registre contient les FLAG associés aux interruptions des périphériques. Ces Flag passent à "1" quand une IT correspondante survient et que le bit d'autorisation est bien positionné. Ces Flag doivent être remis à "0" par Soft

(Associé à PIE1 )

Page 15: Microcontrôleur PIC Microchip part2/2

2-3-3 PIE2 Register:

Page 16: Microcontrôleur PIC Microchip part2/2

2-2-5 PIR2 Register:

Associé à PIE2

Page 17: Microcontrôleur PIC Microchip part2/2
Page 18: Microcontrôleur PIC Microchip part2/2

3 Les ports E/S:

3-1 PORT A:

• Ce port est un port bidirectionnel de 8 bits (RA0 à RA7) désigné par PORTA ; les broches sont configurable par les registresANSEL et TRISA

• En entrée, la broche RA4 peut être utilisée soit comme E/S numérique normale, soit comme entrée horloge pour le TIMER TMR0.

• En sortie, RA4 est une E/S à drain ouvert, pour l'utiliser comme sortie logique, il faut ajouter une résistance de pull-up externe.

• Les autres broches (RA0, RA1, RA2, RA3 et RA5) peuvent être utilisées soit comme E/S numériques soit comme entrées analogiques :

Pour les utiliser en SORTIES NUMERIQUES, il suffit de les configurer en sortie à l'aide du registre de direction TRISA.

Pour les utiliser en ENTRÉES NUMERIQUES, il faut les configurer en entrée à l'aide de TRISA, en plus il faut les configurer en numérique en plaçant la valeur '00000110' dans le registre ADCON1,

Pour les utiliser en ENTRÉE ANALOGIQUE ( détaillé par la suite :convertisseur Analogique numérique ).

• Quelque soit le mode (Analogique ou Numérique), il faut utiliser le registre TRISA pour configurer la direction des E/S

Page 19: Microcontrôleur PIC Microchip part2/2

Etudié en détail par la suite (convertisseur Analogique

numérique )

Page 20: Microcontrôleur PIC Microchip part2/2

3-2 PORT B:

• Il comporte 8 bits désigné par PORTB . Le registre de direction correspondant est TRISB

• Chaque broche du PORT B est munie d'une résistance pull-up (pour chaque pin ) que l'on peut mettre ou non en service en mode entrée uniquement. On active cette fonction par la mise à "0" du bit 7 dans le registre OPTION

• La résistance pull-up est inactive quand le port est configuré en sortie

• Les 4 broches PB7:PB4 provoquent une interruption sur un changement d'état si elles sont configurées en entrée On doit remettre à zéro le Flag de cette interruption (bit 0 du registre INTCON ) dans le programme d'interruption.

• Le bit 0 du PORT B peut également être utilisé comme entrée d'interruption externe. Le choix du front de déclenchement se fait en configurant le bit 6 du registre OPTION.

Page 21: Microcontrôleur PIC Microchip part2/2

3-3 PORT C:

• Le port C désigné par PORTC est un port bidirectionnel de 8 bits (RC0 à RC7).

• La configuration de direction se fait à l'aide du registre TRISC (in/out)

• Toutes les broches du port C peuvent être utilisées soit comme E/S normales soit comme broches d'accès à différents modules comme le TIMER 1, les modules de comparaison et de capture CCP1/2, le TIMER 2, le port I2C ou le port série, ceci sera précisé au moment de l'étude de chacun de ces périphériques.

• Pour l’utilisation d’une broche du port C comme E/S normale, il faut s’assurer qu’elle n’a pas été affectée à un de ces modules. Par exemple, si TIMER1 est validé, il peut utiliser les broches RC0 et RC1 selon sa configuration.

Page 22: Microcontrôleur PIC Microchip part2/2

3-4 PORT D:

• Le port D désigné par PORTD est un port bidirectionnel de 8 bits (RD0 à RD7).

• Chaque broche et configurable en entrée ou en sortie à l’aide du registre TRISD. Pour configurer une broche en entrée, on positionne le bit correspondant dans TRISD à 1 et inversement.

• PORTD n’est pas implémenté sur 16F876, il est disponible sur le 16F877.

• PORTD peut être utilisé dans un mode particulier appelé parallèle slave port, pour cela il faut placer le bit PSPMODE (bit 4) de TRISE à 1. Dans ce cas les 3 bits de PORTE deviennent les entrées de control de ce port (RE, WE et CS)

• Pour utiliser PORTD en mode normal, il faut placer le bit PSPMODE de TRISE à 0

Page 23: Microcontrôleur PIC Microchip part2/2

3-5 PORT E:

• PORTE contient seulement 3 bits RE0, RE1 et RE2. Les 3 sont configurables en entrée ou en sortie à l’aide des bits 0, 1 ou 2 du registre TRISE.

• Les 3 bits de PORTE peuvent être utilisés soit comme E/S numérique soit comme entrées analogiques du CAN. La configuration se fait à l’aide du registre ADCON1.

• Si le bit PSPMODE de TRISE est placé à 1, Les trois bits de PORTE deviennent les entrées de control du PORTD qui (dans ce cas) fonctionne en mode parallèle Slave mode

• Pour utiliser les broches de PORTE en E/S numériques normales :

- Placer 06h dans ADCON1 - Placer le bit PSPMODE de TRISE à 0

Page 24: Microcontrôleur PIC Microchip part2/2

TRISE REGISTER

Page 25: Microcontrôleur PIC Microchip part2/2

4-1 TIMER0:

• Ce TIMER fonctionne de façon identique à celui du PIC16F84A (voir chapitre précédent )

Page 26: Microcontrôleur PIC Microchip part2/2

4-2 TIMER1:

• TIMER1 est un Timer/Compteur 16 bits (capable de compter de 0 à 65535) accessible en lecture/écriture par l'intermédiaire de deux registres 8 bits TMR1H et TMR1L qui constituent sa partie haute et sa partie basse.

• Le contrôle du TMR1 se fait par le registre T1CON

• TMR1 peut fonctionner dans 2 modes différents :

-Timer Synchrone (horloge interne)

- Compteur Synchrone ou Asynchrone

(horloge externe)

Page 27: Microcontrôleur PIC Microchip part2/2

Mode TIMER :

Dans ce mode, TMR1 est incrémenté en fonction de l’horloge système Fosc/4 éventuellement prédivisée. Le bit de synchronisation (T1SYNC) n'a pas d'effet car l'horloge Fosc/4 est toujours synchronisée sur l'horloge système.

(T1CON = B’00ab0001’ ) ab= prédiviseur

Page 28: Microcontrôleur PIC Microchip part2/2

Mode COMPTEUR synchrone :

• TMR1 compte alors les flancs montants du signal appliqué sur la pin RC0/T1OSO/T1CKI

• Pour travailler dans le mode « compteur synchrone », nous devons configurer T1CON de la façon suivante : T1CON : B’00ab0011’

• Evidemment, pour pouvoir compter des événements sur la pin T1CKI, il faut que cette pin soit configurée en entrée via le registre TRISC.

• le timer 1 utilisé en mode « compteur synchrone » ne permet pas de réveiller le PIC sur une interruption du timer 1. C’est logique, car, puisqu’il n’y a pas de comptage il n’y a pas de débordement

• De plus, le flanc montant de T1CKI n’est pris en compte que s’il a été précédé d’au moins un flanc descendant

Page 29: Microcontrôleur PIC Microchip part2/2

Mode COMPTEUR asynchrone :

• TMR1 compte alors les flancs montants du signal appliqué sur la pin RC0/T1OSO/T1CKI

• Pour travailler dans le mode nous devons configurer T1CON de la façon suivante :T1CON : B’00ab0111’

• Dans cette configuration et durant le mode SLEEP (mode sommeil), le timer continu l’incrémentation et peut générer une interruption sur un débordement qui réveille le µC de son sommeil.

Page 30: Microcontrôleur PIC Microchip part2/2

Le timer 1 et TOSCEN (Fonctionnement en mode double quartz):• Il est utile d'utiliser une base de temps différente de celle du quartz du pic. En effet, ceci permet d'utiliser une base

de temps multiple de la seconde (quartz horloge à 32768Khz) tout en conservant une vitesse maximale pour le fonctionnement du pic soit 20 MHz.

• Ceci permet donc de choisir un quartz multiple exact de la fréquence à mesurer, tout en conservant une vitesse de traitement maximale du PIC. En fait, l’oscillateur a été conçu pour fonctionner efficacement à une valeur centrée sur 32KHz Mais vous pouvez augmenter cette fréquence jusque 200 KHz (vérifier le datasheet pour la valeur des condensateurs entourant le quartz)

• La valeur à placer dans T1CON est : T1CON = B’00ab1x11’ Remarquez la présence d’un « x » qui vous permet de choisir si vous désirez travailler en mode synchrone ou asynchrone. Les remarques que j’ai faite à ce sujet pour l’utilisation en mode compteur restent d’application

• Remarque : Dans ce mode particulier, les pins RC0 (T1OSO) et RC1 (T1OSI) sont automatiquement configurées en entrée, indépendamment des bits correspondants de TRISC. Il est donc inutile de configurer les bits 0 et 1 de ce registre.

Page 31: Microcontrôleur PIC Microchip part2/2

4-2 TIMER2 :

• Le TIMER2 est un compteur sur 8 bits

• La valeur du diviseur total, vue par l’utilisateur, est bien entendu obtenue en multipliant la valeur du prédiviseur par celle du postdiviseur

• ll faut également tenir compte que ce timer ne dispose d’aucune entrée extérieure via une pin du PIC. Il ne peut donc fonctionner qu’en mode « timer » pur.

• Le flag d’interruption se nomme TMR2IF, en toute logique, tandis que le bit d’autorisation s’appelle TMR2IE.

Page 32: Microcontrôleur PIC Microchip part2/2

Le timer 2 et les registres PR2 et T2CON

• Le principe du timer 2 est différent, dans le sens que l’événement détecté n’est pas le débordement « ordinaire » du timer(c’est-à-dire le passage de 255 à 0), mais le débordement par rapport à une valeur prédéfinie dans le registre PR2

• On peut donc dire que le fonctionnement du timer est le suivant :

- On incrémente le contenu du prédiviseur à chaque cycle d’instruction éventuellement prédivisé- Chaque fois que le contenu de TMR2 dépasse le contenu de PR2, on remet TMR2 à 0, et on incrémente le

contenu du postdiviseur.

-Chaque fois que le contenu du postdiviseur correspond à un multiple de la valeur du postdiviseur, on positionne le flag TMR2IF.

Pour clarifier la compréhension, je vous donne le schéma-bloc du timer 2

Page 33: Microcontrôleur PIC Microchip part2/2

• Forts de tout ceci, vous avez maintenant compris que la spécificité du timer 2, et donc son principal avantage, est qu’il permet de configurer le « débordement » sur n’importe quelle valeur de TMR2, associé à un large éventail de valeurs de diviseur. Inutile donc d’attendre le passage de 255 à 0 , quoique cela reste possible, simplement en plaçant 255 dans PR2.

• Cet avantage, combiné à la grande flexibilité de l’ensemble prédiviseur/postdiviseur, permet d’obtenir très facilement des durées d’interruption précises sans complications logicielles

• Une écriture dans le registre TMR2 efface le contenu du prédiviseur et du postdiviseur. Pour rappel, ne pas confondre contenu (nombre d’événements comptés) et valeur (déterminée par les bits de configuration).

• la formule de la durée séparant 2 positionnements consécutifs du flag TMR2IF.

Durée totale = Tcyc* prédiviseur * postdiviseur * (PR2 +1-TMR2)

Page 34: Microcontrôleur PIC Microchip part2/2

5-Le module de conversion A/N :

• Notre PIC 16F877 travaille avec un convertisseur analogique / numérique qui permet un échantillonnage sur 10 bits. Le signal numérique peut donc prendre 1024 valeurs possibles

• Les pics considèrent par défaut que la valeur minimale correspond à leur Vss d’alimentation, tandis que la valeur maximale correspond à la tension positive d’alimentation Vdd. Nous verrons cependant qu’il est possible d’utiliser d’autres valeurs

Remarque :

-Il est recommandé que la résistance de votre source reste inférieure à 10KOhms

MIKROC permet la lecture d’une valeur analogique en utilisant la librairie ADC

Page 35: Microcontrôleur PIC Microchip part2/2

Les valeurs représentéesNe restent plus que les formules qui nous donnent les relations entre valeurs analogiques et représentations numériques.Nous pouvons dire que pour une numérisation sur 10 bits, on obtiendra la valeur numérique :

Val = [(VIN - VREF-) / (VREF+ - VREF-)] * 1023

VIN = ((Val/1023) * (VREF+ - VREF-)) + VREFavec :

VREF- : tension minimale analogique (référence négative)

VREF+ : tension maximale analogique (référence positive)

VIN : tension d’entrée à numériser

Val : valeur numérique obtenue sur 10 bits

Page 36: Microcontrôleur PIC Microchip part2/2

pins et canaux utilisés

• Reste à savoir comment connecter le signal (signaux) analogique(s) sur notre PIC.

La première chose à comprendre, c’est que le PIC ne contient qu’un seul convertisseur, mais plusieurs pins sur lesquelles connecter les signaux analogiques. Ces différentes entrées seront donc des canaux différents d’un seul et même convertisseur.

• Le 16F877 dispose de 8 canaux d’entrée analogique. Vous pourrez donc échantillonner jusque 8 signaux différents sur les pins AN0 à AN7(AN0:AN4 sont les pins RA0:RA3 et RA5 ,tandis que les pins AN5:AN7 sont RE0:RE2 )

• Notez également que les pins ANx sont des pins d’entrée. Il n’est donc pas question d’espérer leur faire sortir une tension analogique.

Page 37: Microcontrôleur PIC Microchip part2/2
Page 38: Microcontrôleur PIC Microchip part2/2

6- Les modules CCP (Capture/Compare/PWM) :

Le PIC 16F877 possède deux modules CCP qui fonctionnent de la même façon. Chaque module contient un registre sur 16-bits qui peut fonctionner en un des modes suivants :

o capture.

o comparaison

o PWM.

Au niveau ressources utilisées, nous pouvons simplement dire que les modules CCPx utilisés en mode compare et en mode capture font appel au timer 1, alors que le mode PWM nécessite l’utilisation du timer 2.

Page 39: Microcontrôleur PIC Microchip part2/2

6-1 Les registres utilisés : CCP1CON et CCP2CON

ces registres ont la même fonction, simplement CCP1CON concerne le module CCP1, tandis que CCP2CON concerne le module CCP2.

Page 40: Microcontrôleur PIC Microchip part2/2

6-2 Le mode capture :

• La première chose à remarquer est que ce mode fait intervenir une pin comme événement déclencheur. Il s’agit donc d’une entrée. Il est donc impératif de configurer la pin CCPx en entrée via le registre TRISC avant de pouvoir utiliser le module CCPx en mode « capture ». (x= 1 ou 2 )

• Le principe est le suivant :

- Au moment de l’apparition de l’événement déclencheur sur la pin concernée, la valeur (16 bits) du timer 1 contenue dans les registres TMR1H et TMR1L est copiée dans les registres CCPR1H et CCPR1L.

-Simultanément, le bit CCP1IF du registre PIR1 est validé, et une interruption intervient si elle est configurée.

• L’événement déclencheur est une variation du signal sur la pin CCP1/RC2 pour le module CCP1, et sur la pin CCP2/RC1 pour le module CCP2. L’événement qui provoque la capture dépend des bits CCPxM3 à CCPxM0 :

Page 41: Microcontrôleur PIC Microchip part2/2

le schéma-bloc correspondant.• Vous constatez, à propos des contraintes, que

vous avez bien un flag CCPxIF par module, une pin CCPx, un registre de configuration CCPxCON, et un registre 16 bits de sauvegarde de la valeur capturée. Par contre, vous n’avez qu’un seul timer, à savoir TMR1, utilisé pour les 2 modules.

• Remarquez que le prédiviseur ne s’applique que pour la détection des signaux à flancs montants.

Remarque pour l’utilisation :

-Le timer 1 doit impérativement être configuré en mode « timer » ou en mode « compteur synchrone ».

-Tout changement de configuration du mode « capture » peut provoquer un positionnement indésirable du bit CCPxIF. Avant tout changement, vous devez donc interdire les interruptions CCPx (en mettent le bit CCP1IE (PIE1<2>) à 0 / CCP2IE (PIE2<0>) à 0 ), et forcer CCPxIF à 0 avant de réautoriser les interruptions.

-La modification du prédiviseur en cours de fonctionnement peut positionner le bit CCPxIF de façon non souhaitée. Il est donc conseillé d’effacer d’abord CCPxCON avant de choisir le nouveau prédiviseur.

Page 42: Microcontrôleur PIC Microchip part2/2

6-3 Le mode compare :

Ce mode de fonctionnement est basé sur la correspondance de la valeur du TIMER1 (TMR1H/TMR1L) avec la valeur contenue dans CCPRxH/CCPRxL. L’égalité de ces valeurs entraîne une ou plusieurs actions en fonction du mode choisi.

Page 43: Microcontrôleur PIC Microchip part2/2

mode 1000 :Au moment de l'égalité, le drapeau CCPxIF et la broche CCPx passent à 1. C'est à l'utilisateur de les remettre à 0 pour une prochaine utilisation. RC2 doit être configuré en sortie.

mode 1001 :Au moment de l'égalité, le drapeau CCPxIF passe à 1 la broche CCPx passent à 0. C'est à l'utilisateur de les remettre à leur état d’origine pour une prochaine utilisation. RC2 doit être configuré en sortie.

mode 1010 :A l'égalité le drapeau CCPxIF passe à 1. la broche CCPx reste inchangée.

mode 1011 :A l'égalité, le drapeau CCP1xF passe à 1, La broche CCPx reste inchangée , le timer TMR1 est remis à 0 (et si CCP2 une conversion A/D est faite si ce module est activé).

Remarque pour l’utilisation :

-Le module CCPx en mode « compare » ne peut fonctionner que si le timer 1 fonctionne en mode « timer » ou en mode « compteur synchrone ». Le fonctionnement en mode « compteur asynchrone » ne permet pas le fonctionnement de ce module

-L’utilisation de la pin CCPx dans ce mode n’est possible qu’après avoir configuré la pin concernée en sortie .

Page 44: Microcontrôleur PIC Microchip part2/2

6-4 Le mode PWM:

• PWM signifie « Pulse Width Modulation », ce qu’on pourrait traduire par modulation de largeur d’impulsion .En somme, il s’agit d’un signal binaire de fréquence fixe dont le rapport cyclique peut être modulé par logiciel.

• Notez donc qu’il y a 2 paramètres qui définissent un signal « PWM » :

- la durée d’un cycle complet (ou, par déduction, sa fréquence de répétition)

- le rapport cyclique

Page 45: Microcontrôleur PIC Microchip part2/2

Utilisation du module PWM en Mikroc

Page 46: Microcontrôleur PIC Microchip part2/2

7- le Module MSSP (Master Synchronous Serial Port ) :

Le MSSP est une des deux modules de communication série du PIC. Il permet d'échanger des données en mode synchrone avec d'autres circuits qui peuvent être des microcontrôleurs, des mémoires EEPROM série, des convertisseurs A/N, des modules d'affichage . . . Il peut fonctionner selon deux modes : le mode SPI (Serial Peripheral Interface) et le mode I2C (Inter-Integrated Circuit).

7-1 Les liaisons série de type synchrone (informative/rappel ) :

Une liaison série est une liaison qui transfère les données bit après bit (en série), au contraire d’une liaison parallèle, qui transmet un mot à la fois.

il y a 2 façons d’envoyer les bits à la suite les uns des autres :- Soit vous commencez par le bit 7, et vous poursuivez jusqu’au bit 0. C’est la méthode utilisée par le

module MSSP.- Soit vous procédez de façon inverse, d’abord le bit 0 jusqu’au bit de poids le plus fort. C’est de cette

façon que fonctionnera notre module USART, que nous étudierons plus tard.

Page 47: Microcontrôleur PIC Microchip part2/2

Voici un exemple tout à fait général de réception d’un mot de 8 bits en mode série synchrone. C’est un exemple, les synchronisations et les niveaux varient d’un circuit à l’autre. Dans cet exemple, la lecture s’effectue sur le front descendant du signal d’horloge :

Vous constatez que : -La lecture s’effectue à un endroit stable du bit concerné (vers le milieu de sa durée) - Il y a 2 lignes rouges, car le bit peut prendre 2 valeurs (0 ou 1).- Le passage d’un niveau à l’autre n’est pas instantané, ce qui explique les lignes rouges obliques, et la zone de transition est le temps durant laquelle une lecture ne donnerait pas une valeur fiable

Page 48: Microcontrôleur PIC Microchip part2/2

Voici un second exemple, qui donne une lecture concrète de l’octet B’10011010’ :

Page 49: Microcontrôleur PIC Microchip part2/2

7- 2 le module MSSP en mode SPI :

Ce mode (Serial Peripheral Interface) permet de transmettre et recevoir simultanément des mots de 8bits. Il utilise les broches :-RC4/SDI : Serial Data Input (doit être configurée en entrée)-RC5/SDO : Serial Data Output (doit être configurée en sortie)-RC3/SCK : Serial Clock (doit être configurée en sortie)-RA4/SS : Slave Select : Utilisée optionnellement en mode slave soit comme entrée de synchronisation soit comme Chip Select en mode esclave multiples. Elle doit être configurée en E/S numérique à l’aide du registre ADCON1 et comme entrée à l’aide du registre TRISA

Deux modes de fonctionnement sont possibles :Mode master : C'est le PIC qui génère et gère l'horloge de synchronisation SCK. C'est donc lui qui décide le moment de démarrage d'une transmission réception.Mode slave : L'horloge est générée par le circuit (master) avec lequel on communique. Notre Pic démarre une émission/réception au moment ou il commence à recevoir l'horloge venant du maître.

Page 50: Microcontrôleur PIC Microchip part2/2

7- 2-1 les registres utilisés (SPI) (informative):

nous allons utiliser 2 registres de configuration et de status, à savoir « SSPSTAT », « SSPCON »

A ces registres s’ajoutent le SSPSR (Synchronous Serial Port Shift Register), qui contient la donnée en cours de transfert, et le registre SSPBUF (Synchronous Serial Port BUFfer) qui contient l’octet à envoyer, ou l’octet reçu, suivant l’instant de la communication

Page 51: Microcontrôleur PIC Microchip part2/2

7-2-2 Mécanisme de fonctionnement (informative): Le mécanisme général n’est pas très compliqué à comprendre. Voyons tout d’abord du côté de l’émetteur.

Le registre SSPSR , est tout simplement un registre qui effectue des décalages (Comme le premier bit à envoyer est le bit 7, le registre devra décaler vers la gauche ). Le mécanisme se poursuit jusqu’à ce que les 8 bits soient envoyés.

Côté récepteur, c’est évidemment le même genre de mécanisme. Le bit reçu sur la ligne SDI est entré par le côté droit du même registre SSPSR, donc par le bit 0. Ce registre subit alors un décalage vers la gauche qui fait passer ce bit en position b1. Le bit suivant sera alors reçu en position b0, et ainsi de suite. Le dernier bit reçu entraîne automatiquement la copie de la donnée contenue dans SSPSR vers le registre SSPBUF

Page 52: Microcontrôleur PIC Microchip part2/2

Donc, on résume la séquence de la façon suivante : (informative)

- On transfère la donnée à émettre dans SSPBUF

- Le PIC copie cette donnée dans SSPSR - On opère 8 décalages vers la gauche, chaque bit sortant est envoyé vers SDO, chaque bit entrant provient de SDI

- Le PIC copie la donnée vers SSPBUF, donc remplace la donnée à émettre par la donnée reçue.

- A ce moment, le bit BF est positionné, indiquant que SSPBUF contient une donnée à lire, et le flag SSPIF est positionné également pour indiquer la fin du cycle.

Donc, toute émission s’accompagne automatiquement d’une réception, et réciproquement, toute réception nécessite une émission.

Page 53: Microcontrôleur PIC Microchip part2/2

Utilisation du module SPI en Mikroc :

Page 54: Microcontrôleur PIC Microchip part2/2

7-2-3 Utilisation en mode master :

Il y a 4 méthodes possibles pour le début de l’émission en fonction de l’état de repos et l’instant de transmission (tableau ci-dessous ). Il y a par contre 2 façons de déterminer le moment de la lecture pour la réception : Soit au milieu du cycle, soit à la fin du cycle. Ceci nous donne 8 modes de fonctionnement possibles au total.

Etat de repos quel sens de transition de l’horloge accompagne le placement du bit sur

la ligne SDOHorloge (SCK)

0 0 SCK à 0 au repos, le placement de la donnée induit un flanc montant de SCK

0 1 SCK à 0 au repos, le placement de la donnée induit un flanc descendant de SCK

1 0 SCK à 1 au repos, le placement de la donnée induit un flanc descendant de SCK

1 1 SCK à 1 au repos, le placement de la donnée induit un flanc montant de SCK

Page 55: Microcontrôleur PIC Microchip part2/2

Donc, voyons le chronogramme d’émission :

Page 56: Microcontrôleur PIC Microchip part2/2

• Vous constatez que l’émission des bits sur SDO est synchronisée avec l’horloge SCK, qui peut prendre 4 évolutions différentes. Vous choisirez le mode suivant le fonctionnement de l’esclave connecté. Sur le datasheet de ce dernier, le constructeur vous indiquera quelle forme le signal d’horloge doit prendre au moment de la lecture du bit que votre PIC aura envoyé.

• Un cycle est la distance séparant 2 flèches rouges. Vous remarquerez que, quelle que soit la configuration, l’esclave devra toujours lire la donnée du maître au milieu du cycle.

• La lecture du bit que vous envoyez, sera impérativement synchronisée par votre horloge (comme toutes les actions en mode synchrone), et doit se faire dans la zone stable du bit.

Page 57: Microcontrôleur PIC Microchip part2/2

• Voyons maintenant la réception (mode maitre ) d’un octet placé par l’esclave sur la ligne SDI. Nous avons 2 modes possibles (lecture au milieu/fin de cycle). De nouveau, ce choix découle directement de la chronologie de votre composant esclave. Le moment où son fonctionnement provoque le placement de la donnée induit le moment où vous devrez procéder à sa lecture. Je vais de nouveau scinder les 2 cas. Imaginons tout d’abord que l’électronique de l’esclave soit conçue pour que le bit destiné au maître soit placé en début de cycle (donc en même temps que le maître place son propre bit sur SDO). Nous aurons :

Vous voyez dans ce cas que le choix de l’instant de lecture n’est pas possible. Vous devez lire le bit au milieu du cycle. Ceci vous impose de placer DATA_SAMPLE_MIDDLE

Page 58: Microcontrôleur PIC Microchip part2/2

Examinons maintenant le cas où l’esclave « choisit » de placer son bit au milieu du cycle (donc au moment où il procède à la lecture du bit reçu du maître)

Vous constatez cette fois que, puisque l’esclave place son bit au milieu du cycle, il vous faudra attendre la fin de celui-ci pour procéder à la capture du bit concerné . Ceci vous impose de placer DATA_SAMPLE_END

Page 59: Microcontrôleur PIC Microchip part2/2

• Remarquez que bien que vous travailliez en mode « maître », ce mot ne concerne que la génération de l’horloge. Pour la programmation, vous n’êtes en fait « maître » de rien du tout. Comme c’est vous qui disposez du composant programmable, c’est à vous de vous plier aux exigences du composant « esclave »connecté. C’est donc ce dernier qui va décider de votre façon de travailler, et non l’inverse.

• Quand vous travaillerez en mode esclave, vous serez de nouveaux soumis aux exigences du maître connecté. C’est donc toujours vous qui devrez vous soumettre aux exigences matérielles (excepté si vous développez à la fois le logiciel du maître et de l’esclave)

Conclusion :

- Le maître place toujours sa donnée en début de cycle

- On en déduit que l’esclave lira toujours la donnée en milieu de cycle

- L’esclave peut placer sa donnée, soit en début, soit en milieu de cycle

- Ceci implique que le maître lira la donnée reçue, soit en milieu, soit en fin de cycle

Page 60: Microcontrôleur PIC Microchip part2/2

Vitesse de transmission (mode master ) :

La vitesse maximale permise pour la liaison série synchrone est donc de Fosc/4, soit, pour un PIC cadencé à 20MHz, de 5MHz, 5.000.000 de bits par seconde, ou encore 5.000.000 bauds (5MBauds). Vous constatez qu’il s’agit d’une vitesse assez importante, qui nécessite des précautions de mise en œuvre (qualité et longueur des liaisons par exemple).

La vitesse minimale est celle utilisant le timer 2 avec prédiviseur à 16. Nous aurons, pour un quartz de 20MHz, une vitesse minimale de Fcy / (2 * prédiviseur * (PR2+1)), soit 5Mhz / (2 * 16 * 256) = 610,3 bauds.

Page 61: Microcontrôleur PIC Microchip part2/2

7-3-3 Utilisation en mode Slave:

•Comme vous l’aurez déjà compris depuis longtemps, ce mode (slave ou esclave) présente la particularité de subir l’horloge de synchronisation au lieu de l’imposer. Ceci va induire des contraintes différentes, contraintes paramétrées de nouveau par les mêmes registres que pour le mode « master ».

•Il y a 2 configurations possibles de votre PIC connectée en mode SPI esclave.

Le premier cas est donné si le PIC est le seul esclave du système. Nul besoin, alors, à priori, de le sélectionner en particulier.

on trouve aussi le cas pour lequel votre PIC n’est pas le seul esclave du système. Dans ce cas, il faut bien que votre PIC sache quand c’est à lui que le maître s’adresse . Ce cas vous impose d’utiliser la pin SS (Slave select ) Cette pin, lorsqu’elle est placée au niveau bas, indique au PIC que la communication en cours lui est destinée. Il prend alors en compte les fluctuations de l’horloge. Si le PIC a été configuré pour tenir compte de la pin SS, et que celle-ci se trouve à l’état haut, le PIC ignorera tout signal en cours sur la ligne d’horloge, et donc ne réceptionnera ni n’enverra aucun bit.

Page 62: Microcontrôleur PIC Microchip part2/2

Seul esclave Plusieurs esclaves

Remarque :Les esclaves ne peuvent pas communiquer entre eux

Page 63: Microcontrôleur PIC Microchip part2/2

Vitesses de transmission :

• Si vous décidez d’interfacer 2 PICs identiques ensemble, vous pouvez estimer que la vitesse maximale en mode master est égale à la fréquence maximale en mode slave.

• Si vous utilisez un autre composant externe comme maître, il faudra vous assurer que ses signaux présentent certaines caractéristiques compatibles avec le datasheet du PIC (par exemple, le temps de maintien de la ligne SDI après le moment de la lecture). Ceci vous permettra de calculer avec précision la vitesse maximale commune entre les 2 composants.

Page 64: Microcontrôleur PIC Microchip part2/2

7-3 MSSP en mode (bus) I²C (Inter Integrate Circuit) :

7-3-1 IntroductionAvant de parler du module MSSP en mode I2C du PIC, introduisons très brièvement Le

standard I2C.Le bus I²C permet d’établir une liaison série synchrone entre 2 ou plusieurs composants.

Il a été créé dans le but d’établir des échanges d’informations entre circuits intégrés se trouvant sur une même carte. Son nom, d’ailleurs, traduit son origine : Inter Integrate Circuit

L’ I²C permettait, à ses débuts, de travailler à des fréquences maximales de 100 Kbits/seconde, vitesses assez rapidement portées à 400 Kbits/seconde. Il existe maintenant des familles de circuits pouvant atteindre des vitesses de 3.4 Mbits/seconde.

Le bus I²C est constitué de 2 uniques lignes bidirectionnelles :

- La ligne SCL (Serial Clock Line), qui, comme son nom l’indique, véhicule l’horloge de synchronisation (gérée par le maître)

- La ligne SDA (Serial Data line), qui véhicule les bits transmis ; pilotée par celui qui envoie une information (maître ou esclave)

Page 65: Microcontrôleur PIC Microchip part2/2

Comme les lignes SDA et SCK sont utilisées dans les deux sens par les deux circuits quicommuniquent, on peut avoir un circuit qui place la ligne à 1 (Vcc) et l'autre qui la place à 0(masse) ce qui correspond à un court circuit qui peut détruire les deux composants. Pour éviter ce problème, les E/S SDA et SCK fonctionnent en mode collecteur ouvert (ou drain ouvert) de sorte qu'un circuit ne peut imposer que le niveau bas ou ouvrir la ligne, le niveau haut est obtenu par une résistance de tirage externe (pull-up). Ainsi une ligne est à 0 quand un des deux circuits impose le 0. Elle passe à 1 quand les deux circuits imposent le 1 (circuit ouvert).

Page 66: Microcontrôleur PIC Microchip part2/2

Un bus I2C peut être relié à plusieurs circuits, mais pendant une communication, un descircuits est le maître, c'est lui génère l'horloge et initie les séquences de transmission, l'autre estl'esclave, il subit l'horloge du maître sur la ligne SCK mais il peut tout de même recevoir et émettre des données sur la ligne SDA. Chaque esclave a une adresse, au début d'une séquence de communication, le maître qui initie la séquence envoie l'adresse du slave avec lequel il désirecommuniquer, celui-ci reconnaît son adresse et répond, les autres slaves (s'il y en a) restent muets

Page 67: Microcontrôleur PIC Microchip part2/2

7-3-1 Principe de fonctionnement du I2C :

1° Start condition

Au début d'une séquence d'échange, le master génère un start condition (S) avant de commencer l'échange de données. Au repos, les lignes SCL et SDA sont à l'état haut (relâchées). Pour générer un start, le master place d'abord la ligne SDA à 0, ensuite il place SCK à 0.

2° Transmission d'un bit

On place le bit à transmettre sur la ligne SDA ensuite on envoie une impulsion d'horloge sur la ligne SCK. C'est cette impulsion qui informe le slave qu'il doit lire la donnée sur SDA

Page 68: Microcontrôleur PIC Microchip part2/2

3° Stop conditionA la fin d'une séquence d'échange, le master génère un stop condition (P) après lequel le busest de nouveau libre. Pour cela, à partir de la situation SDA=0, SCK=0, le master commence par placer SCK à 1 et place ensuite SDA à 1.

Remarque sur le Start et le Stop condition

Une séquence de transmission peut contenir plusieurs Starts conditions avant de rencontrer un Stop Condition.

On parle de repeated Start condition. Un Stop condition est toujours synonyme de FIN de transmission.

L' acknowledge (accusé de réception):L' acknowledge est l'accusé de réception. Il est placé par le circuit qui reçoit sur la ligne SDA juste

après la réception du 8ème bit. C'est l'émetteur qui le lit de la même façon qu'on lit un bit ordinaire.

SDA=0 acknowledge positif (ACK) ; SDA=1 acknowledge négatif (NOACK)

Page 69: Microcontrôleur PIC Microchip part2/2

MIKROC permet de gérer La communication I2C en utilisant :

Page 70: Microcontrôleur PIC Microchip part2/2

8-Le module USART :

USART signifie « Universal Synchronous Asynchronous Receiver Transmitter ». C’estdonc un module qui permet d’envoyer et de recevoir des données en mode série, soit de façonsynchrone, soit asynchrone. Dans certaines littératures, vous retrouverez également le termegénérique de SCI pour « Serial Communications Interface »

En cours de construction . . .