This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| fr:examples:digi:led [2010/03/09 17:56] – sdeniaud | fr:examples:digi:led [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Diode électroluminescente ====== | ||
| + | //Necessary knowledge: [HW] [[en: | ||
| + | |||
| + | // | ||
| + | |||
| + | ===== Théorie ===== | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | La diode électroluminescente est un semi-conducteur qui émet de la lumière lorsqu’on lui applique une tension. L’acronyme pour diode électroluminescente est DEL (LED en Anglais). Il existe différentes combinaisons de couleurs de diodes et les diodes peuvent émettre une lumière blanche. Tout comme une diode classique, la LED a deux contacts – une anode et une cathode. Schématiquement, | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | Lorsqu’on applique une tension, l’anode de la LED est connectée à la tension positive tandis que la cathode est connectée à la tension négative. La tension de la LED dépend de sa couleur : longueur d’onde la plus longue (rouge) ~ 2V, longueur d’onde la plus courte (bleu) ~ 3V. En général, l’énergie d’une LED n’excède pas la dizaine de milliWatts, cela signifie que le courant électrique doit être dans la même gamme. Lorsqu’on applique une tension ou un courant trop important, la LED peut griller. | ||
| + | |||
| + | |||
| + | Si la LED est utilisée spécifiquement pour l’éclairage, | ||
| + | |||
| + | Il existe une grande variété de LEDs. Les LEDs à pattes les plus communes ont un corps de 3mm ou 5mm de diamètre ainsi que deux longues broches de connexion en métal. La broche la plus longue est celle de l’anode, la plus courte celle de la cathode. Les LED destinées aux circuits fabriqués par la technique SMD (Surface Mounted Device) porte le symbole en forme de T sur la partie inférieure afin d’indiquer la polarité, où la partie supérieure du T marque la position de l’anode. | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | ===== Homelab : pratique 1 ===== | ||
| + | |||
| + | Le module de contrôle du //HomeLab// contient une seule LED rouge, dont l’anode est connectée via une résistance | ||
| + | |||
| + | Tous les exercices pour le // | ||
| + | Ci-dessous deux exemples de programme réalisent exactement la même chose, sauf que l’un est créé sur la base de la bibliothèque // | ||
| + | |||
| + | <code c> | ||
| + | // | ||
| + | // Homelab controller module LED test program. | ||
| + | // The code is base on homelab library. | ||
| + | // | ||
| + | #include < | ||
| + | |||
| + | // | ||
| + | // LED pin configuration. | ||
| + | // | ||
| + | pin debug_led = PIN(B, 7); | ||
| + | |||
| + | // | ||
| + | // Main program | ||
| + | // | ||
| + | int main(void) | ||
| + | { | ||
| + | // Configuring LED pin as an output | ||
| + | pin_setup_output(debug_led); | ||
| + | |||
| + | // Lighting up LED | ||
| + | pin_clear(debug_led); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | <code c> | ||
| + | // | ||
| + | // Homelab controller module LED test program. | ||
| + | // The code directly accesses registers. | ||
| + | // | ||
| + | #include < | ||
| + | |||
| + | // | ||
| + | // Main program | ||
| + | // | ||
| + | int main(void) | ||
| + | { | ||
| + | // Configuring LED pin as an output | ||
| + | DDRB |= (1 << 7); | ||
| + | |||
| + | // Lighting up LED | ||
| + | PORTB &= ~(1 << 7); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Le premier exemple utilise la bibliothèque concernant les broches (fichier '' | ||
| + | |||
| + | Quelle est la différence entre utiliser la bibliothèque et les registres ? La différence est le confort – la bibliothèque est plus facile, parce qu’il n’est pas nécessaire de connaître le nom des registres et leurs effets par cœur. Le bénéfice le plus important de la bibliothèque est l’adaptabilité. En utilisant les registres, il est nécessaire de changer les noms des registres et les masques de bit tout au long du programme afin de changer de broche. En utilisant la bibliothèque, | ||
| + | |||
| + | Le code suivant est une bibliothèque pour le fonctionnement partielle de broche. Son objectif est d' | ||
| + | |||
| + | |||
| + | <code c> | ||
| + | // Macro constant for defining register pointer | ||
| + | #define _REG_PTR_ volatile uint8_t * | ||
| + | |||
| + | // | ||
| + | // Pin data type | ||
| + | // | ||
| + | typedef struct pin | ||
| + | { | ||
| + | _REG_PTR_ ddr; | ||
| + | _REG_PTR_ port; | ||
| + | _REG_PTR_ pin; | ||
| + | uint8_t mask; | ||
| + | } | ||
| + | pin; | ||
| + | |||
| + | // | ||
| + | // Macro function for pin variable initializing | ||
| + | // | ||
| + | #define PIN(port_char, | ||
| + | { \ | ||
| + | (_REG_PTR_)& | ||
| + | (_REG_PTR_)& | ||
| + | (_REG_PTR_)& | ||
| + | bit_mask(bit_index) \ | ||
| + | } | ||
| + | |||
| + | // | ||
| + | // Configuring pin as output | ||
| + | // | ||
| + | inline void pin_setup_output(pin pin) | ||
| + | { | ||
| + | bitmask_set(*pin.ddr, | ||
| + | } | ||
| + | |||
| + | // | ||
| + | // Setting pin high | ||
| + | // | ||
| + | inline void pin_set(pin pin) | ||
| + | { | ||
| + | bitmask_set(*pin.port, | ||
| + | } | ||
| + | |||
| + | // | ||
| + | // Setting pin low | ||
| + | // | ||
| + | inline void pin_clear(pin pin) | ||
| + | { | ||
| + | bitmask_clear(*pin.port, | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Homelab : pratique 2 ===== | ||
| + | |||
| + | En plus du module de contrôle, les LEDs sont aussi situées sur la carte entrée-sortie numérique. Elles sont connectées électriquement de la même manière que les LEDs du module de contrôle. Cela signifie que la cathode est reliée à la broche AVR. La LED rouge est connectée à la broche numéro PC5, la jaune en PC4 et la verte en PC3. L' | ||
| + | |||
| + | <code c> | ||
| + | // | ||
| + | // Homelab digital module LED's test program. | ||
| + | // | ||
| + | #include < | ||
| + | |||
| + | // | ||
| + | // LED's pin configuration. | ||
| + | // | ||
| + | pin led_red | ||
| + | pin led_yellow = PIN(C, 4); | ||
| + | pin led_green | ||
| + | |||
| + | // | ||
| + | // Main program | ||
| + | // | ||
| + | int main(void) | ||
| + | { | ||
| + | // Configuring LED pins as an output | ||
| + | pin_setup_output(led_red); | ||
| + | pin_setup_output(led_yellow); | ||
| + | pin_setup_output(led_green); | ||
| + | |||
| + | // Lighting up green LED | ||
| + | pin_clear(led_green); | ||
| + | |||
| + | // Turn off red and yellow LED | ||
| + | pin_set(led_red); | ||
| + | pin_set(led_yellow); | ||
| + | } | ||
| + | </ | ||