Комментарии 117
Зануда mode on: С утилитарной точки зрения все же проще было написать приложение на смартфон: Зануда mode on
А так занятна вещица получилась.
Их и так куча написана, и автор объясняет, почему не хочет ими пользоваться. Для самоделки очень круто получилось
А вот на клавиатурах наверное хотя бы на кнопки модификаторы было бы неплохо диоды поставить, чтоб можно было сразу несколько зажимать, но это всегда можно будет сделать, когда понадобится.
Вводить абстрактные дроби может быть. Но вот сделать подстановку значение масс частиц из базы данных, кастомизируемые наборы кнопок и расположение экранов, вывод графиков (и подстановка значения с графика в калькулятор), редактируемые выражения и различного рода манипуляции с сохранением в памяти значений и выражений — вобщем есть где разгуляться.
Редактируемые выражения, история вычислений, переменные и прочее есть во многих серьёзных калькуляторах ценой 500..1500 рублей. Причём сделано это удобнее, чем на тех, что вместе с ОСями идут (что удивительно). Что особенно раздражает во многих софтовых калькуляторах — так это совершенно ненужный скевоморфизм.
Наборы кнопок и расположение экранов — это вообще к калькуляторам не относится. Понятно, что какой-нибудь VLC-плеер можно настроить как угодно, но подавляющему большинству людей при просмотре кино достаточно двух кнопок — пуск и пауза (что и подтверждают нынешние пульты для всяких видеопроигрывающих железяк). С калькулятором — именно как с устройством для "наколенных" вычислений — ситуация ровно такая же.
В результате я использовал STM32Cube IDE. Я так и не смог добиться, чтобы он работал в Ubuntu, поэтому пришлось ставить ради него целую виртуальную машину с Windows 10.
Сам сижу под Ubuntu. Проблемы возникли не с CubeIDE, а с программатором (STM32CubeProgrammer) и решились установкой старой версии Java (1.8). Но такой фокус работает только на Ubuntu 18. На последней версии запустить тоже не удалось, т.к. разработчики убунты удалили поддержку старых версий Java начиная с Ubuntu 20.
править и компилировать их под линуксом в gcc.
У меня это не получилось. Поэтому запускаю при сборке make сам CubeIDE:
$(STM32CUDEIDE) --launcher.suppressErrors -nosplash -application org.eclipse.cdt.managedbuilder.core.headlessbuild -data pwd-import pwd $dir -cleanBuild $opt
https://platformio.org/
Здесь уже все решили
Либо они с четырьмя действиями, либо столь навороченные что неудобно с четырьмя действиями. Вот где простой калькулятор с кнопками 1/x и sqrt(x)?
Пользуюсь Calculator++, неплохая середина между "+-/*" и "120 кнопок с тремя страницами".
Пользуюсь REPL питона (ещё можно ptpython, он с подсветкой), брат жив, зависимость есть. На ведроиде Calculator++, как выше уже советовали, но пользуюсь редко.
MyScript Calculator
писать пальцем)
Под Android - конечно же Mobi Калькулятор (от IP), перебрал десятки, вплоть до покупки за $10 - ничего лучше не нашёл. Он чудовищно удобный.
HiPER Scientific Calculator (бесплатная версия с рекламой)
HiPER Calc Pro (платная версия без рекламы)
Пользуюсь калькулятором speq давно не обновлялся. И некоторые вычисления можно делать с наборами чисел(одномерными матрицами) но поскольку калькулятор рассматривает их как матрицы, нельзя считать выражения где эти числа стоят под дробью.
Идеального калькулятора так и не нашёл.
Только Вы зря сделали двухсторонний монтаж, это все можно разместить на одной стороне платы, и габариты станут лишь немного больше. Зато удобство и скорость монтажа возрастут значительно.Не вижу смысла делать одностороннюю плату, если при заказе платы цена практически не отличается. А некоторые фабрики вообще не делают односторонние платы.
И как скорость монтажа зависит от кол-ва сторон?
С 0603 я, конечно, дал маху, места-то на плате навалом. Проблема, действительно, в том, что если паять последовательно по одному выводу, то они встают криво. Но под конец я вроде бы наловчился с жалом в виде ножа (Hakko тип K), которым можно прогреть оба контакта одновременно.
Держатель я такой видел, но побоялся, что минусовой контакт будет ненадежным, так как он просто печатается на плате. К тому же, у меня ощущение, что он не намного тоньше того, что я использую сейчас. Более радикальным решением было бы вставлять батарею в вырез на плате. Попробую в новой версии что-нибудь такое сколхозить.
Вот таким вот методом пробовали паять? Много лет паяю так большие платы с кучей 0603, когда нужно собрать прототипы, никаких проблем с «криво встало». Флюс, само собой, хороший должен быть, ну и температура паяльника правильная. И не забывать потом вторую сторону припаивать, когда монтаж «потоком» идёт, а то были прецеденты.
Вы меня почти убедили :)
А вот скажите еще, спецы. Чем по-хорошему отмывать пасту? Да, я в курсе про изопропанол. Но выдержат ли такое издевательство кнопки? Или есть какая-нибудь более щадящая технология?
Бывают смеси специально для отчистки флюса(например Solins FLUX OFF), в которые обычно добавляют дихлорэтан и прочую гадость, которая может подразъедать некоторую пластмассу.
Спирт на кнопки воздействует не температурой, так что это не показатель. Другое дело, что платы обычно отмывают либо спиртом, либо чем‐то, что его содержит, поэтому если ваша деталь портится от спирта, то желание её купить у потребителей становится как‐то меньше. Я от промывки спиртом платы не видел проблем ни разу.
Я как‐то не видел проблем от изопропанола. У нас обычно используют либо его, либо ультразвуковую ванну с раствором Solins FA+.
Второе может повредить маску: я УЗ ванной на резонитовской чёрной матовой маске, нанесённой на земляные полигоны много медных точек наставил (мораль: не заказывайте чёрную матовую маску в Резоните, она слезает и легко пачкается). Но если маска нормальная, то ничего плохого не будет.
Надо как‐нибудь проверить. Я вообще заказывал в Резоните все маски, кроме жёлтой (эта сразу меняет цену на «по запросу») и красной (но её как‐то коллеги взяли), таких проблем ни с одной другой не было. Как‐то раз получили вместо белой платы «бежевую» (выглядит так, как будто маска существенно тоньше, точнее, существенно прозрачнее), иногда маску несколько легче повредить паяльником.
Такое количество деталей феном — и дольше, и дороже.
Дольше? Когда я паяю SMD, я сразу несколько деталей (или даже все) расставляю, а потом все расставленные детали запаиваю круговыми движениями фена. Больше всего времени у меня уходит на расстановку мелочёвки. Но её, в любом случае, расставить придётся.
Откуда возьмётся олово? Всякие 0603 вы ещё можете запаять, предварительно сделав горку на площадках. Это не будет дороже, но с таким небольшим числом деталей дольше будет. Микросхему с ножками с шагом 0,5 мм я бы не стал паять феном на что‐либо, кроме пасты: ставить на горки сложнее, результат ненадёжный (в смысле, сложно получить одинаковый результат везде), а если всё равно потом проводить паяльником, то зачем вообще заморачиваться с феном? Что означает, что нужна паста и нужен трафарет, отсюда дороже.
Про кнопки я вообще не говорю: высокие, далеко друг от друга, греть, вероятно, нужно аккуратно, поверхностному натяжению на всего четырёх ножках сложно их куда‐то утащить (что значит, что если вы поставите ножку на горку и она оттуда съедет, то поправлять придётся самому).
Кроме того, фен всегда греет дольше, чтобы феном было быстрее, вам нужно, чтобы разница в количестве операций (которая в пользу фена) перекрывала разницу в скорости нагрева. На плате с картинок это вряд ли произойдёт.
С ним вышла небольшая проблема: судя по всему, мой экземпляр не умеет делать «connect under reset», из-за чего STM в состоянии спячки я программировать не могу.Все китайские ST-Link после покупки нужно дорабатывать.
Простая доработка: habr.com/ru/post/402927
Более продвинутая доработка: habr.com/ru/post/442290
Хочу андроид-смартфон в таком же дизайне)
Интересно, когда кто-нибудь сделает онлайн версию OpenSCAD или ZenCad, чтобы прямо в браузере код писать и результат видеть?
После калков Cassio с «натуральной» записью выражений
Был такой в институте. Классная штука. Нужно посчитать что-то по формуле вбил её и все готово ). И править можно и скобки как хочешь расставлять.
Сейчас вроде есть программа которая решает любые уравнения из школьных учебников
по типу упрости выражение и прочее. Можно вводить уравнение как в учебнике.
Вроде wolframalpha.
Так еще тоньше.
Похоже, я нашел, что искал: Keystone 1057. Он сидит в вырезе платы и выступает сверху только на 2 мм (ну и снизу на 1.6 мм). Если его поместить вплотную под ЖКИ, можно сделать корпус толщиной 8.5 мм вместо теперешних 12.5 мм (при той же толщине верхней и нижней панелей корпуса - 0.8 мм). Уже лучше.
Ну я же говорю, разница в том, что его можно поставить вплотную к ЖКИ. Он выступает с обратной стороны на 1.6 мм, но ЖКИ все равно приходится приподнимать над платой, т.к. есть еще толщина кнопок и клавиатуры. Так что выигрыш в толщине получается ~4 мм. С вашим вариантом только 2 мм. На Маузере он, кстати, дешевле, чем по ссылке выше, $2.
Можно, конечно, поставить скобочку для батарейки 2016, толщина будет та же (она высотой 2 мм). Но она только 90 мАч, так что либо ставить две, либо смириться.
Хотя у него есть свои ограничения: например, в отличие от FreeCAD, в нём сложно делать фаски и скругления граней
minkowski(){
cube([10,10,10]);
sphere(r=1);
}
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 ...
P.S. Для использования ассемблерного ядра Форт (RPN) в связке с Си кодом для STM32L476 можно испытать в представенном автором проекте Mecrisp-Cube
Не знаю, можно ли сделать что-то сильно лучше в домашних условиях, не заказывая кастомную мембранную клавиатуру.
Сделать на свичах для механических клавиатур, конечно же!
Сделать на свичах для механических клавиатур, конечно же!
А может быть это не такая уж и безумная идея. Похоже, самые маленькие существующие кнопки — Cherry ML, размером 12 x 11.4 мм. Если их можно расположить вплотную друг к другу, размер клавиатуры будет не сильно больше того, что сейчас (хотя верхнее поле функциональных клавиш, конечно, будет сильно посвободнее). Надо подумать в этом направлении.
А то я однажды делал компактный DC-DC преобразователь для одной поделки. Поставил на фильтры керамику 22мкФ, думал прокатит керамика же. А нет, шумы валили на выходе будь здоров, пока не припаял параллельно дополнительные по 100нФ.
Хотя с конденсаторами по питанию буквально вчера, «когда верстался номер», вылезла одна проблема. После пары месяцев работы батарейка, видимо, уже не такая свежая, и периодически калькулятор стал сбрасываться в момент включения. Я подозреваю, происходит вот что: при включении преобразователя на 5В происходит быстрая зарядка C2, и свежая батарейка еще вытягивала, а с подсевшей напряжение кратковременно проседает ниже минимального для STM32, и он перезагружается. Так что параллельно C1 пришлось поставить электролит 50 мкФ (т.е. в несколько раз больше, чем C2). Вроде бы это решило проблему.
стоит добавить аппаратную защиту от дребезга на кнопки;
У меня уже стоит программная, пока не жалуюсь. Просто задержка в 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 алгоритм придется значительно модифицировать, я пока над этим не думал.
Хотя для себя я много лет назад еще когда в школе учился написал калькулятор в который можно просто выражение писать с клавиатуры, и он его вычисляет. Главное удобство — можно формулу редактировать, и результат меняется при каждом изменении выражения. И есть лог вычислений. Аппаратный калькулятор хорош когда ты не за компом, чего у меня практически не бывает. А вот на компе программа калькулятор должна быть именно как программа на компе а не симулировать аппаратный калькулятор 80х.
Первоначальная наивная задумка была сделать корпус, фрезерованный из алюминия, так, чтоб на века. Но фрезерного станка у меня нет, а после изучения расценок на штучные детали на сайтах типа 3DHubs и Xometry планы пришлось подкорректировать и смотреть в сторону 3D-печати из пластика.Корпус из алюминия не очень толстый в домашних условиях можно сделать электрохимическим методом. Электролит может быть тривиальным — поваренная соль (NaCl) водный раствор, источник тока — батарейка или понижающий трансформатор с выпрямителем. Процесс длительный, и лучше его вести на воздухе. Потом надфилем придется поработать. Так в журнале Наука и жизнь советовали дверные номерки делать: клеить клеем БФ-2 на пластинку маску из толстой бумаги… Аналогичные советы были в журнале Юный техник. Там еще был рецепт электрохимической «покраски», но с более сложным электролитом: медный купорос и обычный сахар.
К сожалению, стикеры на кнопках не очень прочно прилипают и неосторожным движением их можно отодрать.Надписи ИМХО лучше у гравера заказать — обычно они есть в крупных магазинах и делают поздравления на посуде. Это не очень дорого и быстро.
BTW про очень маленький и тоненький калькулятор.
Хорошо бы программный калькулятор сделать, чтобы точность можно бало задавать real4, real8, real10. Чисто для программистов х86.
А ещё я смог декомпилировать микрокод К145ИК* для МК61, теперь можно сделать быстрый эмулятор этого МК на слабых процессорах.
А напишите статью об этом. Вы в своей работе опирались на проект Феликса Лазарева?
С начало прочитал несколько статей на хабре, потом стал изучат JS вариант для браузера, пытался сделать порт эмулятора на ассемблере, не получилось, ошибку так и не нашёл. Потом порт на С++, заработало почти сразу. Оптимизация, подсмотрел ключевые особенности тут. https://pmk.arbinada.com/ru/node/1305 Выяснил что при работе макроцикла процессоры работают над разными блоками кольца. Тут я понял что смогу написать декомпилятор. Получилось, но код получился громоздкий, всё равно не очень понятно что он делает, но он работает. Так что работа идёт.
Да с потреблением ЖК проблемы нет, особенно если его выключать полностью, когда калькулятор не используется. Я подозреваю, что я что-то делаю не так при переводе STM32 в режим STOP, т.к. потребление тока у меня раза в 2-3 больше, чем в даташите обещают. Ну либо кде-то еще в схеме утекает пара десятков мкА. Надо разбираться.
Так что с такой экономичностью можно взять даже одну батарейку 2016 и сделать совсем тонкий корпус. Продолжение следует…
Так и тянет сделать свой собственный калькулятор с FORTH на ESP32.
Недавно купил себе 14-сегментные индикаторы на HT16K33 — выглядят очень аутентично, Eink не сравнить.
Несколько лет назад был соблазн поступить так же. А потом наткнулся на WP34s и отпустило.
Долго охотился на классику HP 42, но их даже бу теперь не найти… Или по заоблочным ценам.
Для компа и телефона использую проект thomasokken.com/free42 именно он, кстати, бегает на MicroSwiss
OpenRPNCalc: делаем бескомпромиссный калькулятор