Питание от Li-Ion с самоотключением
Зачем?
Понадобилось как-то запитать от li-ion устройство. Не одно, их довольно много. Но цена на 18650 со схемами защиты привела в уныние. Бюджет мог треснуть и залить всех вокруг остатками жирной жабы. После исследования предложений на рынке, пришел к выводу, что оптимальным будет использовать аккумуляторы без встроенной защиты, а защиту внедрить в устройство.Читать дальше
STM32f4 USB HS DMA HAL. Как это было
Попросил меня как-то один уважаемый заказчик организовать ему передачу данных с контроллера (stm32f407) в компьютер. Всё бы ничего, но скорость ему требовалась аж 40 мегабит в секунду.
Надо сказать, что железка была уже готова, основной код написан, в качестве интерфейса передачи выбран USB High Speed с внешним PHY (USB3300). У программиста заказчика с USB что-то не заладилось, посему решили произвести усиление коллектива вашим покорным слугой. Для полноты картины следует добавить, что весь код контроллера был написан при помощи CubeMX, а программа на ПК — на Delfi.
Читать дальше
Надо сказать, что железка была уже готова, основной код написан, в качестве интерфейса передачи выбран USB High Speed с внешним PHY (USB3300). У программиста заказчика с USB что-то не заладилось, посему решили произвести усиление коллектива вашим покорным слугой. Для полноты картины следует добавить, что весь код контроллера был написан при помощи CubeMX, а программа на ПК — на Delfi.
Читать дальше
Эмуляция носителя FAT32 на stm32f4

Некоторое время назад возникла данная задача — эмуляция носителя FAT32 на stm32f4.
Её необычность заключается в том, что среди обвязки микроконтроллера вовсе может не быть накопителя, вроде FLASH-контроллера или SD-карты.
В моём случае накопитель был, но правила работы с ним не позволяли разместить файловую систему. В ТЗ, тем не менее, присутствовало требование организовать Mass Storage интерфейс для доступа к данным.
Результатом работы явился модуль, который я озаглавил «emfat», состоящий из одноимённого .h и .c файла.
Модуль независим от платформы. В прилагаемом примере он работает на плате stm32f4discovery.
Функция модуля — отдавать куски файловой системы, которые запросит usb-host, подставляя пользовательские данные, если тот пытается считать некоторый файл.
Итак, кому это может быть полезно и как это работает — читайте далее.
Читать дальше
Складской учет комплектующих с помощью ERP-системы Odoo (OpenERP)
Привет. Думаю, у многих, как и у меня, стоит задача контролировать запасы электронных компонентов. Я нашел решение этой задачи.
Сначала я вел склад в экселевской таблице, но там есть сложности с массовым списанием комплектующих при производстве какого-нибудь устройства. Я решил написать собственную программу для этого. Через пару недель, я понял, что это долго. Потом я узнал, что существует куча средств для решения задачи. Из всего многообразия мне приглянулась ERP-система Odoo (произносится Оду).
Odoo (ранее OpenERP) — это опенсорсная кроссплатформенная ERP-система. Доступ к интерфейсу организован через браузер. Система решает массу задач: бухгалтерский учет, продажи, закупки, управление проектами, складской учет, управление производством и многое другое.
Мне нужны были только склад и производство. Склад позволяет отслеживать наличие комплектующих, а производство — создавать спецификации и массово списывать комплектующие.
Чтобы показать систему коллегам я сделал скринкаст и написал статью про установку на Убунту.
Это мой первый скринкаст с импровизированным монологом, поэтому прошу сильно не ругать. Видео лучше смотреть на Ютубе в максимальном качестве. Когда я публиковал свой прошлый скринкаст, мне многие сказали, что лучше бы я сделал статью, но я не представляю, как показать все, что я показал с помощью статьи.
Пощупать Оду можно с помощью онлайн-демки.
Сначала я вел склад в экселевской таблице, но там есть сложности с массовым списанием комплектующих при производстве какого-нибудь устройства. Я решил написать собственную программу для этого. Через пару недель, я понял, что это долго. Потом я узнал, что существует куча средств для решения задачи. Из всего многообразия мне приглянулась ERP-система Odoo (произносится Оду).
Odoo (ранее OpenERP) — это опенсорсная кроссплатформенная ERP-система. Доступ к интерфейсу организован через браузер. Система решает массу задач: бухгалтерский учет, продажи, закупки, управление проектами, складской учет, управление производством и многое другое.
Мне нужны были только склад и производство. Склад позволяет отслеживать наличие комплектующих, а производство — создавать спецификации и массово списывать комплектующие.
Чтобы показать систему коллегам я сделал скринкаст и написал статью про установку на Убунту.
Это мой первый скринкаст с импровизированным монологом, поэтому прошу сильно не ругать. Видео лучше смотреть на Ютубе в максимальном качестве. Когда я публиковал свой прошлый скринкаст, мне многие сказали, что лучше бы я сделал статью, но я не представляю, как показать все, что я показал с помощью статьи.
Пощупать Оду можно с помощью онлайн-демки.
Цветовые палитры для пространства HSV

После того, как было решено, что все программные манипуляции с цветом будем производить в цветовой модели HSV, встал вопрос о конвертере HSV->RGB. Ибо формата отличного от RGB светодиоды не понимают. Использовать готовые конвертеры или тупо переложить в код готовые формулы преобразований, чтобы просто оперировать стандартным пространством HSV — неинтересно. Душа требовала какой-нибудь изюминки. Ну и в общем-то что хотела, то и получила.
Читать дальше
Демоны в АЦП STM32

Современные АЦП обычно содержат внутри УВХ. В последнее время АЦП часто строятся по схеме уравновешивания заряда, а не уравновешивания токов, как это было в АЦП на основе резисторной матрицы R-2R. В случае АЦП с уравновешиванием заряда роль емкости УВХ выполняет внутренняя матрица конденсаторов. Конденсаторы матрицы в процессе преобразования перезаряжаются. Поэтому вход такого АЦП ведет себя достаточно нетривиально. Именно к такому типу АЦП относится и внутренний АЦП микроконтроллеров STM32. Довольно много информации по этому поводу содержится в документе AN2834. Но там полезные рекомендации, как на стр. 37: «Do not add any external capacitor (Cext) to the input pin when applying this above workaround» чередуются с вредными советами, как на стр. 39: «An extra large Cext enables sampling more often». Это подтолкнуло к написанию данного поста.
Читать дальше...
VinxFS - Самая маленькая файловая система FAT32 для AVR
Скачать одним файлом тут: github.com/vinxru/VinxFs/archive/master.zip
Смотреть на GITHUB: github.com/vinxru/VinxFs
Неоднократно читал на форумах, что люди ищут небольшую программу, которая бы позволяла работать с файловой системой FAT16/32. И многие выбирают Petit FatFS, потому что она работает даже на ATTiny. Но понимают через некоторе время, что она не умеет увеличивать размер существующих файлов. Приходится заранее создавать большие пустые файлы. А об удалении, создании, перемещении файлов или папок можно даже не думать.
Я предлагаю (безвозмездно) переработанную версию этой библиотеки. Это самая маленькая файловая система FAT16/FAT32 написанная на Си, умеющая создавать, изменять размер и удалять файлы. А так же переименовывать и переносить файлы и папки.
Читать дальше
Смотреть на GITHUB: github.com/vinxru/VinxFs
Неоднократно читал на форумах, что люди ищут небольшую программу, которая бы позволяла работать с файловой системой FAT16/32. И многие выбирают Petit FatFS, потому что она работает даже на ATTiny. Но понимают через некоторе время, что она не умеет увеличивать размер существующих файлов. Приходится заранее создавать большие пустые файлы. А об удалении, создании, перемещении файлов или папок можно даже не думать.
Я предлагаю (безвозмездно) переработанную версию этой библиотеки. Это самая маленькая файловая система FAT16/FAT32 написанная на Си, умеющая создавать, изменять размер и удалять файлы. А так же переименовывать и переносить файлы и папки.
Читать дальше
Вектора прерываний в C++ стиле
Хочу представить на суд широкой общественности (да и самому не потерять) мою реализацию таблицы векторов прерываний для arm микроконтроллеров STM32. Данная реализация генерируется из asm-файлов SPL, написана на С++ и облегчает работу поддержкой автодополнений и корректной работой с таблицей векторов в памяти.
Читать дальше
Читать дальше
PGA своими руками
Сколько раз ни пытался применить готовые PGA (усилитель с программируемым Ку), ни разу не мог подобрать подходящий. Либо сетка коэффициентов не устраивает, либо (в основном) высокая цена, а часто особенности схемотехники. В результате пришлось изобрести свой.
Казалось бы, чего проще — операционник и коммутатор в цепи ОС, переключающий резисторы нужных номиналов.
Типа:

Как известно, Ку такого усилителя будет определяться соотношением Ку = R2..R5 / R1, выбор задается по адресным входам А0, А1. Вроде все ничего, но есть одно но. Как правило, КМОП-ключи имеют некоторое внутреннее сопротивление, и оно редко меньше 1 Ом, а может достигать и десятков. При этом однозначно нормировать его нельзя, т.к. этот параметр может изменяться как от экземпляра к экземпляру, так и от внешних условий — температуры, амплитуды сигнала и т.д.
Чем это грозит? Тем, что сопротивление ключа вносится в Rос и изменяет Ку. Если требования к точности невысокие и ключ достаточно низкоомный, можно пренебречь внутренним сопротивлением или взять типовое значение из даташита. Однако, если речь идет о прецизионных измерениях, закрывать на это глаза уже нельзя.
Что же делать? Нужно попытаться вынести добавку «за скобки». К счастью, нам повезло :) и коммутатор оказался двухсекционным. Легким движением руки…

… получаем усилитель, не зависящий от капризов природы.
Что произошло? Теперь при подключении любого из резисторов обратной связи мы берем выходное напряжение не с выхода операционника, где оно содержит добавку, обусловленную падением на ключе, а непосредственно с Rос, которое в точности определяется первоначальной формулой, ибо входной ток через R1 уравновешивается выходным через Rос, и напряжение на Rос зависит только от соотношения резисторов. Добавка, обусловленная дополнительным сопротивлением ключа коммутатора, на нем же и осталась.
Эту схему я придумал сам, некоторое время ощущая себя в определенном смысле гением :) пока не наткнулся на описание схемотехники китайского RLC-метра, который срисовали со старинного agilent. Ну и там увидел свой «велосипед». То есть, это вполне стандартный трюк, которым я с удовольствием и делюсь с уважаемым сообществом.
Дополнительный бонус обнаружился при разводке данной конкретной схемы. Кто попробует, поймет, о чем я :)
Спасибо за внимание, успехов в творчестве.
Казалось бы, чего проще — операционник и коммутатор в цепи ОС, переключающий резисторы нужных номиналов.
Типа:

Как известно, Ку такого усилителя будет определяться соотношением Ку = R2..R5 / R1, выбор задается по адресным входам А0, А1. Вроде все ничего, но есть одно но. Как правило, КМОП-ключи имеют некоторое внутреннее сопротивление, и оно редко меньше 1 Ом, а может достигать и десятков. При этом однозначно нормировать его нельзя, т.к. этот параметр может изменяться как от экземпляра к экземпляру, так и от внешних условий — температуры, амплитуды сигнала и т.д.
Чем это грозит? Тем, что сопротивление ключа вносится в Rос и изменяет Ку. Если требования к точности невысокие и ключ достаточно низкоомный, можно пренебречь внутренним сопротивлением или взять типовое значение из даташита. Однако, если речь идет о прецизионных измерениях, закрывать на это глаза уже нельзя.
Что же делать? Нужно попытаться вынести добавку «за скобки». К счастью, нам повезло :) и коммутатор оказался двухсекционным. Легким движением руки…

… получаем усилитель, не зависящий от капризов природы.
Что произошло? Теперь при подключении любого из резисторов обратной связи мы берем выходное напряжение не с выхода операционника, где оно содержит добавку, обусловленную падением на ключе, а непосредственно с Rос, которое в точности определяется первоначальной формулой, ибо входной ток через R1 уравновешивается выходным через Rос, и напряжение на Rос зависит только от соотношения резисторов. Добавка, обусловленная дополнительным сопротивлением ключа коммутатора, на нем же и осталась.
Эту схему я придумал сам, некоторое время ощущая себя в определенном смысле гением :) пока не наткнулся на описание схемотехники китайского RLC-метра, который срисовали со старинного agilent. Ну и там увидел свой «велосипед». То есть, это вполне стандартный трюк, которым я с удовольствием и делюсь с уважаемым сообществом.
Дополнительный бонус обнаружился при разводке данной конкретной схемы. Кто попробует, поймет, о чем я :)
Спасибо за внимание, успехов в творчестве.
W5200 плата
Развел простенькую платку под Wiznet 5200, решил поделиться...
UPDATE: статья обновлена, комментарии устарели
Проект в Altium прикреплен.
Схема опробована, завелось практически сразу.
Пришлось дополнительно промыть растворителем — кварцевый резонатор и его конденсаторы, дальше проблем не возникало )
Выведен весь SPI интерфейс (MISO,MOSI,SCK,CS) и PWDN с Reset-ом.
Разъем с трансформатором h911105a
Читать дальше
UPDATE: статья обновлена, комментарии устарели
Проект в Altium прикреплен.
Схема опробована, завелось практически сразу.
Пришлось дополнительно промыть растворителем — кварцевый резонатор и его конденсаторы, дальше проблем не возникало )
Выведен весь SPI интерфейс (MISO,MOSI,SCK,CS) и PWDN с Reset-ом.
Разъем с трансформатором h911105a

Читать дальше