Светодиодная мигалка на микроконтроллере для радиолюбителя это своего рода «HelloWorld» для программиста. Сделать простую мигалку, конечно можно и на мультивибраторе. Взять пару транзисторов конденсаторов и не выносить себе мозг всякими там прошивками программированием. Но это путь пойдет для начинающих, а если вы уже в этом деле не новичок, то самое время начать изучать микроконтроллеры. К тому же мигалка на микроконтроллере намного интереснее. Так как в ней будет куча разных программно настраиваемых параметров.

В качестве «сердца» нашей мигалки будет выступать всеми известный микроконтроллер ATmega8, о том как программировать на языке под микроконтроллеры подробно будет описано в следующих статьях, здесь же приведем пример готового кода.

Схема светодиодной мигалки на микроконтроллере ATmega8
Принципиальная схема светодиодной мигалки на микроконтроллере ATmega8

Как видно схема очень простая, всего 4 светодиода которые подключаются к PORTD, к ножкам PD0,PD1,PD2,PD3. Значение ограничивающих сопротивлений R1-R4 — 300 Ом. Кнопка SB1 предназначена для установки режима мигания, а кнопка SB2 позволяет настраивать частоту с которой мигают светодиоды.

В бесконечно цикле while мы проверяем нажатие кнопок SB1 и SB2. При условии что нажата кнопка SB1 то мы увеличиваем значение переменной sw. Если данная переменная равна 0, то пишем в нулевой бит единицу, далее выжидаем время-делаем задержку. Далее записываем в нулевой бит ноль, опять выжидаем время, потом увеличиваем переменную j. В случае если кнопка SB1 не нажата то все повторяется до следующего бита и таким образом мы поочередно включаем светодиоды. Если переменная j будет больше 3-х то ей присваиваем ноль и эти операции повторяются вновь.

Исходный код программы мигалка на микроконтроллере


 int main(void)         
   {
  DDRD = 0xff;      /* все выводы порта D сконфигурировать как выходы */
  DDRC = 0x00;      //выводы порта С сконфигурировать как входы
 
  PORTC = 0xff;  // установить "1" на всех выводах порта C,
 // включаем подтягивающие резисторы
 
 int i=0; //для задержек
 int j=0; //для смены битов порта D
 int d=20; //для изменения периода миганий
 int sw=0; //для изменения режимов миганий
 
 while (1)          // Бесконечный цикл
 { 
 if (!(PINC & (1<<PINC4))) //если логический ноль на 4 бите порта С
 { sw++; //преключить режим миганий if(sw>4)sw=0;
 }
 if (!(PINC & (1<<PINC3))) //если логический ноль на 3 бите порта С 
{ d+=20; //увеличить период миганий if(d>260)d=20;
 }
 
 switch(sw)
 {
 case 0:
 DDRD |= 1<<j;
 for(int i=0;i<d;i++)_delay_us(50);
 DDRD &= ~(1<<j);
 for(int i=0;i<d;i++)_delay_us(50); j++; if(j>3)j=0;
 break;
 case 1:
 DDRD |= 1<<j;
 for(i=0;i<d;i++)_delay_us(50);
 DDRD &= ~(1<<j);
 for(i=0;i<d;i++)_delay_us(50);
 j--;
 if(j<0)j=3;
 break;
 case 2:
 DDRD &= ~(1<<j);
 for(i=0;i<d;i++)_delay_us(50);
 DDRD |= 1<<j;
 for(i=0;i<d;i++)_delay_us(50); j++; if(j>3)j=0;
 break;
 case 3:
 DDRD &= ~(1<<j);
 for(i=0;i<d;i++)_delay_us(50);
 DDRD |= 1<<j;
 for(i=0;i<d;i++)_delay_us(50);
 j--;
 if(j<0)j=3;
 break;
 case 4:
 DDRD=0xff;
 for(int i=0;i<d;i++)_delay_us(50);
 DDRD=0x00;
 for(int i=0;i<d;i++)_delay_us(50);
 break;
 }
 }
   } 

Компиляция программы осуществлялась в WinAVR , ну или в любой другой какая нравиться, тут не принципиально) После удачной компиляции полученный файл с расширением .hex можно закачать в микроконтроллера при помощи программы PonyProg, конечно можно использовать и любую понравившуюся программу. О том как прошить микроконтроллер была отдельная статья.

Сам проект в Atmel Studio 7  выложен по ссылке ниже,  там же находится исполняемый hex файл в папке debug.

Список радиодеталей
Обозначание Наименование Номинал Количество
1 DD1 Микроконтроллер Atmega8 Atmega8 1
2 R1-R4 Резистор 300 Ом 4
3 SB1,SB2 Кнопка - 2
Скачать исходники
Видео
Светодиодная мигалка на микроконтроллере ATmega8
  • 5
Только полноправные пользователи могут оставлять комментарии. Войдите , пожалуйста.

Популярные записи

Последовательный периферийный интерфейс SPI

Последовательный периферийный интерфейс SPI (Serial Peripheral Interface) — последовательный стандарт передачи данных....

Подключение кнопки к микроконтроллеру AVR

В это примере подключим и научимся обрабатывать события нажатия кнопок при помощи микроконтроллера AVR....

Распиновка наиболее популярных микроконтроллеров AVR

Ниже представлена распиновка наиболее ходовых микроконтроллеров семейства AVR.  Описание выводов, их...

Пишем свою первую программу на микроконтроллере AVR

Решил начать осваивать микроконтроллеры (далее МК) AVR. Думал что все просто раз и прошил микроконтроллера, но...