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

Подключение светодиода к линии порта ввода/вывода

Изучив данный материал, в котором все очень детально и подробно описано с большим количеством примеров, вы сможете легко овладеть и программировать порты ввода/вывода микроконтроллеров 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) 
 { 
 } 
}  

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 8

    0
    Тема не раскрыта. Нет обоснования использования схемы подключения «анодом к микроконтроллеру» или наоборот (плюсы, минусы, особенности). И если уж считать точно, то кроме падения на светодиоде нужно еще учитывать падение на портах (VOL, VOH).
      0
      Приношу свои извинения, но тема раскрыта! Цель данной статьи показать как подключить светодиод к микроконтроллеру и показать тому кто только начинает изучать микроконтроллеры. Дать обоснования использования схемы подключения «анодом к микроконтроллеру» или наоборот (плюсы, минусы, особенности) — невозможно, так как показывает практика их просто нет!
        +1
        Ну почему же. Например, зачастую питание контроллера подготавливается определенным образом (стабилизаторы, индуктивности). Чем меньше ток потребляется по этой цепи, тем проще ее сделать и лучше она получится (те же индуктивности характеризуются не только самой величиной индуктивности, но и максимальным током, при которой она еще работает как индуктивность). Земляные же цепи обычно такими ограничениями не обладают. Поэтому для большинства применений лучше использовать схему «катодом к линии порта ввода/вывода» и запитывать не от «контроллерного» питания.

        Ну и если уж тренируете новичка, то с терминологией не путайтесь. Подтягивающими резисторами обычно называют такие, которые «подтягивают» какие то линии в/в к питанию или «земле» для формирования устойчивых состояний 1/0 и/или формирования нагрузки линий в/в. То что рассматривается в статье обычно называют токоограничивающим резистором.
      0
      Расчет резистора для светодиода — неверен. Причем тут ток порта ввода-вывода? интересует только ток, который должен течь через светодиод. Светодиоды питаются током, а не напряжением. Грубо говоря, возьмем микроконтроллер с бесконечно большим током на порту — тогда резистор получается равен нулю, и это спалит светодиод.

      В общем, краткое содержание статьи:
      easyelectronics.ru/
        0
        знать максимальный ток порта надо для согласования с током базы транзистора, при подключении нескольких светодиодов, резисторных делителей и т.п.
          –1
          Чем питается светодиод даже трудно сказать: током или напряжением… (теслатехники, например включают светодиоды без токовым импульсом)… На практике доказано что расчет резистора верен!!!
            0
            Вам правильно сделали замечание, а вы упираетесь. Нужно сначала рассмотреть характеристики светодиода, определится с необходимым через него током (обычно 3-5мА вполне достаточно). Потом уже переходить к расчету токоограничивающего резистора и уже потом проконтролировать, не превышает ли он максимально допустимый через пин. Но никак не в обратной последовательности.

            И по поводу «На практике доказано что расчет резистора верен». Это значит, что при включении сразу не сгорело?
              0
              просто «практика» допускает отклонения параметров многих деталей. Например, ваш светодиод мог вполне выдержать такое включение, но при этом работать на пределе, быстрее вырабатывая свой ресурс. Можно ли считать «практикой» симулятор? Не уверен.

          Only users with full accounts can post comments. Log in, please.