Підключення світлодіодів до AVR

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

Для початку потрібно вибрати мікроконтролер. У моєму випадку це ATmega8535. У даному випадку мікроконтролер можна брати будь-який, оскільки дане завдання легко реалізується під будь-який МК. Писати програму для мікроконтролера можна на Асемблері, Сі, Pascal-і та Bascom. Я використовував мову Сі, всі ці мови різні.
Конкретну різницю між Сі та Паскалем можна побачити нижче.

На С:

//Мигаючий світлодіод
void main() 
 { 
ddrB = 0b11111111; //задаємо порти B на вихід  
portB = 0b11111111; //за замовчуванням все вимкнено 
            while(1) 
            { 
             portB = ˜portB; //переключаємо стан світлодіода на зворотне 
             delay_ms(100); //робимо затримку на 100 мілісекунд 
            }          
 } 

на Pascal-і:

program First; 
begin 
  ddrB := $FF;  //задаємо порт B на вихід 
  portB := $FF; //за замовчуванням нічого не горить 
  while(1) do 
begin 
  portB := not(portB);     //переключаємо стан світлодіода на зворотне 
  delay_ms(100);           //робимо невелику затримку 
  end; 
 end.

Програму я писав у CodeVisionAVR V2.60 Evaluation, вона вийшла найпримітивнішою, але зате простою. Ось деякі фрагменти програми:

#include  // бібліотека  контролера 
#include  //бібліотека затримки 

volatile char FCV_A1;  //  змінні вимикачів
volatile char FCV_OP1;
volatile char FCV_OP2;

void main(void){

     while(1)      //безкінечний цикл
     {
        // B1 -> OP1, номер порту до якого підключений вимикач 
        DDRB = DDRB & 0xfd;
        FCV_OP1 = ((PINB & 0x02) == 0x02);
        // B2 -> OP2
        DDRB = DDRB & 0xfb;
        FCV_OP2 = ((PINB & 0x04) == 0x04);
        // B3 -> a1
        DDRB = DDRB & 0xf7;
        FCV_A1 = ((PINB & 0x08) == 0x08);

Ця частина коду мигає кожним світлодіодом по черзі:

	DDRD = 0xFF; // порт D встановлений як вихід
	PORTD = 0; // на порті D  знаходиться  0
	PORTD.0=1;//1 -> D0 //  запалює світлодіод 
	delay_ms(250);  // затримка в 250 мілісекунд
	PORTD.0=0;//0 -> D0 // гасить світлодіод
	delay_ms(250);
	PORTD.1=1;//1 -> D1
	delay_ms(250);
	PORTD.1=0;//0 -> D1
	delay_ms(250);
	PORTD.2=1;//1 -> D2
	delay_ms(250);
	PORTD.2=0;//0 -> D2

Функція switch (FCV_A1) {…} приводить в дію одну з частин програми(case 1 або default ) залежно від положення вимикача A1.

Функція
if (FCV_OP1) { } 
else{ … }  
або  
if (FCV_OP2) { }
else{ … }
слідкує за положенням вимикача OP1 або OP2, якщо увімкнений, виконується один з 2 кусочків коду підпрограм case 1 або default, а якщо вимкнений то інакше, залежно від положення вимикача  A1.

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

Принципова схема:

Принципова схема

Світлодіоди можна включити і по-іншому:

Схема підключення світлодіодів

У цій схемі на 1 порт підключаються одразу два світлодіоди через транзистор. У цьому випадку транзистор працює як ключ.

Схема підключення світлодіодів

Тут світлодіод підключається через токоз обмежувальний резистор. При підключенні світлодіода на землю, він буде горіти тоді, коли на виході порту буде логічна 1, а при підключенні на +, на виході порту повинен бути 0.

Ще можна підключити так:

Схема підключення світлодіодів

PX – це ніжка використовуваного порту.

Кнопку або вимикач можна підключити ще і так:

Схема підключення кнопки

Мікроконтролер тактується від внутрішнього генератора на 8МГц

Байти конфігурації:
0xE4 LOW
або
LOW  SUT0 CKSEL3 CKSEL1 CKSEL0 відмічені запрограмовані фьюзи
HIGH чіпати не треба
запрограмований фьюз=0, а не запрограмований=1.
Перед встановленням фьюзів, їх потрібно спочатку прочитати з МК. Потім виставити потрібні фьюзи, наприклад, у  програмі Khazama AVR Programmer непрограмовані фьюзи позначаються галочкою.

Фото пристрою

Живлення схеми не повинно перевищувати 5 вольт, краще на вхід живлення поставити стабілізатор 7805.

Світлодіоди будь-які малопотужні. Для потужних світлодіодів використовувати схему з транзисторними ключами і зробити роздільне живлення, тобто МК живиться від одного стабілізатора 7805, а світлодіоди від іншого, наприклад L7805 (1.5А). Стабілізатор і ключові транзистори слід вибирати в залежності від потужності світлодіодів.

Нижче ви можете скачати вихідні, прошивку, проект у Proteus та Flowcode

Список радіоелементів

Обозначення Тип Номінал Кількість Примітка
U1 МК AVR 8-біт
ATmega8535
1
R1-R8 Резистор
220 Ом - 1 кОм
8
R9-R11 Резистор
10 кОм
3
V1-V8 Світлодіод 8
Тактова кнопка 3

Прикреплені файли:

Top