Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

Подключение светодиодов к микроконтроллеру 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 Поиск в магазине ОтронВ блокнот
Добавить все

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

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

Теги:

Василий Сергеевич Опубликована: 2012 г. 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (3) | Я собрал (0) | Подписаться

0
Владимир #
На втором рисунке с транзисторным ключем батарейку переверните, а то минус на анод идет, а на коллектор плюс. Так работать не будет
Ответить
0
Руслан #
У меня похожая задача, но диод работает в аналоговом режиме (с плавным миганием), к каким пинам его надо подключить?
Ответить
0
mazzi #
На рисунке с двумя светодиодами включенными навстречу друг-другу между двумя портами можно убрать один резистор, а светодиоды соединить встречно параллельно. Таким образом экономим 1 резистор и схема становится проще.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Программатор Pickit3
Программатор Pickit3
USB-реле (2 канала) Модуль измерения тока на ACS712 (30А)
вверх