Cours:InfoS2 tdMli : Différence entre versions
(4 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
+ | [[Image:Atmega328pPinout.jpeg|600px|droite]] | ||
{{EnTeteTdInfoS2|InfoS2_tdMli_corrige}} | {{EnTeteTdInfoS2|InfoS2_tdMli_corrige}} | ||
− | |||
− | |||
− | [[Media:Atmega328p.pdf|{{Rouge|datasheet aTmega328p}}]] | + | fichier pour simuler avec simulIDE : [[Media:infouc_TdMli.sim1|infouc_TdMli.sim1]] |
+ | |||
+ | [[Media:Atmega328p.pdf|{{Rouge|datasheet aTmega328p}}]] | ||
+ | |||
=Cahier des charges= | =Cahier des charges= | ||
Ligne 18 : | Ligne 20 : | ||
=Configuration du timer en {{Rouge|fast PWM}}= | =Configuration du timer en {{Rouge|fast PWM}}= | ||
− | {{Question|D'après le schéma | + | {{Question|D'après le schéma simulIde et le pinout du µcontrôleur, quel timer devons nous configurer ?}} |
{{Todo|Chercher dans la datasheet du µcontroleur (lien ci dessus) la section décrivant ce périphérique et plus particulièrement les pages donnant la descriptions des registres}} | {{Todo|Chercher dans la datasheet du µcontroleur (lien ci dessus) la section décrivant ce périphérique et plus particulièrement les pages donnant la descriptions des registres}} | ||
Ligne 26 : | Ligne 28 : | ||
*le prédiviseur (qui changera la Fmli ) | *le prédiviseur (qui changera la Fmli ) | ||
*la configuration des bits COMxAx sachant que nous utilisons le mode fast PWM | *la configuration des bits COMxAx sachant que nous utilisons le mode fast PWM | ||
+ | ! Fcpu = 8 MHz ! | ||
{{Question|Compléter en conséquence le programme avec la configuration du timer :}} | {{Question|Compléter en conséquence le programme avec la configuration du timer :}} | ||
Ligne 33 : | Ligne 36 : | ||
// configuration des sorties | // configuration des sorties | ||
− | // timer en mode fast PWM | + | // timer en mode fast PWM (mode 3) |
// valeur du prediviseur | // valeur du prediviseur | ||
Ligne 52 : | Ligne 55 : | ||
Il reste à modifier la valeur du rapport cyclique : | Il reste à modifier la valeur du rapport cyclique : | ||
*Si on utilise la broche OC2B, alors OCR2B change le rapport cyclique (ex OCR2B=64; // donne un rapport cyclique de 64/256=0.25 ) | *Si on utilise la broche OC2B, alors OCR2B change le rapport cyclique (ex OCR2B=64; // donne un rapport cyclique de 64/256=0.25 ) | ||
− | *Si on utilise la broche OC1A, alors OCR1A change le rapport cyclique | + | *Si on utilise la broche OC1A, alors OCR1A change le rapport cyclique |
+ | *... | ||
{{Question|Vérifier que vous arrivez à modifier l'éclairement de la lampe en modifiant le rapport cyclique}} | {{Question|Vérifier que vous arrivez à modifier l'éclairement de la lampe en modifiant le rapport cyclique}} |
Version actuelle datée du 7 mars 2023 à 10:54
Pensez à mettre sur la 1ère ligne de votre code : // Compiler: Avrgcc device: nomDuMicrocontroleur
fichier pour simuler avec simulIDE : infouc_TdMli.sim1
datasheet aTmega328p
Cahier des charges
On souhaite modifier l'éclairement d'une lampe à l'aide de 2 boutons.
Les broches du µcontrôleur pouvant délivrer un courant maximum de qques dizaines de mA maximum avec une tension maximale de 5V (tension d'alimentation), il convient d'utiliser un transistor en commutation (se comporte comme un interrupteur commandé) tel que câblé sur le document tinkercad.
Il faut générer un signal MLI (PWM) dont le rapport cyclique permettra de faire varier la tension moyenne aux bornes de la charge (ici une lampe) et donc de faire varier l'intensité lumineuse.
Afin de ne pas percevoir le clignotement de la lampe, la fréquence de la MLI ( Fmli ) devra être supérieure à 50Hz.
Configuration du timer en fast PWM
D'après le schéma simulIde et le pinout du µcontrôleur, quel timer devons nous configurer ?
Chercher dans la datasheet du µcontroleur (lien ci dessus) la section décrivant ce périphérique et plus particulièrement les pages donnant la descriptions des registres
Quel tableau permet de choisir:
- le mode de fonctionnement (normal, ctc, pwm ...)
- le prédiviseur (qui changera la Fmli )
- la configuration des bits COMxAx sachant que nous utilisons le mode fast PWM
! Fcpu = 8 MHz !
Compléter en conséquence le programme avec la configuration du timer :
int main()
{
// configuration des sorties
// timer en mode fast PWM (mode 3)
// valeur du prediviseur
// génération de la sortie par le timer
// rapport cyclique
while(1)
{
// on peut changer le rapport cyclique régulièrement
_delay_ms(500);
}
}
Il reste à modifier la valeur du rapport cyclique :
- Si on utilise la broche OC2B, alors OCR2B change le rapport cyclique (ex OCR2B=64; // donne un rapport cyclique de 64/256=0.25 )
- Si on utilise la broche OC1A, alors OCR1A change le rapport cyclique
- ...
Vérifier que vous arrivez à modifier l'éclairement de la lampe en modifiant le rapport cyclique
Configuration des boutons
On utilise 2 boutons. On souhaite que
- la luminosité augmente à chaque appui sur l'un des boutons
- la luminosité diminue à chaque appui sur l'autre bouton
On relie donc les boutons sur les 2 interruptions int0 et int1 que l'on configurera pour qu'elles s'exécutent à l'appui sur les boutons.