Система "Харакири" или как попусту не тратить аккумулятор.

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

Суть

При создании мобильных изделий мы тут же начинаем решать, кто будет кормить наш девайс: батарейки или аккумулятор. Батарейки — вроде просто, но их менять надо, а иногда жёсткий «впадлу» настигает, и за ними не побежишь.

Толи дело аккумулятор, а если ещё и литиевый! Он даёт нам целых 3,7в в среднем (рабочий диапазон напряжений 2,8в-4,2в, где соответственно полный разряд и полный заряд). Но есть другая проблема, боится он гад перезаряда, и переразряда (вообще пугливый какой то). И если проблема с зарядкой отметается микросхемой MAX1555 или подобными, которые тебе и от USB зарядят, и от блока питания, корми как хочешь, и просигналят, как зарядилось всё.
То с разрядкой всё сложнее, ибо разряд ниже 2,8в грозит существенно снизить срок жизни литиевого аккумулятора. Некоторые скажут: «пффф, у литиевых аккумуляторов есть драйвер, который сам когда надо вырубит». Есть то он есть, да не у всех, да к тому же, посмотрев цены и форм факторы на аккумуляторы с драйвером и без, понял что аккумуляторы без драйвера существенное дешевле в соотношении ёмкость-цена (во всяком случае в магазинах, где я их покупаю).


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

STM32F10X библиотека для Diptrace

Вот потянуло меня к кортексам, досталась мне библиотека кортексов STM32F10X с одного китайского сайта, правда в bxl формате, сконвертировал себе ее для diptrace при помощи утилитки Ultra Librarian треснутой :-), может еще кому понадобится. Так же есть возможность ее в другие форматы конвертнуть…



Всего 120 пунктов в различных корпусах

Upd: Файл STM32F10x Lib(Diptrace & Eagle).zip упакован Каноничным винраром

Как я обошелся с верхними регистрами

Не знаю насколько пригодится эта придумка, но мне показалось удобным:

Мы имеем 10 регистров, от R16 до R25, которые «лучше чем остальные», ибо в них можно пихать
константы. То есть их удобно использовать как промежуточные при вычислениях. А чтобы не сохраняться в стеке при вызове прерываний, можно отдать 4 регистра на откуп обработчикам прерываний — то есть просто условиться для себя, что вот эти 4 регистра юзаем ТОЛЬКО в прерываниях.

Вот так:

.def TMPI0 = R16;
.def TMPI1 = R17
.def TMPI2 = R18
.def TMPI3 = R19

Остальные 6 я поделил так

Вот так:

.def TMP0 = R20; TMP0-TMP3 — для всяких 8-битных вычислений
.def TMP1 = R21;
.def TMP2 = R22; TMP_LOL — TMP_HOH — для 16 и 32 битных,
.def TMP3 = R23;
.def TMP_LOL = R22;
.def TMP_HOL = R23;
.def TMP_LOH = R24;
.def TMP_HOH = R25;
.def NULL = R5; ну и нолик вечный, инициализируем нулем в начале, и более
на запись не трогаем.

Вряд ли я открыл Америку, скорее изобрел очередной велик, но определенный порядок в голове и в коде появился. А то все эти LDI R16, CPI R21, R22 — очень тяжелочитабельны.