Vous êtes sur la page 1sur 12

COMPRENDRE LES MICROCONTRÔLEURS

#Semaine 2

1-Architecture des MCU

décodeurs , registres , compteurs....

pour comprendre : Calculatrice simplifié - Suite de fibonacci


A=registre
B=registre
C=A+B = registre
ALU= qui s’occupe des calculs.
Bus = permet de faire des échange entre les différents éléments du MCU
la taille des Bus diffère dans chaque MCU.

programme en assembleur :

chaque ligne de la mémoire correspond à un ​mot binaire​ écrit plus simplement à


droite

dans la suite nous allons programmer en langage C avec les microcontrôleurs


2-Qu’est ce qu’un MCU :

Architecture d’un système informatique ( exemple carte mère d’un PC):

H=horloge qui permet de cadencer le fonctionnement du processeur


ROM=mémoire de programme que l’on appelle le BIOS.
RAM=mémoire vive (volatile) pour les variables
I/O = entrée/sortie : pour communiquer avec le monde extérieur
et des BUS de communications ( d’adresse et de données)

POINT DE VU MICROCONTRÔLEUR :
DÉFINITION DU MCU :

montage électronique :

le condensateur 100nf sert de ​de découplage est un condensateur destiné à réduire le


couplage entre signal et alimentation : on l’appelle condensateur by-pass​.

47 k résistance de pull-up pour le bouton reset , pour éviter de laisser l’entrée à l’air sans
connaître son état (pull-up sortir à 1 ; pull-down sortie à 0)

P1.0 du MSP40 est utilisé comme sortie , sur laquelle on a branché une LED en série avec
une résistance pour limiter le passage du courant.
PROGRAMMATION C/ARDUINO

L’arduino c’est pour les amateurs car on cache la complexité du processeur


on le verra par la suite.

“PROGRAMME EN ARDUINO de la LED ”

ÉCRIT DE MANIÈRE À MIEUX COMPRENDRE LE CODE


On peut lire l’état d’une sortie et faire des tests
on écrit sur la led l’inverse de son état (ex: bascule D avec l’horloge ck=digitalWrite() )

quelques exemples de programme :


ctime=compteur ;

LA PWM:

faire des impulsion de longueur variable exemple pour changer la vitesse d’un moteur.

exemple réduire l’intensité d’une Led

Attention !!
delay(0) décompté à partir de la valeurs max qui est 65s
donc il faut exclure 0 et 20.
on fera donc si c’est zéro alors j’active la led ledON
si c’est 20 la même chose.
explication du code de droit :

on définit un nombre de répétition qui va compter le nombre de répétition


et empêcher de dépasser la valeur max de répétition possible = 10 (durée totale=0.2s)

led1ON ;delay(dureeOn); // l'intensité de la led est de 1/20 ms

COMPTEUR BCD 16 bits

on veut ajouter 1 donc soit 9+1=10 en binaire ca 1010 qui est 10 qui dépasse
9 on fait alors +6 pour revenir à zer0 et incrémente l’état suivant.

il faut donc que dans le dernier mot binaire tous les bites passe à zero

et reporte le 1 sur le mot suivant ( on remarque que 6---> 0110 +1010=0000)

donc il faut ajouter 6 BCD déjà incrémenter de 1

rappel:

bcd &&0x000F​= valeur du dernier mot binaire sur (4bit) dans le decodeur bcd (en exa)
0x9 valeur 9 en exa
bcd &&0x00F0​= valeur de l’avant dernier mot dans le decodeurs ( chaque mot est sur 4bits)

if(bcd &&0x000F>0x9); {bcd +=0x6}​ :

si la valeur du dernier mot est supérieur à 9 on ajoute 6 au dernier mot

if(bcd &&0x00F0>0x90) ; ​{bcd +=0x6}​ ​ si la valeur de l’avant dernier mot est plus grand que
9 on ajoute 6 à l’avant dernier mot.
ainsi de suite
jusqu'à ce qu’on obtient 400.

si on on veut contrôler le débordement il faut ajouter des conditions.

DECOMPTEUR BCD 16 bits


on doit soustraire 1.
​CONVERSION DE FOND D'ÉCHELLE : (voir aussi dans convertisseur ADC)

cas linéaire avec les maximum à pic : simple


dans la première figure on fait correspondre 1023 à 255 et 0 à 0, si on veut trouver
y en fonction de x avec la simple y=1/4x; avec ¼ coef directeur de la droite. et 4 est une
puissance de 2 on decale alors de 2 bits vers la droite​ y=x>>2;​ ( car 4=2^​2​)

cas linéaire avec maximum de 200 : un peut compliqué

si on veut que y=200 corresponde à 1230 , on peut se tenter de faire


y=200/1023*x sauf que là on va trouver zero il ya probleme car le MCU travail avec
les nombres entiers.

si max=200
on écrit alors​ y=(x*200)/1024
on remarque que 1024=2^​10
on a ​y=(X*200)>>10;
y = (x*(128+64+8))>>10;
y=(X<<7+X<<8 +X<< 3)>>10; car ​(2^​7 ​+2^​6+​2^​3​)

on peut aussi compenser les décalages d’un sens à l’autre


THERMOMETRE MEDICAL:

droite affine passant par 2 points

Vous aimerez peut-être aussi