« Micro contrôleurs AVR/Les PORTs » : différence entre les versions

Contenu supprimé Contenu ajouté
m Robot : Remplacement de texte automatisé (-\n(==={0,3})(?: *)([^\n=]+)(?: *)\1(?: *)\n +\n\1 \2 \1\n)
Ligne 10 :
== Le PORT pour entrer et sortir des informations ==
On rappelle que l'opérateur d'affectation = du C est asymétrique. Écrire
<sourcesyntaxhighlight lang="C">
var1 = var2; // met la valeur de var2 dans var1
</sourcesyntaxhighlight>
est complètement différent de
<sourcesyntaxhighlight lang="C">
var2 = var1; // met la valeur de var1 dans var2
</syntaxhighlight>
</source>
Profitons-en pour rappeler que dans le premier cas, seule la valeur de var1 change (pas celle de var2).
=== Le registre DDRB ===
Ligne 26 :
Notez que l'entrée est faite à l'aide de '''PINB''' et non de '''PORTB''' :
<sourcesyntaxhighlight lang="C">
PORTB = val;
</syntaxhighlight>
</source>
mais
<sourcesyntaxhighlight lang="C">
val = PINB;
</syntaxhighlight>
</source>
Les entrées des '''PORTx''' peuvent être connectées à une résistance de rappel au +{{unité|5|V}} de manière interne, cette sélection s’effectuant par une écriture dans le registre '''PORTx''' (écriture d'un '1' avec bit correspondant en entrée pour pullup et écriture d'un '0' pour désactiver le pullup). Cela veut dire que les pull-up peuvent être choisis individuellement dans un PORT, contrairement aux PIC 16F !
 
Ligne 102 :
 
1-b) Compléter alors le morceau de code ci-dessous pour en faire un programme :
<sourcesyntaxhighlight lang="c">
#undef F_CPU
#define F_CPU 25000000UL
Ligne 117 :
}
_delay_ms(1000);
</syntaxhighlight>
</source>
 
2°) Peut-on modifier facilement le programme pour que les deux LEDs fonctionnent à deux fréquences différentes ?
Ligne 128 :
* PB6 et PB5 appuyés : Ox20
1-b)
<sourcesyntaxhighlight lang="c">
#undef F_CPU
#define F_CPU 25000000UL
Ligne 150 :
return 0;
} // main
</syntaxhighlight>
</source>
 
2°) L’idée est de calculer le PGCD des deux périodes et de faire tourner la boucle infinie à période correspondante, ou plutôt à la demi-période si on utilise une technique de basculement avec un OU exclusif. On incrémentera ensuite deux compteurs, un pour chacune des leds, qui compteront jusqu'à réaliser les demi-périodes correspondantes et réaliseront alors le basculement.
Ligne 164 :
 
Quel est l’affichage du dé correspondant à :
<sourcesyntaxhighlight lang="c">
unsigned char tableau[7]={0x00,0x10,0x44,0x54,0xAA,0xBA,0xEE};
</syntaxhighlight>
</source>
2°) Écrire un programme complet qui affiche les 6 valeurs du dé avec un délai d'attente de 3s utilisant la fonction "_delay_ms()" de la librairie libc.
 
3°) On désire maintenant générer de manière aléatoire le score affiché sur le dé. Pour cela on vous propose d’utiliser la fonction ci-dessous.
<sourcesyntaxhighlight lang="c">
unsigned char pseudoAleat(int Lim) {
unsigned char Result;
Ligne 178 :
return Result;
}
</syntaxhighlight>
</source>
3-a) Calculer la première valeur de cette fonction si Lim=6.
 
Ligne 187 :
{{solution|contenu=
1°) Seuls 2 et trois sont affichés bizarrement. On préférerai donc :
<sourcesyntaxhighlight lang="C">
unsigned char tableau[7]={0x00,0x10,0x82,0x92,0xAA,0xBA,0xEE};
</syntaxhighlight>
</source>
 
3-b)
<sourcesyntaxhighlight lang="C">
#include <util/delay.h>
Ligne 218 :
return 0;
}
</syntaxhighlight>
</source>
4°) L'astuce consiste à regrouper les leds qui s'allument ensembles (pour un dé) sur un même bit du PORT : il faut ainsi 4 bits par dé. Pour cela le bouton de lancer doit donc être relié à PB0.
}}
Ligne 233 :
==== Exercice 4 ====
=====Question 1 : détermination du numéro de colonne=====
<sourcesyntaxhighlight lang="c">
#define NOTAKEY 127
// colonne 1 à gauche
Ligne 250 :
}
}
</syntaxhighlight>
</source>
Commenter en testant les bonnes valeurs du case.
===== Question 2 : détermination du numéro de ligne =====