Часы на базе микроконтроллера ch32v003

Добрый день! Сразу объясню, что проект учебный, все сделано буквально just for fun! В данный момент проект выглядит как куча проводов и непонятных соединений, но часы работают! Осталось причесать проект и напечатать конструкцию на 3д принтере.

Слепил из доступных деталей
Слепил из доступных деталей

Итак, в качестве основы — выбираем самый доступный контроллер ch32v003, таких полно на AliExpress, стоимость обычно не превышает 100 целковых за готовую плату. На борту микроконтроллера есть не очень точный кварц (о чем производитель предупреждает) для работы, процессор RISC-V (32 бит), ПЗУ (16 кб) и ОЗУ (2 кб) и куча периферии (нам нужно будет 2 таймера и пару портов ввода/вывода). С частотой процессора 48 мГц можно космические корабли в космос отправлять, но мы будем делать часы с будильником!

В качестве обеспечения резервного питания, возьмем любой DD05CVSA преобразователь и LiPo аккумулятор, в левой части фотографии. Контроллер ch32v003 способен работать до 2,7в поэтому я подал на него питание с аккумулятора напрямую, выпаяв с платы диод. На индикатор подаем питание с входного разъема, т. к. это будет самое прожорливое устройство, но можно подать и с выхода (можно установить переключатель). С выхода резервного питания подаем напряжение на схему будильника.

Итак, в качестве индикатора берем схему на базе TM1637 на том же китайском рынке можно взять на 6 сегментов в пределах 120 целковых. Индикатор будет прожорливым, но динамическая индикация спасает положение. Если бы это были советские АЛС324 с током 20 мА без динамической индикации, то вся бы конструкция кушала бы 20 мА * 7 сегментов * 6 индикаторов = 840 мА в пике, когда показываем все 8 на всех 6 индикаторах.

Наши часы должны нас будить по утрам, поэтому в проекте представлен отечественный транзистор КТ815 с радиатором (радиатор оказался не нужен) и капсюль телефонный ТК-67-УТ подключенный по схеме с ОЭ. На базу ограничиваем ток через резистор на 10 кОм или более. Но лучше поставить современный полевой транзистор и какой-то зуммер не таких больших размеров.

Чтобы управлять часами, потребуется 4 кнопки, я заказал пучок в 50 штук за 50 целковых. В выбранном микроконтроллере есть подтягивающие резисторы, поэтому кнопки можно подсоединять напрямую к микроконтроллеру. На фотографии 2 блока по 2 кнопки, слева (Настройки и Далее) и справа (Вверх и Вниз).

В борту микроконтроллера находится 2 таймера. Один мы будем использовать для отсчета времени, это TIM2, который можно подсоединить к кварцу для более точного хода часов, однако мы его подсоединим с системного счетчику в нашем учебном проекте. Таймер #1 будем использовать для генерации музыки. Можно было сделать вариант с PWM, но для упрощения контроллер заниматься переключением порта зуммера.

Для генерации музыки, выберем формат RTTTL, такой формат использовался в телефоне, например, Nokia 3310. Для портирования его видоизменим, т.к. длительность ноты не может быть более 1/64 для нашего примера, возьмем это за основу и будет записывать ноту 1/32 как значение 2, 1/16 = 4. Зачем я так сделал? Чтобы в одну ячейку памяти записать удлиненную ноту на половину, например нота 16.a1 будет записана как 6 плюс нота.

Исходники проекта доступны тут https://github.com/Levon24/ch32-clock и вы, уважаемые читатели можете с ними ознакомится и высказать свое мнение в комментариях.

Пользуясь случаем, всех с днем кошек и началом весны!

© Habrahabr.ru