0% ont trouvé ce document utile (0 vote)
159 vues11 pages

Développement d'un Drive pour Atmega328p

Ce document décrit un TP sur le développement d'un drive permettant de gérer les pins numériques d'un microcontrôleur Atmega328p. Il présente les APIs nécessaires, les ateliers à réaliser et le code du drive développé.

Transféré par

ali
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)
159 vues11 pages

Développement d'un Drive pour Atmega328p

Ce document décrit un TP sur le développement d'un drive permettant de gérer les pins numériques d'un microcontrôleur Atmega328p. Il présente les APIs nécessaires, les ateliers à réaliser et le code du drive développé.

Transféré par

ali
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 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

Vous aimerez peut-être aussi