Cours:TDs 2103

De troyesGEII
Révision datée du 6 octobre 2014 à 09:48 par SergeMoutou (discussion | contributions) (Indication)
Aller à : navigation, rechercher

Nous allons mettre dans cette série de TDs un ensemble de travaux réalisés en groupes de TD mais en salle informatique.

Initiation au timer 0

Notre objectif est de reprendre un exercice de TD et de le réaliser de manière plus complète.

Rappel de la documentation du timer 0

La documentation officielle du timer 0 fait 10 pages. Nous utilisons quant à nous une série de dessins résumant le fonctionnement de certaines parties.

Voici un premier dessin :

Documentation du timer 0 de l'ATMega328

Rappel de la documentation du shield utilisé

Puisque nous allons utiliser les LEDs pour afficher une valeur binaire sur 8 bits, voici la documentation correspondante :

Numéro f5 f4 f3 f2 f1 f0 p1 p0
Couleur r o v r o v v r
Arduino Pin 13 12 11 10 9 8 7 6
Port Arduino UNO PB5 PB4 PB3 PB2 PB1 PB0 PD7 PD6
Port Arduino LEONARDO PC7 PD6 PB7 PB6 PB5 PB4 PE6 PD7

Seule la ligne correspondant à l'Arduino UNO nous intéresse dans la suite.

Exercice 1

1°) Le site : convert base vous propose un algorithme de division par 10 que voici :

unsigned int A;
unsigned int Q; /* the quotient */
        Q = ((A >> 1) + A) >> 1; /* Q = A*0.11 */
        Q = ((Q >> 4) + Q)     ; /* Q = A*0.110011 */
        Q = ((Q >> 8) + Q) >> 3; /* Q = A*0.00011001100110011 */
        /* either Q = A/10 or Q+1 = A/10 for all A < 534,890 */

Sans chercher à comprendre l'algorithme de division, on vous demande de le transformer en une fonction unsigned int div10(unsigned int A);

Indication

unsigned int div10(unsigned int A){ 
// a compléter ICI : ceci a été réalisé en TD !!!
}

2°) Les LEDs du shield maison sont couplées à un arduino UNO. Écrire un sous-programme capable d'afficher un nombre sur 8 bits sur les LEDs. Réaliser un programme de test.

Indication

void afficheLeds(unsigned char ch){
  // A compléter ici. On n'utilisera que des décalages 
  //et des masques pour réaliser cette fonction
}

3°) Écrire un programme complet qui mesure le temps d'exécution du sous programme de division par 10, puis modifier le programme pour qu'il puisse comparer avec une division par 10 normale.