Светодиодная мигалка на микроконтроллере для радиолюбителя это своего рода «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
Скачать исходники
Видео
Автор
Staticvoid

Администратор сайта http://www.radiodetector.ru

Светодиодная мигалка на микроконтроллере ATmega8
  • 5

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

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

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

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

Измерение температуры при помощи датчика Lm35 и ATmega 16

Всем привет! Хочу поделится одной простой схемкой для измерения температуры на микроконтроллере ATmega 16 и...

Простой звонок на микронтроллере Attiny13

В этом примере рассмотрим схему звонка на микроконтроллере Attiny13. Такой звонок можно использовать где...

Фьюз (Fuse) биты микроконтроллеров

Фьюз (Fuses) биты микроконтроллера предназначены для настройки МК на определенную работу . Включая или...