Часы - информатор для ПК
Автор: goldenandy Каждый (ну почти каждый) радиолюбитель рано или поздно,
Когда то, в далекие-далекие времена, коллега увидел в интернете некое изделие. Изделие выглядело как непрозрачная коробочка с полупрозрачной передней стенкой, на которой был нарисован конверт. И коробочка, будучи подключенной к компьютеру, светилась изнутри зеленым светом, если в почтовом ящике не было входящих писем, и желто-янтарным - если письма поступали. В дополнение к коробочке на самом ПК запускалась специально обученная программа, которая как раз и мониторила почтовый ящик и через USB управляла коробочкой. Коллеге мысль понравилась, но хотелось большего. Например, количества пришедших писем. И часов с большими цифрами. В результате родился проект часов, которые показывают время и умеют прислушиваться к ПК и по команде нарисовать что то на дисплее и издать звук. Внешний вид готового изделия
Что умеют часы:
(*произвольное изображение - в рамках возможностей 7-сегментного дисплея) По сути данное изделие - это 2-в-1 - независимые от ПК часы с будильником и интерфейс для ПК, посредством которого можно воспроизвести мелодию и показать какое то изображение на дисплее. Схема Часы построены на базе контроллера ATMEGA 8, в качестве часов реального времени используется DS3231. Никаких особых схемных ухищрений не используется, часы подключены к контроллеру по i2C плюс от часов на вход INT0 прилетает меандр с частотой 1 Гц. Пищалка подключена к выходу сравнения канала В 16-разрядного таймера 1. Настройками коэффициента пересчета таймера и скважности сигнала можно добиться воспроизведения звука различной тональности и громкости. Поскольку данные часы являются офисным вариантом - громкий сигнал не нужен, что бы не мешать окружающим. Соответственно, никаких мер по повышению громкости звучания не принималось. Дисплей - четырехразрядный 7-сегментный дисплей с общим катодом красного цвета свечения. Дисплей подключен непосредственно к контроллеру, мощности контроллера хватает обеспечить приемлемую яркость свечения. Резервное питание часов производится от литиевой батарейки CR2032. Управление часами производится тремя кнопками: "+" "-" и "Select". Алгоритм управления будет описан ниже. Связь с ПК производится через последовательный интерфейс (UART) через преобразователь USB to TTL UART. В данной конструкции использован готовый модуль производства наших коллег из Поднебесной, построенный на базе контроллера CH340.
Данный контроллер подключается к часам 4 проводами : +5 вольт, Rx, Tx и общий провод. Кстати, DS3231 и держатель батарейки так же сняты с готового китайского модуля. Конструкция, монтаж В часах использован четырехразрядный 7-сегментный дисплей красного цвета свечения и высотой символа 0.56 дюйма. Габаритные размеры этого дисплея 50.5 х 19.5 мм. Печатная плата спроектирована так, что бы не выходить за пределы габаритов дисплея. Этим обусловлен достаточно плотный монтаж на обеих сторонах платы и использование компонентов типоразмера 1206 и 0805. Монтажная схема Печатная плата изготовлена по ЛУТ-технологии (файлы для печати на лазернике приложены к статье). К сожалению, из-за ограниченного пространства на плате пришлось под 6 резисторами типоразмера 0805 пропустить дорожки шириной 0,3 мм. Нужно при изготовлении платы обратить внимание на данные участки, что бы дорожка не порвалась и не слиплась с посадочным местом для резисторов. Технология изготовления достаточно простая - на зашкуренный и обезжиренный текстолит накатывается первая сторона платы, вторая сторона заклеивается полоской скотча. Травится первая сторона платы, снимается скотч, смывается тонер. Потом сверлятся 2 любых монтажных отверстия, желательно в противоположных краях платы, в них вставляются 2 иглы. На эти же иглы накалывается соответствующими отверстиями распечатка второй стороны, после чего она слегка прикатывается утюгом к плате в месте, свободном от иголок. Когда распечатка прилипла - иголки удаляются и распечатка уже прикатывается на плату полностью. После накатки второй стороны и удаления подложки первая сторона платы заклеивается полоской скотча. После травления второй стороны скотч удаляется, тонер смывается и сверлятся все отверстия. Переходные отверстия сверлятся сверлом 0,5 мм, отверстия под дисплей и электролитический конденсатор - 0,7 мм, отверстия под разъемы PLS, держатель батарейки и пищалку - сверлом 0,9 мм. Следует учесть, что держатель батарейки имеет плоские выводы, ширина вывода порядка 1,1 мм. Соответственно, что бы не сверлить большое отверстие, можно сверлом 0,9 "разбить" отверстие, аккуратно наклоняя плату в стороны при включенной сверлилке. Это нужно делать очень аккуратно, что бы не сломать сверло, особенно если оно твердосплавное. После завершения сверловки плата шкурится, очищается от грязи и лудится. Я обычно лужу всю поверхность платы обычным припоем, используя плоское овальное жало. Припоя требуется совсем чуть-чуть, дорожки должны оставаться плоскими, без наплывов припоя. После лужения платы пропаиваются все переходные отверстия, для пропайки используется тонкая медная жилка из многожильного монтажного провода. Особое внимание следует уделить 4 переходным отверстиям, расположенным под микросхемами контроллера и часов, поскольку излишнее количество припоя может мешать нормально установить и припаять микросхемы. При необходимости (или для успокоения своей паранойи) можно прозвонить все дорожки на предмет обрывов и коротышей с соседними дорожками. Либо провести хотя бы визуальный контроль под яркой лампой и увеличительным стеклом, поскольку возможные огрехи изготовления платы после монтажа всех деталей устранить будет тяжело. Учитывая достаточно плотный монтаж, рекомендуется следующая последовательность монтажа:
Расположение деталей в объеме
Обрезка держателя батарейки Общий вид собранной платы Корпус Корпус часов - самодельный, изготовлен из пластикового уголкового профиля (используется, например, для закрывания угла при поклейке обоев и т.д.) Профиль приклеивается непосредственно к дисплею, дальше уже на него наклеиваются другие элементы корпуса. В частности, для толкателей кнопок нужно обеспечить ограничение их перемещения только в продольном направлении - для этого делаются специальные отсеки. Сами толкатели изготовлены из фишек от игры "Морской бой". Учитывая то, что ширина дисплея 19.5 мм, а диаметр батарейки - 20 мм, верхняя и нижняя стенки делаются из двух слоев пластика, во внутренних слоях выполнены прорези под батарейку. Предварительная оклейка тонировочной пленкой для стёкол автомобиля, далее верхняя, нижняя и боковые стенки будут оклеены непрозрачной декоративной пленкой. Работа часов, управление В основном режиме часы отображают текущее время на протяжении 8 секунд, далее 3 секунды число и номер месяца, потом 3 секунды номер дня недели. Вначале высвечивается номер будильника "AL.#", (# - номер будильника от 1 до 4 ) краткое нажатие "Select" отображает время срабатывания будильника или "OFF", если будильник выключен. Если будильник включен, то краткое нажатие на "Select" приводит к отображению режима будильника - "ONCE" (если будильник разовый) или "E.dAY" - если будильник ежедневный. Если будильник выключен - цикл отображения времени и режима пропускается. Следующее нажатие переключает часы в режим отображения следующего будильника или, после отображения данных по будильнику №4 - в основной режим. Установка будильника. Кратким нажатием на кнопку "Select" необходимо перейти в режим отображения информации по нужному будильнику. После этого необходимо зажать кнопку "Select" до начала мигания часа срабатывания будильника. Кнопками "+" и "-" нужно выставить желаемый час срабатывания будильника, кратким нажатием "Select" перейти к установке минут срабатывания будильника. Дальнейшее краткое нажатие "Select" приведет к выбору режима будильника (режим так же выбирается кнопками "+" и "-"): "OFF" - будильник выключен, "ONCE" - once - однократный будильник, "E.dAY" - every day - будильник срабатывает каждый день. Если выбран режим "OFF" - нажатие на "Select" приведет к выходу в основной режим отображения времени. Иначе нажатие на "Select" приведет в режим выбора мелодии будильника: "Snd.#" - # - это номер мелодии. Кнопками "+" и "-" можно выбрать желаемую мелодию. При этом выбранная мелодия сразу начинает воспроизводиться. Нажатие на "Select" приведет в режим выбора громкости : "ton.#" # - уровень громкости от 1 до 7. Краткое нажатие "Select" приведет к сохранению настроек будильника и выходу в основной режим отображения. Если в режиме настройки будильника не выполнять никаких действий на любом этапе настройки будильника - через 8 секунд настройки будильника сохранятся и часы перейдут в основной режим отображения. При входе в режим настроек будильника, который находится в выключенном состоянии, режим будильника автоматически переключится в однократный. Установка даты/времени/дня недели. Для установки необходимого параметра необходимо нажать и удерживать кнопку "Select" в тот момент, когда этот параметр отображается на дисплее. Для установки времени нужно зажать кнопку "Select" в момент отображения времени. При этом значение часов начнет мигать. Кнопками "+" и "-" нужно установить желаемое показание часов, нажатием на "Select" перейти в режим установки минут, установить желаемое показание минут и нажатием на "Select" сохранить установленное значение времени в микросхему часов реального времени. При этом, если установленное значение минут отличается от исходного, внутренний счетчик секунд будет сброшен в 0. В отличие от настройки будильников, настройка даты/времени сохраняется только при прохождении полного цикла установки значений с финальным нажатием на "Select". Если войти в режим установки времени, даты или дня недели и не выполнять никаких действий, часы через 30 секунд перейдут в основной режим отображения. В режиме установки минут - тайм-аут увеличен до 75 секунд, для возможности дождаться 00 секунд на эталонных часах и нажать "Select". Для установки даты нужно зажать кнопку "Select" в режиме отображения числа и номера месяца. При этом последовательно нужно установить год, месяц и число. Такая последовательность выбрана для корректного определения последнего числа месяца. Для установки дня недели нужно зажать "Select" в режиме отображения дня недели. А вот теперь то, ради чего создавались еще одни часы: Взаимодействие часов и ПК Часы требуют подключения к последовательному порту ПК с TTL-уровнями. Это может быть как переходник USB - TTL UART, так и "железный" последовательный порт с преобразованием уровней RS-232 к TTL. В последнем случае, правда, придется где то взять еще 5 вольт для питания цифровой части часов. Цепь Rx часов должна быть соединена с Tx последовательного порта ПК. Цепь Tx - с Rx последовательного порта. При этом TTL-уровни переходника/преобразователя могут быть как 3.3, так и 5 вольт. Вход Rx контроллера часов подключен через защитный резистор, контроллер при питании 5 вольт воспринимает диапазон напряжений от 3,3 до 5 вольт как корректную логическую 1. Выход Tx контроллера изначально нагружен на резистивный делитель, понижающий уровень на выходе до 3.3 вольт. Последовательный порт в часах настроен на скорость передачи 9600 бод, режим 8,N,1. По умолчанию - часы находятся в режиме ожидания начала сеанса. Команда "D" - загрузка данных в дисплей - часы ответят "!"
После отправки 5 корректных байт часы ответят символом "+" и перейдут в режим ожидания начала сеанса. Пример отправки данных: >$ После отправки в часы вышеуказанной последовательности данных на дисплее на 4 секунды будет отображено "8.8.8.8". Команда "S" - загрузка мелодии - часы ответят "!" Пример обозначения ноты: 8104 - первый байт 0x81 - нота №8 - это Соль, октава №1, второй байт - 0x04 - длительность 1/04 - итого четвертная соль первой октавы. По сути значение длительности N - это знаменатель дроби 128/N, которая как раз и соответствует длительности звучания ноты в элементарных единицах времени. Элементарная единица времени - 16 мс. Т.е. Целая нота звучит 2048мс, четвертная - 512 мс.... Если в любом режиме в часы будет отправлен недопустимый для этого режима символ - часы ответят символом ошибки "-" и перейдут в режим ожидания начала сеанса. К сожалению, на данный момент рабочей законченной программы для ПК, отслеживающей состояние почты, нет. Коллега, изначально хотевший такое устройство, пишет эту программу уже долго, но пока нет ничего, что можно было бы представить публике. Встроенные мелодии В прошивке зашиты три мелодии:
Мелодии задаются в модуле data.h, в соответствующих массивах, массивы размещаются в PROGMEM Ссылки на массивы мелодий помещаются в массив melodies. Число мелодий - дефайн MELODIES_COUNT Отдельно нужно сказать про ежечасную мелодию. Ссылка на массив с этой мелодией должна быть внесена в дефайн HOURLY_MELODY. В данной прошивке в качестве ежечасной мелодии используется последняя музыкальная фраза из второй мелодии. Но ничто не мешает завести ежечасную мелодию как отдельный массив. Громкость ежечасной мелодии - дефайн HOURLY_MELODY_VOLUME_DIVIDER - это делитель уровня громкости, 1 - самый громкий, 7 - самый тихий. Программа написана в Atmel Studio 7, компилятор gcc. Сильно за быдлокод просьба не бить. Я не программист, я только учусь. Программирование контроллера. Для возможности программирования контроллера на плате предусмотрено 6 пинов - Reset, MISO,MOSI,SCK, GND и при необходимости - +5в.
Установка фьюзов контроллера : внутренний тактовый генератор 8 МГц, время старта 6 CK + 64 мс ( CKSEL = 0100, SUT = 10 ) Если кому удобнее так - то вот: Low = 0x24, High 0xD9
Файлы: Все вопросы в Форум.
Эти статьи вам тоже могут пригодиться: |
|
|||||||||||||||||
|
||||