Сводный список записей блога

--->>>> Сводный список записей блога <<<<---

13 декабря 2022

Тетрис-машина. Начало.

Все статьи по данной игровой консоли - по тегу G-BASIC

Изображение из сети

Достаточно давно, еще до войны (точнее, до активной фазы войны), в прошлом (а может даже позапрошлом) году купил я мелкий дисплейчик. полтора дюйма, 240*240 пикселей. Зато IPS.
С какой то непонятной неоформленной мыслью прикрутить к этому дисплею маленький контроллер , 4-6 кнопок, оформить это в виде брелка-переростка или недоконсольки и написать на это дело несколько таймкиллерных игрушек.

Типа Тетрис, Xonix, ходилка по лабиринту... Может 2D-гоночки какие то...  

И крутилась эта мысль в подсознании фиг знает сколько времени.

Ну и хотелось, что б это было не на телефоне, а отдельным таким девайсом.

Но мучила меня мысль, что эта фигня, назовем её тетрис-машина, будет совершенно проприетарная. И даже если я ее опубликую, то это будет некий черный ящик, в который добавить новую игру смогу только я... Или кто то, кто сможет разобраться в исходниках. Если я их выложу.

30 ноября 2022

FM-приемник. Слушай, что дают. Ищи, что нравится.

 UPD: обновилась версия прошивки для обновленного дисплея до 2.1 

Изменения: 

- Устранено нестабильное включение при некорректном положении энкодера - между "щелчками", когда один или оба контакта замкнуты

- В спящем режиме кнопки и энкодер отключаются от подтяжки к питанию и принудительно сажаются на "землю". Подтянутой к питанию остается только кнопка энкодера.

_________________

Image © by KB1RDL http://www.ra4a.ru/
Image © by KB1RDL http://www.ra4a.ru/

На РадиоКоте в свое время была статья авторства NoviceUser-а про миниприёмник с применением МК ATMEGA168, FM-модуля RDA5807 и  дисплея "от Nokia 5110". Была тема на форуме с обсуждением приемника. Приемник слегка "подрос", переехал на Atmega328, обзавелся OLED-дисплеем...

Потом NoviceUser обиделся на чью то критику, залупился и вообще закрыл тему.

И я там поучаствовал, чуток расширил схему и написал альтернативную прошивку. Предложил портативный вариант в достаточно компактном корпусе. На чем, собственно, тема на форуме и закончилась.

Обновленную конструкцию я выкладывал у себя в блоге. 

Тот приемник был собран, испытан и подарен. Ибо я радио слушаю редко. Нет такой радиостанции, репертуар которой нравился бы мне хотя бы на 80%. 
Но!
У меня лежал без дела монохромный ЖК-дисплей 64*128 точек на ST7565 контроллере, с белой подсветкой и диагональю 2 дюйма. Вот такой.

Он был запланирован в одно устройство, но не сложилось. И было решено сделать еще один экземпляр приемника, тоже в подарок. 

А такому дисплею и корпус надо соответствующий. Поиск донора на той же алишечке привел меня к приемнику GOLD JINRU KK-9.

Что значит GOLD - я знаю. Что значит JINRU в переводе с английско-китайского - не очень.

Вдруг это какой нибудь золотой унитаз или золотое дилдо.... Хотя большой китайско-русский словарь bkrs.info по слову JINRU даёт следующее:
jìnrù - входить, вступать в..., поступить; продвижение, проникновение, вступление, въезд, вход

"Золотое продвижение КаКа-9"... Ну в некотором плане приемник таки кака. Даже поздно ночью на КВ и СВ-диапазонах не ловит практически ничего. FM - ну в городе ловит. 
Переключатель DX-Local вообще бутафория.

Но как донор корпуса, динамика, пары деталек с платы - приемник подойдет. Можно приступать к схеме, плате и продумыванию конструкции.

12 ноября 2022

Дозиметерное

 


Наконец то дозиметр запросил кушать. 

253 суток прошло. 280 ма*ч аккумулятор.

Искренне надеюсь, что у хуйла хватит остатка мозгов не трогать ЯО и дозик мне пригодится исключительно для мониторинга ЕРФ и походов на флюорографию.

UPD: Второй дозик прожил 304 дня.




02 ноября 2022

Проводной/беспроводной метеодатчик (2 х T°C, RH%, P mmHg) с дисплеем (или беспроводная версия без дисплея)

Это проект 2019 года, он уже давно опубликован на РадиоКоте.
Но только сейчас дошли руки перетянуть его к себе в блог.


Что умеет метеодатчик:

  • Поддержка датчика DS18B20 (температура)
  • Поддержка датчика ВМЕ280 (температура/влажность/давление) или BMР280 (температура/давление)
  • Отображение напряжения питания и информации с датчиков на ЖК-дисплее 84*48 пикселей (NOKIA 3310/5110) - для возможности использования модуля в автономном режиме
  • регулировка контрастности дисплея (кнопки "+" и "-")
  • Отправка информации с датчиков и напряжения питания по последовательному порту (9600,8,N,1), выход Тх - открытый сток (открытый коллектор)
  • Отправка информации с датчиков и напряжения питания по радиоканалу с применением модулей JDY-40 (UART-удлиннитель).
  • Посадочное место под JDY-40
  • Диапазон питания 2.5..5 вольт (в случае применения DS18B20 - 3..5 вольт)
  • Встроенный LDO-стабилизатор (для возможности питания 3.6 вольтовых ВМЕ/ВМР и JDY-40) при питании выше 3.6 вольт...
  • Программная калибровка измерителя напряжения батарейки, выполняется при питании от стабилизированных 3.30 вольт.
  • Подсветка дисплея
  • Поддержка Li-Ion-аккумуляторов без встроенной защиты
  • Режим дополнительного датчика, его показания принудительно заменяют показания встроенных в часы датчиков - это для часов TouchClock-2

22 октября 2022

Графическая библиотека

На данный момент я написал и начал использовать уже третью версию своей графической библиотеки.

В соответствии с ранее описанной парадигмой - это абстрактная библиотека верхнего уровня, которая оперирует с графическими примитивами и ничего не знает о дисплее.

Библиотека оперирует 16-битным цветом (RGB565) вне зависимости от применяемого дисплея.

Библиотека позволяет рисовать на дисплее линии, окружности и прямоугольники (с заливкой и без), выводить описанные ранее растровые спрайты, рисовать "черепашью" графику, работать с оверлеем в ОЗУ.

21 октября 2022

Инструмент сжатия изображений


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

А теперь вернемся к графике. 2 месяца назад я писал про алгоритмы сжатия графики. Алгоритмы простые, но позволяют немножко сжать растровую графику.

Но теория теорией, а практика - практикой. Никто в здравом уме не будет попиксельно разбирать картинку и высчитывать биты на бумажечке. Соответственно, нужен какой то инструмент.
И он у меня есть.

10 августа 2022

Растровые шрифты и оптимизация занимаемого места

Продолжим разговор о выводе информации на графические дисплеи средствами недорогих микроконтроллеров.

Ранее я писал про абстракцию пользовательской графики от типа дисплея и способа его подключения, а так же вскользь упомянул о шрифтах и занимаемом ими месте в дефицитной памяти недорогих микроконтроллеров.

Теперь настала пора поговорить про шрифты немножко подробнее.

Любой символ растрового моноширинного шрифта - это фиксированный прямоугольник, ширина и высота которого определяют размеры символов этого шрифта. Моноширинный шрифт - это такой, у которого для всех символов отведено одно и то же пространство по ширине, будь это узкий символ "!" или широкая буква "Ш".

И символ в этом прямоугольнике ничем не отличается от простой растровой картинки, где на пиксель приходится один бит. 

Таких символов в таблице ASCII - 256. Первые 32 символа - служебные и непечатаемые символы, потом 96 символов - латиница, цифры, знаки препинания и различные спец.символы.

Вторые 128 символов отведены под региональные символы. В частности, кириллица занимает 72 символа.


Рассмотрим несколько методов сохранения шрифтов.

08 августа 2022

Сжатие изображений или Как запихнуть большую картинку в маленький микроконтроллер


Ранее я писал, что применение графических дисплеев в устройствах на микроконтроллерах выводит взаимодействие с пользователем на совершенно другой уровень.
Но цена этого уровня - это гораздо больший объем данных, которые должен хранить и обрабатывать контроллер. 

Если на алфавитно-цифровом дисплее со встроенным знакогенератором для вывода текста нужно сохранить в памяти контроллера только сам текст, то для графического дисплея, кроме самого текста, нужно хранить в памяти еще и шрифт, которым этот текст будет нарисован на дисплее.

Для приведенного выше примера один символ - это 5х7 точек. 35 бит. 5 байт.
Для сохранения первой половины печатных символов ASCII - спец.символы, цифры, большие и маленькие английские буквы - это 96 символов - нужно 5 * 96 = 480 байт.
Если же к этому добавить еще и кириллический алфавит (+72 символа), то получим 840 байт.

Но шрифт 5х7 точек - он маленький, хорош для дисплеев с большим размером пикселей. А современные недорогие и доступные радиолюбителю дисплеи, особенно цветные, имеют достаточно высокую плотность пикселей. Например, TFT IPS дисплей с диагональю 1.51" имеет разрешение 240х240 пикселей. На этом дисплее вышеуказанный текст шрифтом 5х7 точек будет высотой порядка 1 мм.

Кому нужен текст размером в миллиметр?

Соответственно, нужен шрифт побольше. Символ шрифта 14х21 точку занимает 294 бита или 37 байт. 168 символов - это 6216 байт.

А если кроме шрифтов, нужно еще и картинки выводить ?

02 августа 2022

Графика для микроконтроллера - 3 уровня абстракции.

 


Часть устройств, проектируемых на микроконтроллерах, должна взаимодействовать с пользователем. В частности, что то пользователю сообщать, показывать, сигнализировать....
Это может быть один или несколько светодиодов, это может быть 7-сегментный дисплей...
Или алфавитно-цифровой дисплей, позволяющий отобразить пользователю определенный текст.

Но по сути - это все отображение дискретной информации, ограниченной возможностями устройства отображения.
Светодиод может гореть, может не гореть, может мигать. 7-сегментный дисплей может отобразить любую цифру и определенное количество букв. Алфавитно-цифровой дисплей может отобразить любой текст в соответствии с "вшитым" в него знакогенератором. Если дисплей поддерживает загрузку пользовательских символов - тут немножко легче. Можно попытаться добавить недостающие символы. Даже нарисовать какое то изображение при помощи псевдографики.
Но есть такие задачи, когда таких средств  отображения недостаточно.

И тогда на сцену выходят графические дисплеи.
Их много разных. Есть черно-белые, есть цветные. Есть маленькие, есть огромные.

Использование таких дисплеев - сплошные плюсы. Можно отобразить картинку. Можно нарисовать график. Можно вывести текст любым шрифтом и в любом виде. 
Всё, до чего дотянется фантазия разработчика (но в пределах возможностей примененного дисплея).

14 июля 2022

Новые дисплеи для тестера аккумуляторов

Поскольку есть много жалоб на дисплей "от Нокии", который я применил в тестере литиевых аккумуляторов, я нашел свободную минутку и попробовал адаптировать прошивку тестера к парочке других дисплеев разрешением 128х64 пикселя.

Это дисплей на контроллере ST7565 и OLED-дисплей на контроллерах SSD1306 и SH1106.

ST7565

(фоточка с алиэкспресса и чего там иероглифами написано - я не знаю, сорри)

23 июня 2022

Недельный таймер с приоритетной блокировкой

Предыстория

У нас в доме нет централизованного горячего водоснабжения. Есть индивидуальные газовые проточные водонагреватели.Ну или просто - газовые колонки. 

И в какой то момент времени было принято решение отказаться от использования газового нагревателя в пользу электрического накопительного водонагревателя. Он же - бойлер. Меньше расход воды, электрика дешевле...

Сказано - сделано. Был куплен 2кВт-бойлер. Что бы не тащить отдельную электролинию к распределительном щитку, розетка для бойлера была подключена параллельно одной из групп кухонных розеток. Основное использование этой группы - электрочайник, и непериодическое - всякие миксеры, блендеры и т.д. 
Эта группа розеток защищена 16-амперным автоматом. 16 ампер - это порядка 3.3 кВт.
Чайник 2.2 кВт, бойлер - 2 кВт. Вместе 4 кВт. Непорядок. 
На паре транзисторов, датчике тока и 12-амперном реле было собрано реле приоритета. 
При превышении определенного потребления по кухонным розеткам бойлер, как второстепенная нагрузка, отключался.

В какой то момент это реле "обмикропроцессорилось", включившись в сеть "умного дома". И функционал стал обрастать всякими "плюшками".  К примеру, включением и отключением бойлера, как второстепенной нагрузки при превышении общего потребления по другим линиям. Ибо выделенная мощность на квартиру - 5 кВт. 

С приходом двухзонного учета электроэнергии (с 23:00 до 7:00 электрика дешевле в 2 раза) возник вопрос, а нужно ли греть бойлер днем? 100 литров хватает на бытовые нужды. А вечером можно и нагреть.
И в контроллер управления питанием бойлера добавился недельный таймер с получасовыми интервалами. 

В какой то момент времени возникла необходимость сделать аналогичный таймер родственникам. Это должно быть автономное устройство, которое может настроить любой человек.

В результате и родился данный проект.

Недельный таймер с приоритетной блокировкой

Краткие характеристики управляющего модуля:

  • Встроенные часы с календарем и поддержкой перехода на сезонное время
  • Резервирование хода часов (батарейка CR2032)
  • Недельный график с 30-минутными интервалами
  • Принудительное отключение нагрузки при получении сигнала по приоритетному входу
  • Регулируемая задержка отключения по приоритету от 1 до 30 сек., с шагом 1 сек.
  • Ручное включение нагрузки с возможностью отключения через 1,2,3 или 4 часа
  • Ручное отключение нагрузки
  • 2 разнесенных по времени на 200 мсек сигнала управления нагрузкой (для возможности комбинированного управления при помощи реле и симистора)
  • Светодиодная индикация включения нагрузки и наличия питания
  • Защита от перегрева с настраиваемым порогом срабатывания 60...90° и гистерезисом 10°С.
  • Управление - энкодер + кнопка
  • Отображение информации - OLED-дисплей
  • Питание +12 вольт, до 50 мА

12 мая 2022

ZUBR-D340y - реверс схемы

 


Жило-было у меня реле напряжения. 10 с копейками лет прожило. Но последние несколько месяцев стало вести себя все хуже и хуже. Электричество стало отключаться с завидной периодичностью.

Возник вопрос - как проверить, это у нас проводка 1946 года глючит или реле выделывается? Нужно или замутить независимый логгер сетевого напряжения, или взять заведомо исправное реле.

Логгер, конечно, есть в далеко идущих планах, но это очень далекие планы. Поэтому я психанул и купил новое реле. Как оказалось - проблема не в проводке, а в старом реле.

Поскольку новое реле уже стоит и работает - надо посмотреть, что есть в старом.

Ниже - просто срисованная с плат схема реле напряжения Зубр D340y

14 апреля 2022

Тестер литиевых аккумуляторов


Возникла необходимость проверить пару мелких литиевых аккумулторов. 200 и 280 "махов".

Вариант 1. Зарядить аккумулятор, нагрузить на резистор, засечь время и ждать. 
Неточный. Можно провтыкать и переразрядить.

Вариант 2. Подключить разряженный аккумулятор к БП, у которого ограничение 4.25 вольта и ограничение тока. Т.е. сначала в режиме CC заряжается до 4.25В, потом БП переходит в CV и доливает остатки заряда.
Тоже неточный. Можно провтыкать момент перехода из CC в CV и окончание заряда.
Плюс надо сначала разрядить. см. пункт первый.

Вариант 3. Собрать какую то автоматизацию на макетной плате с применением микроконтроллера. Ну тут только макеткой не обойтись, надо бы попаять немножко.

Вариант 4. поискать что то готовое.
По быстрому на радиокоте нашлось 2 конструкции.
1. Тестер всяких-разных аккумуляторов от Shodan-а на ATMEGA8 и 7-сегментнике.
2. Тестер литиевых аккумуляторов от eufs. Тут применен цветной дисплей от СониЁриксона и ATTINY26 в качестве мозга.

Варианты 1 и 2 - матушка лень обломала. Вариант 3 - туда же. Вариант 4 - делать чужое - это надо делать, на макетке не выйдет. Плюс нельзя добавить свои плюшки.

Вроде ради двух аккумуляторов городить какой то огород - нехорошо. Но некоторые товарищи уговорили. 
В результате родился Вариант 5. Сделать своё.

Но поскольку вещь как бы не очень востребованная лично мною - см. выше, надо проверить 2 (два) аккумулятора, то покупать что то дополнительно  не правильно. Надо сделать "из говна и палок" - т.е. из той комплектухи, что есть дома.
В результате был использован МК ATMEGA328, дисплей "от Нокии" 84*48 пикселей, операционник LM358, зарядник TP4056, ИОН TL431 ну и по мелочи деталек...

В результате таки что то получилось.

Final_device.gif

Получившийся прибор умеет следующее:

  • Питание - 5 вольт.
  • Измерение внутреннего сопротивления батареи
  • Заряд аккумулятора фиксированными токами 50, 100, 150, 200, 250, 300, 350, 400, 450, 500 мА
  • 3 режима разряда аккумулятора - фиксированный ток (CC), фиксированное сопротивление (CR) и фиксированная мощность (CP)
  • В режиме разряда фиксированным током - поддержка разрядных токов 10, 20, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500 мА
  • В режиме разряда на фиксированное сопротивление - эмуляция сопротивлений 9, 10, 11, 12, 14, 16, 20, 30, 50, 100, 220, 440 Ом
  • В режиме разряда с поддержанием постоянной мощности - 25, 50, 100, 200, 300, 400, 500, 600, 800, 1000, 1200, 1400 мВт
  • Комбинированный режим - предварительный заряд, потом разряд, потом заряд
  • График разряда/заряда
  • Звуковой сигнал окончания рабочего цикла - 0..60 сек
  • Мигание подсветкой дисплея по окончании рабочего цикла - 0..60 сек
  • Звуковое подтверждение нажатия кнопок (отключаемое)
  • Защита TP4056  от неправильного подключения аккумулятора
  • Калибровка измерителей разрядного/зарядного тока и напряжения
  • Настройка контрастности дисплея и полярности подсветки дисплея
  • Возможность заданием коэффициента в меню калибровки и заменой нескольких элементов схемы увеличить зарядный/разрядный ток в 2 раза - т.е. до 1А. 
  • Интерфейс - english, українська, русский
  • NEW! возможность подключения дисплеев 128х64 пикселя - OLED на контроллерах SSD1306 или SH1106 и LCD на контроллере ST7565. Подробнее - тут.

14 марта 2022

Ми вистоїмо! Ми переможемо! Слава Україні!

Во время попытки оккупации моей родной страны одной наглой соседней державой с плешивым ублюдком во главе сложно чем-либо заниматься. Спасает то, что есть работа и её надо работать.

На новое творчество нет ни сил, ни желания. И даже написать новую статью - не могу. При том, что мне есть что показать. 

А просто сидеть и ждать - сил тоже нет. Поэтому буду потихоньку перетаскивать сюда написанное и ранее опубликованное на радиокоте.


#Русский военный корабль - иди нахуй!

Russia: Z!
Ukraine: Ctrl-Z.

09 марта 2022

Генератор-имитатор счетчика Гейгера

 



В процессе разработки "измерителя радиации" RadAlert возникло желание проверить его работоспособность на чем то более точном и мощном, нежели пакетик калийных удобрений.

После некоторых раздумий, чтения форумов, консультаций у форумчан радиокота родилась в голове следующая мысль.

Известно, что счетчик при пробое должен посадить анодное напряжение на 50+ вольт. При этом длительность пробоя - несколько десятков микросекунд.

Если вместо счетчика Гейгера подключить высоковольтный транзистор и открывать его на эти 20-30 микросекунд - можно имитировать импульсы от счетчика. Но счетчик просаживает напряжение всего на 50 вольт, а не до нуля, как это сделал бы транзистор. Соответственно, в коллекторную цепь транзистора решено включить гирлянду стабилитронов суммарным напряжением стабилизации 300-320 вольт. В таком случае открытый транзистор будет имитировать просадку высокого напряжения до напряжения стабилизации. Тем самым более точно будет имитироваться работа счетчика Гейгера, да и работа генератора высокого напряжения заодно будет проверена - если высокое просядет ниже 300-320 вольт - импульсы перестанут подсчитываться прибором.

07 марта 2022

Защита дверного звонка


 В интернетах есть некое количество страшных историй про сгоревшие дверные звонки типа "Дин-Дон" от замкнувших кнопок... Кнопка сломалась, контакты остались замкнуты, 220 Вольт постоянно на катушке электромагнита, катушка греется, горит и поджигает все вокруг....

И в течении вечера была сделана простая защита звонка от таких ситуаций, которая и предлагается в этом материале.

29 января 2022

Автоинкремент версии при компиляции C/C++ проекта


Несмотря на то, что в современных IDE есть встроенные средства инкремента номера версии, мне захотелось чего то своего, с девочками и преферансом. Ибо то, что предоставляется - это зачастую числовое значение, которое просто увеличивается от 1 и до упора. А хочется, например, строковую константу, да со своим форматом. Да с возможностью изменения/сброса в любой момент.

Я хочу просто где то в отдельном .h-файле записать строчку типа

#define FIRMWARE_VERSION        "1.01.0001"

и что бы при каждой компиляции (или не при каждой) проекта последняя часть версии (0001) увеличивалась на 1. Причем не важно, строковый это дефайн будет или числовой (без кавычек).

Ну и за вечер накидал я себе некую консольную программку.

16 января 2022

Огненная лампа на WS2812 по мотивам лампы Гайвера - схема


Я тут подумал, я выложил подробный алгоритм генерации пламени, показал лампу...
А схему не выложил. 
Соответственно, исправляю эту досадную ошибку.