25 марта 2015

Устройство и работа портов ввода-вывода микроконтроллеров AVR. Часть 2

Программирование
Tutorial
Recovery mode
Подключение светодиода к линии порта ввода/вывода

Изучив данный материал, в котором все очень детально и подробно описано с большим количеством примеров, вы сможете легко овладеть и программировать порты ввода/вывода микроконтроллеров AVR.


Пример будем рассматривать на микроконтроллере ATMega8.

Программу писать будем в Atmel Studio 6.0.

Эмулировать схему будем в Proteus 7 Professional.

Первым примером в изучении микроконтроллеров является подключение и управление светодиодом, это самый простой и наглядный пример. Этот пример стал классическим при изучении микроконтроллеров, как программа «Hello World!» при изучении прочих языков программирования.
Максимальный ток, который способен пропустить каждый порт ввода/вывода составляет 40 mA.
Максимальный ток, который способна пропускать каждая линия порта ввода/вывода составляет 20 mA.
Прежде чем подключать нагрузку, в том числе и светодиод к линиям порта ввода/вывода нужно знать, что можно спалить микроконтроллер превысив допустимую нагрузку на линию порта ввода/вывода.
Что бы ограничить ток, который протекает через линии порта ввода/вывода микроконтроллера нужно рассчитать и подключить резистор.



Рис: Рапиновка светодиода.



Рис: Подключение светодиода анодом к микроконтроллеру.



Рис: Подключение светодиода катодом к микроконтроллеру.

Сопротивление токоограничивающего резистора подключаемого к линиям портов ввода/вывода при подключении светодиода рассчитывается по формуле:



где:
Vs — напряжение источника питания;
Vsp — падение напряжения на линии порта ввода/вывода;
Vd — прямое падения напряжения на светодиоде;
Id — прямой ток на светодиоде;
Кn — коэффициент надежности роботы светодиода;

Пример:
— напряжение источника питания – ;
— прямое падения напряжения на светодиоде – (Берётся с datasheet на светодиод);
— прямой ток на светодиоде – 10мА (Берётся с datasheet на светодиод);
— коэффициент надежности роботы светодиода – 75% (Берётся с datasheet на светодиод);
— падение напряжения на линии порта ввода/вывода – 0,5В (Берётся с datasheet на микроконтроллер: Vol(output low voltage) – если ток втекает, и Voh (output high voltage) – если ток вытекает);



Таким образом номинал резистора R = 166,66 Om, подбирается ближайшее большее значение сопротивления.

Если не известно прямое напряжение светодиода, сопротивление можно рассчитать по закону Ома.



где:
U — напряжение, приложенное к участку цепи;
I — номинальный ток линии порта ввода/вывода.

Пример:
— напряжение, приложенное к участку цепи – 4,5В;
— номинальный ток линии порта ввода/вывода – 20мА.



Определив номинал резистора R, необходимо рассчитать мощность P, измеряемая в ваттах, которая будет выделяться в резисторе, в виде тепла при протекании тока в цепи.



где:
U – напряжение, приложенное к участку цепи;
I — номинальный ток линии порта ввода/вывода.

Пример:
— напряжение, приложенное к участку цепи – 4,5В;
— прямой ток на светодиоде – 20мА.



Рассчитав выделяемую мощность на резисторе, выбираем ближайшее большее значение мощности резистора. Если рассеиваемой мощности резистора будет недостаточной, то он может выйти из строя.

— подключения маломощного светодиода анодом к линии порта ввода/вывода:



// Подключаем внешние библиотеки
#include <AVR/io.h> 
#include <stdint.h> 

// Основная программа
int main(void) 
{ 
 
 // Настраиваем порты ввода/вывода
 DDRC  = 0b11111111;  //Настраиваем все разрады порта С на режим "Выход"
 PORTC = 0b11111111;  //Устанавливаем все разряды порта C в лог.«1» (Навыходе порта напряжение равное Vcc)
 
 // Вечный цикл
 while (1) 
 { 
 } 
}


— подключения маломощного светодиода катодом к линии порта ввода/вывода:



// Подключаем внешние библиотеки
#include <AVR/io.h> 
#include <stdint.h> 

// Основная программа
int main(void) 
{ 
 
 // Настраиваем порты ввода/вывода
 DDRC  = 0b11111111;  //Настраиваем все разряды порта С на режим "Выход"
 PORTC = 0b00000000;  //Устанавливаем все разряды порта C в лог.«0»  (На выходе порта напряжение равное GND) 
 
 // Вечный цикл
 while (1) 
 { 
 } 
}


— подключения маломощного светодиода анодом и катодом к линии порта ввода/вывода:



// Подключаем внешние библиотеки
#include <AVR/io.h> 
#include <stdint.h> 

// Основная программа
int main(void) 
{ 
 
 // Настраиваем порты ввода/вывода
 DDRD  = 0b11111111;  //Настраиваем все разряды порта D на режим "Выход"
 PORTD = 0b11111111;  //Устанавливаем все разряды порта D в лог.«1» (На выходе порта напряжение равное Vcc) 
 
 DDRC  = 0b11111111;  //Настраиваем все разряды порта C на режим "Выход"
 PORTC = 0b00000000;  //Устанавливаем все разряды порта C в лог.«0»  (На выходе порта напряжение равное GND) 
 
 // Вечный цикл
 while (1) 
 { 
 } 
}  

Теги:программированиепрограммирование микроконтроллеровпрограммирование avrмикроконтроллеры avrподключение кнопки к avrподключение светодиода к avr
Хабы: Программирование
-1
32k 105
Комментарии 8
Похожие публикации
Программист BIOS
от 160 000 ₽AquariusМосква
Инженер-разработчик
от 150 000 ₽StarLineСанкт-Петербург
Верификатор (UVM)
от 200 000 ₽KraftwayМоскваМожно удаленно
MCU Developer - Разработчик встраиваемых систем
от 100 000 до 120 000 ₽TekvelМоскваМожно удаленно
Лучшие публикации за сутки