BAM – Binary Angle Modulation
28 Октября 2011
К комментариям
Сегодня встал вопрос как регулировать яркость светодиода. Вспомнил, что читал о ВАМ, нашел в сети статью:
Набросал простой пример.
Регулируем яркость двух светодиодов на плате дисковери.
Впечатления положительные, плавненько и малые затраты на ресурсы мк.
Изменения которые необходимо сделать в коде:
//-----------------------------------------------------------------------------
int main(void)
{
PIN_CONFIGURATION(LED_GREEN);
PIN_CONFIGURATION(LED_BLUE);
PIN_CONFIGURATION(BUTTON);
mcu_tim17_init();
interrupt_init();
while (1)
{
delay_ms(10);
led_green_brightness++;
led_green_brightness--;
}
return 0;
}
static volatile uint8_t arr_value = 128;
volatile uint8_t led_green_brightness = 0;
volatile uint8_t led_blue_brightness = 0;
//-----------------------------------------------------------------------------
void handler_tim1_trigger_and_communication_and_tim17(void)
{
if (TIM17->SR & TIM_SR_UIF)
{
TIM17->SR &= ~TIM_SR_UIF;
// установка периода
// от 8 до 1024
arr_value /= 2;
if (arr_value == 0)
arr_value = 128;
TIM17->ARR = (uint16_t) arr_value * 8;
// яркость зеленый
if ((arr_value & led_green_brightness) != 0)
{
PIN_ON(LED_GREEN);
}
else
{
PIN_OFF(LED_GREEN);
}
// яркость синий
if ((arr_value & led_blue_brightness) != 0)
{
PIN_ON(LED_BLUE);
}
else
{
PIN_OFF(LED_BLUE);
}
}
}
//-----------------------------------------------------------------------------
void mcu_tim17_init(void)
{
RCC->APB2ENR |= RCC_APB2ENR_TIM17EN;
TIM17->PSC = 8 - 1;
TIM17->ARR = 1024;
TIM17->DIER |= TIM_DIER_UIE;
TIM17->CR1 = TIM_CR1_CEN | TIM_CR1_ARPE;
}
comments powered by Disqus