Un petit exemple rapide sur l’utilisation d’un timer en mode PWM pour faire varier la luminosité d’une LED :
#include <asf.h> #define LED_VERTE IOPORT_CREATE_PIN(PORTD, 5) //LED #define Periode 1075 int main (void) { //Initialisation du controleur d'interruptions pmic_init(); //Initialisation de l'horloge sysclk_init(); //Initialisation des entrées/sorties ioport_set_pin_dir(LED_VERTE, IOPORT_DIR_OUTPUT); //Initialisation du Timer 1 tc_enable(&TCD1); tc_set_wgm(&TCD1, TC_WGMODE_SINGLESLOPE_gc); //Choix du mode du timer1 et du mode PWM tc_write_period(&TCD1, Periode); //Définition de la période du PWM tc_write_cc(&TCD1, TC_CCB, Periode/100); //Allume la LED à 1% de la luminosité tc_enable_cc_channels(&TCD1,TC_CCBEN); //Active la sortie CCB du Timer 1 - Donc PD5 cpu_irq_enable(); //Activation de l'interruption globale tc_write_clock_source(&TCD1, TC_CLKSEL_DIV8_gc);//Activation de l'horloge du timer 1 fclksys/8 board_init(); while(1) { //Augemente progressivement la luminosité for(int i=1;i<=100;i++) { tc_write_cc(&TCD1, TC_CCB, Periode/100*i); delay_ms(10); } //Diminue progressivement la luminosité for(int i=100;i>=1;i--) { tc_write_cc(&TCD1, TC_CCB, Periode/100*i); delay_ms(10); } } }
Toc toc toc, Est-ce qu’il y a quelqu’un ?
Si un administrateur/webmaster pouvais me répondre je serait heureux :).
Bien cordialement.