Iptv
Iptv
7- APPLICATIONS……………………………………………………………………… 18-36
1
1-GENERALITES
Bus d’adresses
Bus de données
bus de contrôle
Le développement d’un tel système à base de microprocesseur se trouve donc pénalisé par
La nécessite de prévoir l’interconnexion de ces composants (bus, câblage, nappes
de connexion)
La place occupée physiquement par les composants
La consommation énergétique
Le cout financier
Par rapport à des systèmes électroniques à base de microprocesseurs, les microcontrôleurs
permettent de diminuer la taille en rassemblant ces éléments essentiels dans un seul circuit
intégré. Un microcontrôleur est donc un composant autonome, capable d’exécuter le programme
contenu dans sa mémoire morte dès qu’il est mis sous tension. Selon les modèles et les conditions
de fonctionnement, les microcontrôleurs peuvent avoir besoin de quelques composants externes
2
(quartz, quelques condensateurs). Ils sont fréquemment utilisés dans les systèmes embarqués,
comme les téléphones mobiles, les jouets, l’électroménager, les télécommandes, automobile,
baladeurs, transport aérien/ maritime/ fluvial, récepteurs GPS, etc.
Le microcontrôleur que nous allons étudier est celui de la sociteté Americaine « Microchip »
,car par rapport aux autres fabricants , les microcontrôleurs de Microchip ont un jeu
d’instructions est réduit et l’outil de développement(logiciels) est gratuit .Le prix des composants
et des programmateurs sont aussi à la portée de toutes les bourses . Ces circuits connaissent
actuellement un succès que l’on peut, sans exagérer qualifier de planétaire et sont largement
utilisés dans l’industrie.
Ils sont connus sur la dénomination PIC (Peripheral Interface Controller) qui est sous copyring
de Microchip.
Une PIC n’est rien d’autre qu’un MICROCONTROLEUR, c’est à dire une unité de
traitement de l’information de type microprocesseur à laquelle on a ajouté des périphériques
internes permettant de réaliser des montages sans nécessiter l’ajout de composants externes.
La dénomination PIC est sous copyright de MICROCHIP, donc les autres fabricants sont
dans l’impossibilité d’utiliser ce terme pour leur propre microcontrôleur.
Les PICs sont des composants dits RISC (Reduce Instructions Construction Set), ou
encore composant à jeu d’instructions réduit. Pourquoi ? Et bien, sachez que plus on réduit le
nombre d’instructions, plus facile et plus rapide en est le décodage, et plus vite le composant
fonctionne.
Toutes les PICs Mid-Range ont un jeu de 35 instructions, stockent chaque instruction
dans un seul mot de programme, et exécutent chaque instruction (sauf les sauts) en 1 cycle. On
atteint donc des très grandes vitesses, et les instructions sont de plus très rapidement assimilées.
L’horloge fournie à la PIC est prédivisée par 4 au niveau de celle-ci. C’est cette base de
temps qui donne le temps d’un cycle.
L’horloge des pics peuvent monter à 20MHz. C’est donc une vitesse de traitement plus
qu’honorable.
3
1-3 Les différentes familles des PICS
Puis vous constatez que les derniers chiffres identifient précisément le PIC.
Enfin vous verrez sur les boitiers le suffixe « -XX » dans lequel XX représente la fréquence
d’horloge maximale d’utilisation du PIC.
EXEMPLE :
PIC 16 F 84 - 04
Fréquence maximale de fonctionnement = 4MHz
4
2-PRESENTATION GENERALE DU PIC16F84A
RA2 1 18 RA1
RA3 2 17 RA0
RA4/TOCLK 3 16 OSC1/CLKIN
I
MCLR 4 15 OSC2/CLKOUT
RB0/INT 6 13 RB7
RB1 7 12 RB6
RB2 8 11 RB5
RB3 9 10 RB4
Figure 2
Le PIC16F84A est composé de :
Un port A de 5 bits de RA0 ~ RA4
Un port B de 8 bits RB0 ~ RB7
Chacun des bits de ces ports peut être configuré comme une entrée ou une sortie. Certaines de
ces broches ont aussi d’autres fonctions (interruption, Timer)
Deux entrées oscillateur sur lesquelles se branche l’horloge (QUARTZ ; RC etc…)
_____
Une entrée de MCLR pour la remise à zéro.
Vss et VDD pour la masse et l’alimentation
5
2-2) Architecture interne simplifiée
Figure 3
6
Le PIC16F84A utilise l’architecture Harvard comme la plupart des PICS.
Elle consiste en la séparation du bus d’instructions du bus de données, ce qui permet aux
instructions d’être exécutées en un seul cycle, sauf les sauts qui en utilisent deux. Lorsqu’on
utilise une architecture Harvard les mots de programme peuvent avoir une largeur (nombre de
bits) différente de celle des mots de la mémoire de données et des registres. Par exemple
pour le PIC16F84A :
- bus d’instructions : 14 bits
- bus de données : 8 bits
L’architecture classique traditionnelle est celle de von Neumann ou on utilise le même bus pour
les instructions et les données.
1FFFH
Figure 4
7
3-2) La mémoire EEPROM
La mémoire EEPROM (Electrical Erasable Programmable Read Only Memory), est constituée
de 64 octets que vous pouvez lire et écrire depuis votre programme. Ces octets sont conservés
après une coupure de courant et sont très utiles pour conserver des paramètres semi permanents.
8
MEMOIRE DE DONNEES
RAM
REGISTRES
SPECIAUX
REGISTRES A
USAGE GENERAL
Page 0 Page 1
Figure 5
___ __
RP0 TO PD Z DC C
9
Si RP0 = 0 on accède à la page 0(Bank0) et si RP0 = 1 On accède à la page 1(Bank1)
__
TO ( Timer Out) : Ce bit passe à « 0 » lorsque le timer chien de garde (WDT)
atteint la fin de comptage .
__
PD ( Power Down ) : Ce bit passe à « 0 » lorsque le microcontrôleur rencontre
l’instruction particulière « Sleep »(mise en sommeil) qui détermine le mode de
mise en veille du PIC en bloquant les impulsions d’horloge nécessaires au
cadencement de tous les échanges. Le PIC attend un événement pour repartir
Z ( Zéro) : Ce bit passe à « 1 » lorsque le résultat d’une opération
arithmétique et logique est nul.
DC ( Digit Carry) : retenue sur un quartet ( 4 bits)
C ( Carry) : retenue sur un octet ( 8 bits).
Adresse 05 , PORTA . Ce registre contient l’état des lignes du PORTA ( voir chapitre sur
les ports).
Adresse 06 , PORTB . Ce registre contient l’état des lignes du PORTB ( voir chapitre sur
les ports).
10
3-5) Le Watch dog
a) rôles du Watch dog
Le Watchdog est destiné à vérifier qu’un programme ne s’est pas égaré dans une zone non valide
du programme, ou s’il n’est pas bloqué dans une boucle sans fin (bug du programme). Il sert
également à réveiller un PIC placé en mode SLEEP.
11
4- ETUDE DU JEU D’INSTRUCTION EN ASSEMBLEUR
Le PIC 16F84A appartient à la famille des circuits RISC (Reduced instruction Set Computer ou
Composant à jeu d’instructions réduits)
12
Déclaration des valeurs littérales en assembleur
Binaire b’01011000’
Décimal .23 ou d’23’
Hexadécimal 0xF2 ou h’F2’
Exemple
Start
goto plusloin ; le programme saute à l’instruction qui suit l’étiquette plusloin
xxxxxxx ;
xxxxxxxx
plusloin
xxxxxxxx ; instruction exécutée après le saut : le programme se poursuit ici
Remarquez que vous pouvez sauter en avant ou en arrière.
Syntaxe
incf f,d
Comme pour toutes les instructions que nous verrons, f représente File, c’est à dire
l’emplacement mémoire concerné pour cette opération.
d représente la Destination. Sauf spécification contraire, d vaut toujours, au choix
- f (la lettre f) ou 1 : dans ce cas le résultat est stocké dans l’emplacement mémoire.
- W (la lettre w) ou 0: dans ce cas, le résultat est laissé dans le registre de travail, et le
contenu de l’emplacement mémoire n’est pas modifié.
La formule est donc (f) + 1 -> (d) : Les parenthèses signifient « le contenu de »
Exemples
13
L’instruction « DECF » (DECRement File)
Syntaxe
Exemples
Cette instruction charge la valeur spécifiée (valeur littérale, ou encore valeur immédiate), dans le
registre de travail W.
Syntaxe
Exemple
Syntaxe
Exemple 1
ATTENTION
Il est impératif ici de bien faire la distinction entre movlw k et movf f,w.
Dans le premier cas, c’est la VALEUR qui est chargée dans w, dans le second c’est le
CONTENU de l’emplacement spécifié (f) qui est chargé dans w.
14
Exemple 2
movf mavariable , f
Que fait cette instruction ? Si vous avez tout suivi, elle place le CONTENU de mavariable dans
mavariable. Dire que cela ne sert à rien est tentant mais prématuré.
Syntaxe
Exemple
Cette opération permet d’ajouter une valeur littérale au contenu du registre de travail W.
Syntaxe
Exemple
Exemple
movlw .12 ; charger 12 dans W
movwf mavariable ; mavariable vaut maintenant 12
movlw .25 ; charger 25 dans W
addwf mavariable,f ; résultat : (W) + (mavariable), donc 25+12; résultat = 37 sauvé
; dans mavariable (f).
15
L’instruction « SUBLW » (SUBtract W from Literal)
Syntaxe
Exemple 1
Nous restons dans les soustractions, mais, cette fois, on soustrait le CONTENU W du
CONTENU de f et le résultat est conservé dans d.
Syntaxe
Exemple
Cette instruction effectue une opération « AND » bit à bit entre le contenu de W et la valeur
littérale qui suit.
Syntaxe
16
Exemple
b7 b6 b5 b4 b3 b2 b1 b0
1 1 0 0 1 1 0 1
And 1 1 1 1 0 0 0 0
= 1 1 0 0 0 0 0 0
Exemple
Cette instruction effectue une opération <<OU>>, c’est à dire que le bit de résultat vaudra 1 si un
des bits ou les deux bits opérandes =1.
Syntaxe
Exemple
b7 b6 b5 b4 b3 b2 b1 b0
1 1 0 0 0 0 1 1
OR 0 0 0 0 1 1 1 1
= 1 1 0 0 1 1 1 1
Donc, avec un ou inclusif (OR), on peut FORCER n’importe quel bit à 1 (pour rappel, avec
AND, on peut forcer n’importe quel bit à 0).
17
L’instruction « IORWF » (Inclusive OR W with File)
Exemple
b7 b6 b5 b4 b3 b2 b1 b0
1 1 0 0 0 1 0 1
xor 0 0 0 0 1 1 1 1
= 1 1 0 0 1 0 1 0
C’est une instruction qui permet tout simplement de forcer directement un bit d’un emplacement
mémoire à 1.
Syntaxe
18
L’instruction « BCF » (Bit Clear F)
C’est une instruction qui permet tout simplement de forcer directement un bit d’un emplacement
mémoire à 0.
Syntaxe
Les opérations de décalage sont des opérations très souvent utilisées. Les PICs ont la particularité
de ne posséder que des opérations de ROTATION. Vous allez voir qu’avec ces opérations, on
peut très facilement réaliser des décalages.
L’opération de rotation effectue l’opération suivante : Le bit de carry C est mémorisé. Ensuite
chaque bit de l’octet est déplacé vers la gauche. L’ancien bit 7 sort de l’octet par la gauche, et
devient le nouveau carry. Le nouveau bit 0 devient l’ancien carry. Il s’agit donc d’une rotation
sur 9 bits.
Syntaxe
Exemple1
Un petit exemple vaut mieux qu’un long discours.
C b7 b6 b5 b4 b3 b2 b1 b0
f 1 0 0 0 1 0 1 1 1
rlf 0 0 0 1 0 1 1 1 1
Vous voyez que tous les bits ont été décalés vers la gauche. « C » a été réintroduit dans b0.
Le résultat reste sur 9 bits.
19
Exemple 2
Si vous avez compris, le résultat sera B’00101110’, avec le carry à 0. Si le carry est à 0 au
départ, on effectue un simple décalage vers la gauche.
Prenons B’00010111 ‘, soit 23 en décimal. Décalons-le, nous obtenons B’00101110’, soit
46. Nous avons donc effectué UNE MULTIPLICATION PAR 2. Retenez ceci, cela vous sera très
utile par la suite.
L’opération de rotation vers la droite effectue l’opération suivante : Le bit de carry « C » est
mémorisé. Ensuite chaque bit de l’octet est déplacé vers la droite. L’ancien bit 0 sort de l’octet
par la droite, et devient le nouveau carry. L’ancien Carry devient le nouveau bit7. Il s’agit donc
également d’une rotation sur 9 bits.
Syntaxe
Exemple1
b7 b6 b5 B4 b3 b2 b1 b0 C
f 0 0 0 1 0 1 1 1 1
rrf 1 0 0 0 1 0 1 1 1
Vous voyez que tous les bits ont été décalés vers la droite. C a été réintroduit dans b7. Le
résultat reste sur 9 bits.
Exemple 2
Traduit littéralement, cela donne : Teste le bit de l’emplacement mémoire et saute s’il vaut 0.
Il s’agit ici d’un SAUT CONDITIONNEL.
En effet, il n’y aura saut que si la condition est remplie. ON NE SAUTE QUE
l’INSTRUCTION SUIVANTE. La syntaxe ne contient pas d’adresse de saut, comme nous allons
le voir :
Syntaxe
Exemple1
Voici un exemple dans lequel on doit exécuter une seule instruction supplémentaire si le
bit vaut 1.
Exemple 2
Que faire si les traitements diffèrent de plus d’une instruction ? Et bien, on combine les
sauts conditionnels avec les saut inconditionnels (par exemple goto).
Traduit littéralement, cela donne : Teste le bit de l’emplacement mémoire et saute s’il vaut 1.
Toutes les remarques de l’instruction « BTFSC » restent valables.
Syntaxe
21
btfss f, b ; on teste le bit b de la mémoire (f).
; si ce bit vaut 1, on saute l’instruction suivante, sinon
; on exécute l’instruction suivante.
xxxx ; si le bit vaut 1, ne sera pas exécutée (skip)
xxxx ; Le programme continue ici
Exemple
Nous poursuivons les sauts conditionnels avec une instruction très utilisée pour créer des boucles.
Cette instruction décrémente un emplacement mémoire et saute l’instruction suivante si le
résultat de la décrémentation donne une valeur nulle.
Syntaxe
Exemple1
movlw 3 ; charger 3 dans w
movwf compteur ; initialiser compteur
movlw 0x5 ; charger 5 dans w
boucle ; étiquette
addwf mavariable , f ; ajouter 5 à ma variable
decfsz compteur , f ; décrémenter compteur et tester sa valeur
goto boucle ; si compteur pas 0, on boucle
movf mavariable , w ; on charge la valeur obtenue dans w
L’instruction « INCFSZ » (INCrement F, Skip if Zero)
Cette instruction est strictement identique à la précédente, hormis le fait qu’on incrémente la
variable au lieu de la décrémenter.
Syntaxe
Nous pouvons traduire cette instruction par « inverser les quartets dans F ». Cette opération
inverse simplement le quartet (demi-octet) de poids faible avec celui de poids fort.
Syntaxe
swapf f,d ; inversion des b0/b3 de (f) avec b4/b7 -> (d)
22
Exemple
Syntaxe
Retour de sous-routine. Va toujours de pair avec une instruction call. Cette instruction indique la
fin de la portion de programme considérée comme sous-routine (SR). Rappelez-vous que pour
chaque instruction call rencontrée, votre programme devra rencontrer une instruction return.
Syntaxe
Retour de sous-routine avec valeur littérale dans W. C’est une instruction très simple : elle
équivaut à l’instruction return, mais permet de sortir d’une sous-routine avec une valeur
spécifiée dans W.
Syntaxe
23
L’instruction « RETFIE » (RETurn From IntErrupt)
Cette instruction indique un retour d’interruption (nous verrons ultérieurement ce que sont les
interruptions). Cette instruction agit d’une manière identique à RETURN, excepté que les
interruptions sont remises automatiquement en service au moment du retour au programme
principal.
Syntaxe
clrf f ; (f) = 0
Exemple
clrw ; (w) = 0
C’est une instruction qui n’est pas vraiment indispensable, car on pourrait utiliser l’instruction
« movlw 0 ».
Cette instruction remet à 0 le chien de garde de votre programme. Sachez cependant que c’est
un mécanisme très pratique qui permet de provoquer un reset automatique de votre PIC en cas
de plantage du programme.
Le mécanisme est simple à comprendre : il s’agit pour votre programme d’envoyer cette
instruction à intervalles réguliers. Si la commande n’est pas reçue dans le délai imparti, le PIC est
redémarré au début. C’est exactement le mécanisme utilisé par les conducteurs de train qui
doivent presser un bouton à intervalle régulier. Si le bouton n’est pas pressé, le train s’arrête. On
détecte ainsi si le conducteur est toujours correctement en train de travailler.
Syntaxe
24
L’instruction « COMF » (COMplement F)
Effectue le complément à 1 de l’emplacement mémoire spécifié. Donc, inverse tous les bits de
l’octet désigné
Syntaxe
Exemple
je vous présente l’instruction qui ne fait rien, qui ne positionne rien, et qui ne modifie rien. On
pourrait croire qu’elle ne sert à rien. En fait elle est surtout utilisée pour perdre du temps,
Syntaxe
25
5-2 La directive EQU
La directive EQU permet de faire des assignations.
Les assignations se comportent comme une simple substitution. Au moment de
l’assemblage, chaque fois que l’assembleur trouve une assignation, il la remplace
automatiquement par sa valeur.
Un autre avantage est que si on remplace la valeur d’une assignation, le changement sera
effectif pour tout le programme.
La directive CBLOCK
Toute zone de variables définie par l’utilisateur commence avec la directive CBLOCK
suivie de l’adresse du début de la zone, pour placer les variables qui sont des
emplacements mémoires RAM auxquels on a donné un nom.
Dans la cartographie mémoire, on voit que la zone RAM librement utilisable commence à
l’adresse 0x0C.
La zone de variable commence avec la directive CBLOCK 0x0C, ensuite on peut utiliser
68 emplacements mémoires qui répondront à la syntaxe suivante :
Nom de la variable suivie du signe « : » suivie de la taille utilisée. Cette directive doit se
terminer avec la directive ENDC
Cette directive précise l’endroit où doit cesser l’assemblage de votre programme. Elle est
obligatoire dans tout programme, sous peine d’une erreur qui vous signalera que la fin de
fichier (End Of File : EOF) a été atteinte avant de rencontrer la directive END.
Toutes les instructions situées après la directive END seront tout simplement ignorées.
26
5-6 La directive CONFIG
Elle contient << les fusibles >> qui fixent le fonctionnement du PIC. C’est une directive
de configuration.
27
Exemple : __CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC
Ou
1 1 1 1 1 1 1 1 1 1 0 0 0 1
__ CONFIG_ H’3FF1’
5-7 LIST
6 -MISE EN ŒUVRE
L’utilisation et la mise en œuvre très simple des PICs les a rendus extrêmement populaire au
point que la société qui les fabrique (MICROCHIP) est en passe de devenir le leader mondial
dans le domaine des microcontrôleurs devant MOTOROLA et INTEL.Il suffit :
- D’écrire le programme en langage de programmation de son choix sur un ordinateur soit avec le
logiciel MPLAB de MICROCHIP ou mickroC par exemple et le transféré dans le PIC grâce à un
logiciel tel que le WinPIC800 et un programmateur .
PIC16F84A 16 c1
QUARTZ avec C1=C2=22pF
15 C2
Figure8
28
C R
+VDD +VDD
FIGURE 10
Figure 9
OSCILLATEUR à circuit RC
Les valeurs recommandées par Microchip pour la résistance et le condensateur externes
sont :5kΩ ≤ Rext ≤ 100kΩ / Cext ≥ 20pF
29
30
: : soit le circuit ci-dessous comprenant le microcontrôleur PIC
Application 1
16F84A.
1- Fonctionnement : si RA0=1( K ouvert) allumer leds RB3 et RB2 et éteindre RB1et RB0
Si RA0= 0( K fermé) éteindre leds RB3et RB2 et allumer RB1et RB0
2- Organigramme :
début
Initialisation
Configuration des ports
non oui
RA0=
1
31
: Soit le Schéma ci-dessous
APPLICATION 2
Ecrire un programme en assembleur qui permet de faire clignoter la LED raccordée sur RA1 à
une période de 1s à la mise sous tension du dispositif.
1- Organigramme :
DEBUT
Initialisation
( Configuration du portA)
Temporisation 500ms
Temporisation 500ms
32
APPLICATION 3 : Soit le schéma ci-dessous
Ecrire un programme qui permet de faire clignoter la LED à chaque fois qu’on presse sur le
bouton poussoir raccordé sur RA3. On précise que à la mise sous tension, la LED est allumée.
Une fois qu’on presse sur le bouton poussoir, la led clignote à la période de 500ms aussi
longtemps que la pression reste maintenue.
1- Organigramme
33
APPLICATION 3 : Soit le schéma ci-dessous
Ecrire un programme qui permet d’allumer les led les unes à la suite des autres . On réalise
ainsi la fonction chenillard ( jeu de lumière). On pourra ainsi créer des animations différentes.
1- Schéma de câblage :
34
Ecrire un programme pour compter de 0 à 9 rythmé à 1s
Fonctionnement : clignotement alterné par lot de 4 leds sur le PORTB( RB0 à RB3 allumées
et RB4 à RB7 éteintes et vis-versa) avec une temporisation de 5mn. Ecrire le programme
décrivant ce fonctionnement.
35
APPLICATION 6 Soit le montage ci-dessous
Ecrire un programme qui permet de faire clignoter la led raccordée sur RB7 à une période
de 500ms en utilisant la routine d’interruption sur le débordement du Timer 0 (TMR0).
36
37