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

igorkov.org – Драйвер светодиода на микроконтроллере ATtiny

Основные требования к драйверу:

  • Диапазон входных напряжений от 3 до 6В (питание от 4хАА батареек).
  • Работа в режиме Step-Down, стабилизация тока.
  • Отсутствие ситуации “внезапного выключения” (т.е. если не удается удерживать ток, яркость плавно снижается до нуля без внезапного отключения).
  • Сигнализация о слабой батарее.
  • Возможность реализации защиты для литиевых аккумуляторов.
  • Выбор яркости свечения.

Разработка драйвера

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

Так же в процессе разработки был опробован специализированный драйвер NCP3066. Он позволяет построить импульсный источник тока для светодиода, а так же сделать управление яркостью при помощи внешнего ШИМ-сигнала. Схема не была реализована полностью, напаял только аналоговую часть, чтобы провести тесты.

Результаты тестов получились печальными: КПД около 60% (наблюдается достаточно сильный нагрев драйвера), а главное: несмотря на заявленный диапазон напряжений 3-40В, драйвер отказался стабилизировать ток при напряжении питания меньше 5В, а на 4В (еще достаточно живые 4хАА батарейки) светодиод еле тлел. На данной плате я воотчию наблюдал, насколько улучшается стабильность работы схемы при добавлении емкого конденсатора по входу.

Еще есть очень интересный драйвер LTC3454, он имеет просто шикарный КПД – 90%, тянет ток до 1А, может работать в режимах понижения и повышения. Все отлично, если бы не одно но: макс. напряжение, с которым работает драйвер – 5.5В.

В случае питания от 4хАА можно рассчитывать примерно до 7.4В, в случае установки литиевых элементов, у которых в начале работы напряжение может составлять до 1.8В на банку.

Хотя, возможно рассмотреть применимость данного драйвера в фонарях с блоками из 2-3 батареек.

В принципе, разработка микроконтроллерного драйвера для светодиодов – изобретение велосипеда. Существует описание нескольких реализаций подобных драйверов. Одна из самых интересных – драйвер для светодиодов Cree с фонаревки: http://forum.fonarevka.ru/showthread.php?t=5151.

Концепция драйвера достаточно близка к тому что требуется мне. Однако, есть одно существенное отличие: данный драйвер рассчитан на питание от одной банки литиевого аккумулятора (напряжения 2.7-4.

2В), поэтому в реальности схемотехника ограничена напряжением питания около 5В.

Мне же требуется работать от 6В, конечно это всего на 10% выше максимально допустимого для ATtiny, поэтому он должен выдержать, но ничего хорошего при таком подходе не получится, да и драйвер MOSFET так же ограничен 5.5В (они сговорились чтоли?).

В реализации AVSel-а, сразу бросается в глаза достаточно жирный микроконтроллер. Почему же используется именно ATtiny45, а не что-то более примитивное, типа Tiny13A?

  1. Быстрый ШИМ. ATtinyX5 серия имеет на борту PLL блок, позволяющий тактировать таймерный блок частотой до 64МГц. А это дает частоту работы ШИМ до 250КГц. В Tiny13A максимум можно выжать около 33КГц (хотя этого в некоторых случаях вполне достаточно, просто требуется ставить более габаритные конденсаторы и дроссели.
  2. Дифференциальный вход АЦП. Да, очень полезная в данном применении функция, хотя, можно обойтись и без нее.
  3. Умножитель по входу АЦП. По желанию, можно активировать усиление сигнала на входе АЦП в 20 раз. До этого я и не предполагал, что такие функции встраивают на кристалл микроконтроллеров. И ведь это была главная проблема, каким еще образом измерить падение в 5мВ на токовом резисторе с приемлемой точностью? Если бы не умножитель, то пришлось бы ставить внешний ОУ.
  4. Микропрограмма на Си с развитой логикой калибровок. Если оставить в ней только логику регулирования, размер уменьшится почти до 0.5к.

Благодаря всем плюшкам ATtiny45, он идеально подходит для применения в цифровых DC-DC преобразователях и источниках тока, где требуется гибкая логика работы.

Единственная проблема, которая долго мучила меня – это управление MOSFET-транзистором. Рассматривались разные варианты, это и специализированные драйвера, и аналоговые ключи, и схемы управления на дискретных компонентах.

Остановился именно на последнем, т.к. дешевого драйвера с подходящими характеристиками не нашел.

Схема полностью разработана с нуля по классическому варианту Step-Down преобразователя с токовым шунтом для ОС по току. Микропрограмма частично основана на творении AVSel, хотя в итоге от нее осталась только функция регулирования.

Итого получился такой кошмар:

Плата конечного варианта:

В настоящий момент проведены лабораторные испытания схемы, она удовлетворяет всех критериям представленным в начале статьи, а так же диапазон входных напряжений получился намного шире: в первую очередь он зависит от конденсатора по входу и от устанавливаемого стабилизатора на 3.3В.

Внешний вид драйвера:

О непосредственном применении данного драйвера в следующем разделе.

Модификация светодиодного фонаря Petzl Duo

А теперь о том для чего изначально разрабатывался данный драйвер. Изначально он предназначался для установки в фонари линейки Petzl Duo/Duobelt. Именно из-за требуемой гибкости потребовалось завязаться на микроконтроллер.

Примечание: Несмотря на все преимущества светодиодов, до сих пор есть люди, ходящие на карбидных лампах. Причина этого проста: пламя дает теплый, а главное, рассеянный свет.

Здесь за основное качество берется не яркость и дальность освещения, а то, что взгляд в любую сторону и под любым углом попадает в освещенный участок, поэтому лучше чувствуется объем и нет “эффекта капюшона”.

Это единственное преимущество, а вот недостатков у карбидки очень много.

В данных фонарях ставится галогеновая лампа и блок на 5/8/14 светодиодов. В первую очередь, используются именно светодиоды. Блок светодиодов имеет очень низкую эффективность. Даже простой их заменой получается снизить потребление и увеличить яркость свечения фонаря.

Фонарь Duo LED 5 и вовсе ужасает: при новых батарейках потребление около 400мА (т.е. порядка 2.4Вт), при этом сами светодиоды из них получают менее 800мВт (остальное рассеивается на резисторах). Ну а светодиоды – холодные, даже с уходом в синеву, похожи на те, что ставят безымянные ускоглазые друзья в своих творениях за 100 рублей.

В Duo LED 8/14 производитель применил импульсный регулятор. КПД таких схем обычно превышает 70%, к тому же обеспечивается постоянная яркость свечения и контроль за уровнем разряда батареи, что очень удобно.

Но сами светодиоды остались такими же низкокачественными и жутко устаревшими, даже на новых партиях фонарей. Такое ощущение, что Petzl закупил большую партию в начале двухтысячных и никак ее израсходовать не может.

🙂

Модель Duo является подобием конструктора: имеет модульную конструкцию. В начале этот фонарь существовал в варианте с 2 лампами накаливания. Затем одну из них заменили блоком светодиодов (Duo Led 5).

В более новых моделях (Duo Led 8 и Duo Led 14) блок светодиодов снабдили умным драйвером с несколькими уровнями яркости (а главное, подняли КПД схемы).

В качестве замены галогеновой лампы производителем так же был предложен светодиод, но фонарей в таком варианте так и не выпустили.

Благодаря модульной структуре Petzl Duo, без каких-то переделок в конструкций фонаря можно сделать модуль, заменяющий стандартный блок светодиодов (операция на пару минут). Подобные модули уже существуют, к примеру, этот.

Вот вид переделанного фонаря:

Вот таким образом модуль установлен внутри:

Полевые испытания пройдены, фонарь уже побывал в 5 экспедициях. Из-за конструкции модуля проблем не выявлено.

Логика работы

При включении фонаря устанавливается слабый уровень яркости. Всего существует 3 уровня, переключение происходит в последовательности – слабый-средний-сильный-слабый при помощи кратковременных отключений питания.

В процессе работы происходит постоянный контроль напряжения питания. При снижении напряжения ниже 4.5В (около 1.12В на элемент), фонарь переключается в более слабый режим.

В самом слабом режиме, фонарь продолжает работать сохраняя некоторое время стабилизацию яркости свечения. На определенном этапе (при разрядке батарей ниже 3.

5В) стабилизация работать перестает и яркость начинает снижаеться.

Свечение сохраняется при снижении напряжения батареи вплодь до 2.6В (около 0.65В на элемент), когда яркость свечения становится столь низкой, что фонарь продолжает светиться, но уже практически ничего не освещает.

Портативный осветитель

Благодаря универсальности схемы, получилось собрать на модуле небольшой в портативный осветитель для использования в качестве подсветки для фотосъемки:

Особенности конструкции: использован контроллер ATtiny13A (логика программы существенно упрощена), для питания установлены 2 Li-ion аккумулятора в формате 18650, светодиодов установлено 2, они включены последовательно.

Как видно, конфигурация довольно сильно отличается, однако аппаратная часть была оставлена прежняя, даже несколько упрощена.

Планы

  1. Добавление возможности работы от 4х Li-Ion 14500. Требует замены входного конденсатора и пересчета делителя. Так же логика защиты от переразряда.
  2. Добавление логики термозащиты, благодаря ей можно будет поднять мощность.

Источник: http://www.igorkov.org/ledriver

Аналого-цифровой преобразователь микроконтроллеров AVR

Автор: AntonChip. Дата публикации: 16 мая 2011.

Рейтинг:  5 / 5

Разряд Название Описание
7 ADEN Разрешение АЦП (1 – включено, 0 – выключено)

Режим непрерывных измерений активизируется установкой бита ADFR (бит 5) этого же регистра.

В ряде моделей Mega этот бит носит наименование ADATE, и управление режимом работы производится сложнее: там добавляются несколько режимов запуска через различные прерывания (в т. ч. прерывание от компаратора, при наступлении различных событий от таймера и т. п.

), и выбирать их следует, задавая биты ADTS регистра SFIOR, а установка бита ADATE разрешает запуск АЦП по этим событиям.

Разряд Название Описание
5 ADFR(ADATE) Выбор режима работы АЦП

Так как нулевые значения всех битов ADTS (по умолчанию) означают режим непрерывного преобразования, то в случае, когда вы их значения не трогали, функции битов ADATE и ADFR в других моделях будут совпадать.

ADTS2 ADTS1 ADTS0 Источник стартового сигнала
Режим непрерывного преобразования
1 Прерывание от аналогового компаратора
1 Внешнее прерывание INT0
1 1 Прерывание по событию “Совпадение” таймера/счетчика Т0
1 Прерывание по переполнению таймера/счетчика Т0
1 1 Прерывание по событию “Совпадение” таймера/счетчика Т1
1 1 Прерывание по переполнению таймера/счетчика Т1
1 1 1 Прерывание по событию “Захват” таймера/счетчика Т1

Если выбран режим запуска не от внешнего источника, то преобразование запускается установкой бита ADSС (бит 6). При непрерывном режиме установка этого бита запустит первое преобразование, затем они будут автоматически повторяться.

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

Отметим, что преобразование начинается по-фронту первого тактового импульса (тактового сигнала АЦП, а не самого контроллера!) после установки ADSС. По окончании любого преобразования (и в одиночном, и в непрерывном режиме) устанавливается бит ADIF (бит 4. флаг прерывания).

Разрешение прерывания АЦП осуществляется установкой бита ADIE (бит 3) все того же регистра ADCSR/ADCSRA.

Разряд Название Описание
6 ADSC Запуск преобразования (1 – начать преобразование)
4 ADIF Флаг прерывания
3 ADIE Разрешение прерывания

Для работы с АЦП необходимо еще установить его тактовую частоту. Это делается тремя младшими битами регистра ADCSR/ADCSRA под названием ADPS0..2. Коэффициент деления частоты тактового генератора МК устанавливается по степеням двойки, все нули в этих трех битах соответствуют коэффициенту 2, все единицы — 128.

Оптимальная частота преобразования лежит в диапазоне 50-200 кГц, так что, например, для тактовой частоты МК, равной 4 МГц, коэффициент может иметь значение только 32 (состояние битов ADPS0..2 = 101, частота 125 кГц) или 64 (состояние битов ADPS0..2 = 110, частота 62,5 кГц).

При тактовой частоте 16 МГц в допустимый диапазон укладывается только коэффициент 128.

ADPS2 ADPS1 ADPS0 Коэффициент деления
2
1 2
1 4
1 1 8
1 16
1 1 32
1 1 64
1 1 1 128

Ниже приведена таблица с описанием регистра ADMUX.


Выборка источника опорного напряжения производится битами REFS1..0 регистра ADMUX (старшие биты 7 и 6), причем их нулевое значение (по умолчанию) соответствует внешнему источнику.

Напряжение этого внешнего источника может лежать в пределах от 2 В до напряжения питания аналоговой части AVcc (а оно, в свою очередь, не должно отличаться от питания цифровой части более чем на 0,3 В в большую или меньшую сторону).

Можно выбрать в качестве опорного и питание самой аналоговой части, причем двояким способом: либо просто соединить выводы AREF и AVcc микросхемы, либо установить биты REFS1..

0 в состояние 01 (тогда соединение осуществляется внутренними схемами, но заметим, что внешний опорный источник при этом должен быть отключен). Предусмотрен и встроенный источник (задается REFS1..0 в состоянии 11, при этом к выводу AREF рекомендуется подключать фильтрующий конденсатор), имеющий номинальное напряжение 2,56В с большим разбросом от 2,4 до 2,7 В.

REFS1 REFS0 Источник опорного напряжения
Внешний ИОН, подключенный к выводу AREF, внутренний ИОН отключен
1 Напряжение питания AVcc*
1 Зарезервировано
1 1 Внутренний ИОН напряжением 2,56V, подключенный к ввыводу AREF*
*Если к выводу AREF подключен источник напряжения, данные варианты использоваться не могут

Результат преобразования АЦП оказывается в регистрах ADCH:ADCL. Поскольку результат 10-разрядный, то по умолчанию старшие 6 битов в регистре ADCH оказываются равными нулю. Чтение этих регистров производится, начиная с младшего ADCL, после чего регистр ADCH блокируется, пока не будет прочитан.

Следовательно, даже если момент между чтением регистров попал на фронт 14 (15) такта АЦП, когда данные в них должны меняться, значения прочитанной пары будут соответствовать друг другу, пусть и результат этого преобразования пропадет. В противоположном порядке читать эти регистры не рекомендуется.

Но бит ADLAR (бит 5 регистра ADMUX) предоставляет интересную возможность: если его установить в 1, то результат преобразования в регистрах ADCH:ADCL выравнивается влево: бит 9 результата окажется в старшем бите ADCH, а незначащими будут младшие 6 битов регистра ADCL.

В этом случае, если хватает 8-разрядного разрешения результата, можно прочесть только значение ADCH.

Выбор каналов и режимов их взаимодействия в АЦП производится битами MUX0..3 в регистре ADMUX. Их значения выбирают нужный канал в обычном (недифференциальном) режиме, когда измеряемое напряжение отсчитывается от “земли”.

Последние два значения этих битов для семейства Mega (11110 и 11111 в большинстве моделей или 1110 и 1111 для ATmega8) выбирают режимы, когда вход АЦП подсоединяется к опорному источнику компаратора (1,22 В) или к “земле” соответственно, что может использоваться для автокалибровки устройства.

Управление входным мультиплексором в моделях Atmega8x

MUX3-MUX0 Несимметричный вход
0000 ADC0
0001 ADC1
0010 ADC2
0011 ADC3
0100 ADC4*
0101 ADC5*
0110 ADC6**
0111 ADC7**
1000-1101 Зарезервировано
1110 1,22V
1111 0V(GND)
*8-ми разрядное преобразование**Имеются только в корпусах TQFP-32 и MLF-32.

Остальные комбинации разрядов MUX предназначены для установки различных дифференциальных режимов — в тех моделях, где они присутствуют, в других случаях эти биты зарезервированы (как в моделях Atmega8, ATmega163 и др.).

В дифференциальном режиме АЦП измеряет напряжение между двумя выбранными выводами (например, между ADC0 и ADC1), причем не все выводы могут быть в таком режиме задействованы.

В том числе дифференциальные входы АЦП можно подключать к одному и тому же входу для коррекции нуля. Дело в том, что в ряде моделей на входе АЦП имеется встроенный усилитель, с коэффициентом 1х, 10х и 200х (коэффициент выбирается теми же битами MUX0..

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

https://www.youtube.com/watch?v=JUy8tAjBvhc

После завершения преобразования (при установке в «1» флага ADIF регистра ADCSR) его результат сохраняется в регистре данных АЦП.

Поскольку АЦП имеет 10 разрядов, этот регистр физически размещен в двух регистрах ввода/вывода ADCH:ADCL, доступных только для чтения.

По умолчанию результат преобразования выравнивается вправо (старшие 6 разрядов регистра ADCH — незначащие). Однако он может выравниваться и влево (младшие 6 разрядов регистра ADCL — незначащие).

Для управления выравниванием результата преобразования служит разряд ADLAR регистра ADMUX. Если этот разряд установлен в «1», результат преобразования выравнивается по левой границе 16-разрядного слова, если сброшен в «0» — по правой границе.

Обращение к регистрам ADCH и ADCL для получения результата преобразования должно выполняться в определенной последовательности: сначала необходимо прочитать регистр ADCL, а затем ADCH.

Это требование связано с тем, что после обращения к регистру ADCL процессор блокирует доступ к регистрам данных со стороны АЦП до тех пор, пока не будет прочитан регистр ADCH.

Благодаря этому можно быть уверенным, что при чтении регистров в них будут находиться составляющие одного и того же результата. Соответственно, если очередное преобразование завершится до обращения к регистру ADCH, результат преобразования будет потерян.

С другой стороны, если результат преобразования выравнивается влево и достаточно точности 8-разрядного значения, для получения результата можно прочитать только содержимое регистра ADCH.

Для недифференциального режима АЦП, когда напряжение отсчитывается от “земли”, результат преобразования определяется формулой:

Ка = 1024Uвх/Uref

, где Ка — значение выходного кода АЦП, Uвх и Uref — входное и опорное напряжения.

Дифференциальному измерению соответствует такая формула:

Ка = 512(Upos – Uneg)/Uref

, где Upos и Uneg — напряжения на положительном и отрицательном входах соответственно. Если напряжение на отрицательном входе больше, чем на положительном, то результат в дифференциальном режиме становится отрицательным и выражается в дополнительном коде от $200 (-512) до $3FF (-1). Реальная точность преобразования в дифференциальном режиме равна 8 разрядам.

Делаем светодиодный индикатор напряжения

Для практического изучения АЦП напишем программу светодиодного индикатора напряжения. Как и в прошлых примерах будем использовать микроконтроллер Atmega8.

Восемь индикаторов подключаем к порту D контроллера, это будет линейная шкала уровня сигнала от 0 до 5V.

Входом АЦП у нас будет вывод PC0(ADC0), к которому через переменный резистор сопротивлением 10кОм подается напряжение. Схема устройства представлена ниже:

К точности АЦП в этом устройстве предъявляются наименьшие требования.

Источником опорного напряжения служит напряжение питания микроконтроллера – 5 Вольт, для этого вывод AREF соединяем с выводом Vcc микроконтроллера, также поступаем с выводами питания аналоговой части AVcc и AGND, подключаем их к плюсу и минусу соответственно, в программе битами REFS1 и REFS0 задаем источник ИОН.

Режим индикации работает следующим образом: после окончания преобразования, которое работает в непрерывном режиме, считываем биты ADCH и ADCL.

Это значение потом сравниваем с предварительно расчитанными константами.

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

Константы высчитываются так: так как АЦП 10-ти битный, число 1024 раскладываем на 8 равных частей, а по формуле уже вычисляем эти значения в Вольтах.

128…0,625V

256…1.25V

384…1.875V

512…2.5V

640…3.125V

768…3.75V

896…4.375V

1020…5V(приблизительно)

Полный код программы показан ниже. Частота тактового генератора контроллера 8MHz.

/*** Использование АЦП. Светодиодная шкала ***/ #include #include int main (void) { DDRD = 0xFF; PORTD = 0x00; /*** Настройка АЦП ***/ ADCSRA |= (1

Источник: https://radioparty.ru/programming/avr/c/285-lesson-adc-avr

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

В один прекрасный осенний вечер застало скукотище, да к тому же дома. Лежало передо мной на столе 16 светодиодов и маленькая ATtiny13, да к тому же без дела. Тут я вспомнил, как лет так 5 назад собирал в колледже стендик для демонстрации вольтамперных характеристик, в котором пришла идея использовать дешифратор 4х16 К555ИД3, хотя позже пришлось делать на КР1533ИД3

Выводы W0 и W1 называются разрешающими, если на обоих выводах присутствует лог. «0», то и на выводах 0-15 так же присутствует сигнал с таким уровнем, причем на каком конкретно зависит от уровней напряжения на входах 1-8. К примеру, если лог. «1» присутствует на входе 2 и 8, то лог. «0» будет присутствовать на выходе 10, 10102 =10, если на все входы 1-8 подать лог.

«1», то лог. «0» появится на выходе 15, 11112=15. Отсюда несложно догадаться что это простой двоично/десятичный преобразователь, причем преобразователь двоичных четырехразрядных чисел (входов – то всего 4).

Используя микроконтроллер можно довольно легко им управлять, поэтому я решил собрать АЦП на tiny 13 и с его помощью управлять 16-ю светодиодами при помощи данного дешифратора.

Программа для микроконтроллера, а так же ее отладка проводилась в среде Flowcode v.4.3.6.61. Сама программа достаточно проста и выглядит следующим образом:

Вначале мы считываем данные с АЦП0, первый вывод микроконтроллера, и полученные данные привязываем к переменной ADC0, далее эту переменную делим на 10 (можно и не делить, можно делить на большее число – от этого зависит конечная переменная.

А от нее зависит поведение светодиодов) и результат привязываем к переменной PORT которая в конечном счете выдает сигналы на выходы микроконтроллера PB0-PB3. Переменные ADC0 и PORT имеют формат byte, поэтому максимальное их значение не может превышать 255.

А так как значение переменной PORT выдается только на 4 вывода, то максимальное значение может быть равно 15. В этом и вся суть.

Подав на АЦП контроллера сигнал с линейного выхода, как в моем случае, получается достаточно необычная «игра» светодиодов, которая зависит от уровня напряжения на входе и скорости преобразования, а также времени задержки, в данном случае она равна 10 мс.

Во время отладки на рисунке видно, что значение переменной ADC0 равно 107, а переменной PORT 10, значение которой так же демонстрируют зажженные светодиоды, подключенные к выводам  PB1, PB3, т.к. число 10102=10.

Если данную комбинацию подать на входы ранее рассмотренного дешифратора, причем PB0 соединить со входом 1, PB1 со входом 2, PB2 со входом 4, и PB 3 со входом 8, ноль появится на выходе с номером 10 (1 вывод микросхемы).

Параметры АЦП настроены, как показано, на рисунке ниже:

Среднее значение переменной ADC0 получаем в течение 100 циклов программы, скорость преобразования равна FOSC/128, в качестве опорного используется уровень напряжения на выводе VDD.

После отладки пора собрать схему:

Питание подается на разъем J1, сигнал от аудиоустройства на J2, причем обращаю внимание на то, что крайне не рекомендуется подавать сигнал на АЦП микроконтроллера если его уровень больше чем Vdd, которое так же имеет свои пределы, не более 5,5 вольт. Конденсатор С1 необходим для устранения постоянной составляющей входного сигнала, с помощью переменного резистора можно менять эффект работы светодиодов.

Если на АЦП микроконтроллера планируется подавать только постоянное напряжение, то цепочку R1-C1 можно исключить

Светодиоды можно использовать разных цветов свечения, резистор R2 ограничивает протекающий через них ток.

При проверке устройства необходимо на верхний вывод резистора R1 подать напряжение с вывода 8 микроконтроллера и меняя положение ползунка следить за работой светодиодов, должно получиться что-то вроде «бегущей строки» с реверсом, если ползунок вращать в разные стороны.

Микроконтроллер запрограммирован с помощью программатора ТРИТОН. Fuse биты выставлены на работу от внутреннего тактового генератора. Галочка обозначает, что fuse бит запрограммирован.

Для проверки устройство было собрано за 10 минут на макетной плате SYB-120.

Источники:

1. Гадре, Д. «Занимательные проекты на базе микроконтроллеров tinyAVR».
2. Евсеев, А. Н. «Радиолюбительские устройства для дома».

Ниже вы можете скачать исходник, прошивку и файл печатной платы в формате DipTrace

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

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

Источник: http://cxem.net/mc/mc163.php

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

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

В один красивый осенний вечер застало скуке, да к тому же дома. Лежало передо мной на столе 16 светодиодов и малая ATtiny13, да к тому же без дела. Здесь я вспомнил, как лет так 5 вспять собирал в институте стендик для демонстрации вольтамперных черт, в каком пришла мысль использовать дешифратор 4х16 К555ИД3, хотя позднее пришлось делать на КР1533ИД3

Выводы W0 и W1 именуются разрешающими, если на обоих выводах находится лог. «0», то и на выводах 0-15 так же находится сигнал с таким уровнем, при этом на каком непосредственно находится в зависимости от уровней напряжения на входах 1-8. Например, если лог. «1» находится на входе 2 и 8, то лог. «0» будет находиться на выходе 10, 10102 =10, если на все входы 1-8 подать лог.

«1», то лог. «0» появится на выходе 15, 11112=15. Отсюда нетрудно додуматься что это обычной двоично/десятичный преобразователь, при этом преобразователь двоичных четырехразрядных чисел (входов — то всего 4).

Используя микроконтроллер можно достаточно просто им управлять, потому я решил собрать АЦП на tiny 13 и с его помощью управлять 16-ю светодиодами с помощью данного дешифратора.

Программка для микроконтроллера, а так же ее отладка проводилась в среде Flowcode v.4.3.6.61. Сама программка довольно ординарна и смотрится последующим образом:

Сначала мы считываем данные с АЦП0, 1-ый вывод микроконтроллера, и приобретенные данные привязываем к переменной ADC0, дальше эту переменную делим на 10 (можно и не разделять, можно разделять на большее число – от этого зависит конечная переменная.

А от нее зависит поведение светодиодов) и итог привязываем к переменной PORT которая в конечном счете выдает сигналы на выходы микроконтроллера PB0-PB3. Переменные ADC0 и PORT имеют формат byte, потому наибольшее их значение не может превосходить 255.

А потому что значение переменной PORT выдается лишь на 4 вывода, то наибольшее значение может быть равно 15. В этом и вся сущность.

Подав на АЦП контроллера сигнал с линейного выхода, как в моем случае, выходит довольно необыкновенная «игра» светодиодов, которая находится в зависимости от уровня напряжения на входе и скорости преобразования, также времени задержки, в этом случае она равна 10 мс.

Во время отладки на рисунке видно, что значение переменной ADC0 равно 107, а переменной PORT 10, значение которой так же показывают зажженные светодиоды, присоединенные к выводам PB1, PB3, т. к. число 10102=10.

Если данную комбинацию подать на входы ранее рассмотренного дешифратора, при этом PB0 соединить со входом 1, PB1 со входом 2, PB2 со входом 4, и PB 3 со входом 8, ноль появится на выходе с номером 10 (1 вывод микросхемы).

Характеристики АЦП настроены, как показано, на рисунке ниже:

Среднее значение переменной ADC0 получаем в течение 100 циклов программки, скорость преобразования равна FOSC/128, в качестве опорного употребляется уровень напряжения на выводе VDD.

После отладки пора собрать схему:

Питание подается на разъем J1, сигнал от аудиоустройства на J2, при этом обращаю внимание на то, что очень не рекомендуется подавать сигнал на АЦП микроконтроллера если его уровень больше чем Vdd, которое так же имеет свои пределы, менее 5,5 вольт. Конденсатор С1 нужен для устранения неизменной составляющей входного сигнала, при помощи переменного резистора можно поменять эффект работы светодиодов.

Если на АЦП микроконтроллера планируется подавать только неизменное напряжение, то цепочку R1-C1 можно исключить

Светодиоды можно использовать различных цветов свечения, резистор R2 ограничивает протекающий через их ток.

При проверке устройства нужно на верхний вывод резистора R1 подать напряжение с вывода 8 микроконтроллера и меняя положение ползунка смотреть за работой светодиодов, должно получиться что-то вроде «бегущей строки» с реверсом, если ползунок крутить в различные стороны.

Микроконтроллер запрограммирован при помощи программатора ТРИТОН. Fuse биты выставлены на работу от внутреннего тактового генератора. Галочка обозначает, что fuse бит запрограммирован.

Для проверки устройство было собрано за 10 минут на макетной плате SYB-120.

Источники:

1. Гадре, Д. «Занятные проекты на базе микроконтроллеров tinyAVR».
2. Евсеев, А. Н. «Радиолюбительские устройства для дома».

Ниже вы сможете скачать исходник, прошивку и файл печатной платы в формате DipTrace

Перечень радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот IC1 МК AVR 8-бит ATtiny13 1 13-20PUПоиск в win-sourceВ блокнотIC2 МикросхемаКР1533ИД31 Поиск в win-sourceВ блокнотС1 Конденсатор1 мкФ1 Поиск в win-sourceВ блокнотR1 Переменный резистор10 кОм1 Поиск в win-sourceВ блокнотR2 Резистор 100 Ом 1 Поиск в win-sourceВ блокнотHL1-HL16 Светодиод16 Поиск в win-sourceВ блокнотJ1, J2 Разьем2 Поиск в win-sourceВ блокнотДобавить все

Скачать перечень частей (PDF)

ADC_Tiny13.rar (5 Кб)
Микроконтроллер АЦП AVR Светодиод DipTrace Flowcode

Источник: http://bloggoda.ru/2018/03/15/acp-na-tiny13-i-16-svetodiodov/

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}