Светодинамическая установка на мк attiny2313

Цветодинамическая установка на микроконтроллере

Установка предназначена для цветового сопровождения музыки во время развлекательных мероприятий. Источниками света четырёх различных цветов в ней служат сверхъяркие светодиоды. Ими управляет микроконтроллерный блок, анализирующий спектральный состав музыкального сигнала.

Схема микроконтроллерного блока обработки музыкального сигнала представлена на рис. 1. Сигнал размахом от 100 мВ до 3 В подают на него, включая штекер ХР1 в гнездо для головных телефонов или громкоговорителя музыкального центра или проигрывателя. Наличие гнезда XS1 позволяет подключать устройство «на проход», включая сюда штекер, вынутый из гнезда источника сигнала. После усиления или ограничения до размаха около 3,5 В ступенью на ОУ DA1 сигнал поступает на формирователь импульсов, собранный на транзисторе VT1, и далее на вход РВ2 микроконтроллера DD1. Программа микроконтроллера подсчитывает входные импульсы за определённые интервалы времени и в зависимости от их частоты повторения устанавливает высокие логические уровни на соответствующих выходах микроконтроллера: 100. 300 Гц — РВ1 (красный), 300. 700 Гц — PB0 (жёлтый), 700. 1500 Гц — РВ4 (зелёный), 1500. 10000 Гц — РВЗ (синий). В скобках указаны цвета свечения светодиодов, которыми управляет каждый выход.


Рис. 1

Напряжение питания Uпит=7. 12 В подают на контакты 1 (+) и 2 (-) винтовой колодки ХТ1. До 5 В, необходимых для питания микроконтроллера и ОУ, его понижает интегральный стабилизатор DA2. Контакты 3—6 колодки ХТ1 соединяют со входами блоков светодиодов соответствующего цвета свечения. Резисторы R9—R12 ограничивают ток нагрузки выходов микроконтроллера.

Блок собран на базе микроконтроллерного модуля SEM0016M-45 [1], представляющего собой макетную плату размерами 36×20 мм с установленными на заводе микроконтроллером ATtiny45-20SU (DD1 согласно рис. 1), блокировочным конденсатором С7 и разъёмом программирования ХР2. На свободном поле платы модуля по сетке с шагом 2,54 мм расположены 79 контактных площадок с металлизированными отверстиями. На них и смонтированы остальные детали блока, за исключением узла предварительного усилителя музыкального сигнала на ОУ DA1.1, собранного на небольшой печатной плате, изображённой на рис. 2. Она закреплена на плате модуля термоклеем.

ХР1 — стандартный аудиоштекер диаметром 3,5 мм, XS1 — гнездо СКХЗ-3.5-02А под такой штекер. Шестиконтактная колодка с винтовыми зажимами ХТ1 составлена из двух трёхконтактных типа DG308-2.54-03P-14-00. Собранный блок показан на рис. 3.

Установленный в модуле SEM0016M-45 микроконтроллер программируют с помощью программатора, подключаемого к разъёму ХР2. При этом во избежание сбоев резистор R7 следует на время программирования отпаять от вывода 7 микроконтроллера, а закончив эту процедуру, припаять обратно.

Четыре блока светодиодов (красных, жёлтых, зелёных, синих) собраны по одной и той же схеме, изображённой на рис. 4. Они различаются лишь типами светодиодов EL1 —EL9 и номиналами резисторов R2—R28, сведения о которых приведены в таблице.

Рис. 4

На контакты 1 и 2 колодки ХТ1 подают напряжение питания — такое же, как на описанный выше блок управления, а на вход (контакт 3) — сигнал с соответствующего контакта колодки ХТ1 микроконтроллерного блока. Интегральный стабилизатор DA1 понижает его до 5 В. Резисторы R2—R28 выбраны так, что ток через любой из трёх кристаллов каждого светодиода не превышает допустимых для него 20 мА. Полевой транзистор VT1 замыкает цепь питания светодиодов, когда на его затвор подано напряжение высокого логического уровня от находящегося в блоке управления микроконтроллера.

Чертёж одинаковой для всех блоков светодиодов печатной платы показан на рис. 5. Изготовлены эти платы из материала ОАФ1.5 [2] — фольгированного с одной стороны листового диэлектрика толщиной 70 мкм, приклеенного другой стороной к алюминиевой подложке толщиной 1,5 мм. Этот материал предназначен для изготовления печатных плат с компонентами, выделяющими много тепла. В данном случае это интегральный стабилизатор, свето-диоды и резисторы. Алюминиевая подложка сама по себе хорошо отводит тепло. Кроме того, при необходимости её свободную от деталей сторону можно прижать к более эффективному теплоотводу, не делая индивидуального теплоотвода для каждой детали.

Рис. 5

Технология изготовления печатной платы из «фольгированного алюминия» практически не отличается от применяемой для обычных стеклотекстолитовых плат. Рисунок печатных проводников на фольгу можно наносить как методом термопереноса, так и с использованием фоторезиста. Лишь при вытравливании меди необходимо защищать открытую поверхность алюминиевой подложки и её торцы от соприкосновения с травильным раствором. Для этого их нужно окрасить кислотостойкой краской или покрыть липкой лентой.

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

Радио №5, 2013г А. ЛАПТЕВ, г. Зыряновск, Казахстан

Видеоролики, демонстрирующие работу описанной цветомузыкальной установки.

Элемент video не поддерживается вашим браузером. Скачайте видео

Элемент video не поддерживается вашим браузером. Скачайте видео

ЛИТЕРАТУРА
1. Модуль SEM0016M-45
2. Фольгированный алюминий ОАФ1.5

AVR Lab устройства на микроконтроллерах AVR

Форум по AVR

  • не работает программа из примера про пролистывания меню
  • sinaprog не работает
  • Пароль к архивам на сайте
  • Пароль
  • HDD и прерывания — доработка программы из статьи /node/220

Бегущие огни на ATtiny2313, первая программа для микроконтроллера

  • Attiny2313
  • avr

Моим первым устройством на микроконтроллере была схема бегущих огней. Линейка из 15-ти светодиодов, которые попеременно загораются. Принципиальная схема такого устройства предельно проста. По сравнению с макетной платой здесь появились только 15 светодиодов, у которых анод общий, а катоды подсоединены к портам ввода/вывода микроконтроллера и столько же токоограничительных резисторов R3-R17 по 360 Ом.

Светодиоды управляются низким уровнем на выводе микроконтроллера (так как для низкого уровня микроконтроллер может выдать больший ток, около 20мА, чем для высокого, но не стоит забывать про суммарный ток, который может выдать порт).

Линейка светодиодов у меня организована на SMD компонентах, но это дело вкуса.

Теперь рассмотрим порты ввода/вывода. У ATtiny2313 есть 15 линий ввода/вывода, которые сгруппированы в 2 порта: PortB – 8 выводов и PortD – 7 выводов. Вся работа микроконтроллера состоит из правильного шевеления ножками, а искусство программирования – заставить его так делать. Также ножки портов по совместительству могут выполнять другие функции: быть входом встроенного АЦП, внешнего прерывания, выходом USART’а и множество других функций, но их использование рассмотрим немного попозже. Для использования портов ввода вывода их нужно сперва сконфигурировать, за это отвечают регистры PORTX и DDRX, где X – имя порта. Приведем табличку их возможных состояний (n=0..7 – номер вывода в порту):

Как видно из таблицы при значении DDRXn =1 порт работает как выход, и логический уровень на его выходе равен биту PORTXn. При значении DDRXn =0 вывод PXn будет работать на вход, а бит PORTXn определяет, подключен ли к входу внутренний подтягивающий резистор или нет. Логический уровень на выводе PXn можно считать из бита PINXn. Перейдем к практике, предлагаю написать программу, которая будет по очереди зажигать каждый из 15 светодиодов, сперва напишем программу на С, а потом для разнообразия на ассемблере. Программа на С выглядит так:

»). Функция unsigned char _BV(b) возвращает байт, в котором бит под номером b устрановлен в единицу, а все остальные равны 0. Например, _BV(2)==0x04.
Попробует теперь написать аналогичную программу на ассемблере:

Секция Define chapter сопоставляет имена регистров с именами переменных. В секции Const chapter задаются константы, которые влияют на скорость бегущих огней. Далее идет сегмент кода Code segment в котором собственно и содержится код нашей программы. В коде программы сперва инициализируем стек, порты ввода/вывода конфигурируем как выхода, после чего в вечном цикле по одному светодиоды перебираем. Структура кода очень похожа на написанную выше программу С. Код на С более прост для понимания и компактен, но по размеру программы ассемблер обгоняет С (оптимизация не включена): 84 против 312 байт кода у С. Если же включить максимальную оптимизацию для С, то получим 184 байт кода, но придется совсем под другому переписать функцию задержки. Итого имеем, ассемблер более сложен, но код компактен и быстр, а С более прост, но код получившейся программы значительно больше. В заключение привожу видео готового устройства:

Читайте также  Измерительные трансформаторы тока

Советую не ограничиваться просто бегущим огоньком, а немного поэкспериментировать:

Термометр на DS18B20 + 1-Wire на AVR

Запилил себе термометр на базе DS18B20.

Под катом еще картинки и описание кода…

  • 1-Wire,
  • ds18b20,
  • сегментные индикаторы,
  • Attiny2313
  • +4
  • 04 мая 2015, 22:23
  • QuaziKing2
  • 36
  • 1

Термометр на ATTINY2313+DS18B20 доработанный

Недавно занимался сборкой компьютера с полностью пассивным охлаждением. Чтобы было удобно контролировать температуру процессора, нужно было по быстрому собрать термометр. Всяческие программы типа «Everest», «Aida», и прочие мне не подходили по одной простой причине: хотелось контролировать температуру даже при выключенном мониторе. Или даже при полностью отключенном мониторе. Было решено собрать термометр на основе цифрового датчика DS18B20, дешёвого микроконтроллера AVR, и семисегментного индикатора. Сначала я хотел повторить схему термометра по одному из вариантов, предложенных в интернете. Но после анализа схем, размещённых в интернете, я пришёл к выводу, что придётся изобретать свой «велосипед».

  • DS18B20,
  • ATTINY2313,
  • термометр
  • +8
  • 15 сентября 2014, 20:45
  • Zlodey
  • 84
  • 4

Binary clock

Наконец дошли руки написать, трудятся на столе уже месяц, а никак не напишу ничего про них.

  • часы,
  • часы реального времени,
  • Attiny2313,
  • AVR,
  • binary clock,
  • термометр
  • +4
  • 10 сентября 2012, 23:19
  • red_bobcat
  • 15

Отличия ATTiny от ATTiny c индексом A

  • Attiny2313,
  • Attiny13,
  • attiny,
  • отличия,
  • различия,
  • Attiny2313A,
  • Attiny13A
  • +1
  • 27 июля 2012, 13:52
  • nsk_artem
  • 17

Процессорный модуль для ATTiny2313 и ATTiny12/13/15/25/45/85

Все любят гипножабу тиньки!
Я часто играюсь с Тини2313 или 13, так-что решение прицепить их к пинборде вполне очевидно. Тем более, что я посеял программатор Громова и вынужден пользоваться дудкой (AVRDUDE).

После скрещивания ужа с ежом получился шилд:

  • pinboard2,
  • attiny,
  • attiny2313,
  • Attiny13
  • +1
  • 02 мая 2012, 15:26
  • dcoder
  • 33
  • 1

Термометр на ATTiny2313

Good news, everyone!
Я построил еще один термометр
На этот раз с индикатором:

В комнате тепло

  • термометр,
  • МК,
  • Attiny2313
  • +2
  • 29 апреля 2012, 15:35
  • dcoder
  • 74

Делаем контроллер шагового двигателя. Часть 1.

Читая материалы по STEP/DIR контроллерам шаговых двигателей в интернете, не нашел ни одного более-менее документированного проекта с исходниками на Си для управления шаговым двигателем в режиме «микрошаг» (wave step).

Где такой контроллер может найти применение?
1) Управление станком ЧПУ
2) Робототехника
3) Всякая хрень где нужно точное перемещение вала ШД

  • step/dir controller,
  • microstepping,
  • atmega,
  • attiny2313,
  • bipolar stepper motor
  • +2
  • 17 августа 2011, 12:14
  • yakuzaa
  • 14
  • 2

Переходим от AT90S2313 к Attiny2313

Микроконтроллер AT90S2313 фирмы Atmel снят с производства, поэтому найти его сейчас крайне трудно.На смену ему пришел Attiny2313, который продается на каждом углу.Тем не менее, проекты под AT90S2313 присутствуют в интернетах и старой литературе по AVR.Чтобы переделать прошивку МК под attiny нужно внести некоторые изменения в программу.В этой статье мы рассмотрим эти самые изменения, так сказать «как перетащить на более новый контроллер сферический проект в вакууме»©Lifelover.

  • AVR,
  • конкурс,
  • AT90S2313,
  • Attiny2313,
  • замена
  • +2
  • 21 июня 2011, 13:13
  • rad
  • 11

Мигаем светодиодом

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

  • начинающим,
  • мигаем,
  • Attiny2313,
  • тинька,
  • схема
  • -4
  • 25 апреля 2011, 22:30
  • Andrey
  • 15

Двухцветный светодиод.

Вобщем расковырял какойто древний монитор и выташил от туда двухцветный светодиод(красный и зелёный) и решил его пременить.

  • начинающим,
  • Attiny2313,
  • AVR,
  • двухцветный,
  • интересное
  • -2
  • 25 апреля 2011, 16:18
  • Andrey
  • 4
  • Страницы:
  • 1
  • 2
  • последняя

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

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

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

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

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

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

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

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

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

Ну и осветительные светодиоды – это те, которые используются в ваших китайских фонариках, а также в 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 и начинаем писать программу. Эта программа специально написана для новичков, чтобы они уловили суть всего процесса.

AVR Урок 31. Связь ATtiny2313 и Atmega8 по SPI. Часть 1

Урок 31

Связь ATtiny2313 и Atmega8 по SPI

Продолжаем разговор о шине SPI и, как я уже обещал, начнём дружить между собой два контроллера – ATtiny2313 и Atmega8.

Во-первых, я ещё вот что хочу сказать.

Я изучил даташит ATtiniy2313 и увидел то, что у данного МК как таковой шины SPI нет. Есть подобие данной шины – её заменитель – USI (Universal Serial Interface).

Ну в принципе-то по большому счёту это одно и тоже, но различия всё же есть.

Ну давайте для полного прикола объявим нашу ATTiny ведущим устройством и будем каким-то образом всё это дело сочинять.

Посмотрим схему модуля USI

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

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

Также можно здесь настроить режим SPI с помощью определённого бита

Вообщем-то здесь мы видим, что процесс не сильно отличается от того же процесса на Atmega, единстенное нет ещё одного бита. Но это всё равно не отнимает у нас права пользоваться данной шиной для приёма и передачи, просто будут только 2 режима вместо 4.

А все регистры мы будем смотреть уже по мере написания кода.

Теперь схема в протеусе (нажмите на картинку для увеличения изображения)

Здесь стандартная схема на ATtiny и стандартная схема на ATmega с подключенными дисплеями (смотреть урок 12 и урок 30). Единственное различие, что все информационные входы, отвечающие за интерфейс SPI между собою соединены следующим образом

Ну и ещё подключен виртуальный осциллограф, чтобы смотреть, как передаются биты.

Сначала создадим проект для ATtiny. Имя мы ему присвоим ATTINY_SPI, а код весь возьмём с прошлого занятия.

Затем также создадим проект для Atmega8 и назовём его ATMEGA_SPI. Код для данного проекта использован будет из проекта урока 12. А библиотека для дисплея была взята с урока по часам, так как она там уже более дополненная. А код функции setpos в lcd.c был взят из проекта по подключению дисплея через переходник, так как дисплей мы подключили 4-строчный, чтобы у нас работали все 4 строки. Ну и допишем код для теста нижних строк в main()

str_lcd ( «String 2» );

setpos (4,2);

str_lcd ( «String 3» );

setpos (6,3);

str_lcd ( «String 4» );

Соберём коды обоих проектов и посмотрим в протеусе, у нас должны работать оба дисплея

Пока начнём писать код в проекте ATTINY_SPI.

Первым делом добавим переменную в функции main() для того, чтобы где-то хранить наш байт

unsigned char n =0 ; //переменная для случайного числа

Начнём писать теперь функцию для инициализации шины SPI. Мы её не будем называть USI, а будем использовать стандартное привычное название

void SPI_init ( void )

DDRB |=((1 PORTB4 )|(1 PORTB6 )|(1 PORTB7 )); //Ножки USI на выход

(1 PORTB5 ); //Ножка DI на выход

((1 PORTB4 )|(1 PORTB6 )|(1 PORTB7 )); //Ножки USI в низкий уровень

Из кода функции и комментариев мы видим, что для инициализации шины мы не используем вообще никакие регистры, кроме регистров портов общего назначения, настроив в них определённые направления и значения.

Вызовем данную функцию в main()

LCD_ini (); //Инициализируем дисплей

SPI_init (); //Инициализируем шину

Также для красоты между выводом строк, а также в бесконечный цикл вставим небольшие задержки

str_lcd ( «Hello World!» );

_delay_ms (1000);

str_lcd ( «String 2» );

_delay_ms (1000);

_delay_ms (1000);

Передавать мы будем случайное число, поэтому сгенерируем его в бесконечном цикле, используя функцию rand(), предварительно очистив дисплей и установив указатель на начало координат

clearlcd ();

setpos (0,0);

n = ( unsigned char ) rand () % 256;

То есть у нас будет генерироваться случайное число от 0 до 255, что с успехом влезет в передаваемый байт.

Создадим функцию для передачи байта в SPI над функцией main(), чтобы не писать прототип

void SPI_SendByte ( char byte )

Теперь идём в даташит и смотрим, куда же мы должны положить байт для передачи по SPI или USI. Оказывается для этого есть вот такой регистр

Ну и давайте туда и положим байт

void SPI_SendByte ( char byte )

USIDR = byte ; //данные в регистр

Теперь нам нужно как то заставить контроллер начать передавать данные

Для этого есть вот такой статусный регистр

А в данном регистре есть байт USIOIF, который является флагом начала передачи, не взирая на то, что регистр статусный

Поэтому напишем следующий код в нашу функцию

USIDR = byte ; //данные в регистр

USISR |= (1 USIOIF ); //установим флаг начала передачи

Только данное действие не начнёт само собой передавать данные, так как нет тактирования. Здесь будет условный цикл

while (!( USISR & (1 USIOIF )))

Читайте также  Арифметические и логические команды

В данном цикле мы будем отслеживать сброс в ноль того же бита в том же регистре.

Теперь самое интересное – тело данного цикла. Тут не всё так просто.

Нужно будет немного ознакомиться со следующим регистром

Это уже полноправный регистр управления. В нём существуют следующие биты

USISIE (Start Condition Interrupt Enable) – бит разрешения прерываний.

USIOIE (Counter Overflow Interrupt Enable) – флаг для прерываний по переполнению счётчика.

USIWM1..0: (Wire Mode) – биты режима. За счёт того, что этих бита два, то мы можем включить один из четырёх режимов:

То есть так как шина USI она универсальная, может выступать не только как SPI, а и как I2C, но нас будет интересовать именно двухпроводной SPI, поэтому мы выберем режим второй, то есть включать будем бит USIWM0.

USICS1..0 (Clock Source Select) – биты установки варианта тактирования шины. Работают совместно со следующим битом.

USICLK (Clock Strobe) – бит стробирования регистра сдвига.

Вот таблица вариантов трёх вышеуказанных битов

Нас будет интересовать вариант шестой – программное тактирование и программное управление регистром сдвига.

USITC (Toggle Clock Port Pin) – бит переключения порта. В случае если контроллер является ведущим устройством, то включается в 1.

Таким образом, в нашей функции мы установим следующие биты управляющего регистра

while (!( USISR & (1 USIOIF )))

USICR |= ((1 USIWM0 )|(1 USICS1 )|(1 USICLK )|(1 USITC )); //постепенно передаем байт

Так как у нас всё происходит в цикле, то для обеспечения не слишком большой частоты нам нужно будет установить задержку

USICR |= ((1 USIWM0 )|(1 USICS1 )|(1 USICLK )|(1 USITC )); //постепенно передаем байт

_delay_us (10);

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

Вернёмся в бесконечный цикл и вызовем нашу новую функцию для того, чтобы передать байт ведомому устройству

n = ( unsigned char ) rand () % 256;

SPI_SendByte ( n );

Затем нам нужно будет отобразить наш отправляемый байт на дисплее, для этого преобразуем его сначала в строку. Для этого кроме функции sprinf существует функция itoa.

itoa ( n , str ,10);

Первым входным аргументом в данной функции является преобразовываемая целочисленная величина, вторым – указатель на строку, а третьим – система исчисления. Так как мы будем выводить показания в десятичном виде, то у нас будет 10.

Затем мы этот байт непосредственно отобразим на дисплее

itoa ( n , str ,10);

str_lcd ( str );

Соберём код и запустим его в протеусе. Посмотрим сначала отображение на дисплее

Байты нормально отображаются.

Теперь смотрим на осциллограмму и видим, что там также всё нормально

Посмотрим как именно передаётся байт. Зелёная осциллограмма показывает тактовые импульсы, а розовая – непосредственно шину передачи байта. Я дождался, когда будет байт попроще. У нас значение 5, если перевести в двоичный формат, то это 00000101. Так оно и есть на осциллограмме. Когда идут первые пять тактовых импульса, то шина передачи у нас находится в нуле, как только пятый импульс у нас заканчивается, то по его спадающему фронту у нас устанавливается шина передачи в единицу, чтобы во время возрастающего фронта шестого импулься она в этой единице находилась, так оно и есть. Затем по спаду шестого импульса шина передачи сбрасывается в ноль, а по спаду седьмого импульса, она поднимается.

Вообщем, я думаю теперь нам стал более понятен протокол передачи данных по шине SPI.

Теперь посмотрим все соединения на макетной плате, касающиеся контроллера ATtiny2313

Всё у нас практически как в прошлом занятии, только мы ещё можем наблюдать, что у нас от платы куда-то отходят четыре провода. Это не что иное, как провода шины SPI для соединеия с другим контроллером, и также общий провод. Общие провода должны быть соединены. Хотя, возможно, будет работать и без этого, так как у нас шина USB подключена к программаторам от одного ПК. А вообще будет не так-то это всё просто, так как avrdude не будет знать, какой именно контроллер ей прошивать.

Попробуем прошить наш контроллер. Но прежде чем это делать, мы выберем в avrdude проект, считаем конфигурационные биты. Но главное не в этом. Ещё немаловажная информация! Перейдём на вкладку с фьюзами, считаем их и снимем вот этот вот бит, иначе у нас будет слишком маленькая скрость

Всё-таки он для 8 МГц не нужен, мы зря его установили на прошлом занятии.

Прошьём контроллер, и посмотрим

У нас всё нормально работает, только работу шины SPI мы сейчас не оценим, так как нам это отследить негде. Мы ещё не подключали другой контроллер, а настоящего осциллографа у меня, к сожалению нет, также нет даже логического анализатора. Возможно, в недалёком будущем всё это будет. Но пока вот так. Мы только видим, что переданные байты отображаются у нас на дисплее. А другим контроллером, а также дружбой между первым и вторым контроллером мы займёмся уже в следующей части нашего такого вот интересного занятия.

Программатор и дисплеи можно приобрести здесь:

Смотреть ВИДЕОУРОК (нажмите на картинку)

Светодинамическая установка на мк attiny2313

Я знаю ребята здесь на форуме собирают или собирались собрать амбилайт , но там вроде как с микрухами проблемы.

Так вот я нашёл проект на Тиньке 2313 и на драйверах ULN2004.
Конечно передача цветов не такая крутая но данный девайс можно юзать и как цветомузыку.Софт вроде тоже хороший и на русском.

Для меня сейчас осталось заказать только преобразователь для USB to COM а именно микросхему FT232,всё остальное было в закромах.

Сегодня сделал печатку.
Некоторый контактные площадки для 232 на печатке убрал, чтобы так сказать не мешали.

Печатка под УСБ и под СОМ можно скачать на сайте создателя.
В гугле набираем ,,ambilight 2313,,
Первая же ссылка ваша Там также есть примеры видео.

Сегодня продолжил работу над сим устройством.

Запраграмировал МК ,,пятью проводками,, и програмой UniProf.
Запаял некоторые мелочи.
78L05 не было запаял обычную 7805.
Осталось только заказать 232.И можно пробовать.
Ну или если завтра будет хорошая погода и базар будет работать и я найду какой нить древний ДАТА кабель для телефона то можно будет уже скоро проверить

На просторах интернета нашёл такой вот УСБ в УАРТ преобразователь как раз то что мне нужно.И стоит дешевле чем ФТ232.

Может у кого нить есть опыт использования такого прибора?

Прочитал про этот преобразователь многие хвалят буду брать.
Готовый девайс стоит 1,5 евро а одна фт232 стоит 4 евро плюс доставка.

Я знаю ребята здесь на форуме собирают или собирались собрать амбилайт , но там вроде как с микрухами проблемы.

Так вот я нашёл проект на Тиньке 2313 и на драйверах ULN2004.

Валерий я думаю некто сильно против не будет если я ссылку выкладу на сайт создателя.

Во первых там вся информация описание работы,схема,прошивка и т.д.
Во вторых это устройство универсальное к нему если на выходы тиньки 7 8 9 подключить переключатели то можно выбирать эффект в ручную а если ИК приёмник то можно пультом управлять.И имеено эти статьи есть на сайте.
В третьих там много информации о том как прошить МК разные способы описаны.

Если что это не реклама Просто полезный сайт

Вот прикрепил схему но без прошивки и печатки.
Потому что есть несколько вариантов ПП для СОМ и УСб а также с дарлингтонами как в моём случае на одной печатке и вариант две платы одна управление и другая силовая.
Так что думаю каждый найдёт что то для себя
На схеме между ножками МК и УЛН есть резисторы по 300 Ом но создатель говорит они не обязательны поэтому на моей плате они отсутствуют.