Программирование микроконтроллеров. Часть 7


ШИМ. Мигаем светодиодом плавно

И снова здравствуйте! Сегодня я покажу как при помощи ШИМ можно управлять яркостью светодиода.

Широтно-импульсная модуляция (ШИМ, англ. pulse-width modulation (PWM)) — процесс управления мощностью, подводимой к нагрузке, путём изменения скважности импульсов, при постоянной частоте.

Распиновка ATmega328P:

Картинка взята здесь

В микроконтроллере ATmega328P реализовано шесть каналов ШИМ. На картинке обозначены как PWM. Для этого урока я буду использовать два канала ШИМ которые подключены к 12 и 11 выводу микроконтроллера в PDIP-28P3 корпусе.


В программе Proteus я нарисовал следующую схему:

Я подключил сразу два светодиода, яркость первого светодиода будет увеличиваться, а второго уменьшаться и наоборот.

Создал новый проект в AtmelStudio к нему подключил заголовочный файл main.h:

#ifndef MAIN_H_
#define MAIN_H_

#define F_CPU 8000000UL

#include <avr/io.h>
#include <util/delay.h>

void port_ini(void);
void PWM_ini(void);

#endif

И создал еще один файл port_ini.c в который добавил следующие строки:

#include "main.h"

void port_ini(void)
{
    DDRD=0xff;
}

void PWM_ini(void)
{
TCCR0A=0b10100011; //выбираем неинверсный режим шим для обоих светодиодов
TCCR0B=0b00000001; //выбираем работу таймера без предделителя тактовой
}

Код файла main.c:

#include "main.h"

int main(void)
{
    port_ini();
    PWM_ini();
    OCR1A = 0;
    while(1)
    {
        //увеличиваем яркость первого диода, и уменьшаем яркость второго каждые 5 мс
        for(int i=0;i<256;i++) 
         яркость второго диода, и уменьшаем яркость первого каждые 5 мс
        for(int >0;i--) 
        {
            OCR0A=i;
            OCR0B=255-i;
            _delay_ms(5);
        }
    }   
}

Для проверки работы кода я подключил к схеме осциллограф как показано на рисунке:

Симуляция работы схемы в программе Proteus:

Программа Proteus не может отобразить плавного свечения светодиодов, поэтому они хаотично мигают. Но если собрать эту схему в железе, то светодиоды будут плавно менять свою яркость.

В следующем уроке я более подробно расскажу про таймеры-счетчики микроконтроллера.


Если есть вопросы и предложения по этому уроку, пишите комментарии буду рад ответить на ваши вопросы.


Часть 1
Часть 2-1 Часть 2-2
Часть 3-1 Часть 3-2
Часть 4-1 Часть 4-2
Часть 5
Часть 6-1 Часть 6-2


Comments 0


Привет!

Этот пост был выбран Академией Голоса и попал в список программы поддержки качественных образовательных постов.
Ссылка на твой пост будет опубликована в отчете Академии.

Спасибо за полезный контент (ノ◕ヮ◕)ノ*:・゚✧

14.03.2017 16:19
0