Эмуляция носителя FAT32 на stm32f4


Некоторое время назад возникла данная задача — эмуляция носителя FAT32 на stm32f4.
Её необычность заключается в том, что среди обвязки микроконтроллера вовсе может не быть накопителя, вроде FLASH-контроллера или SD-карты.
В моём случае накопитель был, но правила работы с ним не позволяли разместить файловую систему. В ТЗ, тем не менее, присутствовало требование организовать Mass Storage интерфейс для доступа к данным.
Результатом работы явился модуль, который я озаглавил «emfat», состоящий из одноимённого .h и .c файла.
Модуль независим от платформы. В прилагаемом примере он работает на плате stm32f4discovery.
Функция модуля — отдавать куски файловой системы, которые запросит usb-host, подставляя пользовательские данные, если тот пытается считать некоторый файл.
Итак, кому это может быть полезно и как это работает — читайте далее.


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

Складской учет комплектующих с помощью ERP-системы Odoo (OpenERP)

Привет. Думаю, у многих, как и у меня, стоит задача контролировать запасы электронных компонентов. Я нашел решение этой задачи.

Сначала я вел склад в экселевской таблице, но там есть сложности с массовым списанием комплектующих при производстве какого-нибудь устройства. Я решил написать собственную программу для этого. Через пару недель, я понял, что это долго. Потом я узнал, что существует куча средств для решения задачи. Из всего многообразия мне приглянулась ERP-система Odoo (произносится Оду).

Odoo (ранее OpenERP) — это опенсорсная кроссплатформенная ERP-система. Доступ к интерфейсу организован через браузер. Система решает массу задач: бухгалтерский учет, продажи, закупки, управление проектами, складской учет, управление производством и многое другое.

Мне нужны были только склад и производство. Склад позволяет отслеживать наличие комплектующих, а производство — создавать спецификации и массово списывать комплектующие.

Чтобы показать систему коллегам я сделал скринкаст и написал статью про установку на Убунту.

Это мой первый скринкаст с импровизированным монологом, поэтому прошу сильно не ругать. Видео лучше смотреть на Ютубе в максимальном качестве. Когда я публиковал свой прошлый скринкаст, мне многие сказали, что лучше бы я сделал статью, но я не представляю, как показать все, что я показал с помощью статьи.

Пощупать Оду можно с помощью онлайн-демки.

Цветовые палитры для пространства HSV

«Готовь сани летом» — именно этой пословице мы с другом решили последовать, начав разрабатывать новогоднюю гирлянду на широко известных RGB светодиодах со встроенным драйвером WS2812B.
После того, как было решено, что все программные манипуляции с цветом будем производить в цветовой модели 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 написанная на Си, умеющая создавать, изменять размер и удалять файлы. А так же переименовывать и переносить файлы и папки.


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

Вектора прерываний в C++ стиле

Хочу представить на суд широкой общественности (да и самому не потерять) мою реализацию таблицы векторов прерываний для arm микроконтроллеров STM32. Данная реализация генерируется из asm-файлов SPL, написана на С++ и облегчает работу поддержкой автодополнений и корректной работой с таблицей векторов в памяти.


Читать дальше
  • +6
  • 11 ноября 2014, 17:25
  • dekar

PGA своими руками

Сколько раз ни пытался применить готовые PGA (усилитель с программируемым Ку), ни разу не мог подобрать подходящий. Либо сетка коэффициентов не устраивает, либо (в основном) высокая цена, а часто особенности схемотехники. В результате пришлось изобрести свой.

Казалось бы, чего проще — операционник и коммутатор в цепи ОС, переключающий резисторы нужных номиналов.
Типа:


Как известно, Ку такого усилителя будет определяться соотношением Ку = 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


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

Обзор программатора AVRISP-MKII

AVR
Попался ко мне в руки вот такой клон программатор AVRISP-MKII вот отсюда.



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