Мигающий светодиод на микроконтроллере AVR ATmega32

Мигающий светодиод – это, пожалуй, самая простая схема, которую можно реализовать на микроконтроллере семейства AVR. Предназначена она для начинающих радиолюбителей – чтобы они на примере этой простейшей схемы смогли сделать свой первый шаг в направлении знакомства с микроконтроллерами AVR. В данной схеме мы подсоединим светодиод к микроконтроллеру AVR ATmega32 и заставим его мигать с интервалом в полсекунды.

Мигающий светодиод на микроконтроллере AVR ATmega32: внешний вид конструкции

Необходимые компоненты

Аппаратное обеспечение

Микроконтроллер ATmega32
Источник питания с напряжением 5 Вольт
Программатор AVR-ISP, USBASP или другой подобный
JHD_162ALCD (ЖК дисплей 16×2)
Конденсатор 10 мкФ
Светодиод
Резистор 220 Ом

Программное обеспечение

Atmel Studio версии 6.1 (или выше)
Progisp или flash magic (необязательно)

Работа схемы

Схема устройства приведена на следующем рисунке. Как видите, она простейшая.

Схема подключения мигающего светодиода к микроконтроллеру AVR ATmega32

Светодиод D1 подсоединен через резистор R1 к выводу 19 микроконтроллера. Резистор необходим для ограничения тока, протекающего через светодиод. Помните, что микроконтроллер не может обеспечивать на своих выводах ток более 30 мА.

Для этой схемы нет необходимости в использовании внешнего кварцевого резонатора. Микроконтроллер ATmega32 по умолчанию работает от своего внутреннего RC-генератор с частотой 1 МГц – для рассматриваемой нами задачи этого вполне достаточно. Внешний кварцевый резонатор целесообразно подключать к микроконтроллеру только когда требуется повышенная точность таймера или возникают другие задачи, требующие точного измерения временного промежутка. По умолчанию при покупке микроконтроллер настроен так, чтобы работать от внутреннего RC-генератора.

Исходный код программы на языке C (Си) с пояснениями

Программа для рассматриваемой схемы представлена следующим фрагментом кода на языке C (Си). Комментарии к коду программу поясняют принцип работы отдельных команд.

#include <avr/io.h> //заголовок, разрешающий управление выводами микроконтроллера
#define F_CPU 1000000 //задание тактовой частоты
#include <util/delay.h> //заголовок, разрешающий управление функциями задержки времени в программе
int main(void)
{
DDRD = 0xFF; // ( или 0b1111 1111 в двоичном коде)
В программе AVRSTUDIO для того чтобы использовать порт (вывод) микроконтролера как вход, мы должны использовать значение "НОЛЬ", а чтобы использовать его как выход – мы должны использовать значение "ЕДИНИЦА". Поскольку мы установили всем используемым портам значение 1, то все выводы (контакты) будут использоваться как выходные. А если бы мы, к примеру, установили значение “0b1111 0111”, то в этом случае PIN 3 (вывод) работал бы на ввод.

while(1) // бесконечный цикл, чтобы светодиод мигал все время работы программы
{
PORTD = 0xFF; // на все пины (выводы) PORTD подается напряжение 5 В (LED ON)
_delay_ms(220); //задержка на 200ms
_delay_ms(220); ); // задержка на 200ms
PORTD = 0x00; // на все выводы PORTD подается низкий потенциал (земля)
_delay_ms(220); ); // задержка на 200ms
_delay_ms(220); ); // задержка на 200ms
}
}

Теперь код программы без комментариев.

/*
* C Program to Blink an LED with ATmega32 Microcontroller
*
*/
#include <avr/io.h>
#define F_CPU 1000000
#include <util/delay.h>
int main(void)
{
DDRD = 0xFF;
while(1)
{
PORTD = 0xFF;
_delay_ms(220);
_delay_ms(220);
PORTD = 0x00;
_delay_ms(220);
_delay_ms(220);
}
}

Видео, демонстрирующее работу схемы

(Проголосуй первым!)
Загрузка...
14 просмотров


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *