Как стать автором
Обновить

Комментарии 115

Зануда mode on: С утилитарной точки зрения все же проще было написать приложение на смартфон: Зануда mode on


А так занятна вещица получилась.

Их и так куча написана, и автор объясняет, почему не хочет ими пользоваться. Для самоделки очень круто получилось

В статье же написано, что неудобно смартфон. И тут очень даже понятно почему — кнопки не тактильные, сам по себе тяжелый, требует зарядки, экран на солце плохо видно, когда падает на пол, бьётся (а ведь вычисления на коленке это иногда буквально!).
А вот на клавиатурах наверное хотя бы на кнопки модификаторы было бы неплохо диоды поставить, чтоб можно было сразу несколько зажимать, но это всегда можно будет сделать, когда понадобится.
пользуюсь casio fx-350ES — можно в мгновение вводить многоэтажные выражения с дробями, степенями итд. По юзабилити смартфоны и близко не валялись

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

Тогда проще програму написать под задачу

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

Редактируемые выражения, история вычислений, переменные и прочее есть во многих серьёзных калькуляторах ценой 500..1500 рублей. Причём сделано это удобнее, чем на тех, что вместе с ОСями идут (что удивительно). Что особенно раздражает во многих софтовых калькуляторах — так это совершенно ненужный скевоморфизм.
Наборы кнопок и расположение экранов — это вообще к калькуляторам не относится. Понятно, что какой-нибудь VLC-плеер можно настроить как угодно, но подавляющему большинству людей при просмотре кино достаточно двух кнопок — пуск и пауза (что и подтверждают нынешние пульты для всяких видеопроигрывающих железяк). С калькулятором — именно как с устройством для "наколенных" вычислений — ситуация ровно такая же.

Логичней было бы, те функции, которые вызываются через модификатор, окрасить в соответствующие цвета: красный, синий.
Да, так и планируется: может быть это не очень хорошо видно на моих фотографиях, но все надписи на корпусе того же цвета, что и клавиша «F», а «G», как я написал, пока практически не используется.

В результате я использовал STM32Cube IDE. Я так и не смог добиться, чтобы он работал в Ubuntu, поэтому пришлось ставить ради него целую виртуальную машину с Windows 10.

Сам сижу под Ubuntu. Проблемы возникли не с CubeIDE, а с программатором (STM32CubeProgrammer) и решились установкой старой версии Java (1.8). Но такой фокус работает только на Ubuntu 18. На последней версии запустить тоже не удалось, т.к. разработчики убунты удалили поддержку старых версий Java начиная с Ubuntu 20.

У меня CubeIDE в Ubuntu намертво зависает уже на этапе создания проекта. Возможно, проблема действительно с версией Java, разбираться было лень. Собственно, если я правильно понимаю, после того, как процессор сконфигурирован, можно просто взять все исходники, сгенерированные в CubeIDE и править и компилировать их под линуксом в gcc. Хотя я пока не пробовал.

править и компилировать их под линуксом в gcc.

У меня это не получилось. Поэтому запускаю при сборке make сам CubeIDE:

$(STM32CUDEIDE) --launcher.suppressErrors -nosplash -application org.eclipse.cdt.managedbuilder.core.headlessbuild -data pwd-import pwd $dir -cleanBuild $opt

В смысле убрали из репозиториев? Не проблема установить сколько угодно старую Яву напрямую. У меня сейчас их целый зоопарк установлен, от восьмой до 16-й.
С калькуляторами беда. Особенно с софтовыми. Неудобны все как один.
Либо они с четырьмя действиями, либо столь навороченные что неудобно с четырьмя действиями. Вот где простой калькулятор с кнопками 1/x и sqrt(x)?
рекомендую CalcTastic или RealCalc

Пользуюсь Calculator++, неплохая середина между "+-/*" и "120 кнопок с тремя страницами".

Пользуюсь REPL питона (ещё можно ptpython, он с подсветкой), брат жив, зависимость есть. На ведроиде Calculator++, как выше уже советовали, но пользуюсь редко.

MyScript Calculator

писать пальцем)

Под Android - конечно же Mobi Калькулятор (от IP), перебрал десятки, вплоть до покупки за $10 - ничего лучше не нашёл. Он чудовищно удобный.

Прекрасный проект!
Только Вы зря сделали двухсторонний монтаж, это все можно разместить на одной стороне платы, и габариты станут лишь немного больше. Зато удобство и скорость монтажа возрастут значительно. И smd можно взять 0805, их паяльником паять намного удобнее, а места у вас на плате полно. А 0603 надо или феном или ик паять, у вас они все встали криво. Их можно выровнять, если нанести побольше паяльной пасты на них (которая без припоя), и сбоку прогреть жалом паяльника, так чтобы припой с обоих сторон расплавился.
Под батарейку можно взять вот такой держатель:
image
На али его можно найти под названием TBH-CR2032-M04
Только Вы зря сделали двухсторонний монтаж, это все можно разместить на одной стороне платы, и габариты станут лишь немного больше. Зато удобство и скорость монтажа возрастут значительно.
Не вижу смысла делать одностороннюю плату, если при заказе платы цена практически не отличается. А некоторые фабрики вообще не делают односторонние платы.
И как скорость монтажа зависит от кол-ва сторон?
Не фольгировка односторонняя, а монтаж деталей односторонний.
При двухстороннем монтаже наоборот, плотность монтажа меньше — проще размещать детали.
Но нужно два трафарета для пасты, можно повредить первую сторону, паяя вторую, монтаж на заводе будет намного дороже, т.к. им нужно будет два раза готовить производство и приклеивать детали на одной стороне.
Для проекта в единичном экземпляре трафарет не нужен, тем более если есть планы на следующую ревизию проекта.
Да и у данного калькулятора через трафарет целесообразно только нижнюю часть платы паять, т.к. на верхней стороне только кнопки, а они обычно не паяются в печке.
Да с двухсторонним монтажом проблем никаких нет. К тому же, я не совсем понял, как вы предлагаете расположить детали — STM и всю мелочевку под дисплей спрятать?

С 0603 я, конечно, дал маху, места-то на плате навалом. Проблема, действительно, в том, что если паять последовательно по одному выводу, то они встают криво. Но под конец я вроде бы наловчился с жалом в виде ножа (Hakko тип K), которым можно прогреть оба контакта одновременно.

Держатель я такой видел, но побоялся, что минусовой контакт будет ненадежным, так как он просто печатается на плате. К тому же, у меня ощущение, что он не намного тоньше того, что я использую сейчас. Более радикальным решением было бы вставлять батарею в вырез на плате. Попробую в новой версии что-нибудь такое сколхозить.
Если место позволяет, можно взять две более тонких батарейки CR2016.
можно использовать литиевый пакетик, они от 2 мм бывают. в дырке под дисплеем
Да, это вариант, особенно если найти тонкий держатель именно для 2016. А то большинство из них рекламируются как универсальные, 2016 и 2032, тогда никакого выигрыша.
Попробуйте паять феном или ИК и наносить пасту через трафарет. Одной рукой будете паять, второй слезы счастья вытирать. Паяльником разницы нет особой, но в печи или феном две стороны неудобно. А если заказывать монтаж, то еще и сильно дороже.
Можно под дисплеем, можно просто длину увеличить на 1,5 см.
Оба греть не надо :)
Вот таким вот методом пробовали паять? Много лет паяю так большие платы с кучей 0603, когда нужно собрать прототипы, никаких проблем с «криво встало». Флюс, само собой, хороший должен быть, ну и температура паяльника правильная. И не забывать потом вторую сторону припаивать, когда монтаж «потоком» идёт, а то были прецеденты.
Да теоретически оно понятно, вопрос же именно с правильным флюсом, припоем, правильной температурой для него и т.д. Достигается тренировкой.
Паяйте SMD феном. Паять их паяльником — это как в анекдоте про чукчу с чаем, «придумают же».

Вы меня почти убедили :)

А вот скажите еще, спецы. Чем по-хорошему отмывать пасту? Да, я в курсе про изопропанол. Но выдержат ли такое издевательство кнопки? Или есть какая-нибудь более щадящая технология?

Как показывает опыт китайцев (и мой), если ваше чувство прекрасного способно вынести вид неотмытой пасты - можно просто не мыть.

А так да, можно ИПС, можно этанолом (но он плохо отмывает).

Если изопропил чистый, то выдержат.
Бывают смеси специально для отчистки флюса(например Solins FLUX OFF), в которые обычно добавляют дихлорэтан и прочую гадость, которая может подразъедать некоторую пластмассу.
спирт, ацетон. Кнопки температуру пайки выдерживают, чего вдруг спирт не выдержат? Ацетон, кстати, в разы лучше моет. А выдержат ли кнопки ацетон — бросьте одну в ацетон и посмотрите. Скорее всего, выдержит.

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

Я как‐то не видел проблем от изопропанола. У нас обычно используют либо его, либо ультразвуковую ванну с раствором Solins FA+.


Второе может повредить маску: я УЗ ванной на резонитовской чёрной матовой маске, нанесённой на земляные полигоны много медных точек наставил (мораль: не заказывайте чёрную матовую маску в Резоните, она слезает и легко пачкается). Но если маска нормальная, то ничего плохого не будет.

Слезает? Пачкается? Похоже недосвет… Надо её досветить(если УФ) и дожарить. У меня такая же фигня была с зелёной.

Надо как‐нибудь проверить. Я вообще заказывал в Резоните все маски, кроме жёлтой (эта сразу меняет цену на «по запросу») и красной (но её как‐то коллеги взяли), таких проблем ни с одной другой не было. Как‐то раз получили вместо белой платы «бежевую» (выглядит так, как будто маска существенно тоньше, точнее, существенно прозрачнее), иногда маску несколько легче повредить паяльником.

Маска — это по сути пластик, термостойкий. Если маска повреждается — значит она не до конца полимеризовалась. Надо её дожаривать или досветить ультрафиолетом.

Такое количество деталей феном — и дольше, и дороже.

Во-первых, не понимаю, почему дороже — если речь идёт о пайке дома на коленке. Станцию купить придётся? Ну так и паяльник хороший не 5 копеек стоит.
Дольше? Когда я паяю SMD, я сразу несколько деталей (или даже все) расставляю, а потом все расставленные детали запаиваю круговыми движениями фена. Больше всего времени у меня уходит на расстановку мелочёвки. Но её, в любом случае, расставить придётся.

Откуда возьмётся олово? Всякие 0603 вы ещё можете запаять, предварительно сделав горку на площадках. Это не будет дороже, но с таким небольшим числом деталей дольше будет. Микросхему с ножками с шагом 0,5 мм я бы не стал паять феном на что‐либо, кроме пасты: ставить на горки сложнее, результат ненадёжный (в смысле, сложно получить одинаковый результат везде), а если всё равно потом проводить паяльником, то зачем вообще заморачиваться с феном? Что означает, что нужна паста и нужен трафарет, отсюда дороже.


Про кнопки я вообще не говорю: высокие, далеко друг от друга, греть, вероятно, нужно аккуратно, поверхностному натяжению на всего четырёх ножках сложно их куда‐то утащить (что значит, что если вы поставите ножку на горку и она оттуда съедет, то поправлять придётся самому).


Кроме того, фен всегда греет дольше, чтобы феном было быстрее, вам нужно, чтобы разница в количестве операций (которая в пользу фена) перекрывала разницу в скорости нагрева. На плате с картинок это вряд ли произойдёт.

Микросхему с ножками с шагом 0,5 мм я бы не стал паять феном на что‐либо, кроме пасты: ставить на горки сложнее
Так само собой, что на пасту. Мне, вообще, сложно вам что-то возразить: я с перечисленными проблемами не сталкивался, хотя, паял и 0603, и QFP80.
и 0805 паяльником так себе удовольствие паять — качество хуже
надавил паяльной пасты на площадки, быстренько раскидал пинцетом детали, дунул феном — все расплавилось и выровнялось за счет поверхностнорго натяжения — как заводской результат
С ним вышла небольшая проблема: судя по всему, мой экземпляр не умеет делать «connect under reset», из-за чего STM в состоянии спячки я программировать не могу.
Все китайские ST-Link после покупки нужно дорабатывать.
Простая доработка: habr.com/ru/post/402927
Более продвинутая доработка: habr.com/ru/post/442290
Спасибо за ссылки, надо будет изучить, решают ли они мою проблему. У меня такое впечатление, что дизайн китайских ST-Link постоянно меняется, так что может так получиться, что то, что предлагали пару лет назад, уже неактуально.
Все китайские клоны ST-Link в виде флешки делаются по одной и той же схеме на одном и том же процессоре. Т.к. на сколько помнится, только у них есть слитый дамп прошивки.

Зачем дамп, если обновить можно через родное приложение от ST?

После калков Cassio с «натуральной» записью выражений пользоваться чем-то ещё решительно невозможно… Можно нагородить многоэтажную дробь на весь экран, при этом править любой параметр двумя тыками. Особенно мне нравится запись десятичных приставок в кратком виде (μ вместо x10-6 етц.). Не представляю что может быть удобней чтобы «просто быстро посчитать».

Да, я просто поражаюсь отполированостю юзабилити. Интересно сколько они разрабатывали эти калькуляторы. Можно сказать это эталон качества интерфейса.

Хочу андроид-смартфон в таком же дизайне)

Да я слышал про это, но тут такое дело: сегодня раздают, завтра передумают. Пока OpenSCAD меня вполне устраивает.

Рекомендую zencad. В openscad нереально сделать что-то сложное — начинает сильно тормозить

Тормозит при большом количестве сегментов для цилиндров и сфер ($fn=360 и начинается жесть). Кубики и простые фигуры отрисовывает без особого напряга.
Интересно, когда кто-нибудь сделает онлайн версию OpenSCAD или ZenCad, чтобы прямо в браузере код писать и результат видеть?

Тормозит еще и операция minkowski, а без нее фаски нормально не сделать (а без фасок все по углам расслоится при 3d-печати)

После калков Cassio с «натуральной» записью выражений

Был такой в институте. Классная штука. Нужно посчитать что-то по формуле вбил её и все готово ). И править можно и скобки как хочешь расставлять.
Сейчас вроде есть программа которая решает любые уравнения из школьных учебников
по типу упрости выражение и прочее. Можно вводить уравнение как в учебнике.
Вроде wolframalpha.
Wolframalpha — это онлайновый сервис. Программы такого рода (системы компьютерной алгебры или CAS) известны очень давно. Например Maxima и Axiom из свободных, проприетарная Mathematica и т.д. Есть в некоторых современных (и не очень) программируемых калькуляторах. Первыми добавили её TI, если не путаю в модель TI-92. Из последних есть в Casio FX-CP400 (Classpad II), HP Prime, TI-NSPIRE CX II-T CAS.
«Сейчас» :) Я этот Wolfram Mathematica юзал во всю в начале 0-х (т. е. 20 лет назад). У нас даже курс по нему был.
Где-то я видел самопальный держатель для батарейки вообще из двух кусочков жести (один по плюсу «конвертиком», впаивается в трёх точках и охватывает батарейку, а другой, что по минусу, — длинный пружинящий и впаивается в двух точках, прижимая ЦРку к первому). Размер «чуть толще самой 2032».
Есть еще конструкции, в которых для батарейки делается отверстие в плате.
Так еще тоньше.
Вот и я про то же. А ссылки не найдется?
Ну понятно, что можно что-то такое вырезать самому, но хотелось бы все же, чтобы конструкция была технологичная и повторяемая. Не спрашивайте, зачем :). Так что я бы предпочел держатель промышленного изготовления.
Я ради любопытства просмотрел Digikey и Mouser. Таких промышленных не нашел. Но если взять плюсовой контакт типа того, что я приводил ранее, только в smd исполнении, вставить его в вырез вверх ногами, чтобы он контактами лежал на плате, и в качестве минусового контакта взять минусовой контакт для AA батарей с Али, припаяв его так, чтобы он торчал в вырез, получится вполне себе держатель.

Похоже, я нашел, что искал: Keystone 1057. Он сидит в вырезе платы и выступает сверху только на 2 мм (ну и снизу на 1.6 мм). Если его поместить вплотную под ЖКИ, можно сделать корпус толщиной 8.5 мм вместо теперешних 12.5 мм (при той же толщине верхней и нижней панелей корпуса - 0.8 мм). Уже лучше.

Я его видел, но смысла в нем не увидел. У него толщина 5,21 и стоит очень дорого. Если можно взять SMT Contact for 2032 Cell P/N 3036, с толщиной 3,56 и подобные ему, что вместе с текстолитом 1,5 мм даст те же 5 мм за меньшую стоимость и более простой монтаж.

Ну я же говорю, разница в том, что его можно поставить вплотную к ЖКИ. Он выступает с обратной стороны на 1.6 мм, но ЖКИ все равно приходится приподнимать над платой, т.к. есть еще толщина кнопок и клавиатуры. Так что выигрыш в толщине получается ~4 мм. С вашим вариантом только 2 мм. На Маузере он, кстати, дешевле, чем по ссылке выше, $2.

Можно, конечно, поставить скобочку для батарейки 2016, толщина будет та же (она высотой 2 мм). Но она только 90 мАч, так что либо ставить две, либо смириться.

Хотя у него есть свои ограничения: например, в отличие от FreeCAD, в нём сложно делать фаски и скругления граней

minkowski(){
cube([10,10,10]);
sphere(r=1);
}
А теперь сделайте тоже самое для внутреннего радиуса выреза кнопки.
Это как раз не проблема, можно всегда вычесть одну выпуклую фигуру из другой.
Ну да, или еще можно сделать convex hull вокруг шариков и цилиндров. Но это же все, как бы так выразиться, заменители натурального. Для каждой формы нужно пересчитывать параметры, особенно если делать скругление только по одной грани, например.
IVEE — a Powerful Programable RPN Calculator based on FORTH
The hardware is simple: — Arduino Pro Micro — OLED display (128x64 pixel) with SSD1306- or SSD1309-controller — 16 keys (push buttons) optional: — LIPO battery — LIPO battery charger (TP4056) — ON/OFF-switch ...

image


P.S. Для использования ассемблерного ядра Форт (RPN) в связке с Си кодом для STM32L476 можно испытать в представенном автором проекте Mecrisp-Cube
Интересная машинка! На STM32L476, конечно, можно много чего взгромоздить при желании, хоть Форт, хоть MicroPython. Но у меня нет цели делать программируемый калькулятор. Хотя если у кого-то будет настроение сделать его на том же железе — удачи. Все файлы лежат на github.
Интересный проект! Но одинарной точности для калькулятора маловато. Поскольку дробные вычисления всё равно эмулируются, тут нужен какой-нибудь кастомный floating point формат, например 96-битный (32 бита на порядок и 64 бита на мантиссу, как делали на старых телефонах на J2ME), и заодно портировать проект на «голубую пилюлю» вместо Arduino.
Не знаю, можно ли сделать что-то сильно лучше в домашних условиях, не заказывая кастомную мембранную клавиатуру.


Сделать на свичах для механических клавиатур, конечно же!
Где бы их еще найти, чтоб раза в три меньше размером, чем в компьютерных клавиатурах?
Сделать на свичах для механических клавиатур, конечно же!

А может быть это не такая уж и безумная идея. Похоже, самые маленькие существующие кнопки — Cherry ML, размером 12 x 11.4 мм. Если их можно расположить вплотную друг к другу, размер клавиатуры будет не сильно больше того, что сейчас (хотя верхнее поле функциональных клавиш, конечно, будет сильно посвободнее). Надо подумать в этом направлении.
Спасибо за статью, выглядит как минимум интересно)) Ну и немного ценного мнения с дивана:

  • стоит добавить аппаратную защиту от дребезга на кнопки;
  • на выбранном МК ног хватает с запасом, можно было каждую кнопку повесить на свой пин МК, чтобы можно было легко наварачивать дополнительный функционал типа двойного нажатия или удержания и прочие извращения для расширения функционала.
  • С5 бы увеличить до 0.1...1 мкФ
И конечно же параллельно C1 и C2 поставить керамику 100нФ.
А то я однажды делал компактный DC-DC преобразователь для одной поделки. Поставил на фильтры керамику 22мкФ, думал прокатит керамика же. А нет, шумы валили на выходе будь здоров, пока не припаял параллельно дополнительные по 100нФ.
На самом деле, там действительно стоит керамика, а не электролиты. Все работает без проблем (да и схему я просто из даташита на TPS61222 передрал).

Хотя с конденсаторами по питанию буквально вчера, «когда верстался номер», вылезла одна проблема. После пары месяцев работы батарейка, видимо, уже не такая свежая, и периодически калькулятор стал сбрасываться в момент включения. Я подозреваю, происходит вот что: при включении преобразователя на 5В происходит быстрая зарядка C2, и свежая батарейка еще вытягивала, а с подсевшей напряжение кратковременно проседает ниже минимального для STM32, и он перезагружается. Так что параллельно C1 пришлось поставить электролит 50 мкФ (т.е. в несколько раз больше, чем C2). Вроде бы это решило проблему.
У электролита и даже тантала большой ток утечки, так что в выключенном состоянии будет довольно активно подсасывать батарейку. В идеале взять DC/DC с выводом SS (soft start) и повесить на него кондер типа 0.022 мкФ или около того, в итоге бросок тока в момент включения уйдет.
Угу, спасибо за предупреждение! Была еще мысль просто поставить диод на питание STM, чтобы он пережил короткую просадку на своих конденсаторах C6-C11 (добавив там тоже керамический мкФ на 10). Заодно защитить его от неправильной полярности.

Была еще мысль просто поставить диод на питание STM

Вместо диодов

Это добавит много элементов на плату и усложнит разводку. Оно и так работает, достаточно на те кнопки, которые будут нажиматься несколькими штуками по диоду последовательно с кнопкой поставить и всё, как это в NKRO клавиатурах сделано. Дребезг фильтруется программно.
Да даже и диоды не нужны, если максимум две кнопки одновременно обрабатывать (а больше в калькуляторе и не надо, если Quake на нем не писать).
стоит добавить аппаратную защиту от дребезга на кнопки;

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

можно было каждую кнопку повесить на свой пин МК

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

С5 бы увеличить до 0.1...1 мкФ

О да, это просто опечатка на схеме. На самом деле там 100 нФ. Поправлю.
Двойных комбинаций мало, обычно как делают: матрица для общих кнопок а кнопки-модификаторы заведены отдельно. В итоге матричные кнопки можно нажимать только по одной, и обычно большего не требуется, а модификаторы — в любых комбинациях.
И подавление дребезга неправильное, слишком тормозное на задержках темболее таких конских. Как обычно делают: тупо скан клавиатуры один раз на 20мс и… всё. Проблема дребезга уходит до тех пор пока кнопка «дребезжит» дольше 20мс. Но это уже неисправная кнопка. можно организовать отдельный таймер с периодом переполнения 20мс и дергать контроллер из сна, а когда нет долго нажатий(1..5..10сек) останавливать даже скан и переводить матрицу в режим ожидания нажатий.

Модификаторы типа "shift" или "ctrl" как в компьютерных клавиатурах (для одновременного нажатия) мне не нужны. Кнопки "F" и "G" сделаны "залипающими" как на обычных калькуляторах, иначе неудобно было бы пользоваться, печатая одной рукой на весу. Сейчас я обрабатываю только одну кнопку за раз, а режим 2KRO хочется добавить просто для более надежной отработки нажатий при быстром наборе. Ну, например, вы быстро набираете "123", при этом нажимаете "2" до того, как отпустили "1" - сейчас такое нажатие не зарегистрируется. Это можно сделать на обычной матрице безо всякого отдельного заведения и диодов (а вот 3KRO в общем случае без диодов уже сделать нельзя).

Про 200 мс это я вам наврал, извините. Сейчас посмотрел в код еще раз, там задержки все же гораздо меньше. Раз уж зашел разговор, давайте я опишу алгоритм обработки матрицы (пока сам не забыл):

  • В исходном состоянии процессор сладко спит, все столбцы включены на вывод (с открытым стоком) в состоянии "0", а строки подтянуты к +VBAT и настроены на вход с прерыванием по спаду сигнала.

  • Когда мы нажали кнопку, происходит прерывание, процессор просыпается, но не спешит разбираться, кто его разбудил, а ждет 3 мс, пока не кончится дребезг при нажатии (задержка подобрана опытным путем для моих кнопок).

  • После этого, когда мы уверены, что кнопка в стабильно нажатом состоянии, начинается сканирование матрицы. Строки переводим на обычный вход, без прерывания, столбцы включаем в "0" по одному (остальные в "1").

  • Как только процессор разобрался, какая кнопка нажата, сразу выполняет нужную операцию.

  • После этого ждет, пока юзер не отпустит нажатую кнопку. Но не засыпает сразу, а ждет 10 мс (задержка для подавления дребезга при отпускании), после этого переводит столбцы и строки в исходное состояние с прерыванием, и только тогда спокойно засыпает.

Подозреваю, что для 2KRO алгоритм придется значительно модифицировать, я пока над этим не думал.

3мс — мало. У вас прокатывает пока кнопки новые, потом будут проблемы. Ставьте 10мс.
У меня до сих пор, уже лет 30, работает старый калькулятор Casio fx-7300G образца 1998 года, и последние 10 лет я не менял в нем батарейки.
Круто смотрится проект. И memory LCD — отличный экран, очень хорошо читаемый. И кнопки смотрятся великолепно.Хотя обратная польская запись это конечно на любителя. Зато с таким железом можно хоть даже графики в будущем добавить.

Хотя для себя я много лет назад еще когда в школе учился написал калькулятор в который можно просто выражение писать с клавиатуры, и он его вычисляет. Главное удобство — можно формулу редактировать, и результат меняется при каждом изменении выражения. И есть лог вычислений. Аппаратный калькулятор хорош когда ты не за компом, чего у меня практически не бывает. А вот на компе программа калькулятор должна быть именно как программа на компе а не симулировать аппаратный калькулятор 80х.
Первоначальная наивная задумка была сделать корпус, фрезерованный из алюминия, так, чтоб на века. Но фрезерного станка у меня нет, а после изучения расценок на штучные детали на сайтах типа 3DHubs и Xometry планы пришлось подкорректировать и смотреть в сторону 3D-печати из пластика.
Корпус из алюминия не очень толстый в домашних условиях можно сделать электрохимическим методом. Электролит может быть тривиальным — поваренная соль (NaCl) водный раствор, источник тока — батарейка или понижающий трансформатор с выпрямителем. Процесс длительный, и лучше его вести на воздухе. Потом надфилем придется поработать. Так в журнале Наука и жизнь советовали дверные номерки делать: клеить клеем БФ-2 на пластинку маску из толстой бумаги… Аналогичные советы были в журнале Юный техник. Там еще был рецепт электрохимической «покраски», но с более сложным электролитом: медный купорос и обычный сахар.
К сожалению, стикеры на кнопках не очень прочно прилипают и неосторожным движением их можно отодрать.
Надписи ИМХО лучше у гравера заказать — обычно они есть в крупных магазинах и делают поздравления на посуде. Это не очень дорого и быстро.

BTW про очень маленький и тоненький калькулятор.

Хорошо бы программный калькулятор сделать, чтобы точность можно бало задавать real4, real8, real10. Чисто для программистов х86.

А ещё я смог декомпилировать микрокод К145ИК* для МК61, теперь можно сделать быстрый эмулятор этого МК на слабых процессорах.

А напишите статью об этом. Вы в своей работе опирались на проект Феликса Лазарева?

Может стоит попробовать использовать E-Ink вместо ЖК чтоб снизить потребление?
У меня есть E-Ink шилд для Raspberry Pi такого же размера (Waveshare 2.7"). К сожалению, прорисовка изображения у него занимает несколько секунд, а частичной прорисовки в стандартной библиотеке нет. Так что его разве что для пресловутой погодной станции можно использовать, что я и делаю. Думаю, что даже с частичной прорисовкой все будет слишком медленно.

Да с потреблением ЖК проблемы нет, особенно если его выключать полностью, когда калькулятор не используется. Я подозреваю, что я что-то делаю не так при переводе STM32 в режим STOP, т.к. потребление тока у меня раза в 2-3 больше, чем в даташите обещают. Ну либо кде-то еще в схеме утекает пара десятков мкА. Надо разбираться.
Понятно. А вот с E-Ink все совсем непонятно, у меня складывается такое устойчивое впечатление что их неправильно используют для вывода, либо реализация вывода на них с какими-то багами и/или тормозами.
Похоже, я решил все свои проблемы со слишком большим потребляемым током. STM32 можно отправить в более экономичный режим спячки STOP2 вместо STOP1, который я (оказывается) использовал раньше. При этом он потребляет всего ничего, 2-3 мкА с выключенным ЖКИ и 10-12 мкА со включенным. Этого должно хватить лет на 5 работы от батарейки. И даже ЖКИ от питания отрывать не надо.

Так что с такой экономичностью можно взять даже одну батарейку 2016 и сделать совсем тонкий корпус. Продолжение следует…
А почему Вы его в shutdown не отправляете? У вас же нет часов. Да и с часами можно в Standby отправить.
В режиме STOP у меня процессор живет всегда, в частности, когда ждет нажатия кнопки со включенным экраном. В SHUTDOWN память не сохраняется, а хотелось бы, чтобы состояние стека и памяти при выключении не пропадало. В STANDBY вроде как можно сохранить часть SRAM, но по мне так 2 мкА в выключенном состоянии уже неплохо, сравнимо с саморазрядом батарейки и утечкой кондеров (а главное, с ожидаемым временем жизни самого девайса :).

Backup ram же есть для сохрарений. Пока питание не снято, будет вам память.

Очень круто!
Так и тянет сделать свой собственный калькулятор с FORTH на ESP32.
Недавно купил себе 14-сегментные индикаторы на HT16K33 — выглядят очень аутентично, Eink не сравнить.

Несколько лет назад был соблазн поступить так же. А потом наткнулся на WP34s и отпустило.

Взял себе HP 35s, теперь не могу считать на обычных калькуляторах…
Долго охотился на классику HP 42, но их даже бу теперь не найти… Или по заоблочным ценам.
Для компа и телефона использую проект thomasokken.com/free42 именно он, кстати, бегает на MicroSwiss
Я после наших RPN (программируемых) Электроник долго плевался, когда приходилось пользоваться обычными калькуляторами с кнопкой равно. Но вот наконец появились смартфоны и приложение RPN калькулятора, и жизнь снова засверкала яркими красками! ))
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.