Например TDA7294

РадиоКот > Конкурс: Поздравь Кота по-человечески 2017!

Часы - информатор для ПК

Опубликовано 08.09.2017.
Создано при помощи КотоРед.

Каждый (ну почти каждый) радиолюбитель рано или поздно,
но делает электронные часы своими руками.
Разрабатывает сам или повторяет готовую схему.
И хотим мы этого или не хотим, но у каждого радиолюбителя
появляются самодельные часы.
_________________________________________

 

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

Коллеге мысль понравилась, но хотелось большего. Например, количества пришедших писем. И часов с большими цифрами.

В результате родился проект часов, которые показывают время и умеют прислушиваться к ПК и по команде нарисовать что то на дисплее и издать звук.

Внешний вид готового изделия

 

Что умеют часы:

  • Отображение текущего времени (без этого часам никак нельзя)
  • Отображение номера дня недели
  • Отображение числа и номера месяца
  • Регулировка яркости свечения дисплея
  • 4 отключаемых будильника с возможностью выбора индивидуальной мелодии и громкости звучания. Будильник может быть настроен как на ежедневное срабатывание, так и на однократное
  • Воспроизведение фрагмента мелодии каждый час
  • Воспроизведение произвольной мелодии длиной до 255 нот по команде из ПК
  • Отображение произвольного* изображения на дисплее по команде из ПК

(*произвольное изображение - в рамках возможностей 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 переходным отверстиям, расположенным под микросхемами контроллера и часов, поскольку излишнее количество припоя может мешать нормально установить и припаять микросхемы.

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

Учитывая достаточно плотный монтаж, рекомендуется следующая последовательность монтажа:

  • Сначала запаиваются все перемычки в переходных отверстиях
  • Запаиваются все smd-компоненты на обеих сторонах
  • Впаиваются штыри PLS-разъемов 
  • Для обеспечения доступа к точкам пайки дисплея необходимо обрезать корпус держателя батареи (см. рисунок ниже)
  • Впаять держатель батареи
  • Впаять электролитический конденсатор и пищалку. К сожалению, доступ к точкам пайки пищалки несколько стеснен, тут необходимо использовать паяльник с тонким жалом, так же можно для облегчения доступа временно снять со штырей разъема программирования пластиковый держатель контактов.
  • В последнюю очередь впаивается дисплей. Дисплей необходимо поднять максимально высоко над платой, что бы обеспечить пространство над пищалкой для прохода звука. Так же на верхней или нижней части будущего корпуса можно просверлить одно-два отверстия для прохода звука (как показала практика - это не нужно, громкости звукового сигнала хватает для уведомления, при этом он не мешает окружающим).

Расположение деталей в объеме 

 

Обрезка держателя батарейки

Общий вид собранной платы

Корпус

Корпус часов - самодельный, изготовлен из пластикового уголкового профиля (используется, например, для закрывания угла при поклейке обоев и т.д.)

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

Учитывая то, что ширина дисплея 19.5 мм, а диаметр батарейки - 20 мм, верхняя и нижняя стенки делаются из двух слоев пластика, во внутренних слоях выполнены прорези под батарейку.

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

Работа часов, управление

В основном режиме часы отображают текущее время на протяжении 8 секунд, далее 3 секунды число и номер месяца, потом 3 секунды номер дня недели.
Переключение выводимой информации происходит через плавное угасание и зажигание дисплея.
Управление часами осуществляется при помощи трех кнопок : "+" "-" и "Select".
Нажатие кнопок "+" и "-" в основном режиме регулирует яркость дисплея. При удержании кнопок яркость меняется в ускоренном режиме.
Короткое нажатие кнопки "Select" переключает часы в режим отображения будильников.

Вначале высвечивается номер будильника "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.

По умолчанию - часы находятся в режиме ожидания начала сеанса.
Отправка в порт символа "$" переводит часы в режим приема команд, часы ответят символом "?"
После этого можно отправлять команду.
Команд 2 : загрузить данные в дисплей и загрузить мелодию в синтезатор

Команда "D" - загрузка данных в дисплей - часы ответят "!"
После этого в часы нужно отправить 5 байт. Каждый байт кодируется двумя символами 0..9,A..F - т.е. классическая hex-запись.
Первый байт - время отображения информации в половинках секунды.
Остальные 4 байта - содержимое дисплея. Дисплей - 4 символа, данные в дисплей загружаются последовательно слева направо - т.е. 32 бита данных соответствуют 32 светодиодам дисплея.
Соответствие сегментов и битов :

a  = 0x80
b  = 0x40
c  = 0x20
d  = 0x10
e  = 0x08
f   = 0x04
g  = 0x02
dp= 0x01

После отправки 5 корректных байт часы ответят символом "+" и перейдут в режим ожидания начала сеанса.
На протяжении указанного в первом байте времени часы будут отображать загруженную информацию на дисплее.

Пример отправки данных:

>$
<?
>D
<!
>08FFFFFFFF
<+

После отправки в часы вышеуказанной последовательности данных на дисплее на 4 секунды будет отображено "8.8.8.8".

Команда "S" - загрузка мелодии - часы ответят "!"
Далее загружается байт громкости и последовательные пары байт - номер ноты и октавы и длительность ноты.
Всего можно загрузить 255 пар нота+длительность.
Как и в режиме загрузки данных для дисплея - байты загружаются в символьном виде hex-представления.
Первый байт - громкости - допустимое значение - от 01 (минимальная громкость) до 07(максимальная громкость).
Далее идут пары байт: первый байт пары - нота и октава, второй байт - длительность ноты.
Байт ноты кодируется следующим образом: Старший ниббл - нота (0..12), младший - октава (0..4, 0 - малая, 1-первая..4 четвертая).
Ноты :
0 - пауза
1 - до
2 - до #
3 - ре
4 - ре #
5 - ми
6 - фа
7 - фа #
8 - соль
9 - соль #
10- ля
11- ля #
12- си
Длительности: значения 1,2,4,8,16,32,64,128 соответствуют целой(1/1), половинной (1/2), четвертной(1/4) и т.д. до 1/128.

Пример обозначения ноты: 8104 - первый байт 0x81 - нота №8 - это Соль, октава №1, второй байт - 0x04 - длительность 1/04 - итого четвертная соль первой октавы.

По сути значение длительности N - это знаменатель дроби 128/N, которая как раз и соответствует длительности звучания ноты в элементарных единицах времени. Элементарная единица времени - 16 мс. Т.е. Целая нота звучит 2048мс, четвертная - 512 мс....
Ноты с точкой (удлинение длительности на половинку основной) получаются заданием соответствующего значения знаменателя длительности, например, восьмая с точкой - это 1/8+1/16 = 3/16. Для нашего случая нужно записать делитель 16/3.
Но, поскольку тут целочисленная математика - придется записать делитель 5. Будет некая неточность в длительности. В идеале 1/8+1/16 должны звучать 256мс+128мс=384мс, а при делителе 5 длительность будет 400мс.
Признаком завершения загрузки мелодии является отправка ноты с нулевой длительностью.
Сразу после приема такой ноты (или после приема 255 нот) часы ответят символом "+" и начнут воспроизведение загруженой мелодии, сами часы переходят в режим ожидания начала сеанса.
После завершения воспроизведения всей загруженной мелодии часы отправят в последовательный порт символ "."

Если в любом режиме в часы будет отправлен недопустимый для этого режима символ - часы ответят символом ошибки "-" и перейдут в режим ожидания начала сеанса.

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

Встроенные мелодии

В прошивке зашиты три мелодии:

  1. Имперский марш
  2. Як тебе не любити, Києве мій
  3. Вступление из Final Coundown (Europe)

Мелодии задаются в модуле 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 )
BOD включен, уровень 4 вольта ( BODEN = 0, BODLEVEL = 0 )
Остальные фьюзы - без изменений.

Если кому удобнее так - то вот: Low = 0x24, High 0xD9 

 


Файлы:
Прошивка, исходники, схема, ЛУТ
Проект седьмого орла


Все вопросы в Форум.


ID: 2561

Как вам эта статья?

 Нравится
 Так себе
 Не нравится

Заработало ли это устройство у вас?

 Заработало сразу
 Заработало после плясок с бубном
 Не заработало совсем

31 13 8