Cours:Eval Mecatro : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
m (Réalisation du dé avec le shield de l'IUT)
m (Réalisation du dé avec le shield de l'IUT)
Ligne 1 : Ligne 1 :
 
<accesscontrol>Acces:Prof</accesscontrol>
 
<accesscontrol>Acces:Prof</accesscontrol>
 
L'objectif consiste à réaliser un dé avec un affichage sur sept segments en lieu et place des chiffres d'un dé de la vraie vie.
 
L'objectif consiste à réaliser un dé avec un affichage sur sept segments en lieu et place des chiffres d'un dé de la vraie vie.
 +
=Quelques évaluations d'expressions=
 
=Réalisation du dé avec le shield de l'IUT=
 
=Réalisation du dé avec le shield de l'IUT=
 
Nous désirons réaliser le dé avec le shield que l'on utilise régulièrement à l'IUT. Les leds étant alignées, elles ne présentent pas une organisation facilement exploitable pour un affichage de type "dé à jouer". Nous décidons donc d'afficher directement le chiffre sur ''' un afficheur sept segments'''.
 
Nous désirons réaliser le dé avec le shield que l'on utilise régulièrement à l'IUT. Les leds étant alignées, elles ne présentent pas une organisation facilement exploitable pour un affichage de type "dé à jouer". Nous décidons donc d'afficher directement le chiffre sur ''' un afficheur sept segments'''.
  
Npus allons utiliser aussi (comme dans l'exercice du TD) un tableau précalculé de valeurs. Comme l'afficheur utilise partiellement deux PORTs (PORTD et PORTB) nous décidons d'utiliser la configuration du tableau ci-dessous.  
+
Nous allons utiliser un tableau précalculé de valeurs.Nous décidons d'utiliser la configuration du tableau ci-dessous.  
  
 
{| class="wikitable"
 
{| class="wikitable"
Ligne 19 : Ligne 20 :
 
|}
 
|}
  
 +
On vous impose le sous programme suivant :
 +
<source lang=c>
 +
const char pinMux = 4;
 +
const char pinAff[8]={13,12,6,7,8,10,9,11};
 +
const char de[7]={A compléter les valeurs 0,1,2,3,4,5,6};
  
L'ordre des segments peut sembler étrange mais il est lié au fait que l'on veut une affectation simple des deux PORTs pour réaliser l'affichage. Mais il complique un peu le précalcul des valeurs du tableau.
+
void affiche7seg(unsigned char v){
 
+
    char i,s;
<u>Exercice 1</u> : calculer les valeurs pour afficher 0, 1, 2, 3, 4 , 5 et 6.
+
    unsigned char c;
 +
// boucle d'affichage :
 +
    for (i=0;i<8;i++) {
 +
          if ((v & (1<<i)) == (1<<i) ) digitalWrite(pinAff[i],1);        // Modifie successivement l'état des segments a (ou patte 13)
 +
          else digitalWrite(pinAff[i],0);     
 +
    }
 +
}
 +
</source>
 +
<u>Exercice 1</u> : calculer les valeurs pour afficher 0, 1, 2, 3, 4 , 5 et 6 et mettez-les dans le tableau à compléter.
 
==Affichage du tableau==
 
==Affichage du tableau==
 
<u>Exercice 2</u> : après ce calcul on fera un programme de test qui affiche toutes les secondes toutes les valeurs possible du dé. On prendra bien soin de gérer la sélection de l'afficheur (de droite avec PD4 à 1).
 
<u>Exercice 2</u> : après ce calcul on fera un programme de test qui affiche toutes les secondes toutes les valeurs possible du dé. On prendra bien soin de gérer la sélection de l'afficheur (de droite avec PD4 à 1).

Version du 28 novembre 2015 à 14:48

Il s’agit d’une page protégée.

L'objectif consiste à réaliser un dé avec un affichage sur sept segments en lieu et place des chiffres d'un dé de la vraie vie.

Quelques évaluations d'expressions

Réalisation du dé avec le shield de l'IUT

Nous désirons réaliser le dé avec le shield que l'on utilise régulièrement à l'IUT. Les leds étant alignées, elles ne présentent pas une organisation facilement exploitable pour un affichage de type "dé à jouer". Nous décidons donc d'afficher directement le chiffre sur un afficheur sept segments.

Nous allons utiliser un tableau précalculé de valeurs.Nous décidons d'utiliser la configuration du tableau ci-dessous.

Segment pt g f e d c b a
Arduino Pin 11 9 10 8 7 6 12 13
Port PB3 PB1 PB2 PB0 PD7 PD6 PB4 PB5

On vous impose le sous programme suivant :

const char pinMux = 4;
const char pinAff[8]={13,12,6,7,8,10,9,11};
const char de[7]={A compléter les valeurs 0,1,2,3,4,5,6};

void affiche7seg(unsigned char v){
    char i,s;
    unsigned char c;
// boucle d'affichage :
    for (i=0;i<8;i++) {
          if ((v & (1<<i)) == (1<<i) ) digitalWrite(pinAff[i],1);        // Modifie successivement l'état des segments a (ou patte 13)
          else digitalWrite(pinAff[i],0);      
    }
}

Exercice 1 : calculer les valeurs pour afficher 0, 1, 2, 3, 4 , 5 et 6 et mettez-les dans le tableau à compléter.

Affichage du tableau

Exercice 2 : après ce calcul on fera un programme de test qui affiche toutes les secondes toutes les valeurs possible du dé. On prendra bien soin de gérer la sélection de l'afficheur (de droite avec PD4 à 1).

Utilisation du pseudo aléatoire

On rappelle qu'en TD on vous propoe le code suivant :

unsigned char pseudoAleat(int Lim) {
  unsigned char Result;
  static unsigned int Y=1;
  Y = (Y * 32719 + 3) % 32749;
  Result = ((Y % Lim)+1);//+1 : eviter 0
  return Result;
}

Exercice 3 : Réaliser un programme qui fait défiler les valeurs de cette fonction pseudo aléatoire.

Gestion du bouton de lancement

On utilisera le bouton B qui est en pullup sur PC0. On rappelle que le PORTC en lecture est disponible avec PINC !!!

Exercice 4 : après avoir mis au point une boucle d'attente d'un appui sur le bouton B, réaliser le programme complet qui attend un appui du bouton B et lance le générateur pseudo-aléatoire pour afficher le résultat.

Gestion de deux dés

C'est le bit PD4 du PORTD qui est responsable de la sélection d'un afficheur :

  • PD4 = 1 c'est l'afficheur de droite qui est en action
  • PD4 = 0 c'est l'afficheur de gauche qui est en action

Si vous voulez afficher deux valeurs, il vous faut les écrire en synchronisme avec la commutation des afficheurs. Cette commutation doit etre réalisée à plus de 25 Hz pour un fonctionnement correct (sans scintillation pour les yeux).

Exercice 5 : Réaliser un programme qui affiche sur deux afficheurs deux résultats de la fonction pseudo-aléatoire. Il faut afficher pendant un certain temps pour que l’œil perçoive !

Exercice 6 : Réaliser un programme complet qui attend que l'on appui sur le bouton B et qui alors utilise deux fois la fonction pseudo-aléatoire pour trouver la valeur des deux dé et qui affiche alors les deux valeurs sur les deux afficheurs.