03 марта 2021

Часы с радиоприемником и метеодатчиками TouchClock - II

Версия прошивки - от 8 февраля 2021 года.

 



 

Часы построены на базе микроконтроллера ATMEGA128A и 3.2" цветного TFT-дисплея 320*240 точек на базе контроллера ILI9341 с резистивной тач-панелью.

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

  • Часы, календарь
    • Помесячное перелистывание календаря
    • Ежечасный звуковой сигнал (с 23 до 7 отключен принудительно)
    • Таймер, до 9ч 59мин 59сек, дискретность установки 1сек
    • 5 будильников (3 мелодии или FM приемник, выбор громкости, выбор дней недели)
    • 4 выхода типа "открытый сток", управляемых из будильников, с несколькими режимами управления
    • Прямое управление выходами
    • Три языка интерфейса
    • Несколько шрифтов отображения данных
    • Несколько цветовых схем (переключение вручную или по рандому)
    • 7 уровней яркости подсветки
    • Авторегулировка яркости подсветки по внешнему фотодатчику и/или по времени
    • FM - приемник RDA5807, с возможностью его использования в качестве будильника
    • Память на 48 станций приемника с возможностью задания названия станции
    • Отдельный блок отображения метеоданных
    • Почасовая история метеоданных за 5 дней с графиками этих метеоданных
    • Поддержка датчика температуры/давления/влажности ВМЕ280 (ВМР280) и двух датчиков DS18B20
    • Возможность подключения по UART / беспроводному каналу двух внешних модулей с датчиками ВМЕ280 и DS18B20.
    • При использовании двух внешних модулей данные второго модуля принудительно заменяют показания встроенной ВМЕ280 и первого DS18B20.
    • Отключаемые звуковые сигналы при изменении количества метеодатчиков (с 23 до 7 отключены принудительно)
    • Отключаемый звуковой сигнал при резком изменении данных от метеодатчиков (изменение влажности на 10%, давления на 8мм или темпераутры на 12° в течении часа, с 23 до 7 отключен принудительно)
    • Отображение другим цветом резко изменившихся метеопоказаний
    • Выбор корректирующих констант влажности (+/-50%) и температуры (+/-10°) для каждого физического датчика
    • Выбор для каждого физического датчика его расположения - дом/улица, отображение символа "домика" или "елочки" на графиках и в кратком отображении метеоданных
    • Напоминания о важных датах (до 64 напоминаний).
    • Фильтрация некорректных данных от внешнего модуля
    • Отображение предупреждения о критичном разряде батарейки внешнего датчика
    • Selftest при включении, вывод фатальных ошибок
    • Таймер автоотключения приемника - 5, 10, 15, 20, 30, 45, 60, 90 минут
    • Поддержка физической кнопки отключения будильника/таймера





      Детали и замены.

      Практически все детали - для поверхностного монтажа. 
      Резисторы и неполярные конденсаторы - типоразмера 0805.
      Полярные конденсаторы - разведены под тантал типоразмера В, исключая С19, там предусмотрено место под SMD- электролит типоразмера 0605, поскольку танталы большой емкости дорогие. Но там прекрасно ставится тантал типоразмера В или С.
      Защитные стабилитроны разведены под корпус SMA (его площадки позволяют припаять и обычные стабилитроны в корпусе SOD80-R. В качестве защитных стабилитронов можно использовать такие как BZX55 на напряжение 3.3-3.6 вольта в SOD80-R корпусе. Или применять серьезные супрессоры с напряжением пробоя 3.3-3.6 вольта, типа SMBJ3V3-E3/52 от VISHAY или SMLVT3V3 от ST...
      Вместо датчика BME280 можно применить BMP280 который умеет мерять температуру и давление, но не умеет влажность.

      Краткое описание схемы

      Мозги - 128 мега.

      Питание - от 5 вольт. Наружу торчит MicroUSB-разъем U1. Так же на плату (позиция JP1) можно впаять либо коннектор PLS-R, либо провода от источника питания 5 вольт.
      На схеме предусмотрена развязка питания диодами D1,D3. Что бы при одновременно подключенных блоке питания 5 вольт и программатора со своим 5 вольт питанием никому не поплохело от конкуренции питания. Пойдут любые Шоттки в SMA корпусе. В принципе, это больше перестраховка. Соответственно, под диодами разведены напаиваемые перемычки SJ1, SJ3. Это для тех, кто не планирует подключать одновременно блок питания и программатор. Т.е. запаиваются или диоды, или сопли-перемычки.

      Далее 5 вольт стабилизируются LDO-стабилизатором 1117-3.3 до 3.3 вольт, от которых питаются все цифровые элементы схемы, а так же модуль FM-приемника. Усилитель мощности питается напрямую от 5 вольт.
      По питанию FM-приемника и усилителя стоят фильтрующие индуктивности.

      Кварцевый резонатор. Так сложилось, что FM-приемник и логика дисплея не понимают напряжение выше 3.6 вольта. И если дисплей при 5 вольтах на логических входах просто уходит в "моя-твоя непонимай", то приемник от 5 вольт испускает волшебный дым. Соответственно, питание для Меги и приемника идет через стабилизатор 3.3 вольта.
      Но, по документации АТМега 128 не может работать на частоте 16 МГц при питании ниже 4 вольт. Хотя подавляющее большинство контроллеров об этом не знают и прекрасно работают.
      И только немногие экземпляры отказываются при 3.3 вольта заводиться с кварцем 16 МГц. В этом случае можно попробовать два варианта - найти и поставить стабилизатор на 3.6 вольта (1117-3.6) или поставить кварцевый резонатор на 12 МГц, прошив МК соответствующей прошивкой.

      Внутрисхемное программирование. Осуществляется через разъем JP4. На разъем выведены Reset, SCK, RX0/PDI, TX0/PDO, земля и вход питания 5 вольт, которые подаются на LDO IC1 через диод или перемычку (см.выше, про развязку питания).
      Многие на форуме задавали вопрос, почему MOSI/MISO "неправильно" разведены?  Так вот, у 128 меги прошивка выполняется по SPI-интерфейсу, но MOSI/MISO для прошивки не совпадают с интерфейсом SPI, а выведены на RX-TX USART0. Т.е. в основном режиме работы на JP4 выведен USART, а не SPI. Предусмотрен диодно-резисторный преобразователь уровней сигналов от пятивольтового программатора к трехвольтовым уровням микроконтроллера.

      Дисплей. Любой на контроллере ILI9341, разрешением 320*240 и параллельным интерфейсом, выведенным на 34-пиновый интерфейс с резистивным тачем на контроллере, совместимом с XPT2046. Такие дисплеи есть в диагоналях от 2.4" до 3.5".
      Звук. Выход FM-приемника заведен на усилитель мощности на MC34119. Туда же, через делитель R20-R21 заведен сигнал будильника. Возможно, придется подобрать значение резистора R20 для получения удовлетворительной громкости звука будильника. (Из опыта - там нужен резистор около 220к). Так же, возможно, придется подобрать R19, что бы при максимальной громкости радио не было искажений звука. (У меня там стал 8.4кОм).
      Выход усилителя выведен на разъем JP9. Согласно документации на ИМС усилителя, минимальное сопротивление динамической головки - 8 Ом.

      Часы реального времени - на DS3231, тут всё типовое.
      Я у китайцев купил десяток платок с DS3231S, ЕЕПРОМкой 24С32 и держалкой батарейки. По факту эти платки иногда даже дешевле голой DS3231. Зато платка - удобный донор часов и держалки. Ну и плюс ЕЕПРОМки для использования с STM32.

      Датчик освещения. К JP2 можно подключить фоторезистор (можно впаять на проводочках либо подключать через гвозди PLS-R).
      Фоторезистор в освещенном состоянии должен иметь сопротивление в районе 4-10 кОм.
      В принципе, подойдет любой фоторезистор, только нужно подобрать R3, что б его сопротивление было в 1.5-2 раза больше минимального сопротивления фоторезистора.

      Управление внешними устройствами.
      Будильники умеют управлять четырьмя внешними устройствами.
      Для этого на дырки под кодовым названием JP8 выведены 4 стока полевых транзисторов Q4-Q7. И 4 земли. Не смотря на то, что обратный диод встроен в сам MOSFET технологически, я на всякий случай предусмотрел место под защитные диоды D9-D12. Коммутируемые напряжения и токи - согласно характеристик транзисторов. R13-R16 - подтяжка затвора к земле. Если управление внешними устройствами не планируется, элементы R13-R16, Q4-Q7 (и D9-D12) можно не устанавливать.

      Датчики температуры. Предусмотрено подключение 2 датчиков DS18B20 по трехпроводной схеме. Питание датчиков - от шины 3.3в. Линии данных датчика защищены стабилитронами на 3.3-3.6-3.9 вольт. (Это на всякий случай, если датчик будет выноситься из корпуса на проводах (и на разъеме), что бы защитить вход контроллера хотя бы от мелких наводок/помех/статики) В случае расположения датчиков внутри корпуса - стабилитроны не нужны.
      Если же хочется более серьезной защиты - то можно поставить супрессоры (TVS-диоды) с напряжением пробоя 3.3-3.6 вольта.
      Например, SMBJ3V3-E3/52 от VISHAY или SMLVT3V3 от ST. Это однонаправленные супрессоры в корпусе SMB на 3.3 вольта. Якобы могут поглотить импульс до 600 Вт.

      Внуренний датчик давления/влажности/температуры ВМЕ280.
      Данные датчики китайцы массово продают уже напаянные на переходные платы.
      Причем в двух вариантах:
      - питание 1.8 - 3.3 вольта и интерфейсы SPI и i2c
      - питание до 5 вольт, со встроенным LDO для датчика и интерфейс i2c с преобразованием уровней.
      На плате предусмотрено место для подключения обоих вариантов датчика. При этом можно перемычкой SJ4 выбрать нужное питание - от шины 3.3в или от 5в. (Опять же, из опыта эксплуатации - независимо от использованного варианта датчика лучше поставить перемычку на 3.3 вольта)
      Датчик может быть вынесен на боковую или заднюю поверхность корпуса (помним , что i2c не любит длинных линий). Либо датчик можно установить с обратной стороны платы, приподняв над платой (хотя бы на той же PLS-гребенке), а в задней стенке сделать вырез. Высоту приподнимания датчика нужно подобрать так, что бы он был вровень с задней стенкой корпуса. Так же можно внутри корпуса вокруг датчика сделать изолирующую рамку из пористого материала, что бы внутренний микроклимат (и нагрев LDO 1117) меньше влияли на показания датчика.
      (Из опыта эксплуатации - датчики очень чувствительные и того тепла, что выделяется в корпусе от стабилизатора, меги и усилителя мощности, хватает для того, что бы температура завышалась на 2-3-4 градуса, а относительная влажность занижалась.... Выход - использование внешних модулей с датчиками)

      Внешний датчик температуры/влажности/давления.
      Поскольку i2c - шина внутренняя, не предназначенная для длинных линий, общение с внешним датчиком реализовано на основе последовательного порта USART1 нашего контроллера, выведенного на JP3.
      Такой датчик уже разработан, скоро появится и тут, пока есть на коте.
      Датчик может подключаться как по трем проводам, так и с применением беспроводного удлинителя последовательного порта, например модуля JDY-40.
      В случае применения JDY-40 резистор R1 нужно увеличить до 1кОм, а диод D2 можно не устанавливать.
      Подключение модуля JDY-40:

      В случае проводного подключения датчика R1 остается 390 ом, D2 желателен, особенно если датчик будет на длинной линии. D2 - стабилитрон на 3.3-3.9 вольта. Его так же можно заменить на TVS-диод (см.выше рекомендации по выбору таких диодов).
      Питание для внешнего датчика так же можно выбрать перемычкой SJ2 - 3.3 или 5 вольт.
      Нужно только помнить, что на входе Tx микроконтроллера напряжение не должно превышать 3.3 вольта.
      На данный момент в прошивке реализован только прием данных от внешнего датчика, соответственно, элементы, отвечающие за Tx-линию (Q2, Q3, R4, R6) можно не устанавливать.

      Перемычка SJ5 задумывалась как селектор скорости обмена с датчиком - 1200 или 9600 бод. Но на данный момент состояние перемычки игнорируется, обмен производится на скорости 9600 бод. 

      Печатная плата.


      Герберы и проект Eagle - тут.

      Фьюзы и прошивка МК.

      Две версии прошивки - для кварцев 16 и 12 МГц - тут.
      Прошивка производится любым программатором по интерфейсу внутрисхемного программирования. Тот же USBAsp и прочие.
      Повторюсь - разводка интерфейса программирования на Rx/Tx USART0 - не ошибка. У 128 меги прошивка выполняется по SPI-интерфейсу, но MOSI/MISO для прошивки не совпадают с интерфейсом SPI, а выведены на RX-TX USART0. SCK - да, совпадает.

      Фьюзы: Low = 0xBF, High = 0xD1, Ext = 0xFF.

      Ну или:
      Внешний резонатор High freq, Время старта 16K CK + 64ms : CKSEL = 1111, SUT = 11
      Brown-out detection - вкл, уровень 2.7 вольта : BODEN = 0, BODLEVEL=1
      Сохранять EEPROM при стирании чипа : EESAVE = 0
      Оставить включенным режим внутрисхемного программирования (SPI): SPIEN = 0
      Отключить JTAG и совместимость с ATMEGA103: JTAGEN = 1, M103C = 1

      Самотестирование

      При первом включении (когда тач еще не калиброван) или если время не превышает 0:05 1 января 2000 г. - принудительно включается процесс самотестирования, а так же отображения подключенных периферийных устройств. При последующих запусках самотестирование работает в фоновом режиме, без визуализации.
      В любом случае, если при запуске будут проблемы с работоспособностью микросхемы часов DS3231 - это будет отображено на дисплее и часы не запустятся.

      Физическая кнопка отключения будильника

      Что бы бить по ней кулаком сверху :)
      Кнопку нужно будет подключить одним концом к земле, вторым к 4 или 5 выводу Меги. Можно к двум сразу - так легче туда проводок припаивать...

      Про напоминания

      Каждое напоминание настраивается на определенный час определенного числа определенного месяца. Напоминания могут быть как одноразовые, так и ежегодные. Напоминание срабатывает в заданный час. Напоминание может повторяться до трех раз после основного срабатывания, с интервалом в час.
      Напоминание, настроенное на 29 февраля, в невисокосный год сработает 1 марта.
      Сортировки сохраненных напоминаний нет.
      Одновременно может быть отображено до четырех напоминаний. Если будет больше - отобразятся последние 4.
      Напоминания доступны в меню Сигналы.

      Первое включение


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

      • Калибровка еще ни разу не выполнялась - в памяти контроллера еще нет сохраненных данных о калибровке
      • Текущее время-дата в микросхеме часов реального времени DS3231 - 2000 год, 1 января, 0 часов, минуты - менее 5 мин. (сделано для того, что бы можно было добраться до калибровки экрана при любых ситуациях, просто вынув и вставив батарейку часов)
      Необходимо аккуратно тонким неострым предметом (идущим в комплекте с дисплеем стилусом) нажимать на красные крестики, появляющиеся в четырех углах дисплея. Каждое нажатие должно длиться не менее полусекунды.
      При этом крестики перекрашиваются в зеленый цвет.
      Настройки калибровки сохраняются только после нажатия на четвертый крестик. Так что при ошибке можно выключить часы и снова их включить - и попасть опять в режим калибровки.

      Почти полное описание управления часами и большинство функций описаны в статье на РадиоКОТе, повторять тут их мне облом.

      Детали и ссылки

      Статья на РадиоКОТе

      Обсуждение часов на форуме РадиоКОТа. Обсуждение длинное и долгое. Начиналось всё с первой версии часов, продолжилось концептом данной версии, разработкой внешнего метеодатчика и второй версией часов.

      Детали.

      Atmega128 - я покупал 5 шт по  $1.12 тут, но их уже там нет.
      Поиск по АЛИ дал вот такое: 5 шт б/у, а тут - поштучно
      Дисплей
      FM-Radio
      BME280
      Антенны-телескопы 11->38 см
      Динамики 1 Вт, 16 Ом, 36мм
      DS3231+держатель для батарейки

      Печатный корпус от dadigor

      Описание процесса разработки корпуса, изготовления и сборки об 6 частях  (на РадиоКОТе):
      Часть 1
      Часть 2
      Часть 3
      Часть 4
      Часть 5
      Часть 6

      И прямая ссылка на архив stl

      14 комментариев:

      1. Какие файлы надо, чтобы напечатать корпус? Хочу поискать 3Д принтер и напечатать корпус.

        ОтветитьУдалить
      2. niki, обновил пост - добавил ссылку на архив 3D-модели от dadigor-а и описание процесса сборки.

        ОтветитьУдалить
        Ответы
        1. Спасибо за ответ. Я не специалист по 3Д печати, точнее никогда с ней не сталкивался. И поэтому еще один вопрос... Данный Вами архив можно отдавать на печать?

          Удалить
        2. Приветствую. Я тоже не специалист :)
          Знаю, что печатникам достаточно файлов STL, которые и есть в архиве dadigor-а. Он рекомендует пластик ABS.
          И его корпус повторило несколько форумчан.
          ЗЫ. Если получится напечатать и собрать - покажете, что получилось?

          Удалить
        3. А как фото вставить?

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

          Удалить
        5. [url=https://img.radiokot.ru/files/104258/medium/2glrvqjilh.GIF]

          Удалить
        6. Увы, я пробовал. Тут ВВ-коды и теги html не катят в комментариях.
          А чего не захотели 2 цветами отпечатать? Как автор корпуса?

          Удалить
        7. Так больше нравится :)Это на подарок сыну.

          Удалить
      3. Сделал этот вариант Часов. Высший балл по функционалу. Настольное устройство с максимумом необходимой информации от времени до метеоданных, под любимую музыку в радиоприемнике.
        Сделал на самодельной плате методом фоторезист по прекрасным герберам автора.

        ОтветитьУдалить
      4. Как повысить выходную мощность МС34119? Динамик 2 Ватта,8 Ом.

        ОтветитьУдалить
        Ответы
        1. Так МСшка - она ж слабенькая, 400 мВт в лучшем случае. Это усилок для всяких карманных приемничков и прочей фигни.
          Попробуйте взять китайскую платку с мс PAM8403, там при 5 вольтах вроде до 3 ватт можно накачать.

          Удалить
        2. Есть такая плата в наличии, попробую в корпус запихнуть.

          Удалить