Оглавление:

Минидот 2 - Холоклок: 6 шагов
Минидот 2 - Холоклок: 6 шагов

Видео: Минидот 2 - Холоклок: 6 шагов

Видео: Минидот 2 - Холоклок: 6 шагов
Видео: Маджонг Освоение карты ✨ Dot Challenge SNAP из отрицательного RUT используйте метод Bounce Back #bounce 2024, Ноябрь
Anonim
Минидот 2 - Холоклок
Минидот 2 - Холоклок
Минидот 2 - Холоклок
Минидот 2 - Холоклок

Что ж, возможно, голоклок немного неточен … он использует голографическую дисперсионную пленку на передней панели, чтобы придать немного глубины. В основном это руководство является обновлением моего предыдущего Minidot, расположенного здесь: https://www.instructables.com/id / EEGLXQCSKIEP2876EE / и повторное использование большого количества кода и схем из моей Microdot, расположенной здесь: https://www.instructables.com/id/EWM2OIT78OERWHR38Z/EagleCAD, а код Sourceboost включен в прикрепленные zip-файлы. Почему? Предыдущий Minidot был слишком сложным, с Microdot я узнал, как выполнять RTC на PIC, используя только кристалл 32,768, и не нужно было использовать специальный чип RTC. Также я хотел избавиться от микросхем дисплея от предыдущего Minidot. Итак, теперь есть только микросхема регулятора мощности и PIC16F88….только два чипа. Другими причинами для обновления был мой Minidot, который становился немного ненадежным из-за отдельной платы переключателя, и я хотел мягкое затухание между точечными узорами, поскольку ну и какой-то датчик внешней освещенности для затемнения дисплея ночью. Другой Minidot имел фиксированную яркость и освещал комнату ночью. Устройство было сконструировано с помощью программного пакета EagleCad и компилятора Sourceboost. Чтобы начать этот проект, вам потребуется некоторый опыт работы с электроникой и программирования контроллеров PIC. Обратите внимание, что это не является инструкцией ни по электронике, ни по программированию PIC, поэтому, пожалуйста, оставляйте вопросы, относящиеся к конструкции Miniclock. Обратитесь к инструкциям выше или ко многим другим инструкциям на этом сайте для получения совета по использованию EagleCad или программированию PIC. Итак, вот он….. Minidot 2, The Holoclock …… или Minidot The Next Generation ………….

Шаг 1: Схема

Схема
Схема
Схема
Схема
Схема
Схема

Эта схема очень похожа на Microdot. Обратите внимание, что массив Charlieplex практически идентичен… только несколько контактов были перемещены.

К микросхеме Microdot был добавлен кристалл 20 МГц, чтобы синхронизировать PIC намного быстрее, это позволяет быстрее сканировать массив и позволяет реализовать алгоритм затемнения. Алгоритм затемнения был очень важен для работы функции перекрестного затемнения и рассеянного света. Это было бы невозможно с Microdot из-за более низкой тактовой частоты, так как некоторые циклы сканирования приходилось тратить на затемнение. См. Следующий раздел для описания функции затемнения. Также следует отметить использование регулятора накачки заряда MCP1252 для подачи 5 В, моего любимого чипа на данный момент. Если вы измените схему, вы можете использовать старый добрый 7805… У меня просто есть несколько таких удобных микросхем. Теперь я переместил переключатели на переднюю часть, избавив от необходимости возиться с часами после отключения питания, чтобы сбросить время, и теперь все - только одна печатная плата… Никаких проблем с кабелями. Также следует отметить включение LDR. Он используется в делителе напряжения, который определяется выводом A / D на PIC. Когда PIC определяет низкий уровень окружающего освещения (то есть в ночное время), алгоритм затемнения сохраняет массив Charlieplex темным на большее количество циклов, чем при высоком уровне освещения. Я не смог найти символ LDR в библиотеке Eaglecad, поэтому я просто использовал символ светодиода … не обманывайтесь, это LDR. См. Реальное изображение печатной платы ниже. Одна вещь, которую следует отметить при использовании разноцветных светодиодов в массиве charliplex. Вам нужно убедиться, что прямое напряжение светодиодов более или менее одинаково. В противном случае могут возникнуть пути паразитного тока и загорятся несколько светодиодов. Таким образом, использование светодиодов мощностью 5 мм или более для этой конфигурации не будет работать, поскольку обычно существует значительная разница между зелеными / синими светодиодами и красными / желтыми светодиодами. В данном случае я использовал светодиоды 1206 SMD и, в частности, высокоэффективные зеленые / синие светодиоды. Впрочем, прямое напряжение здесь не было проблемой. Если вы хотите использовать сочетание зеленого / синего и красного / желтого светодиодов повышенной мощности в массиве Charlieplex, вам необходимо разделить разные цвета на два массива Charliplex. Существует множество объяснений charlieplexing, которые можно найти в Google… Я не буду здесь вдаваться в подробности. Я оставлю это на ваше усмотрение. (Нажмите маленький значок «i» в углу рисунка ниже, чтобы увидеть увеличенную версию)

Шаг 2: Алгоритм затемнения - широтно-импульсная модуляция с помощью Charliplexed

Алгоритм диммирования - широтно-импульсная модуляция с Шарлиплексом
Алгоритм диммирования - широтно-импульсная модуляция с Шарлиплексом

Как упоминалось ранее, я хотел, чтобы разные точечные узоры в течение некоторого времени плавно переходили от одного рисунка к другому, а не рывками переходили от одного рисунка к другому. См. Видео для демонстрации. Посередине - новые часы Minidot, справа - старые Minidot. Обратите внимание, насколько лучше новый. (К вашему сведению, другие дисплеи в фоновом режиме - это мой статус суперкомпьютера Minicray и моя захваченная частица Nebulon, которая питает Minicray в магнитном поле удержания антивещества. См. Здесь: https://www.youtube.com/watch? V = bRupDulR4ME для демонстрации камеры удержания небулона) Если вы посмотрите в код, откройте файл display.c. Обратите внимание, что есть четыре массива для сопоставления значений трис / порта для освещения любого конкретного массива и два массива (на один больше, чем код Microdot) для определения, какие светодиоды должны гореть для любого конкретного шаблона светодиодов, например:

// LED1 LED2 LED3… символ без знака LEDS_PORTA [31] = {0x10, 0x00, 0x00,… символ без знака LEDS_TRISA [31] = {0xef, 0xff, 0xff,… символ без знака LEDS_PORTB [31] = {0x00, 0x02, 0x04, … Символ без знака LEDS_TRISB [31] = {0xfd, 0xf9, 0xf9,… символ без знака nLedsA [30]; символ без знака nLedsB [30];Например, чтобы зажечь LED1, вам нужно установить регистры TRIS TRISA: B = 0xef: 0xfd и регистры PORT PORTA: B = 0x10: 0x00 и так далее. Если вы запишете значения tris в двоичном формате, вы заметите, что в любой момент времени задействованы только два выхода. Остальные все настроены на три состояния (отсюда и регистр TRIS). Это центральное место в чарльплексинге. Вы также заметите, что один выход всегда представляет собой логическую «1», а другой - всегда логический «0»…. Направление которого включается, какой бы светодиод ни находился между этими двумя выходными линиями. Последнее значение в port / tris array - это нулевое значение, чтобы светодиод не загорался вообще. В Microdot функция update_display непрерывно циклически перебирала другой массив (nLeds ), чтобы увидеть, должен ли светиться этот конкретный светодиод. Если это так, то были установлены соответствующие значения трис / порта, и на некоторое время загорелся светодиодный индикатор. В противном случае в регистры TRIS / PORT PIC было отправлено нулевое значение, и в течение некоторого времени светодиод не загорался. Когда все было сделано достаточно быстро, это дало образец. Остальная часть программы будет периодически считывать значения RTC и составлять хороший случайный образец в этом массиве … и поэтому дисплей изменился. Чтобы сделать функцию затемнения, это было немного расширено, так что после того, как 30 светодиодов либо загорелись (или нет), то дополнительные периоды будут потрачены на отправку нулевых значений, если дисплей должен быть затемнен…..для полной яркости дополнительные периоды не будут тратиться. При повторении, если для светящихся светодиодов было много нулевых периодов, дисплей был бы тусклым. По сути, это мультиплексированная широтно-импульсная модуляция … или потому, что оборудование сконфигурировано в виде чарлиплексной, а затем чарлиплексной широтно-импульсной модуляции. Вторая диаграмма ниже показывает базовую настройку для этого. Я называю это рамкой сканирования. Первые 30 периодов кадра используются для просмотра светодиодов….. а переменное количество дополнительных периодов определяет, насколько тусклым будет дисплей. Этот цикл повторяется. Больше нулевых периодов означает меньшее время, в течение которого светодиод будет гореть в каждом кадре (поскольку количество периодов увеличилось). Обратите внимание, что вертикальная ось не означает уровень напряжения. Фактическое состояние контактов, идущих к светодиодам, варьируется в зависимости от их положения в массиве charlieplex ….. на диаграмме это означает просто включено или выключено. Это также означало, что общая длина кадра во времени также увеличилась, что уменьшило обновление темп. Другими словами, по мере того, как светодиоды становились тусклее, они начинали мигать. Так что этот метод полезен лишь до некоторой степени. Для часов все было нормально. Периодически вызывается функция, которая считывает аналого-цифровой преобразователь на PIC и устанавливает этот уровень яркости. Если вы читаете код, он также проверяет, горит ли светодиод, ближайший к LDR, и не выполняет никаких настроек уровня, если это так, это останавливает неожиданное свечение дисплея при изменении рисунка. Следующая функция перекрестного затухания.

Шаг 3. Алгоритм затемнения - эффект перекрестного затухания и двойная буферизация

Алгоритм затемнения - эффект перекрестного затухания и двойная буферизация
Алгоритм затемнения - эффект перекрестного затухания и двойная буферизация

Раньше переход от одного паттерна к другому происходил незамедлительно. Для этих часов я хотел показать, что один узор постепенно уменьшается в яркости, а следующий узор постепенно увеличивается… то есть перекрестное затухание.

Мне не нужно было иметь отдельные светодиоды для управления на разных уровнях яркости для кроссфейда. Просто нужен был первый узор на одной яркости, а второй на малой яркости. Затем в течение короткого периода времени я немного уменьшал яркость первого и увеличивал второй … это продолжалось бы, пока не закончился второй узор. Затем часы будут ждать, пока должен появиться следующий паттерн, и произойдет еще один переход. Таким образом, мне нужно было сохранить два шаблона. Тот, который отображается в настоящее время, и второй шаблон, который должен был отображаться. Они находятся в массивах nLedsA и nLedsB. (обратите внимание, что в данном случае это не связано с портами). Это двойной буфер. Функция update_display () была изменена для циклического перебора восьми кадров и отображения количества кадров сначала из одного массива, затем из другого. Изменение количества кадров, выделенных каждому буферу в течение восьми циклов, определило, насколько ярким будет каждый узор. Когда мы закончили циклически переключаться между буферами, мы поменяли местами буферы 'display' и 'next display', так что функция генерации шаблонов будет записывать только в буфер 'next display'. Диаграмма ниже показывает это, надеюсь. Вы должны увидеть, что переход займет 64 кадра сканирования. На картинке на небольшой вставке показана искусно уменьшенная диаграмма кадра сканирования с предыдущей страницы. Пару слов о повторной свежести курса. Все это нужно делать очень быстро. Теперь у нас есть два уровня дополнительных вычислений: один для яркости окружающего дисплея, а второй - для восьми циклов кадра, затрачиваемых на переход между двумя буферами. Таким образом, этот код должен был быть написан на ассемблере, но достаточно хорош на 'C'.

Шаг 4: Строительство - печатная плата

Конструкция - печатная плата
Конструкция - печатная плата
Конструкция - печатная плата
Конструкция - печатная плата

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

Единственное, что следует отметить в конструкции печатной платы - это наличие разъема для программирования PIC. Он подключается к контактам ICSP на PIC, и вам понадобится программатор ICSP. Я снова воспользовался удобным разъемом для мусорного ящика. Вы можете опустить это и просто припаять провода к контактным площадкам, если хотите. В качестве альтернативы, если у вас есть только программатор с сокетом, вы можете сделать разъем, который вставляется в разъем, а затем припаять его к контактным площадкам ICSP. Если вы сделаете это, то отключите Rx и подключите Ry, которые являются просто связями с нулевым сопротивлением (я просто использую припой). Это отключит остальную часть питания схемы от PIC, чтобы это не мешало программированию. Программист с сокетом просто использует выводы ICSP, как программист ICSP, на самом деле в этом нет никакого волшебства. Это также необходимо сделать, если по ошибке вы забыли установить задержку в коде перед запуском RTC. Для 16F88 контакты программирования ICSP такие же, как и контакты, необходимые для кристалла 32,768 кГц, используемого для RTC …… если внешний генератор T1 (т.е. RTC) работает до того, как ICSP сможет начать свою работу, программирование завершится ошибкой.. Обычно, если есть сброс на выводе MCLR и есть задержка, то данные ICSP могут быть отправлены на эти выводы, и программирование может начаться правильно. Однако, изолировав питание PIC, программист ICSP (или программатор с разъемом с заголовком) может управлять питанием устройства и принудительно запускать программу. Также следует отметить, что контактные площадки на печатной плате изначально были разработаны для кристаллов SMD. Я не мог дождаться, когда будут доставлены некоторые из них, поэтому кристалл часов 32,768 кГц был припаян к верхней части, как показано, а кристалл 20 МГц был прикреплен путем просверливания пары отверстий в контактных площадках, проталкивания кристалла через нижнюю часть и пайки на Топ. Вы можете увидеть контакты справа от PIC16F88.

Шаг 5: голографическая пленка и корпус

Голографическая пленка и корпус
Голографическая пленка и корпус
Голографическая пленка и корпус
Голографическая пленка и корпус
Голографическая пленка и корпус
Голографическая пленка и корпус

Окончательная конструкция просто помещает печатную плату в корпус и после программирования прикрепляет ее с помощью небольшого количества горячего клея. Три отверстия обеспечивают доступ к микровыключателям спереди.

Примечательной особенностью этих часов является использование голографической светорассеивающей пленки. Это специальная пленка, которая у меня была под рукой, которая придает устройству приятную глубину. Вы можете использовать обычную кальку (в которой я бы переместил печатную плату ближе к лицевой стороне) или любой другой рассеиватель, подобный тем, которые используются в люминесцентных осветительных приборах. Поэкспериментируйте, единственное, что ему нужно сделать, это позволить вам различать количество горящих светодиодов, иначе подсчет точек, чтобы определить время, будет затруднен. Я использовал голографический дисперсионный материал от Physical Optics Coorporation (www.poc.com) с круговой дисперсией 30 градусов, для отображения статуса суперкомпьютера, показанного в другом месте инструкции, использовалась пленка с эллиптической дисперсией 15x60 градусов. Вы можете использовать плотную ленту, чтобы скрыть блестящие внутренности в дневное время, чтобы получить более загадочный вид. Вы даже можете оставить дисплей чистым и позволить людям видеть внутренности, как это сделал я. Подставка состояла из двух кусков алюминиевого L-образного стержня с небольшой выемкой внизу для обеспечения возможности изгиба. Обратите внимание, что на этих фотографиях было добавлено дополнительное освещение, чтобы вы могли видеть крышки дисплея и т. Д. При обычном освещении гостиной светодиоды более заметны даже при дневном свете.

Шаг 6: Программное обеспечение и пользовательский интерфейс

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

Чтобы установить время, сначала нажмите SW1. Устройство несколько раз мигнет всеми светодиодами, а затем группа светодиодов SW3 по 10 секунд будет увеличивать выбранную группу. SW2 перейдет к следующей группе светодиодов, каждый раз кратковременно мигая всеми светодиодами в группе. Код написан для компилятора Sourceboost 'C' версии 6.70. Код RTC находится в файлах t1rtc.c / h и имеет функцию прерывания на таймере T1 PIC. Таймер T1 настроен на прерывание каждую 1 секунду. Каждую секунду переменная времени увеличивается. Также тиковый таймер отсчитывает каждую секунду вместе со временем. Это используется, чтобы определить, когда переходить между отображением. Функция прерывания также использует прерывание таймера T0 для обновления дисплея, вызывая функцию в display.c. Файлы display.h / display.c содержат функции для обновления дисплея и отображения времени. Файлы control.c / h содержат функции для установки времени и чтения переключателей. Файлы holoclock.c / h являются основными циклами и инициализацией.

Рекомендуемые: