Підключення світлодіодів до 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 |
Прикреплені файли:
- LED_to_AVR.rar (58 Кб)