0% ont trouvé ce document utile (0 vote)
38 vues5 pages

Correction Microcontrôleurs UATM Gasa

Transféré par

yawolosenan
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
38 vues5 pages

Correction Microcontrôleurs UATM Gasa

Transféré par

yawolosenan
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

UNIVERSITE AFRICAINE DE TECHNOLIGIE ET DE

MANAGEMENT (UATM) GASA-FORMATION


CORRIGE DE MICROCONTROLEURS

Filière : Génie Electrique SPECIALITE : SI


Année : Master 1 Date : 08/03/2024

Questions de Cours

1. Nature et fonction des registres suivants


Registre Nature Fonction
DDR Data Direction Register Définir le sens de chaque broche du port, soit en entrée
(Registre Physique) (0) soit en sortie (1)
PORT Data Register Port Permet de lire ou d’écrire la valeur logique de chaque
(Registre physique) broche du port, soit 0 (niveau bas) soit 1 (niveau bas)

PIN Reading the Pin value Permet de lire le contenu d’un port quelque soit sa
(Registre virtuel) configuration en entrée ou en sortie

2. Ecriture en langage binaire et hexadécimal des sorties mises à 1 d’un microcontrôleur


Pour mettre à 1 les sorties d'un microcontrôleur sur les pattes 7, 4, 3 et 2 de la catégorie B,
il faut écrire les valeurs suivantes en langage binaire et hexadécimal :
 Binaire : 0b10011000
 Hexadécimal : 0x98
3. Citons les pattes utilisées pour effacer et envoyer le code dans la mémoire
Les pattes utilisées pour effacer et envoyer le code dans la mémoire FLASH ou EEPROM
d’un microcontrôleur AVR-ATmel sont les suivantes :
 RESET
 SCK
 MOSI
 MISO
4. Fonction de ces pattes
Les pattes utilisées pour effacer et envoyer le code dans la mémoire FLASH ou EEPROM
d’un microcontrôleur AVR-ATmel sont les suivantes :

 RESET : c’est une patte qui permet de réinitialiser le microcontrôleur en appliquant un


niveau bas. Elle permet aussi de lancer le mode de programmation en série (SPI) en
combinaison avec les autres pattes.

Page 1 | 5
 SCK (Serial Clock) : c’est une patte qui fournit le signal d’horloge pour la
communication SPI entre le microcontrôleur et le programmateur.
 MOSI (Master Out Slave) : c’est une patte qui reçoit les données en série du
programmateur vers le microcontrôleur.
 MISO (Master In Slave Out) : c’est une patte qui envoie les données en série du
microcontrôleur vers le programmateur.
La fonction de ces pattes est de permettre la programmation en série du microcontrôleur,
c’est-à-dire de transférer le code compilé depuis le programmateur vers la mémoire FLASH
ou EEPROM du microcontrôleur. Ce mode de programmation nécessite un protocole de
communication SPI (Serial Peripheral Interface) qui utilise les signaux SCK, MOSI et MISO
pour synchroniser et échanger les données. Le signal RESET permet de sélectionner le mode
de programmation en série en le mettant à l’état bas pendant la communication SPI.
5. Ecriture en langage C/C++ des sorties mises à 1 d’un microcontrôleur
#include <avr/io.h> // Bibliothèque pour accéder aux registres I/O

int main(void)
{
// Configurer les pattes comme sorties
DDRC |= (1 << DDC5)|(1 << DDC1);
// Mettre les sorties à 1
PORTC |= (1 << PC5)|(1 << PC1);

while (1)
{
// Boucle infinie
}

Problème

1. Association des Entrées¿Sorties de l’organe de traitement des données aux capteurs et


actionneurs

Page 2 | 5
Entrées
Capteurs Broches du microcontrôleur
C1 PB0
C2 PB1
C3 PB2
C4 PB3
DCY PB4
Sorties
Actionneurs Broches du microcontrôleur
RO PC1
DE PC2
MO PC3

2. Schéma de montage de tout le système informatique

U1
+12 RO

RESET

220V
RL1
U2 D1 12V
ATMEL
40 1
16.000

PA0/ADC0 PB0/T0/XCK
39 2
AREF PA1/ADC1 PB1/T1
38 3
GND PA2/ADC2 PB2/AIN0/INT2
13 37 4
DIGITAL

13 PA3/ADC3 PB3/AIN1/OC0
IOREF
12
12 36
PA4/ADC4 PB4/SS
5
R1 Q1
11 35 6
ARDUINO

RESET
~11 PA5/ADC5 PB5/MOSI BC547
3.3V 10 34 7

3.
~10 PA6/ADC6 PB6/MISO 10k
5V 9 33 8
(PWM~)

~9 PA7/ADC7 PB7/SCK
8
GND

POWER

8
ATMEL
ATMEGA328P

22 14
7 PC0/SCL PD0/RXD
UNO

E
Vin 7
6 23 15
~6
PC1/SDA PD1/TXD
A0 5 24 16
A0 PC2 PD2/INT0
ANALOG IN

A1 ~5 25 17
A1 4 PC3 PD3/INT1
A2 4
3 26 18
A2
~3
PC4 PD4/OC1B
A3 27 19
A4
A3
2
2
28
PC5 PD5/OC1A
20
+12V DE
A4 1 PC6/TOSC1 PD6/ICP1
A5 TX > 1 29 21
ON

A5 0 PC7/TOSC2 PD7/OC2
RX < 0
ICSP

[Link]
13
ARDUINO UNO XTAL1
32 12
AREF XTAL2
30 9 220V
AVCC RESET
+12
ATMEGA8535 RL2
D2 12V

R2
Q2
10k BC547
R3 R4 R5 R8
10k 10k 10k R7 10k
10k

+12V MO

C1 C2 C3 DCY
C4 220V

RL3
D5 12V

R6 Q3
BC547
10k

criture du programme de gestion du système informatique en C/C++


#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>

#define Sorties PORTC


#define RO (1<<PC1)
#define DE (1<<PC2)
#define MO (1<<PC3)

#define Entrees PORTB


#define C1 (1<<PB0)
#define C2 (1<<PB1)

Page 3 | 5
#define C3 (1<<PB2)
#define C4 (1<<PB3)
#define DCY (1<<PB4)

#define FinEtapes 4
#define FinTransistion 4
char a,b,c,d,e;
char Etapes [FinEtapes];
char Transition [FinTransistion];

void LectureEntres(){
a=!(Entrees && C1);
b=!(Entrees && C2);
c=!(Entrees && C3);
d=!(Entrees && C4);
e=!(Entrees && DCY);
}

void GestionTransistions (){


Transition[1]=(Etapes[1] && a && d && e);
Transition[2]=(Etapes[2] && c);
Transition[3]=(Etapes[3] && b);
Transition[4]=(Etapes[4] && a);
}

void GestionsDesactivationEtapes(){
if(Transition[1]) Etapes[1]=0;
if(Transition[2]) Etapes[2]=0;
if(Transition[3]) Etapes[3]=0;
if(Transition[4]) Etapes[4]=0;
}

void GestionsActivationEtapes(){
if(Transition[1]) Etapes[2]=0;
if(Transition[2]) {Etapes[3]=1;}
if(Transition[3]) {Etapes[4]=1;}
if(Transition[4]) {Etapes[1]=1;}
}
void GestionsActivationSorties(){
if(Etapes[1]) Sorties=0;
if(Etapes[2]) Sorties=RO;
if(Etapes[3]) Sorties=DE;
if(Etapes[4]) Sorties=MO;
}

int main()
{
/* Replace with your application code */
DDRD =0xFF;
PORTC = 0xFF;
unsigned int i;

for (i=0;i<FinEtapes;i++)
{
Etapes[0]=1;Etapes[i]=0;
}
while (1)
{
LectureEntres();
GestionTransistions ();
GestionsDesactivationEtapes();

Page 4 | 5
GestionsActivationSorties();
}
}

4. Proposition d’un code en langage C/C++ simple


#include <avr/io.h>
#include <util/delay.h>

#define C1_PIN (1 << PB0)


#define C2_PIN (1 << PB1)
#define C4_PIN (1 << PB2)
#define DCY_PIN (1 << PB2)
#define RO_PIN (1 << PC1)
#define DE_PIN (1 << PC2)
#define MO_PIN (1 << PC3)

int main(void) {
DDRB &= ~(C1_PIN | C2_PIN | C4_PIN | DCY_PIN); // Configure les broches comme
entrées
DDRC |= RO_PIN |DE_PIN | MO_PIN ; // Configure les broches comme sorties

PORTB |= (C1_PIN | C2_PIN | C4_PIN | DCY_PIN); // Active les résistances de


pull-up

while (1) {
if (!(PINB & C1_PIN) && !(PINB & C4_PIN) && !(PINB & DCY_PIN)) {
PORTC |= RO_PIN ; // Rotation du plateau
_delay_ms(300); // Temporisation de 300ms
PORTC &= ~DE_PIN ; // Descente poinçon
}

if (!(PINB & C2_PIN)) {


PORTB |= MO_PIN; // Monter le poinçon
while (!(PINB & C1_PIN)) {} // Attendre que le bouton C1 soit
relâché
PORTB &= ~MO_PIN; // Arrêter la montée
}
}

Page 5 | 5

Vous aimerez peut-être aussi