0

TUTO XMEGA (ASF) : Timer en mode PWM

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);			
		}
 
	}
}

admin

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *