В статье будет рассмотрено подключение светодиодов к микроконтроллеру, работа с портами и написание программы на СИ. Статья, прежде всего, предназначена новичкам, которые только взялись за микроконтроллеры 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 | Поиск в магазине Отрон | ||||
Скачать список элементов (PDF)
Прикрепленные файлы:
- LED_to_AVR.rar (58 Кб)
Комментарии (3) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация