часы стрелочные (ремейк)

v.bay

✩✩✩✩✩✩✩
26 Окт 2026
4
0
Ремейк

Всем доброго времени суток. На просторах Ардуино наткнулся на стрелочные часы на stm32F103. Честно говоря, собрал от безделия, посмотреть на реализацию графики. Все нормально получилось, потребление при 3,26В - 48 мА, об автономном питании можно забыть. Начал рыть, через год заказал плату у китайцев, дорого, правда, обошлась – почти 12 тыс. за 5 шт. Но уже удила закусил, свистулька не давала покоя. Еще год танцев с бубном, в результате реализовал: уменьшил потребление до 20мА с включенной подсветкой (без нее 14мА) – уменьшил рабочую частоту до 24мГц, при питании STM 2,65В через ЧИП 63000. При емкости Акк 3200мА/ч хватает на 6-7 суток при условии: индикация активна только ночью. Решил вопрос с зарядкой – контролируя напряжение на Акк во время заряда и его отключение по достижении заданного напряжения и включения зарядки при падении напряжения до заданного уровня. Все это можно менять в программе. Это дало возможность продлить жизнь Акк. питать изделие от сети, (по возможности) через источник на контроллере Tny264, небольшим током 100-150мА. Он изначально создан работать день и ночь. Применил ЖК 2,8” технологии IPS, это позволило улучшить контрастность на порядок, угол обзора увеличился фантастически. Это позволило слегка подкрасить голубым циферблат круга, повеселей смотреться стало. Изменил положение экрана с 0 на 3. В качестве ключа отключающего минусовой провод зарядки от земли, использовал сборку 8205, кварц 4мГц. В качестве источника питания применил 63000, верхнее плечо делителя (ADJ) резистор 43кОм, нижнюю часть блочка, сточил до глины 01мкФ. Датчик положения свистульки опрашивается каждые 15 сек. и ВКЛ/ОТКЛ подсветку. А замер напряжения на Акк, происходит раз в минуту, и соответствующее действие. Цвета показаний напряжения: голубой - Акк заряжен, желтый - режим заряда подключен, оранжевый - во избежание выключения Акк, необходимо принять меры к зарядке. Часы при этом не остановятся, просто исчезнет подсветка. Последнюю плату хотел использовать на stm32L151C8U6 купил, установил, пытаюсь конвертировать с F103. Процесс начал не так давно, обычно, начинаю в зиму, по завершению дачной страды, но пока результат нулевой. Попробовал на платформе CubeIde тоже мимо, при компиляции требуется 2 библиотеки в репозиторий, а ее держатели в страну больше не поставляют продукт. Я давно слежу за вашей работой, по урокам, немного, начал понимать структуру платформы Ардуино со дня основания получаю журнал с сайта РадиоЛоцман и там читал ваши статьи. И, как не странно, я все понимаю в ваших публикациях. Что у меня не всегда получается. Бывает из за сленга, а то и слишком замысловато пишут. Вот и решил обратиться к сообществу вашего сайта, может поможете с конвертацией с F103 на L151? Думаю, многие использовали бы этот ЧИП в своих свистульках. Я на CubeIde при тактовой 16мГц, в режиме Run, получил потребление 3,5 мА, а это дорогого стоит.
 

Вложения

Изменено:

bort707

★★★★★★★
21 Сен 2020
3,543
1,009
Выкладываю вариант скетча
В вашем сообщении нет никакого скетча

источник на контроллере Tny264, небольшим током 100-150мА. Он изначально создан работать день и ночь. Применил ЖК 2,8” технологии IPS, ... В качестве ключа отключающего минусовой провод зарядки от земли, использовал сборку 8205, кварц 4мГц. В качестве источника питания применил 63000, верхнее плечо делителя (ADJ) резистор 43кОм, нижнюю часть блочка, сточил до глины 01мкФ.
Нюансы подключений лучше было бы выложить в виде схемы, чем описывать словами.
 
Изменено:

Эдуард Анисимов

★★★★★★★
23 Сен 2019
2,542
1,014
60
Марий-Эл
@v.bay, Нужно переключить все неиспользуемые выводы на аналог. Отключить тактирование неиспользуемой периферии. Потребление должно ещё упасть. Для ещё более низкого энергопотребления нужно использовать STM32L серии.
 

bort707

★★★★★★★
21 Сен 2020
3,543
1,009
Для ещё более низкого энергопотребления нужно использовать STM32L серии.
так он для этого сюда и пришел. Хочет, чтоб ему кто-то помог переписать код на L серию:

решил обратиться к сообществу вашего сайта, может поможете с конвертацией с F103 на L151?
 

Эдуард Анисимов

★★★★★★★
23 Сен 2019
2,542
1,014
60
Марий-Эл
@bort707, Чукча не читатель. Чукча писатель. :)
Не увидел сразу. Много бесполезного текста.
@v.bay, И писать нужно прошивку, а не скетч. И под CubeIDE. В Ардуино ИДЕ это сделать можно только через жопу.
 

v.bay

✩✩✩✩✩✩✩
26 Окт 2026
4
0
Пол дня рисовал схему.только закончил, редактор sPlan 7.0. не могу разместить на форуме. ругается не то расширение. Что не так? подскажите.
Давайте ошибки разберем, те что в скетче. Перечисляйте.
026-10-28 223256.png

Получилось,только такой формат.
 
Изменено:

bort707

★★★★★★★
21 Сен 2020
3,543
1,009
Давайте ошибки разберем
Ну для затравки -
Первое что бросаетсяв глаза

А. Неправильная работа с миллис:
C++:
if (targetTime < millis()) {
      ....
     targetTime = millis() + 498; //секунда
      ....
 }
При переполнении этот код будет глючить. (Вопрос о том, почему у вас секунда = 498 тиков таймера - оставим на потом, очевидно что вы игрались с частотой камня, а настройки счетчика не выставили)

Б. Выход за границу массива
C++:
char c1[] = { 0 };        //создаем масив
dtostrf(val, 5, 2, c1);   //конвертируем float -> char
Вот это очень грубая ошибка, чреватая утечкой памяти и зависанием всей программы
 

v.bay

✩✩✩✩✩✩✩
26 Окт 2026
4
0
Про ф-ю millis(): я уменьшил частоту (тактовую) в два раза, т.к. перестроить в скотче я не мог, уменьши через кварц (4мГц). Период увеличился в двое. весь внутренний подключенный фарш тоже работать стал медленнее. и функция millis() тоже. я разобрался с ней читая уроки Александра. Если туда заносить 1000 мсек, то часы будут ходить через 2 сек. Я и в оригинале заносил туда 999. и здесь пришлось подбирать число. Первые часы ходят 3 тий год без причины не вставали не разу. В оригинале были ошибки два значения календаря год и месяц прошедшие не удалялись. Теперь удаляется вес столбик, каждые сутки. а было каждый оборот вертушки.
Про массив: я, честно, не понял вопроса, ну да ладно. Создаю массив, как ЛОКАЛЬНУЮ переменную, после выхода за пределы блока, она просто сдуется, и следующий оборот вертушки, создастся снова, и так каждый оборот. Конвертация ну есть такая функция, не мной придуманная, и я ее использовал.
 

v.bay

✩✩✩✩✩✩✩
26 Окт 2026
4
0
в скобках этой функции (конвертирующей) есть размер преобразуемый в char - 5 символов из них 2 после запятой. Я обьяснил вам все на пальцах, если хотите что то доказать задавайте аналогично, иначе это просто блуд. Если хотите услышать, ой спасибо я все исправлю, - то пожалуйста считайте ,что это произнесено. У меня вопрос стоял в другом: как переписать аддон или поддон, как правильно не знаю, где тот файл, библиотеки в котором адреса фарша f103 можно переделать в адреса фарша l151. Я плохо знаю структуру Адуино. может я и не прав и надо как то по другому решать. Копал много но понял очень мало. Ради этого готов побыть даже чукчей. Ваши вопросы это язык Си. Посмотрите уроки Александра, в них все настолько лаконично и понятно, как будто писано для ребенка из детского сада. Не понять просто не возможно.
 
Изменено:

Эдуард Анисимов

★★★★★★★
23 Сен 2019
2,542
1,014
60
Марий-Эл
@v.bay,
Основная ошибка кода - использование Arduino IDE.​


Вторая ошибка, использование внешнего RTC.​


Третья ошибка использование millis.​


Если использовать CubeIDE, можно более продуктивно использовать возможности кристалла. Если использовать MK серии STM32L, можно снизить потребление устройства. Используя встроенный RTC есть возможность избавиться от millis и сделать часы очень точными. Встроенный RTC имеет календарь, который учитывает високосный год. Имеет возможность учитывать летнее/зимнее время.​


Ежесекундное прерывание от RTC можно использовать для перерисовки экрана.​


Для рисования стрелок и циферблата нужно использовать отдельные функции.​


Раз уж в схеме используется дисплей ILI9341. Можно циферблат и стрелки сделать более красивыми, В качестве циферблата можно выводить вообще картинку. Вообще будет улёт башки. Подсветку экрана нужно делать с использованием ШИМ от какого нибудь таймера. Можно регулировать яркость экрана, что позволит снизить потребление.​


У МК STM32L151CBT6 есть управление сенсорными кнопками. Правда я их никогда не пробовал, но попробовать было бы интересно.​
 

bort707

★★★★★★★
21 Сен 2020
3,543
1,009
Основная ошибка кода - использование Arduino IDE.​

Вторая ошибка, использование внешнего RTC.​

Третья ошибка использование millis.​
Частично верно
Главное преимущество контроллера STM32L - его низкое потребление в режиме сна и прочих энергосберегающих режимах, чего в нынешнем коде нет совсем. Это все еще нужно написать и тут соглашусь с Эдуардом - это проще сделать в Кубе, а не в Ардуино Иде
Простое переписывание текущего кода под другой контроллер не даст ровно ничего. Для того чтобы использовать возможности STM32L, этот код нужно отложить в сторону и написать новый с нуля.

Замечу, что даже при условии грамотного перевода проекта на STM32L большого эффекта только от этого ждать не стоит. В проекте, где есть постоянно включенный дисплей, именно он является главным потребителем заряда батарей. Большего смысла бороться за снижение потребления МК в этих условиях я не вижу.
 

Эдуард Анисимов

★★★★★★★
23 Сен 2019
2,542
1,014
60
Марий-Эл
@bort707, Я в CubeMX смог смоделировать потребление 2мА. Контроллером.
Дисплей жрёт много только во время отрисовки. При поддержке изображения где то в 2 раза меньше. Там можно ещё напряжениями матрицы поиграть, что бы снизить. Но вот подсветка кушает неплохо.
Самое интересное, в документации к чипу ILI9341 я не нашёл потребляемый ток. Смотрел плохо. Интересно сколько сама матрица жрёт?