Cours:InfoS2 tdOutput : Différence entre versions
(28 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
− | =Exercice | + | {{EnTeteTdInfoS2|InfoS2_tdOutput_corrige}} |
+ | |||
+ | |||
+ | On utilisera à bon escient la page : [[Cours:CoursM2103#Modifier%20l'%C3%A9tat%20d'une%20sortie]] | ||
+ | |||
+ | =Exercice : faire clignoter des leds= | ||
2 leds sont connectées sur un attiny13. | 2 leds sont connectées sur un attiny13. | ||
− | l’une sur la broche | + | l’une sur la broche 2({{Rouge|PB3}}), et l’autre sur la broche 6({{Rouge|PB1}}). |
+ | |||
+ | fichier pour simuler avec simulIDE : [[Media:Infouc-Td1-ex1.sim1|Infouc-Td1-ex1.sim1]] | ||
+ | |||
==Registres== | ==Registres== | ||
Ligne 11 : | Ligne 19 : | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
− | ! Broche !! Rôle !! Nom du registre || | + | ! Broche !! Rôle !! Nom du registre || ______________________exemple de code______________________ |
|- | |- | ||
− | | | + | | PB1 || mettre en sortie || || |
|- | |- | ||
− | | | + | | PB1 || mettre la sortie à 1 || || |
|- | |- | ||
| PB3 || mettre en sortie || || | | PB3 || mettre en sortie || || | ||
Ligne 21 : | Ligne 29 : | ||
| PB3 || mettre la sortie à 0 || || | | PB3 || mettre la sortie à 0 || || | ||
|} | |} | ||
+ | |||
+ | {{Aide|Exemple :}}<br><br><br> | ||
+ | Faire clignoter la led PC5 | ||
+ | |||
+ | |||
+ | |||
+ | <source lang=cpp> | ||
+ | #define F_CPU 8000000UL | ||
+ | #include <avr/io.h> | ||
+ | #include <util/delay.h> | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | DDRC |= (1<<PC5); // broche PC5 en sortie | ||
+ | while(1) | ||
+ | { | ||
+ | PORTC ^= (1<<PC5); // changer l'état de PC5 | ||
+ | _delay_ms(500); | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | {{finAide}} | ||
+ | |||
+ | ==Programmes== | ||
+ | |||
+ | {{Question|Écrire les programmes qui répondent aux questions suivantes (indépendantes) :}} | ||
+ | *Allumer les 2 leds en permanence | ||
+ | *Répéter le cycle : leds allumées pendant 50ms, puis éteintes 500ms. | ||
+ | *Changer l’état des leds toutes les 100ms. | ||
+ | *Changer l’état des leds toutes les 100ms, en opposition. | ||
+ | |||
+ | =Exercice : changer l'état des leds= | ||
+ | |||
+ | 3 leds (rouge/orange/verte) sont connectées sur un attiny24 (Fcpu 1MHz) de la façon suivante : | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Couleur !! Numéro de broche !! Port | ||
+ | |- | ||
+ | | rouge || 5 || PB2 | ||
+ | |- | ||
+ | | orange || 8 || PA5 | ||
+ | |- | ||
+ | | verte || 9 || PA4 | ||
+ | |} | ||
+ | |||
+ | {{Question|Écrire un programme décrivant le cycle d’un feu de circulation :}} | ||
+ | *rouge durée 30s | ||
+ | *vert durée 60s | ||
+ | *orange durée 2s | ||
+ | |||
+ | fichier pour simuler avec simulIDE : [[Media:td1-exCycleLed.sim1|td1-exCycleLed.sim1]] | ||
+ | |||
+ | |||
+ | =Exercice : chenillard= | ||
+ | |||
+ | On utilise dans cette partie un atmega640 sur lequel on connecte 32 leds. | ||
+ | |||
+ | {{Question|Faire un chenillard en utilisant les 8 leds sur le PORTA :}} | ||
+ | *on allume la led connectée sur PA0 | ||
+ | *on passe à la led suivante en utilisant l'opérateur de décalage | ||
+ | *si on arrive à la dernière led, il faut allumer la 1ère de nouveau | ||
+ | |||
+ | {{Question|Ajouter 8 leds supplémentaires (PORTJ) :}} | ||
+ | *déclarer une variable sur 16 bits ( type uint16_t ) | ||
+ | *faire le "chenillard" sur cette variable | ||
+ | *tronçonner la variable en "paquets" de 8 bits qu'on écrira sur les sorties | ||
+ | **utiliser l'opérateur de décalage ( >> ) | ||
+ | **utiliser l'opérateur & pour ne conserver que les 8 bits utiles ( on met les autres à 0, on les masque ) | ||
+ | |||
+ | {{Question|Vous pouvez ajouter les 16 autres leds en observant les ports utilisés}} | ||
+ | |||
+ | fichier pour simuler avec simulIDE : [[Media:microc_Td1-exChenillard.sim1|microc_Td1-exChenillard.sim1]] |
Version actuelle datée du 7 mars 2023 à 10:20
Pensez à mettre sur la 1ère ligne de votre code : // Compiler: Avrgcc device: nomDuMicrocontroleur
On utilisera à bon escient la page : Cours:CoursM2103#Modifier l'état d'une sortie
Sommaire
Exercice : faire clignoter des leds
2 leds sont connectées sur un attiny13.
l’une sur la broche 2(PB3), et l’autre sur la broche 6(PB1).
fichier pour simuler avec simulIDE : Infouc-Td1-ex1.sim1
Registres
Compléter le tableau suivant avec le nom du registre utile et un code possible :
Broche | Rôle | Nom du registre | ______________________exemple de code______________________ |
---|---|---|---|
PB1 | mettre en sortie | ||
PB1 | mettre la sortie à 1 | ||
PB3 | mettre en sortie | ||
PB3 | mettre la sortie à 0 |
Faire clignoter la led PC5
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
int main()
{
DDRC |= (1<<PC5); // broche PC5 en sortie
while(1)
{
PORTC ^= (1<<PC5); // changer l'état de PC5
_delay_ms(500);
}
}
|
Programmes
Écrire les programmes qui répondent aux questions suivantes (indépendantes) :
- Allumer les 2 leds en permanence
- Répéter le cycle : leds allumées pendant 50ms, puis éteintes 500ms.
- Changer l’état des leds toutes les 100ms.
- Changer l’état des leds toutes les 100ms, en opposition.
Exercice : changer l'état des leds
3 leds (rouge/orange/verte) sont connectées sur un attiny24 (Fcpu 1MHz) de la façon suivante :
Couleur | Numéro de broche | Port |
---|---|---|
rouge | 5 | PB2 |
orange | 8 | PA5 |
verte | 9 | PA4 |
Écrire un programme décrivant le cycle d’un feu de circulation :
- rouge durée 30s
- vert durée 60s
- orange durée 2s
fichier pour simuler avec simulIDE : td1-exCycleLed.sim1
Exercice : chenillard
On utilise dans cette partie un atmega640 sur lequel on connecte 32 leds.
Faire un chenillard en utilisant les 8 leds sur le PORTA :
- on allume la led connectée sur PA0
- on passe à la led suivante en utilisant l'opérateur de décalage
- si on arrive à la dernière led, il faut allumer la 1ère de nouveau
Ajouter 8 leds supplémentaires (PORTJ) :
- déclarer une variable sur 16 bits ( type uint16_t )
- faire le "chenillard" sur cette variable
- tronçonner la variable en "paquets" de 8 bits qu'on écrira sur les sorties
- utiliser l'opérateur de décalage ( >> )
- utiliser l'opérateur & pour ne conserver que les 8 bits utiles ( on met les autres à 0, on les masque )
Vous pouvez ajouter les 16 autres leds en observant les ports utilisés
fichier pour simuler avec simulIDE : microc_Td1-exChenillard.sim1