Cours:TDs 2103 : Différence entre versions
m (→Indication) |
m (→Indication) |
||
Ligne 50 : | Ligne 50 : | ||
===Indication=== | ===Indication=== | ||
+ | Voici ce que l'on demande de faire : | ||
<source lang="c"> | <source lang="c"> | ||
void afficheLeds(unsigned char ch){ | void afficheLeds(unsigned char ch){ |
Version du 6 octobre 2014 à 09:50
Nous allons mettre dans cette série de TDs un ensemble de travaux réalisés en groupes de TD mais en salle informatique.
Sommaire
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 :
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
Voici ce que l'on demande de faire :
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.