Цифровые часы на микроконтроллере STC15W1K24S |
![]() |
Добавил(а) microsin | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Эти часы продаются на aliexpress [1], и собраны на матричном светодиодном индикаторе и микроконтроллере STC15W1K24S. Я их заказал, решил собрать и заодно разобраться, как они работают. Часы интересны тем, что применена микросхема часов RTC DS3231 [2], которая работает без внешнего кварцевого резонатора на 32768 Гц. Да и вообще никаких кварцевых резонаторов в схеме нет, микроконтроллер также работает от своего внутреннего генератора. Схему этих часов найти не удалось, поэтому решил перерисовать. К счастью, схема оказалась несложная. Ниже приведена эта схема и список деталей для сборки. Возможно, это пригодится тем, кто захочет повторить часы. На схеме синим цветом показаны сигналы, управляющие катодами индикаторов, красным цветом - анодами. Зеленым цветом показаны сигналы от кнопок управления.
В схеме меня удивило отсутствие токоограничительных резисторов, через которые следует подавать ток на светодиоды индикаторов. Возможно, что это связано с тем, что резисторы уже встроены в индикатор, либо китайцы решили сэкономить. По крайней мере, в рабочем режиме микроконтроллер греется незначительно. Сначала запаивайте мелкие детали - резисторы и конденсаторы, а потом более крупные. Ртутный замыкатель SW1 запаивать не стал, посчитал это баловством - он нужен, чтобы при перевороте часов "вверх ногами" алгоритм автоматически перестраивался, и начинал отображение в новой ориентации. Батарейка нужна типа CR1216 (5034LC), толщиной 1.6 мм и диаметром 12.5 мм (в комплекте батарейки нет). При монтаже платы некоторую трудность поначалу для меня составило определение первой ножки LED-индикатора, поскольку никакой соответствующей маркировки первого вывода на индикаторе нет. Но потом оказалось, что цоколевка индикатора так хитро устроена, что при любой ориентации он все равно будет работать. Так что ошибиться с запайкой матричного LED-индикатора невозможно. Для индикаторов я сделал кроватки из цанговых сокетов для DIP-микросхем. Индикаторы бывают с общим анодом, подключенным к столбцам, и с общим анодом, подключенным к строкам. Это отражается в маркировке индикатора буквами A (строки с общим анодом) и B (столбцы с общим анодом). Например, индикатор 13117AS имеет строки с общим анодом и столбцы с общим катодом, а у 13117BS наоборот, строки с общим катодом и столбцы с общим анодом. Расположение выводов матричного LED-индикатора 13117 устроено таким образом, что его можно впаивать любой стороной, даже развернув на 180 градусов - он все равно будет корректно работать. Другая засада меня ждала с микроконтроллером. Я его впаял наборот, "вверх ногами", перевернув на 180 градусов. Включил, и что удивительно, что-то там даже пыталось работать. На индикаторе бегали полосы, при нажатии на кнопки бипер издавал писки. Потом сообразил, что ошибся, выпаял микроконтроллер феном, перевернул, запаял. Оказалось, что микроконтроллер остался цел, и часы заработали нормально. Здесь приведена краткая информация по микроконтроллеру STC15W1K24S. Подробные данные см. в даташите STC15-English.pdf из архива [7]. STC15W1K24S относится к серии STC15W1K16S семейства STC15 микроконтроллеров компании STC MCU Limited. Микроконтроллер имеет усовершенствованное ядро MSC51 (система команд и архитектура популярного некогда семейства микроконтроллеров Intel 8051). Это новое ядро, отличающееся высоким быстродействием (скорость работы в 8..12 раз быстрее традиционного ядра 8051 на той же тактовой частоте), широким рабочим диапазоном напряжений питания, низким энергопотреблением и устойчивостью к помехам. Код программы может быть защищен от несанкционированного доступа при перепрошивке с помощью специальной технологии шифрования STC. STC15W1K24S полностью совместим по системе команд с традиционным ядром 8051, и реализует его все аппаратные функции. Дополнительно в нем имеется два указателя DPTR вместо одного, порт UART можно использовать как 3 последовательных порта путем сдвига его данных на 3 группы выводов. Также имеется интерфейс SPI, и 8-канальный АЦП, которых нет в традиционных микроконтроллерах Intel 8051/8052/8751. Порты GPIO могут работать точно так же, как и оригинальные, и их также можно использовать в расширенных режимах (есть 4 режима работы: квази-двунаправленный со слабым pull-up, мощный двухтактный с усиленным pull-up, только вход с высоким сопротивлением и открытый сток). Каждый выход может коммутировать ток до 20 мА, однако общий коммутируемый ток не должен превышать 120 мА на корпус для 40-выводного корпуса и 90 мА для 16-выводного корпуса. В таблице ниже сведены основные параметры микроконтроллера.
Система шифрования кода. С применением ключа шифрования, прошитого в MCU, имеется возможность обновлять программное обеспечение с помощью кнопки update. Для этого в системе программирования выбираются опции "encryption" download и "release project", когда требуется обновить программное обеспечение микроконтроллера. Из-за того, что в памяти программ последние 7 байт используются для хранения глобального идентификатора (global ID), то пространство памяти FLASH, доступное для программы пользователя, уменьшается на эти 7 байт. Система сброса. В микроконтроллер встроена очень удобная система сброса, так что можно полностью исключить внешние цепочки, формирующие сигнал RESET. По умолчанию вывод P5.4/RST/MCLKO используется как порт ввода/вывода (GPIO), но его можно переконфигурировать как ножку сброса RST с активным уровнем лог. 1, это делается программатором STC-ISP. Порог сброса можно запрограммировать по 16 различным уровням. Тактирование. В кристалл встроен точный R/C генератор (точность установки частоты ±0.3%). Уход частоты в зависимости от температуры в диапазоне -40..+80°C составляет 1%, в диапазоне -20..+65°C составляет 0.6%. Это позволяет отказаться от подключения дорогого внешнего кварцевого резонатора. Тактовая частота может быть установлена в диапазоне 5..35 МГц (предпочтительные частоты 5.5296, 11.0592, 22.1184, 33.1776 МГц). Цоколевка и назначение выводов микроконтроллера для 44-выводного корпуса LQFP44 показана в таблице ниже.
[На чем писать программы] Можно использовать компилятор Keil C или любой другой компилятор, рассчитанный на семейство MCS-51. Также можно использовать бесплатный инструментарий SDCC (см. папку compiler архива [7]). В опциях проекта следует выбрать ядро Intel 8052, и в качестве заголочного файла определения регистров нужно подключить хедер reg51.h (можете в качестве него использовать файл stc_diyclock-master\src\stc15.h из исходного кода архива статьи [4]). [Чем прошивать] Программа может быть загружена с помощью порта UART через ножки GPIO P3.0 и P3.1. Для этого нужен простой переходничок USB-TTL который можно купить на aliexpress (прогуглите запрос stc-isp programmer site:aliexpress.com). Также можно купить специальный программатор STC-ISP40PIN, U8 или U8-mini (прогуглите STC-ISP40PIN site:aliexpress.com). Но можно ничего не покупать, для перепрошивки достаточно иметь любой переходик USB-TTL-UART. Итак, процесс перепрошивки по шагам. 1. Вбейте ключевые слова для поиска 6, откройте страничку загрузки на сайте STC, и выберите там последнюю версию утилиты программирования (я скачал stc-isp6.85.rar). На иероглифы не обращайте внимания. Распакуйте из-архива exe-файл, запустите. 2. Из выпадающего списка MCU Type выберите тип Вашего микроконтроллера. Этот список представляет собой дерево, в котором на верхнем уровне перечислены не сами типы микроконтроллеров, а их серии (разделы, список которых можно дополнительно развернуть). Например, чтобы выбрать микроконтроллер STC15W1K24S, нужно сначала в списке выбрать раздел STC15W1K16S Series, и уже в этом разделе выбрать микроконтроллер STC15W1K24S. 3. Подключите через USB Ваш переходничок USB-TTL-UART (я использовал дешевый USB-SERIAL CH340), выберите его по номеру COM-порта в выпадающем списке COM Port. 4. Отключите питание от платы, где установлен прошиваемый Вами микроконтроллер STC (микроконтроллер STC должен быть обесточен). Соедините провода GND, TXD и RXD переходничка соответственно с ножками GND, P3.0, P3.1 микроконтроллера. 5. Теперь проверьте, работает ли соединение с программируемым микроконтроллером, следующим образом: нажмите кнопку Check MCU, после чего подайте питание на программируемый микроконтроллер STC. В результате этой операции в консоль утилиты stc-isp будет выдано текст наподобие следующего (это пример проверки STC15W1K24S): Checking target MCU ... MCU type: STC15W1K24S F/W version: 7.2.5T Current H/W Option: . Current system clock source is internal IRC oscillator . IRC frequency: 18.443MHz . Wakeup Timer frequency: 36.727KHz . Do not detect the level of P3.2 and P3.3 next download . Power-on reset, use the extra power-on delay . RESET pin behaves as I/O pin . Reset while detect a Low-Voltage . Thresh voltage level of the built-in LVD : 2.62 V . Inhibit EEPROM operation under Low-Voltage . CPU-Core supply level : 2.81 V . Hardware do not enable Watch-Dog-Timer . Watch-Dog-Timer pre-scalar : 256 . Watch-Dog-Timer stop count in idle mode . Program can modify the Watch-Dog-Timer scalar . Do not erase user EEPROM area at next download . Do not control 485 at next download . Do not check user password next download . TXD is independent IO . TXD pin as quasi-bidirectional mode after reset . P2.0 output HIGH level after reset . MCU type: STC15W1K24S F/W version: 7.2.5T Complete !(2017-03-11 15:53:59) Если увидели этот текст, значит программирование работает, и Вы можете прошить в микроконтроллер свою программу. Если же нет, то где-то в подключении допустили ошибку, проверяйте все соединения. [Алгоритм работы часов] В алгоритме работы часов различают 2 основных режима: режим отображения и режим меню настроек. Режим отображения. Это нормальный режим отображения, в котором может отображаться время, дата, день недели, температура окружающего воздуха и какой сегодня праздничный день ("Arbor Day", "New Year" и т. д.), если он есть. Всего есть 5 типов отображения, один из которых можно выбрать в разделе настроек DiSP (описание меню настроек см. далее). После смены режима каждый час звучит одиночный звуковой сигнал. Это происходит 1-2 раза, потом звуковой сигнал не выдается. Непонятная функция, возможно какая-то ошибка в программе. Меню настройки. В этот режим можно войти в любой момент, если удерживать кнопку SET больше 1 секунды. Появится надпись TiME, приглашающее войти в настройку времени. В этот момент можно либо войти в эту настройку коротким нажатием кнопки SET, либо выбрать другие меню настройки. Эти меню настройки циклически переключаются по кругу нажатиями кнопок PLUS и MINUS: TiME -> DATE -> ALAR -> FONT -> DiSP -> MiDP, и далее по кругу снова TiME и т. д. (кнопка PLUS прокручивает выбор пунктов настройки "вперед", кнопка MINUS "назад"). Длинное нажатие SET производит выход из меню, короткое - подтверждает вход в этот раздел настроек. Ниже приведу описание этих разделов настроек. TiME. Настройка времени. При входе в этот раздел начнут мигать цифры часов. Кнопками PLUS и MINUS можно установить нужный час. Кнопка SET подтверждает установку часов, после чего начинают мигать цифры минут, которые можно также настроить. Последними устанавливаются секунды, подтверждение установки секунд производит возврат в режим отображения. DATE. Настройка года, месяца, дня. Принцип настройки точно такой же, как в настройке времени. Примечательно, что настройка дня недели (понедельник, вторник, ...) не предлагается, но часы все равно корректно вычисляют день недели по году, месяцу и дню. ALAR. Настройка будильника. Его можно активировать (ON включен, OFF выключен), и если он активирован, то в этом разделе меню можно настроить час и минуту его срабатывания. FONT. Позволяет выбрать шрифт для отображения времени, месяца и даты. При этом шрифт для отображения другой информации (температура, день недели, текст информации о празднике) не меняется. DiSP. Меняет характер (тип) анимации вывода информации режима отображения. Вот эти типы отображения: TYP:1 по очереди отображается время, температура, месяц/дата, день недели, и праздник, если в этот день он есть. При этом отдельные надписи сменяют друг друга бегущей строкой, которая бежит справа налево. MiDP. Меняет характер отображения мигающих секундных точек. Ниже во врезке приведен алгоритм работы часов в разных режимах. Что понравилось: часы красиво работают, меню настройки простое, логичное и интуитивно понятное. Замеченные недостатки: 1. Нет вообще никакой регулировки яркости - ни автоматической, никакой. [UPD170802] Олег в комментариях дал полезную ссылку на статью, где опубликован проект с исходным кодом для этих часов (строка для поиска статьи: "DIY часы на DS3231 - расширяем функционал site:mysku.ru"). В проекте добавлен функционал измерения/отображения давления и влажности, вывод дат с русскими праздниками и названиями дней недели. Все файлы из этой статьи я собрал в архиве [8] - там есть исходный код и готовая прошивка. [Ссылки] 1. DS3231 Excellent DIY Dot Matrix LED Clock Kit site:aliexpress.com. |