Настольные часы на советском вакуумно-люминесцентном индикаторе ИВ-18. STM32F030 + MAX6921AWI + DS3231, питание от USB, повышающий преобразователь на NE555, собственная плата. Проект 2019 года, часы собраны и работают.
Подробный разбор схемы и принципов работы — в статье на сайте: 0x0001 — ВЛИ (VFD) ИВ-18
| Узел | Компонент | Назначение |
|---|---|---|
| Микроконтроллер | STM32F030F4P6 | Управление индикацией, опрос RTC, UART |
| VFD-драйвер | MAX6921AWI | 20-канальный коммутатор сеток/сегментов, SPI |
| Преобразователь анодного | NE555 + IRFR024N | Boost 5В -> ~40В для питания анодов |
| RTC | DS3231 | Термостабилизированные часы, I²C |
| USB-UART | CH340G | Связь с компьютером, отладочный вывод |
| Индикатор | ИВ-18 | 8-разрядный ВЛИ, динамическая индикация |
| Питание логики | AMS1117-3.3 | 5В USB -> 3.3В для MCU |
Напряжение накала ИВ-18 подаётся непосредственно с USB через гасящий резистор. Накал не должен светиться — иначе ресурс нити резко падает.
Повышающий преобразователь на выходе даёт около 40 В, и выходной конденсатор сохраняет заряд некоторое время после обесточивания схемы. При наличии кардиостимулятора или других проблем с сердцем работа с этой схемой может быть опасна. Не прикасайтесь к токоведущим элементам при включённом питании и сразу после выключения.
Схема и разводка выполнены в DipTrace.
- schematics/sc_iv18_clock_schematic.pdf — схема в PDF
Gerber-файлы в этом репозитории пока не опубликованы (затерялись).
Проект создан в STM32CubeIDE (исходно версия 2019 года, совместим с актуальными релизами). Для открытия:
File->Import->Existing Projects into Workspace- Выбрать корень этого репозитория
- Build
Для работы с .ioc также потребуется STM32CubeMX (интегрирован в CubeIDE).
- Динамическая индикация (8 разрядов × 7 сегментов + точка)
- Режим отображения времени (
HH-MM-SSс мигающими разделителями) - Режим отображения даты (
DD.MM.20YY) - Режим отображения температуры DS3231 и дня недели (
NN°C D) - Автоматическое переключение режимов по таймауту
- Переключение режимов вручную кнопкой BTN_3
- Чтение времени/даты/температуры из DS3231 по I²C
- Отладочный вывод через USB-UART (
#define USE_USART)
Текущая прошивка — только отображение. Установка времени и даты
выполняется через закомментированный вызов DS3231_SetDateTime() в main()
(см. /* USER CODE BEGIN 2 */): раскомментировать, прошить, дать часам
один раз синхронизироваться, закомментировать обратно, прошить повторно.
Пользовательская настройка часов через кнопки задумана, но не реализована:
- Обработка
BTN_1— навигация по позициям внутри режима настройки - Обработка
BTN_2— инкремент/декремент значения на выбранной позиции - Циклы режимов
MODE_SETTINGS_*в основном цикле main loop - Переход в режим настройки долгим нажатием
BTN_3 - Сохранение настроек обратно в DS3231
- AT-команды (настройки/переключения режимов etc.)
Эти точки в коде помечены комментариями TODO.
.
├── Inc/ Заголовочные файлы прошивки
│ ├── ds3231.h Драйвер DS3231 (I²C)
│ ├── xprintf.h xprintf by ChaN (UART-форматирование)
│ └── ... CubeIDE-generated
├── Src/ Исходники прошивки
│ ├── main.c Main loop + динамическая индикация + режимы
│ ├── ds3231.c Реализация драйвера DS3231
│ ├── xprintf.c xprintf by ChaN
│ └── ... CubeIDE-generated
├── Drivers/ STM32 HAL и CMSIS (CubeIDE-generated)
├── startup/ startup_stm32f030x6.s
├── schematics/ Схема PDF-экспорт
├── docs/images/ Фото изделия
│
├── SC_IV18_CLOCK.ioc CubeMX-проект
├── STM32F030F4_FLASH.ld Линкер-скрипт
├── .clang-format Стиль кода
└── LICENSE MIT
Фиксирован в .clang-format в корне репозитория:
- 4-пробельный отступ, без табов
- Открывающая скобка на той же строке
- Параметры функций — построчно, если сигнатура не влезает в строку
- Сохраняется «колоночное» выравнивание в таблицах констант
Применить форматирование ко всему проекту:
find Inc Src -name '*.c' -o -name '*.h' | xargs clang-format -iMIT.
Сторонний компонент xprintf (файлы xprintf.c, xprintf.h)
распространяется под собственной BSD-подобной лицензией — см. заголовок
внутри самих файлов.
Sergey Petrov / coder's lair
MANV ET MENTE — by hand and mind.
