UNIVERSITE SIDI MOHAMED BEN ABDELAH Ecole Nationale des Sciences Appliquées – F
UNIVERSITE SIDI MOHAMED BEN ABDELAH Ecole Nationale des Sciences Appliquées – Fès- Département Industriel Génie Mécanique et systèmes automatisés Tp2 : développer votre propre drive Réalisé par : - Elmrabet aziz Encadré par : - Pr. SAAD MOTAHHIR UNIVERSITE SIDI MOHAMED BEN ABDELAH Ecole Nationale des Sciences Appliquées – Fès- Département Industriel Génie Mécanique et systèmes automatisés I) Objectif du TP : L’objectif du TP est de développer un drive qui permet de gérer les pins numérique du microcontrôleur Atmega328p en langage C en utilisant Amel studio. II)Les APIs Fonction de configuration du sens des pins digitales : - Void pinMode (struct DIGITAL_IO, unsigned char mode) ; DIGITAL_IO : structure qui contient deux champs(le PORT et le numéro de la pin). Mode : output or input. Fonction d’écriture sur les pins digitales : - Void setState(struct DIGITAL_IO,unsigned char value) ; DIGITAL_IO : structure qui contient deux champs(le PORT et le numéro de la pin). value : HIGH or LOW. Fonction de lecture des données sur les pins digitales : - int getState(struct DIGITAL_IO) ; DIGITAL_IO : structure qui contient deux champs(le PORT et le numéro de la pin). Return: HIGH or LOW. III) Les ateliers du TP : Atelier 1 : - Réaliser un système embarqué qui permet de faire clignoter une LED connectée avec la pin RB5 sans modifier l’état des autres pins. Atelier 2 : - Réaliser un système embarqué qui fait clignoter une LED avec un Delay graduel au fil du temps, au début la LED commencera à clignoter à 100ms de pause, et à chaque itération du programme la pause va se doubler. Atelier 3 : - Réaliser un système embarque qui permet de faire un chenillard avec 4 LEDs en utilisant la boucle foret sans modifier l’état des autres pins. Atelier 4 : - Réaliser un programme permettant d’allumer une LED branchée sur la pin RB5 lorsque le bouton branché sur la pin RB2 est appuyé. UNIVERSITE SIDI MOHAMED BEN ABDELAH Ecole Nationale des Sciences Appliquées – Fès- Département Industriel Génie Mécanique et systèmes automatisés IV) My_drive 1)Fichier .c #include <avr/io.h> #include <avr/interrupt.h> #include "my_drive.h" void pin_mode (unsigned char port, int pin, unsigned char mode) { if (pin <= 7) { switch (mode) { case 'i' : case 'I' : if (port == 'B') { PORTB &= (~ (1<<pin)); DDRB &= (~(1<<pin)); } else if (port == 'C' && pin<6) { PORTC &= (~(1<<pin)); DDRC &= (~(1<<pin)); } else if(port == 'D') { PORTD &= (~(1<<pin)); DDRD &= (~(1<<pin)); } break; case 'o' : case 'O' : if(port == 'B') { PORTB &= (~(1<<pin)); DDRB |= (1<<pin); } else if(port == 'C' && pin<6) { PORTC &= (~(1<<pin)); DDRC |= (1<<pin); } else if(port == 'D') { UNIVERSITE SIDI MOHAMED BEN ABDELAH Ecole Nationale des Sciences Appliquées – Fès- Département Industriel Génie Mécanique et systèmes automatisés PORTD &= (~(1<<pin)); DDRD |= (1<<pin); } break; } } } void set_state(unsigned char port,int pin,int state) { if(pin <= 7 ) { switch( port ) { case 'B' : if( DDRB & (1<<pin) ) { if(state==1) PORTB |= (1<<pin); else if(state==0) PORTB &= (~(1<<pin)); } break; case 'C': if(pin >= 6) break; if( DDRC & (1<<pin) ) { if(state==1) PORTC |= (1<<pin); else if(state==0) PORTC &= (~(1<<pin)); } break; case 'D': if( DDRD & (1<<pin) ) { if(state==1) PORTD |= (1<<pin); else if(state==0) PORTD &= (~(1<<pin)); } break; } } } UNIVERSITE SIDI MOHAMED BEN ABDELAH Ecole Nationale des Sciences Appliquées – Fès- Département Industriel Génie Mécanique et systèmes automatisés int get_state(unsigned char port,int pin) { if(pin <= 7 && (port=='B' || port=='C' || port=='D') ) { switch( port ) { case 'B' : if (PINB & (1<<pin)) { return 1; } else { return 0; } break; case 'C': if(pin>=6) break; if (PINC & (1<<pin)) { return 1; } else { return 0; } break; case 'D': if (PIND & (1<<pin)) { return 1; } else { return 0; } break; } } else return -1; } UNIVERSITE SIDI MOHAMED BEN ABDELAH Ecole Nationale des Sciences Appliquées – Fès- Département Industriel Génie Mécanique et systèmes automatisés void pinMode(struct DIGITAL_IO PIN,unsigned char mode) { pin_mode(PIN.port,PIN.pin,mode); } void setState(struct DIGITAL_IO PIN, int stat) { set_state(PIN.port,PIN.pin,stat); } int getState(struct DIGITAL_IO PIN) { return get_state(PIN.port,PIN.pin); } 2)Fichier .h #ifndef MY_DRIVE_H #define MY_DRIVE_H #include <avr/io.h> #define INCLUDE_XTAL_PINS enum TERMS { input='i', output='o', input_pullup='p', HIGH=1, LOW=0 }; typedef struct DIGITAL_IO { unsigned char port; int pin; }DIGITAL_IO; void pin_mode(unsigned char, int,unsigned char); void pinMode(struct DIGITAL_IO,unsigned char); void set_state(unsigned char,int,int); int getState(struct DIGITAL_IO); void setState(struct DIGITAL_IO,int); int get_state(unsigned char,int); #endif V) Atelier 1 UNIVERSITE SIDI MOHAMED BEN ABDELAH Ecole Nationale des Sciences Appliquées – Fès- Département Industriel Génie Mécanique et systèmes automatisés 2)Code 3)Circuit VI) Atelier 2 : UNIVERSITE SIDI MOHAMED BEN ABDELAH Ecole Nationale des Sciences Appliquées – Fès- Département Industriel Génie Mécanique et systèmes automatisés 1)Code 2)circuit VII) Atelier 3 : UNIVERSITE SIDI MOHAMED BEN ABDELAH Ecole Nationale des Sciences Appliquées – Fès- Département Industriel Génie Mécanique et systèmes automatisés 1)Code 2)circuit UNIVERSITE SIDI MOHAMED BEN ABDELAH Ecole Nationale des Sciences Appliquées – Fès- Département Industriel Génie Mécanique et systèmes automatisés VIII) Atelier 4 : 1)Code 2)circuit UNIVERSITE SIDI MOHAMED BEN ABDELAH Ecole Nationale des Sciences Appliquées – Fès- Département Industriel Génie Mécanique et systèmes automatisés IX) conclusion uploads/Industriel/ tp-1 3 .pdf
Documents similaires










-
26
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Jui 20, 2022
- Catégorie Industry / Industr...
- Langue French
- Taille du fichier 0.3280MB