Cours:InfoS2 tdTimerCTC : Différence entre versions
(→Utilisation de la broche OC1A) |
|||
(6 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Image:Atmega328pPinout.jpeg|600px|droite]] | [[Image:Atmega328pPinout.jpeg|600px|droite]] | ||
− | + | {{EnTeteTdInfoS2|InfoS2_tdRoueCodeuse_corrige}} | |
− | |||
− | [[ | + | ***************************************** |
− | + | ***************************************** | |
− | + | ***************************************** | |
+ | *** [[Media:CalculTimer.ods|{{Rouge|feuille de calcul pour les TIMERS}}]] *** | ||
+ | ***************************************** | ||
+ | ***************************************** | ||
+ | ***************************************** | ||
+ | Fichier simulIde : [[Media:infouc_ActionPeriodique.sim1]] | ||
=Génération d'un signal carré périodique= | =Génération d'un signal carré périodique= | ||
Ligne 36 : | Ligne 40 : | ||
</source> | </source> | ||
− | [[media:atmega328p.pdf|documentation sur le timer1 partie 16 (registres page 131 et suivantes) de la datasheet]] | + | [[media:atmega328p.pdf|documentation sur le timer1 partie 16 (les registres page 131 et suivantes) de la datasheet]] |
+ | |||
+ | ==Utilisation d'une broche quelconque== | ||
+ | Une led est connectée sur la broche PD5. Cette led n'étant pas connectée à un timer, on devra utiliser une fonction d'interruption qui sera exécutée régulièrement. | ||
+ | |||
+ | {{Question|Faire clignoter la led à une fréquence de 3Hz}} | ||
+ | |||
+ | <source lang=cpp> | ||
+ | #include ... | ||
+ | |||
+ | ISR(TIMER1_COMPA_vect) | ||
+ | { | ||
+ | ... | ||
+ | } | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | // configurer sortie | ||
+ | // choisir prédiviseur du timer | ||
+ | // choisir le mode CTC | ||
+ | // choisir la valeur de remise à 0 du timer | ||
+ | // activer l'interruption de comparaison | ||
+ | while(1) | ||
+ | { | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | [[media:atmega328p.pdf|documentation sur le timer1 partie 16 (les registres page 131 et suivantes) de la datasheet]] | ||
+ | |||
+ | =Action périodique= | ||
+ | On utilise toujours le timer1, et on souhaite l’utiliser pour cadencer un chenillard qui utilise les 6 leds du PORTB. | ||
+ | |||
+ | *Écrire le programme d’un chenillard qui change de led toutes les 200ms. | ||
+ | *Faire en sorte qu’un appui sur le bouton PD2/PD3, divise/multiplie par 2 la vitesse de défilement. |
Version actuelle datée du 22 février 2024 à 09:09
Pensez à mettre sur la 1ère ligne de votre code : // Compiler: Avrgcc device: nomDuMicrocontroleur
***************************************** ***************************************** ***************************************** *** feuille de calcul pour les TIMERS *** ***************************************** ***************************************** *****************************************
Fichier simulIde : Media:infouc_ActionPeriodique.sim1
Sommaire
Génération d'un signal carré périodique
On souhaite faire clignoter une led en utilisant le timer1 d'un atmega328p.
La fréquence du CPU est de Fcpu=1MHz.
Utilisation de la broche OC1A
Une led est connectée sur la broche PB1 ( OC1A ). Le timer1 peut générer directement un signal sur cette broche particulière.
Faire clignoter la led à une fréquence de 1Hz
#include ...
int main()
{
// configurer sortie
// choisir prédiviseur du timer
// choisir le mode CTC
// choisir la valeur de remise à 0 du timer
// activer le contrôle de la sortie par le timer
while(1)
{
}
}
documentation sur le timer1 partie 16 (les registres page 131 et suivantes) de la datasheet
Utilisation d'une broche quelconque
Une led est connectée sur la broche PD5. Cette led n'étant pas connectée à un timer, on devra utiliser une fonction d'interruption qui sera exécutée régulièrement.
Faire clignoter la led à une fréquence de 3Hz
#include ...
ISR(TIMER1_COMPA_vect)
{
...
}
int main()
{
// configurer sortie
// choisir prédiviseur du timer
// choisir le mode CTC
// choisir la valeur de remise à 0 du timer
// activer l'interruption de comparaison
while(1)
{
}
}
documentation sur le timer1 partie 16 (les registres page 131 et suivantes) de la datasheet
Action périodique
On utilise toujours le timer1, et on souhaite l’utiliser pour cadencer un chenillard qui utilise les 6 leds du PORTB.
- Écrire le programme d’un chenillard qui change de led toutes les 200ms.
- Faire en sorte qu’un appui sur le bouton PD2/PD3, divise/multiplie par 2 la vitesse de défilement.