Подключение светодиодов к микроконтроллеру 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-битATmega85351
R1-R8
Резистор220 Ом — 1 кОм8
R9-R11
Резистор10 кОм3
V1-V8
Светодиод8

Тактовая кнопка3
Добавить все

Скачать список элементов (PDF)

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

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

Ваш адрес email не будет опубликован.