Ацп на tiny13 и 16 светодиодов

OSBoy notes.

Записки обо всём.

ATtiny13 — Регулятор ШИМ с использованием АЦП

В предыдущем примере был подробно рассмотрен принцип работы ШИМ в AVR микроконтроллерах, на примере ATtiny13. Теперь же рассмотрим пример реализации ШИМ регулятора.

Все опыты я провожу на своей отладочной плате, соответственно код привожу применительно к ней:

Видим, что код программы очень похож на код из предыдущего примера. Разница лишь в том, что в предыдущем примере, для демонстрации изменения ШИМ-сигналов на выходе, значение регистров сравнения плавно изменялось в бесконечном цикле, а здесь же — мы будем менять их вручную, с помощью переменного резистора, подключенного ко входу аналого-цифрового преобразователя (АЦП). На моей плате переменный резистор подключен ко входу ADC2 (PB4). АЦП будет отслеживать изменение входного напряжения и соответственно изменять значения регистров сравнения для таймера ШИМ.

Настройка АЦП

Рассмотрим подробнее, какие регистры отвечают за работу АЦП.

Регистр ADMUX (ADC Multiplexer Selection Register).
Для ATtiny13 его структура выглядит следующим образом:

Бит 6 — REFS0 (Reference Selection Bit): выбирает опорный сигнал напряжения для АЦП: *

  • 0 — в качестве опорного используется напряжение Vсс;
  • 1 — используется внутренний источник опорного напряжения 1.1В.

Бит 5 — ADLAR (ADC Left Adjust Result): Определяет порядок записи результатов преобразования в регистры ADCL и ADCH (см. ниже).

Биты 1-0 — MUX1-0 (Analog Channel Selection Bits): Отвечают за выбор входного канала: *

  • 00 — ADC0 (PB5);
  • 01 — ADC1 (PB2);
  • 10 — ADC2 (PB4);
  • 11 — ADC3 (PB3).

* Если какой-либо из битов REFS0, MUX0, MUX1 изменяется во время преобразования, изменение не будет действовать до тех пор, пока это преобразование не будет завершено (пока не установится бит ADIF в регмстре ADCSRA).

Остальные биты не используются (зарезервированы) и доступны только для чтения (в них всегда нули).

Регистр ADCSRA (ADC Control and Status Register A):

Бит 7 — ADEN (ADC Enable): Установка этого бита активирует АЦП. Если сбросить этот бит во время преобразования, то преобразование остановится.

Бит 6 — ADSC (ADC Start Conversion): Запускает преобразование. В режиме одиночного преобразования, нужно устанавливать этот бит для каждого преобразования. В режиме автоматического преобразования — нужно установить этот бит для запуска первого преобразования.

Бит 5 — ADATE (ADC Auto Trigger Enable): Активирует автопреобразование. АЦП начнет преобразование на положительном фронте триггерного сигнала. Источник триггера выбирается установкой бита выбора триггера АЦП: ADTS регистра ADCSRB.

Бит 4 — ADIF (ADC Interrupt Flag): Флаг прерывания АЦП. Устанавливается по завершению преобразования, когда регистры данных обновились.

Бит 3 — ADIE (ADC Interrupt Enable): Разрешает прерывания АЦП.

Биты 2-0 — ADPS2-0 (ADC Prescaler Select Bits): Устанавливают предделитель тактовой частоты для АЦП:

  • 000 — 2;
  • 001 — 2;
  • 010 — 4;
  • 011 — 8;
  • 100 — 16;
  • 101 — 32;
  • 110 — 64;
  • 111 — 128.

Регистры данных ADCH и ADCL.

Результат аналого-цифрового преобразования может принимать значения от 0 до 2 n -1 (где n — число разрядов АЦП). В ATtiny13 на борту десятиразрядный АЦП. Соответственно, результат АЦП может принимать 1024 значения (от 0 до 1023).
0 (0x00) — будет соответствовать входному напряжению 0В;
1023 (0x3FF) — входному напряжению, равному выбранному опорному (в зависимости от значения бита REFS0 регистра ADMUX).

По завершению преобразования, результат записывается в регистры данных ADCH и ADCL (соответственно, cтарший и младший регистры данных АЦП), в зависимости от значения бита ADLAR регистра ADMUX. Если бит ADLAR установлен — то ориентирование данных левое, если сброшен (по умолчанию) — то правое:

Когда ADCL считывается, регистр данных ADC не обновляется, пока не будет прочитан ADCH. Таким образом, если выбрано левое ориентирование данных (ADLAR=1) и нам достаточно 8-битной точности, то достаточно прочитать значение ADCH. В противном случае — сначала нужно считать значение ADCL, затем ADCH.

Регистр ADCSRB (ADC Control and Status Register B):

Биты 2-0 — ADTS2-0 (ADC Auto Trigger Source): Выбирают источник сигнала для старта преобразования в режиме автоизмерения. Преобразование будет запускаться каждый раз при установке выбранного флага прерывания:

  • 000 — постоянно запущено;
  • 001 — аналоговый компаратор;
  • 010 — внешнее прерывание INT0;
  • 011 — таймер/счётчик T0, по совпадению с регистром сравнения A;
  • 100 — таймер/счётчик T0, по переполнению;
  • 101 — таймер/счётчик T0, по совпадению с регистром сравнения B;
  • 110 — внешнее прерывание PCINT0.

Бит 6 — ACME (Analog Comparator Multiplexer Enable): в этой статье я не буду затрагивать применение этого бита, т.к. аналоговый компаратор — это уже отдельная тема.

Остальные биты не используются (зарезервированы) и доступны только для чтения (в них всегда нули).

Регистр DIDR0 (Digital Input Disable Register 0).

Биты 5-2 — ADC3D-ADC0D (ADC3-0 Digital Input Disable): Если какой-либо из входов ADC3-0 используется как аналоговый, то в соответствующий бит ADC3D-ADC0D нужно устанавливать логическую единицу. При этом, буфер цифрового ввода на соответствующем выводе АЦП отключается для экономии энергии. Соответствующий бит PIN-регистра при этом всегда будет содержать ноль.

Возвращаемся к нашей программе.

Итак, мы настроили таймер для ШИМ, и запустили АЦП: он будет постоянно отслеживать напряжение на входе ADC2, регулируемое переменным резистором, а каждый раз по окончанию преобразования будет срабатывать прерывание ISR(ADC_vect), в теле которого будут изменяться значения регистров сравнения для ШИМ-таймера, в зависимости от измеренного напряжения на входе АЦП. И не забываем, после настройки прерывания, разрешить прерывания глобально!

Трёхканальный UART АЦП на ATtiny13

Привет хабр. Я уже давно вынашивал сделать UART Аналогового-Цифрового Преобразователя на ATtiny13, зачем делать именно на ATtiny13 ведь есть, к примеру, ATmega8 имеет аж 6 (для DIP корпуса) портов на которых, при помощи мультиплексора, можно проводить измерение АЦП?
Причин несколько:

— ATtiny13 стоит дешевле;
— В ATtiny13 более оптимально используются ресурсы микроконтроллера;
— Размеры;
— Энергопотребление;
— Просто мне так захотелось.

Конечно на мои аргументы можно найти множество контраргументов, например ATmega8 при использовании V-USB может превратится в плату ввода/вывода которой не нужен переходник с UART на USB, правда кроме последнего, и с этим пожалуй не поспоришь.

Поставил себе за цель получить опыт работы с программный UART’ом именно на ATtiny13, а опыт как говорится, бесценный. По-любому пригодится для будущих проектов.
Ну ладно, не буду тянуть и покажу, как работает в железе:

Пару слов по схеме, кстати, вот она:

Скажу сразу, что не плохо бы уделить внимание фильтру питания, у меня это два конденсатора C1 — желательно «керамика» и как можно ближе к ножкам МК, ну и C2 — электролитический, второй можно поставить на 100 мкФ но у меня такого не оказалось под рукой, нашёл на 470 мкФ 10 В. Так же было бы не плохо по конденсатору на каждый порт АЦП, и как можно ближе к МК. R1 не принципиален, но по правилах «хорошего тона» — должен присутствовать.

Читайте также  Терморегулятор с предварительной установкой 4-х температур контроля для термометра помещения

Данные, как Вы могли видеть, приходят в формате 1023,666,10, ну хоть бери и сохраняй в формате CSV на компе или же другом устройстве, которое будет принимать эти данные.
Кстати принимает данные в моём случае недорогой преобразователь USB — UART основан на микросхеме PL2303HX. Пробовал питать ATtiny13 от бортовых 3.3 В что на преобразователе, по мультиметру к стати 3.4 В, работает, я поначалу думал что изменение питания на такое высокое значение как-то скажется на отправке данных, я где-то читал страшилку мол, нагрей на пару градусов, охлади и всё, прощай адекватные данные… Ничего подобного, охлаждал льдом, слегка грел зажигалкой(без фанатизма) — всё работает нормально, потерь не наблюдал.

Пару слов про код — код написан в среде BASCOM-AVR на Basic’е, вот предлагаю Вашему вниманию мой код на написание я потратил около чем 4-5 часов, так как я раньше не встречался с Basic’ом, но это время было потрачено не только на написание кода но и на то, чтобы разобраться с особенностями BASCOM-AVR, отладка и всякое такое.

Что делает данные код — по началу создаётся программный UART, тут это делается очень просто, задаём нужные параметры, порт, скорость и прочее, потом осуществляется конфигурация АЦП, объявление функции, ну это понятно, потом формируется строчка и результатами усреднённого числа от Samples выборок АЦП. Почему я выбрал именно 64 а не к примеру 42 или 108? Ну потому что 1023 * 64 это равно 65 472, а для типа Word, который я использовал для буфера максимальное значение которое переменная может принять — 65 535, это число является наибольшим числом, представимом в виде двухбайтного слова без знака, если добавить ещё одну выборку переменная попросту обнулится если АЦП возвратит 1023. С типом Long почему-то возникали проблемы, да лично мне и 64 выборки хватает, ниже я покажу как это работает на графике. Ну и потом в UART выводятся результаты.

Как Вы можете видеть шум конечно присутствует, даже не смотря на то что выводится усреднённое значение из 64 выборок, судя по даташиту шум в ± 2 LSB — норма, у меня же шум 1 LSB.

Как Вы можете видеть, ATtiny13 отправляет значения 15-16 раз за секунду, что я считаю не плохо учитывая что это программный UART да и тиня делает по 64 измерения на порт, а их причём три.

МК потребляет следующий ток:

Питание 5 В — 2.71 мА
Питание 3.3 В 1.75 мА

Пару слов о программированию — как я сказал на видео, частота МК 1.2 МГц, все фьюзы по умолчанию, как в моём предыдущем топике Музыкальный дверной звонок в стиле Star Wars.
Вот фьюзы из калькулятора фьюзов:

Ну и под конец пару фоток из разных ракурсов:

Простой цифровой вольтметр на ATtiny13

Microchip ATtiny13

Бабанин В. — Красноярский край

Предлагается проверить методику повышения точности АЦП на «копеечном» микроконтроллере (МК) ATtiny13. В журнале РадиоЛоцман №07-08 за 2020 г. [1] представлен цифровой вольтметр (ЦВ) с разрешением 18 бит, выполненный на базе «новейшего МК EFM8LB12, оснащенного высокоскоростным 14-разрядным SAR АЦП». Метод повышения точности хорошо описан и подтвержден автором в реальных испытаниях.

Если опираться на выводы вышеупомянутой публикации, повышение разрешающей способности 10-разрядного АЦП до 12 бит потребует оперировать с 16-битной разрядностью. Это необременительно даже для 8-разрядного ядра.

В свое время автор использовал цифровой вольтметр с двумя каналами на ATtiny13 [2, 3], в котором для повышения стабильности показаний использовалось усреднение по 64 отсчетам. Деление 16-разрядной суммы на некий удобный коэффициент давало возможность отображать на дисплее напряжение до 40 В с разрешением в младшем разряде 10 мВ. Точность, естественно, оставалась паспортной для данной разрядности АЦП. Однако вольтметр стал более комфортен и информативен в работе, появилось доверие к младшему разряду.

Эта разработка оказалась очень удобной для изучения возможностей метода повышения разрядности АЦП по причине предельной простоты (Рисунок 1). В аппаратном плане из соображений доступности заменен только дисплей. Изменения в программе в основном коснулись обработки данных аналого-цифрового преобразования и драйвера индикатора.

Рисунок 1. Схема двухканального цифрового вольтметра.

Высокая частота преобразований, около 50 Гц на канал, обеспечивает необходимую передискретизацию. Суммируются последовательно каждые 8 10-разрядных результатов преобразования и отбрасывается самый младший бит. Получаем один 12-битный отсчет.

Эта операция называется прореживанием. 16 таких отсчетов суммируем и, как уже реализовано ранее, делим на удобный коэффициент, который учитывает делитель (или усилитель) напряжения на аналоговом входе МК. Можно назвать это усреднением с нецелым коэффициентом. Показания вольтметра после доработки программы не изменились, но поведение младшего разряда стало иным и субъективно лучше предыдущего. Может этому способствует то обстоятельство, что теперь текущее показание вольтметра строится на 128 элементарных измерениях, т.е. больше в два раза?

На многих интернет-площадках предлагаются 4-разрядные 7-сегментные светодиодные индикаторы на базе ИС TM1637. Обращает внимание невысокая цена индикаторов с двоеточием посередине, предназначенных для часов. Двух размеров 0.36/0.56″, широкой гаммы цветов, удобного двухпроводного интерфейса и возможности подключить несколько кнопок более чем достаточно, чтобы выбрать этот дисплей для вольтметра. Небольшой размер программ обслуживания TM1637 (около 80 байт) позволяет применять недорогие ATtiny13 и строить на них измерители, которые превосходят по удобству и точности предлагаемые там же трехразрядные модули вольтметров.

Для управления TM1637 используется усеченный вариант шины I 2 C, в протоколе которого отсутствует адресация подчиненного устройства. Достоинством здесь является простой протокол и малые затраты программной памяти. Недостатком модуля оказалась низкая скорость обмена данными, но его несложно инвертировать. Каждый информационный вход имеет RC цепь с постоянной времени около 0.1 мс. В данном случае это ощутимо увеличивало время обновления и, хоть и немного, программную память. Уменьшая емкость конденсаторов, скорость передачи данных можно существенно увеличить. Без них модуль работает с микроконтроллером, тактируемым 10 МГц, без временных задержек в подпрограммах и обеспечивает обмен данными за 1 мс, в том числе и опрос состояния кнопок. С заклеенной крохотным кусочком черной изоляционной ленты верхней точкой и удаленными входными конденсаторами часовой индикатор использован в цифровом вольтметре (Рисунок 2).

Рисунок 2. Макет вольтметра.

Кнопки подключены по схеме, приведенной в техническом описании, проводники подпаяны к выводам индикатора и микросхемы модуля TM1637, которые обозначены на Рисунке 3. На схеме четыре кнопки (для расширения возможностей управления), но демонстрационной программе будет достаточно даже одной. Нажатие на любую их них зажигает/гасит светодиод и переключает канал вольтметра.

Рисунок 3. Подключение кнопок к модулю TM1637.

Настройку в любой точке шкалы можно выполнить, изменяя сопротивления в делителях и/или подбирая константы (Coef) в программе для каждого канала. Значение константы в исходнике (vm05.asm) и отношение сопротивлений резисторов R1/R2 = 2.28 определяют входное напряжение около 20 В. Делитель рассчитывается из условия непревышения напряжения питания на аналоговом входе МК (диоды на землю и на питание приветствуются). Максимальное напряжение на входе вольтметра желательно ограничить 40 В. Программная память микроконтроллера использована наполовину и позволит при необходимости расширить возможности приборчика. Исходный текст на ассемблере и код для загрузки доступны.

Читайте также  Детектор загрязнения окружающего воздуха

Ацп на tiny13 и 16 светодиодов

Регистр DDRB=0 — переключение порта на вход,

DDRB=1 — переключение порта на выход

При DDRB=0, PORTB=1 включает подтягивающий регистр

Таймер Timer0

General Timer/Counter Control Register – GTCCR — основной регистр управления таймером/счетчиком

Bit 0 ( PSR 10) = 1 — сброс предделителя. Устанавливается = 0 аппаратно.

Bit 7 ( TSM ) = 1 — режим синхронизации. В этом режиме, значение записанное в бит PSR 10 ( Bit 0) сохраняется, сигнал сброса предделителя удерживается. Это гарантирует остановку и конфигурирование таймера/счетчика без риска его изменение во время конфигурирования. При записи в бит TSM нуля, бит PSR 10 очищается аппаратно, и таймер/счетчик запускается.

Timer/Counter Control Register A – TCCR0A — регистр A управления таймером/счетчиком

Bits 7:6 – COM0A1, COM0A0 Compare Match Output A Mode (ДШ стр. 65 — 66)

Bits 5:4 – COM0B1, COM0B10 Compare Match Output B Mode (ДШ стр. 66 — 67)

Bits 3, 2 – Res Reserved Bits

Bits 1:0 – WGM01,WGM00 Waveform Generation Mode (ДШ стр. 67)

Timer/Counter Control Register B – TCCR0B регистр B управления таймером/счетчиком

Bit 7 – FOC0A Force Output Compare A (ДШ стр. 68)

Bit 6 – FOC0B Force Output Compare B (ДШ стр. 68)

Bits 5:4 – Res Reserved Bits

Bit 3 – WGM02 Waveform Generation Mode

Bits 2:0 – CS02, CS01, CS00 Clock Select

Нет источника (Таймер/Счетчик выключен)

Внешнее тактирование с вывода T0. Счет по заднему фронту

Внешнее тактирование с вывода T0. Счет по переднему фронту

Timer/Counter Register – TCNT0 — счетный 8-битный регистр. Не рекомендуется запись в регистр TCNT 0 без остановки таймера/счетчика.

Output Compare Register A – OCR0A — регистр A сравнения

Output Compare Register B – OCR0B — регистр B сравнения

Timer/Counter Interrupt Mask Register – TIMSK0 — регистр маскирования прерываний таймера

Bits 7..4, 0 – Res Reserved Bits

Bit 3 – OCIE0B Timer/Counter Output Compare Match B Interrupt Enable (ДШ стр. 69 — 70)

Bit 2 – OCIE0A Timer/Counter0 Output Compare Match A Interrupt Enable (ДШ стр. 70)

Bit 1 – TOIE 0 бит разрешения прерывания по переполнению (ДШ стр. 70)

Когда бит TOIE 0 установлен в 1, и бит I статусного регистра установлен, прерывания по переполнению разрешены. Соответствующее прерывание выполняется когда происходит переполнение таймера/счетчика, т.е. когда устанавливается бит TOV 0 регистра флагов прерываний таймера счетчика TIFR 0.

Timer / Counter 0 Interrupt Flag Register – TIFR 0 регистр флагов прерываний таймера счетчика

Bits 7..4, 0 – Res Reserved Bits

Bit 3 – OCF0B Output Compare Flag 0 B (ДШ стр. 70)

Bit 2 – OCF0A Output Compare Flag 0 A (ДШ стр. 70)

Bit 1 – TOV 0 флаг переполнения таймера/счетчика (ДШ стр. 70)

Бит TOV 0 устанавливается когда переполняется таймер/счетчик. TOV 0 очищается аппаратно после выполнения перехода по вектору прерывания. Альтернативно TOV 0 очищается записью логической 1 во флаг. Когда бит I статусного регистра SREG , TOIE 0 (разрешение прерываний по переполнению таймера/счетчика), и TOV 0 установлены, прерывание по переполнению таймера/счетчика выполняется.

Установка этого флага зависит от установки битов WGM02, WGM01, WGM00 (см. таблицу 33 «Waveform Generation Mode Bit Description» на стр. 67).

АЦП Analog to Digital Converter

В режиме одиночного преобразования Single Conversion mode , канал АЦП должен быть выбран до начала преобразования. Канал АЦП может быть изменен одним тактовым циклом после записи в ADSC единицы. Однако простой метод требует ожидания завершения преобразования перед сменой канала.

В режиме непрерывного преобразования выбор канала АЦП всегда должен прозводиться перед первым преобразованием. Канал АЦП может быть изменен одним тактовым циклом после записи в ADSC единицы. Однако простой метод требует ожидания завершения первого преобразования перед сменой канала. Т.к. следующее преобразование запустилось автоматически, результат будет отражать предыдущее измерение. Последующее преобразование будет отображать результат для нового канала.

ADC Multiplexer Selection Register – ADMUX

Bit 7 – Res Reserved Bits

Bit 6 — выбор опорного напряжения. 0 — напряжение питания, 1 — внутренний источник 1,1 В.

Bit 5 – ADLAR выравнивание результата: 1 — по левому краю, 0 — по правому

по правому краю — старшие два бита в ADCH, а младшие в ADCL

по левому — старшие биты в ADCH, а два младших бита в ADCL.

Bits 4. 2 – Res Reserved Bits

Bits 1:0 – MUX1, MUX0 — выбор канала АЦП:

ADC Control and Status Register A – ADCSRA

Bit 7 – ADEN включение АЦП = 1, выключение АЦП = 0

Bit 6 – ADSC запуск преобразования

В режиме одиночного преобразования запись 1 запускает преобразование. В режиме непрерывного преобразования запись 1 запускает первое преобразование. Запись 1 после старта преобразования или во время преобразования увеличивает время выполнения до 25 тактовых циклов вместо положенных 13 циклов. Первое преобразование выполняет инициализацию АЦП.

Bit 5 – ADATE запись 1 включает режим авто-запуска АЦП. АЦП начинает преобразование по положительному фронту выбранного сигнала. Источник сигнала выбирается битами ADTS в регистре ADCSRB .

Bit 4 – ADIF флаг прерывания АЦП. Устанавливается по окончании преобразования. Сбрасывается аппаратно или принудительно — записью 1.

Bit 3 – ADIE бит разрешения прерываний АЦП. 1 — прерывания разрешены (бит I регистра SREG должен быть установлен).

Bits 2:0 – ADPS 2, ADPS 1, ADPS 0 установка делителя тактовой частоты для АЦП:

ADC Control and Status Register B – ADCSRB

Bits 7, 5..3 – Res Reserved Bits

Bits 2:0 – ADTS2, ADTS1, ADTS0 выбор источника автозапуска АЦП:

0 0 0 Режим непрерывного преобразования

0 0 1 Аналоговый компаратор

0 1 0 Внешнее прерывание 0

0 1 1 Таймер счетчик сравнение с регистром Match A

1 0 0 Переполнение таймера/счетчика

1 0 1 Таймер счетчик сравнение с регистром Match B

1 1 0 Pin Change Interrupt Request

Digital Input Disable Register 0 – DIDR0

Bits 5..2 – ADC 3 D . ADC 0 D отключение цифровых входов ADC 3. 0

Когда бит установлен в 1, цифровой входной буфер на соответствующем входе аналого-цифрового преобразователя блокируется. Пока этот бит установлен с соответствующего входа будет читаться 0. Когда не нужен соответствующий цифровой вход, отключение буфера уменьшает потребляемую мощность.

Бегущие огни на ATtiny2313

В этой статье мы сделаем акцент на портах ввода/вывода МК ATtiny2313 и заставим их работать на выход. То есть ножка микроконтроллера (МК) будет выдавать сигнал либо логической единички, либо нуля. Приказывать, что выдавать на ножку, будем мы сами, а точнее, программа, которую мы с вами разработаем.

Все начинали изучать AVR c мигания светодиода. Мы даже делали целую гирлянду из 4 светодиодов в этой статье. Но что, если 4 светодиодов нам мало, и мы хотим чего-то большего? Ну раз хочется, то давайте сделаем!

Выбор микроконтроллера

“Подопытным кроликом” у нас будет старый добрый МК ATtiny2313

Долго не думая, находим в интернете на него даташит и смотрим цоколевку

Так как я хочу навесить на него кучу светодиодов и сделать из них что-то подобие бегущей дорожки, для нас важно рассмотреть, какие пины (выводы МК) позволят мне это сделать. Что мне здесь надо найти? Это, конечно же, порты ввода/вывода. В ATtiny2313 их три группы: порт А, порт В и порт D. В группе порта А у нас три пина – это PA0, PA1,PA2. В группе порта В их уже восемь (PB0…PB7) и в группе порта D семь пинов (PD0…PD6). Итого в сумме 18 пинов, на каждый из которых можно навесить по светодиоду. То есть теоретически, наш МК может управлять 18 светодиодами, которые могут светится независимо друг от друга. Про порты ввода/вывода можно подробно прочитать на сайте easyelectronic по этой ссылке.

Читайте также  S7-200 создание hmi интерфейса

Характеристики светодиодов

Не забываем, что светодиоды делятся на индикаторные и осветительные. Индикаторные светодиоды обладают слабым свечением и используются для индикации каких-либо процессов, происходящих в электронной цепи. Для них характерно слабое свечение и малый ток потребления

Ну и осветительные светодиоды – это те, которые используются в ваших китайских фонариках, а также в LED-лампах

В нашей статье мы будет использовать индикаторные светодиоды. Светодиод – это токовый прибор, т.е. для его нормальной работы требуется номинальный ток, а не напряжение. При номинальном токе на светодиоде падает некоторое напряжение, которое зависит от типа светодиода (номинальной мощности, цвета, температуры). Ниже табличка, показывающая какое падение напряжения бывает на светодиодах разных цветов свечения при номинальном токе:

Поэтому подключать их напрямую к МК с питанием в 5 Вольт запрещено. Для них это обернется летальных исходом. В первую очередь сгорят те, кто требует для своей работы небольшого напряжения: красные, желтые и оранжевые светодиоды. Сгореть могут как светодиоды, так и выход МК. Чтобы такого не произошло, надо последовательно со светодиодом ставить токоограничивающий резистор. Лучше всего такой резистор подобрать с помощью магазина сопротивления, либо с помощью потенциометра, включенного по схеме реостата. После того, как мы добились умеренного свечения светодиода, замеряем наше сопротивление и ставим постоянный резистор близкий к измеренному номиналу.

Если такой возможности нет, то делаем простейший расчет.Например, у вас в арсенале имеются желтые светодиоды. Питание нашего МК 5 Вольт, следовательно, напряжение логической единички также 5 Вольт. Так как на желтом светодиоде у нас падение напряжения составляет примерно 2 Вольта, значит, на токо-ограничивающем резисторе должно упасть 3 Вольта. Ток через светодиод берем в среднем 15-20 мА. Исходя из закона Ома высчитываем значение сопротивления: I=U/R —–> R=U/I=3/15=0,2 килоома или 200 Ом. На практике, резистора, номиналом в 200-500 Ом, хватает за глаза.

Способы подключения светодиода на порт МК

1) Это прямой способ, при котором включение светодиода происходит при наличии высокого логического уровня, то есть единички на выходе порта МК:

2) Инверсный способ, при котором светодиод загорается только тогда, когда на выходе порта будет низкий логический уровень, то есть ноль.

Умеренно-светящийся светодиод потребляет силу тока в 15-20 мА. То есть если запитать одновременно все светодиоды с помощью нашего МК, то скорее всего он не выдержит такого издевательства и испустит белый дымок сгоревшего кремния. Значит, если мы сразу зажжем 18 светодиодов и каждый будет кушать по 15-20 мА, то у в сумме наш МК должен выдать 360 мА. В даташите на него пишут, что максимум, что с него можно “выжать” – это 200 мА (строка в самом низу)

Индикаторные светодиоды, в зависимости от исполнения (SMD или штырьковые), потребляют при номинальном свечении ток от 2-3 мА и до 20-30 мА. Поэтому, все зависит от того, какие светодиоды мы выберем для нашего эксперимента. Но помните, что сумма токов питания светодиодов не должна превышать максимальное значение МК. В нашем случае это 200 мА. Ну а так для повышения надежности долговременной работы радио-электронной аппаратуры (РЭА) рекомендуется использовать нагрузку по мощности 70% от номинала, а по напряжению и току – 80% от номинала. Поэтому, если номинальный ток светодиода 20 мА, то мы будем его пытать на токе 0.7 * 20 = 14 мА. Применимо к МК – это 160 мА вместо 200 мА.

Управление мощной нагрузкой с помощью МК

Если не терпится и хочется поджигать лампочки накаливания, либо мощные осветительные светодиоды, то можно поставить транзисторные ключи на биполярных транзисторах. В этом случае +Uпит может быть больше, чем напряжение питания МК.

Почти та же схема, но включение происходит при логическом нуле на выходе МК. Здесь обратите внимание на то, что при таком инверсном включении +Uпит не должно превышать напряжение питания МК.

Важный момент применимый к обеим схемам – питание нагрузки. Если питаемся от напряжения МК, то схема примитивна: в базовой цепи один резистор (RБ). Если же нагрузку питаем от внешнего источника питания, например 40 Вольт, то еще добавляем в схему резистор Rбэ . Чаще всего его номинал берут в 1 кОм.

Расчет резистора базы для режима насыщения

Как же рассчитать примерно значение резистора базы? Есть нехитрые формулы. Для того, чтобы их разобрать, рассмотрим вот такую схемку:

Для начала можно найти ток базы:

IБ – это базовый ток, в Амперах

kНАС – коэффициент насыщения. В основном берут в диапазоне от 2-5. Он уже зависит от того, насколько глубоко вы хотите вогнать ваш транзистор в насыщение. Чем больше коэффициент, тем больше режим насыщения.

IK – коллекторный ток, в Амперах

β проще всего измерить с помощью транзисторметра.

Ну а дальше дело за малым

Это самый простой расчет без всяких заморочек. Более подробно читайте в этой статье.

Для управления какой-либо мощной нагрузкой, можно применить схему с транзистором и реле:

О фьюзе RSTDISBL

Ножка PA2 может выполнять функцию не только вывода порта А, но и также участвует при программировании МК. Если с помощью фьюза “RSTDISBL” мы разрешим этому выводу “притвориться” выходом, то потом не сможем перепрограммировать данный МК с помощью ISP программатора, а другой программатор, я к сожалению, пока еще не приобрел. Но если вы собираетесь делать эту конструкцию навека, то можете без проблем поставить галочку на фьюз “RSTDISBL” и повесить на этот вывод светодиод). Поэтому, я не буду задействовать эту ножку МК как выход. То есть в сумме у меня будет 17 светодиодов, вместо 18. Жертвуя одни светодиодом, я даю себе право использовать многократно свой МК, не прибегая к помощи другого программатора.

Пишем программу для чайников

Далее открываем программу AtmelStudio 6 и начинаем писать программу. Эта программа специально написана для новичков, чтобы они уловили суть всего процесса.