Потребовалось восстановить работоспособность детской игрушки. Функционал очень простой — по нажатию кнопки начинают играть светодиоды. Проходит несколько секунд и игрушка выключается. И так до следующего нажатия на кнопку. Выключателя нет — часовые батарейки-«таблетки» в количестве трех штук питают устройство непрерывно, а родной неизвестный китайский контроллер, залитый каплей компаунда, больше не работает. Как видите, очень просто… Читать далее »
Метки: led, powerdown, прерывания, проект, сонГоды назад усилители звука были довольно громоздкими и требовали к себе определенного внимания. Надо было следить за перегрузками, уровнем стереобаланса и так далее. В помощь пользователям применялись различные индикаторы, чаще всего — стрелочные. Автор следующего проекта решил вспомнить детский восторг от прослушивания музыки с усилителем, на котором был установлен сдвоенный стрелочный индикатор. Конструктор пробовал применять… Читать далее »
Наверняка вы хотя бы раз попадали под струю автоматического ароматизатора в туалете. Это не самое приятное ощущение, учитывая концентрацию ароматического вещества. Автор следующей статьи задумался, как бы сделать так, чтобы ароматизатор срабатывал только без присутствия человека. При этом чтобы не менять корпус фабричного устройства и не использовать дополнительные источники питания. В качестве датчика присутствия применён… Читать далее »
Метки: проект, таймерБлуждая по иностранным площадкам, нашел новогодний сувенир. Не зря самое простое, с чего начинают изучение микроконтроллеров — это пример blink. «Подёргать ногами» микроконтроллера — одна из важнейших возможностей. В проекте новогодней снежинки автор подошел к делу комплексно, и даже заказал печатные платы на стороне. Суть его устройства в том, что под управлением Attiny13 с прошивкой,… Читать далее »
Метки: led, игрушка, проектДавно подмечено, что экспериментируя с умным домом, люди в первую очередь стремятся автоматизировать включение освещения. Иногда для этих целей подходит датчик движения (объемный или PIR или инфракрасный), но я на своем опыте убедился, что у него есть ряд недостатков. Datasheet датчика пишет, что он точно определяет человека в поле зрения 5 метров. Однако в моём… Читать далее »
Метки: 2313, датчик, проект, сонар, ультразвукКопошась на интересных сайтах и форумах, я нашел универсальный проект инфракрасного локатора. Его можно применять, как самостоятельное решение, а также для периферии какого-то более крупного проекта. Суть проекта в наличии ИК-светодиода и ИК-приёмника. Луч светодиода светит либо прямо на приёмник, либо на какую-то поверхность, удалённую до одного метра, и в зависимости от обнаружения отражений микроконтроллер… Читать далее »
Следующая схема показалась мне простой и полезной, потому что микроконтроллер Attiny 2313 решает там сразу несколько задач. Кто из автолюбителей не знает, как бывает грустно, если забудешь выключить фары, потом придешь, а машина уже не заводится? Так вот, параллельно с оповещением водителя звуковым сигналом, описываемое устройство позволяет, реализовать «вежливое освещение салона» — плавное затухание и… Читать далее »
Метки: авто, освещение, проект, сигнализацияКак оказалось, влезать в тему создания устройств с использованием микроконтроллеров надо с нескольких направлений. Я сначала не хотел ввязываться в Ардуино, а потом попробовал, и мне даже понравилось. В каких-то ситуацих можно быстро и просто программировать в среде Arduino IDE, загружая прошивки в Attiny. Безусловно, памяти это съедает много. Библиотеки и методы компиляции для одного… Читать далее »
Метки: ардуино, книги, полезное, ссылки, форумОхрана имущества — одна из основных задач, делегированных электронным приборам. Сигнализацию, конечно, можно купить готовую. Сейчас их продается много и стоят они не дорого, однако если вы на этом сайте, и тем более, читаете эту статью, значит, решили сделать себе охранную систему самостоятельно. Бороздя просторы сайтов с проектами, я нашел интересный проект простой универсальной сигнализации… Читать далее »
Метки: GSM, датчик движения, проект, сигнализация, фонарьОдно из первых и самых очевидных применений микроконтроллеров — анализ каких-либо данных и вывод результата на некий индикатор (экран). После того, как вы уже научились мигать светодиодами (или «дрыгать ножками» микроконтроллера), можно попробовать сваять и вот такую схему. Вашему вниманию представлен термометр и гигрометр в одном. Автор на сайте habrahabr предлагает довольно простой и недорогой… Читать далее »
tiny13digest.ru
Присказка.
Честно сказать, хотел написать статью несколько другого содержания, которая затрагивала бы тему применения и использования сдвиговых регистров, когда сам, даже не думал, что в моих проектах это станет необходимым.
Но так однажды случилось, что я решил втянуть в область программирования микроконтроллеров своего друга, который во многих вопросах с легкостью разберется сам, а в других….
Заказал для него стартовый комплект из Digispark’ов и 10-ти ваттных RGB светодиодов, потому что его первой же идеей, стало создание свето-динамической установки. Но проблема пришла откуда не ждали: недостаток задействованных аппаратных ШИМ — стал первой проблемой. А второй — друг захотел управлять одновременно несколькими светодиодами.
Выход конечно прост — задействовать более продвинутую плату, с другим микроконтроллером. Но такую плату пришлось бы вновь заказывать и ждать, либо купить на месте, за баснословные средства, а тем временем я вспомнил про сдвиговые регистры, принцип управления которыми изучил давно, а вот в схемах никогда не использовал.
Сел за Atmel Studio и начал писать многоканальный софт-ШИМ, через 74HC595. За пару дней было написано несколько режимов управления, и реализованы все основные функции для организации многоканальных ШИМ, БАМ, а так же механизмы работы со светодиодными уровнями и семи-сегментными индикаторами.
В общем, друг получил библиотеку для использования в среде Ардуино, а мне стало скучно и я стал размышлять о применении полученных наработок для управления LCD (HD44780).
Итог этой работы я и хотел бы сейчас продемонстрировать, а заодно, поделиться с Вами знаниями и исходными кодами.
Итак, начнем:
Что такое сдвиговый регистр, микроконтроллер и жидко-кристаллический экран все знают, а если не знают, но имеют к этому интерес, могут получить эти знания с легкостью из Интернет, поэтому самые базовые знания я опущу.
Для работы был выбран сдвиговый регистр 74HC595, ввиду наличия защелки, позволяющей организовать вывод данных по-требованию. Дисплей совместимый с HD44780 (для работы в 4-х битном режиме), и микроконтроллер ATtiny13A.
Такой выбор был обусловлен не отсутствием более мощных микроконтроллеров, а сужением рамок поставленной задачи, количеством выводов, объемами памяти и ОЗУ, и просто — ради спортивного интереса.
Цель: создание кода, способного выполняться на заданном оборудовании, не в ущерб производительности, удобству использования и полноте функционала.
Запуск дисплея.
Первое, что необходимо было организовать, это вывод данных через сдвиговый регистр с приемлемой скоростью, что и было проделано с использованием трех ног «Тиньки».
Изображение описанного подключения таким образом:
Реализация функциональной части.
Как только эта часть работы была выполнена и протестирована, я приступил к организации нижнего уровня функций управления LCD, которые описаны в ДШ к устройству, как необходимые для первоначальной инициализации LCD, а так же, непосредственно саму функцию первоначальной инициализации, без которой LCD даже не включится.
А так как для отправки данных в LCD предназначена всего одна функция вывода (драйвер описанный выше), то все остальные функции легко организуются через ее вызов, с передачей соответствующих параметров. А значит, чтобы сэкономить память программ, все остальные функции можно определить через директиву #define.
Далее был написан вспомогательный набор функций верхнего уровня, для организации вывода на экран данных стандартных типов, как то: байт, слово, байт в HEX-виде, строка и т.п.
Для вывода числовых данных, были написаны функции быстрого деления на 10 и на 100, а так же вспомогательные макросы, которые «выгребают» остаток от соответствующего деления (трюк). Таким образом вместо 5-ти делений для вывода uint16, требуется меньшее количество делений — 4 вместо 8-ми, а для uint8 — 2 вместо 4-ёх. Так же написаны функции определения новых символов, функция перекодировки русского текста для строк в RAM, вывод строк из программной памяти с перекодировкой текста.
Вот этот набор:
Куда вошли две вспомогательные функции, организующие вывод битовой карты байта, и маскированный вывод битовой карты байта, для возможности контроля состояния определенных бит, заданных маской. В видео, представленном ниже, это продемонстрировано.
Однако, для отображения в реальном железе, коды символов придется изменить на другие, либо создать альтернативные символы, и использовать их коды. В комментариях к этим функциям указано где это изменить.
Ну и в заключении, весь этот «винегрет» был расширен самым верхним набором функций,
организующим вывод данных в определенной позиции экрана. Сделано это было так же, через директиву #define:
Представленные выдержки кода показывают, насколько подробно код описан комментариями, чтобы не возникло проблем при его использовании. Итогом оптимизации стала возможность отображения довольно богатого вывода, при очень скромном размере кода, однако скорость его работы меня не впечатляла. А так же, после анализа использования стека и уровней вложенности, было решено переписать функцию ядра вывода, чтобы избавиться от вспомогательной функции (которая принимала 2 параметра), что сильно разгрузило стек, сократило код на 100 байт, но не очень ускорило вывод.
Модернизация аппаратной части.
И в этот момент я наткнулся на пример немцев 10-ти летней давности, которые организовали вывод данных в сдвиговый регистр, с использованием RC-цепочки. Во-первых реализация данного метода позволила освободить одну ногу микроконтроллера, а во-вторых, это подтолкнуло меня к новым размышлениям.
Так, проанализировав протокол передачи данных я понял, что вывод сигнала «Е»-LCD и вывод защелки сдвигового регистра совпадают!
А это значит, что можно освободить одну линию сдвигового регистра, и ускорить вывод данных в ДВА РАЗА!
Впоследствии вывод RS-LCD, был так же перенесен на линию данных, что позволило освободить еще одну линию сдвигового регистра, а протокол передачи данных был переписан учитывая этот факт.
Итогом явилась единая функция ядра, которая принимает на вход данные и флаг (вывод команды или функции), которая сама разбирает нибблы и выводит их на линию данных с необходимыми задержками, и не превышает 100 байт.
Шина данных LCD (4 бита) занимает половину вывода одного сдвигового регистра, вторая половина может использоваться для индикации, что я и показал в демонстрационном примере.
Позже, я наткнулся на упрощенное описание использование RC-цепочки для сдвигового регистра на сайте DIHALT’a — easyelectronics.ru, и хотел разместить весь материал там, но не смог зайти под своим аккаунтом, хотя учетные данные ввел правильно. А может перепутал сайты — основной и сайт сообщества. В общем расстраиваться сильно не стал, DI все-равно привет 🙂
А тем кто чувствует недостаток знаний в описываемой мной области, предлагаю посетить этот ресурс для устранения этого недостатка. DIHALT и члены сообщества очень подробно описали все устройства, о которых здесь идет речь.
В дополнение, информация о подключении и использовании.
Выносить код в отдельную библиотеку я не стал, созданный код легко преобразуется для любой разработки связанной с выводом данных на LCD. К недостаткам можно отнести невозможность переконфигурирования шины данных LCD, сидящей на сдвиговом регистре, она всегда занимает линии с 0 по 3 (правда имеется возможность «отзеркалить» выводы сдвигового регистра, заменив команду левого сдвига «lsl» в функции вывода, на команду правого сдвига «rsl», что «перевернет» назначение выводов сдвигового регистра, и шина данных окажется на выводах с 7 по 4). А вот выводы микроконтроллера могут быть сконфигурированы любые, причем для любого МК, но с оговоркой: линии должны быть на одном порту (опять же, при условии переназначения номера порта в функции вывода, в рассматриваемом варианте порт = 0x16).
Код содержит пару-тройку хитрых трюков, которые могут быть полезны не только для указанной области (например деления на 10 и 100 с остатком).
Код не использует прерывания и другую периферию, кроме аппаратного ШИМ, который изначально был инициализирован для диагностических целей, а впоследствии оставлен для демонстрационного примера (линии порта PB0 — ШИМ, PB1 — инверсный ШИМ, меняется от состояния светодиодов). С помощью этого можно, например, контролировать яркость подсветки дисплея — программно.
Таким образом, это самая маленькая библиотека вывода данных на LCD (и пожалуй самая быстрая, и самая документированная в коде 🙂
Хочется добавить, что в железе тестирование не производилось, но исходя из измеренных отклонений параметров RC-цепочки, думаю проблем возникнуть не должно.
Если найдутся смельчаки которые проверят это дело в железе, буду крайне признателен.
Так же отмечу, что работоспособность проверена для частот МК 9.6 МГц и 4.8 МГц (для последнего необходимо изменить сопротивление RC-цепочки на 9к).
Конденсатор в железе должен быть 100 пф (10 пф — допуск на емкость ног порта МК).
Отдельно создана секция INIT3, для предварительной инициализации параметров МК и запуска дисплея после включения устройства, выглядит она так:
Примеры применения.
Для демонстрации работоспособности, возможностей и скорости обработки, был написан демо-режим, который использует далеко не все функции, тем не менее достаточный для понимания их набор.
Видео эмуляции в программе Proteus это демонстрирует:
Извиняюсь за озвучку, забыл отключить звук на втором мониторе, надеюсь она не отвлекает от просмотра.
Некоторая техническая информация.
Из этих данных:
понятно, что демонстрационный пример использует 480 байт в функции main. Остальной код — использованные функции библиотеки, cp1251 — таблица перекодировки символов (33*2), HelloPGM — строковая константа «Привет, Хабр», и последние 4 фрагмента кода по 7 байт (строковые константы для вывода режимов: «Red», «Green», «Blue», «Yellow» выровненные пробелами), хранятся во flash-памяти.
1 байт RAM — занимает переменная состояний флагов светодиодов.
В видео, использованные символы встроены в библиотеку Proteus, которая была полностью перерисована. Поэтому в железе картинка будет отличаться. 🙂
Но работоспособность от этого не пострадает!
Временные параметры сигналов пульса и пакета данных для желающих:
Заключение.
Если кто-то решится воплотить моё творение в железе, и испытает проблемы с запуском, рекомендую поиграть с задержкой (указана директивой #define в секции описания глобальных данных). Будет необходима помощь, обращайтесь с вопросами в комментариях к статье, с радостью помогу. Чуть не забыл добавить: При использовании прерываний, придется обеспечить барьеры в функции вывода данных на линию, самостоятельно (в конце функции есть примеры сохранения и восстановления SREG (регистр состояния) под комментарием). Иначе возникнет проблема вызова прерывания во время функции передачи данных, что приведет к отказу работоспособности (инструкций: cli и sei — не достаточно!).
Как всегда — постскриптум:
Решил я проверить, насколько адаптируем код для новых разработок связанных с выводом данных, и первое что пришло на ум, это реализация вольт-метра на ATtiny13A.
Разработка представленной реализации заняла не более 30 минут, большую часть которых заняло проектирование схемы.
Двух-канальный ампер-, вольт-метр:
1 канал: 0-60V, 0-40A
2 канал: 0-15V, 0-10A
Размер кода: 760 байт
Использованная периферия: ADC0, ADC1, ADC2, ADC3
RESET — запрещён, используется весь PORTB.
Возможно в статье допущены неточности, так же, неточности возможны в результатах профилирования указанных в коде на полях, код переписывался неоднократно. Относительно работоспособности кода могу заверить что все функции протестированы много раз.
Исходный код демонстрационного примера для Atmel Studio 7.0, и проект для Proteus 8.3 sp2 — прилагается, дальнейшие изменения выкладываться не будут.
Как всегда, всем желаю успехов в творчестве… да и в прочих начинаниях!
Скорейшей весны!
Использование в коммерческих проектах, перепродажа исходного кода, использование с целью наживы и любых корыстных целях, запрещено. Исходные тексты распространяются бесплатно как есть, в случае использования на других сайтах, либо в других источниках, указание автора и уведомление о размещении — обязательно!
habr.com
if(OCR0A==0)TCCR0A&=0x3F;
else TCCR0A=0x83;
we.easyelectronics.ru
Схема фонаря показана на рисунке. На полевом транзисторе VT1, дросселе L1, диоде VD1 и конденсаторе С4 собран повышающий преобразователь, управляющие импульсы для которого вырабатывает микроконтроллер DD1. С подвижного контакта подстроенного резистора R1 снимают и подают на вход АЦП микроконтроллера часть напряжении питания для его контроля. Кнопкой SB1 включают фонарь и регулируют яркость его свечения. Пять …
Читать далее
Постоянная ссылка на это сообщение: http://meandr.org/archives/35687
Для реализации проекта понадобится 4 светодиодных матрицы 8х8, 4 сдвигающих регистра 74HC595 и управляющий микроконтроллер TINY13A. Задача заключается в том, чтобы зажечь все 256 светодиодов от нашего 8-выводного микроконтроллера TINY13A. Для этого дела выводов на данном микроконтроллере явно маловато, по этому будем расширять порты регистрами сдвига. Что бы всё работало я написал небольшую «детскую» программку, …
Читать далее
Постоянная ссылка на это сообщение: http://meandr.org/archives/35659
meandr.org
Схема фонаря показана на рисунке. На полевом транзисторе VT1, дросселе L1, диоде VD1 и конденсаторе С4 собран повышающий преобразователь, управляющие импульсы для которого вырабатывает микроконтроллер DD1. С подвижного контакта подстроенного резистора R1 снимают и подают на вход АЦП микроконтроллера часть напряжении питания для его контроля. Кнопкой SB1 включают фонарь и регулируют яркость его свечения. Пять …
Читать далее
Постоянная ссылка на это сообщение: http://meandr.org/archives/35687
Для реализации проекта понадобится 4 светодиодных матрицы 8х8, 4 сдвигающих регистра 74HC595 и управляющий микроконтроллер TINY13A. Задача заключается в том, чтобы зажечь все 256 светодиодов от нашего 8-выводного микроконтроллера TINY13A. Для этого дела выводов на данном микроконтроллере явно маловато, по этому будем расширять порты регистрами сдвига. Что бы всё работало я написал небольшую «детскую» программку, …
Читать далее
Постоянная ссылка на это сообщение: http://meandr.org/archives/35659
meandr.org
Схема фонаря показана на рисунке. На полевом транзисторе VT1, дросселе L1, диоде VD1 и конденсаторе С4 собран повышающий преобразователь, управляющие импульсы для которого вырабатывает микроконтроллер DD1. С подвижного контакта подстроенного резистора R1 снимают и подают на вход АЦП микроконтроллера часть напряжении питания для его контроля. Кнопкой SB1 включают фонарь и регулируют яркость его свечения. Пять …
Читать далее
Постоянная ссылка на это сообщение: http://meandr.org/archives/35687
Для реализации проекта понадобится 4 светодиодных матрицы 8х8, 4 сдвигающих регистра 74HC595 и управляющий микроконтроллер TINY13A. Задача заключается в том, чтобы зажечь все 256 светодиодов от нашего 8-выводного микроконтроллера TINY13A. Для этого дела выводов на данном микроконтроллере явно маловато, по этому будем расширять порты регистрами сдвига. Что бы всё работало я написал небольшую «детскую» программку, …
Читать далее
Постоянная ссылка на это сообщение: http://meandr.org/archives/35659
Автоматические включатели освещения на базе датчиков присутствия человека весьма полезны в плане экономии электроэнергии. В статье представлены результаты работы автора над собственными конструкциями таких приборов. Основная идея разработки заключалась в применении в автоматических включателях освещения единого модуля микроконтроллера с возможностью подключения к нему различных датчиков присутствия. Замена датчика и программного обеспечения даёт возможность работать в …
Читать далее
Постоянная ссылка на это сообщение: http://meandr.org/archives/27847
Листая журналы «Радио» прошлых лет, всегда можно почерпнуть идею для новой конструкции. В данном случае источником идеи послужила статья [1] под рубрикой «За рубежом Описываемый прибор выполняет аналогичную функцию и предназначен для быстрой проверки наиболее распространённых гальванических элементов питания бытовой аппаратуры. Испытатель измеряет остаточную ёмкость гальванического элемента питания на момент измерения в процентах от номинальной. …
Читать далее
Постоянная ссылка на это сообщение: http://meandr.org/archives/26355
meandr.org
Чтобы устранить эту нехватку информации, в этой статье, я покажу вам, как программировать ATtiny13 или ATtiny13a с обновленной версией Arduino IDE.
Шаг 1: Необходимое оборудование
• Arduino (Uno самый простой, но любой Arduino будет работать)
• ATtiny13 или 13a
• Макетная плата
• Перемычки
Устранение неполадок оборудования (необязательно)
• Электролитический конденсатор 10 мкФ
• Любой большой электролитический конденсатор ( 1000 мкФ, но любая емкость 100 мкФ и выше будет работать лучше всего)
Шаг 2. Настройка оборудования
Подключите контакты Arduino к ATtiny, как показано на изображении или в таблице ниже.
Важное примечание. Обязательно поставьте свой ATtiny так, чтобы индикаторная точка на вашем чипе находилась в левом нижнем углу, как показано на изображениях (напротив линии 5v).
Arduino ____________ ATtiny13 (а)
5v —————————- Контакт 8
GND ———————— Контакт 4
Контакт 13 ———————— Контакт 7
Контакт 12 ———————— Контакт 6
Контакт 11 ———————— Контакт 5
Контакт 10 ———————— Контакт 1
Шаг 3: Настройка Arduino As ISP
Перейдите в Files-Examples-ArduinoISP и нажмите «ArduinoISP». Загрузите этот эскиз на свой Arduino. Теперь ваш Arduino настроен для программирования других чипов.
Шаг 4: Загрузка файлов Attiny13 (a) Core
Чтобы запрограммировать ATtiny13 или 13a, вам нужно будет установить основные файлы. Для этого мы будем использовать основные файлы, которые, как мне кажется, проще всего установить и лучше всего использовать.
Чтобы установить эти файлы, откройте свою Arduino IDE и перейдите в раскрывающееся меню файлов, затем выберите Preferenses. Вставьте этот URL-адрес «https://raw.githubusercontent.com/sleemanj/optiboot/master/dists/package_gogo_diy_attiny_index.json».
Теперь перейдите на Панель инструментов и нажмите «Диспетчер плат» … Теперь прокрутите страницу вниз до тех пор, пока вы не увидите DIY ATtiny и не щелкните по кнопке установки (по умолчанию она будет самой последней).
Шаг 5: Запись загрузчика в Attiny
Перейдите на Панель инструментов и выберите ATtiny13. Выбрав ATtiny13, перейдите Tools-Processor и выберите ATtiny13 или ATtiny13a в зависимости от вашего чипа. Не изменяйте никаких других настроек, пока не узнаете, что они делают, они могут испортить то, что вы пытаетесь выполнить. Наконец, нажмите кнопку «Записать загрузчик» в нижней части раскрывающегося меню инструментов.
Шаг 6: Программирование чипа
ngin.pro