Как устроен и работает калькулятор: sfrolov — LiveJournal
Я обратил внимание, что довольно часто спрашивают, как работает обычный калькулятор. Думал, что в интернете должно быть много статей по этому поводу, но что-то мне ничего дельного не попалось. Википедия, как обычно, слишком мудрит, и я подумал, что будет неплохо, если вкратце опишу принцип его работы.
Существует огромное количество всевозможных моделей калькуляторов. Есть простые, есть сложные. С питанием от солнечных батарей или от сети. Есть обычные, программируемые, бухгалтерские, специализированные модели. Порой, и не найдешь той грани, которая отделяет калькулятор от компьютера.
Я буду описывать работу самой простой модели калькулятора.
Это калькулятор CASIO HS-8LU. Они примерно все работают одинаково. По большому счету, в простых моделях ничего не меняется уже лет тридцать.
Калькулятор состоит из корпуса, клавиатуры с резиновыми кнопками и платы.
В данной модели плата сделана в виде пленки с нанесенными на нее проводниками. Питание — от солнечной батареи. Над солнечной батареей расположен жидкокристаллический индикатор.
На задней крышке корпуса расположены токопроводящие контакты. При нажатии на кнопку она прижимает пленку к задней крышке и происходит электрический контакт. Часто токопроводящий контакт наносят на обратную сторону кнопки. В том случае сама кнопка прижимается к плате для создания контакта.
С обратной стороны под солнечной батареей расположен чип микропроцессора. Он управляет работой калькулятора.
Как работает индикатор на жидких кристаллах.
Жидкие кристаллы — это специальные молекулы, которые при приложении между ними напряжения поворачиваются и меняют поляризацию света.
Это картиночка для одного пиксела цветного ЖКИ, но в монохромных там то же самое, только нет светофильтра.
Спереди и сзади жидких кристаллов ставят так называемый поляризационный фильтр. Он обычный свет преобразует в поляризованный (например, образно говоря, в «вертикальный»). Если напряжение не приложено, то «вертикально» поляризованный свет проходит через жидкие кристаллы, поворачивает плоскость поляризации, отражается от задней поверхности и идет обратно. Мы видим прозрачный экран. На стекле индикатора спереди нарисованы прозрачные токопроводящие линии в форме сегментов цифр, точек или других символов. Сзади также есть токопроводящая область. Когда возникает напряжение между токопроводящими проводниками (спереди и сзади), то между ними жидкие кристаллы поворачиваются и меняют свою плоскость поляризации так, что через задний поляризационный фильтр уже не проходят. Оттого на том сегменте, где есть напряжение между передней и задней поверхностью стекла, возникает невидимая область — сегмент «светится».
Если приглядеться под определенным углом, то в отраженном свете будут видны эти прозрачные проводники.
На самом деле ориентация поляризации не «вертикальная» и «горизонтальная», а «наклоненная» под углом в 45 градусов «вправо» или «влево». Если взять светофильтр и перевернуть вверх ногами, то поляризация будет не «вправо», а «влево». И изначально он будет не пропускать свет, а задерживать.
Для экономии количества один проводник отображает и подведен не к одному сегменту, а к нескольким сразу. Чтобы они не зажигались сразу все, с задней стороны стекла рисуют не один общий проводник, а тоже несколько. Получается, что спереди контакты подведены к нескольким сегментами по вертикали, а с задней стороны по горизонтали. На схеме ниже показана схема индикатора.
Там есть еще такая хитрость, что напряжение нужно прикладывать не постоянное, а переменное (прямоугольные импульсы частотой 20-40 Гц). Иначе деградирует индикатор.
Для простых индикаторов с одним общим проводником импульсы совпадают по фазе, когда не надо отображать сегмент (спереди и сзади разность потенциалов будет одинаковой) и не совпадают по фазе, когда надо отобразить (тогда спереди будет «0», и сзади «1», а через некоторое время полярность поменяется, и будет спереди «1», а сзади — «0», и так далее). В тех индикаторах на общий проводник подается меандр (просто частота), а на отображаемые сегменты — совпадение логического уровня с общим (не горит) и не совпадение (горит).
В индикаторе нашего калькулятора используется три общих проводника. Там все сложнее. Простыми логическими уровнями не обойдешься. Чтобы обеспечить переменное напряжение и отсутствие постоянной составляющей используются уровни напряжений в 1/3 и 2/3 от максимума. В итоге форма импульсов будет ступенчатой. На схеме ниже показаны эпюры таких импульсов.
А теперь самое главное и самое интересное — микросхема процессора.
Это фотографии кристаллов отечественных калькуляторов, сделанных на микросхемах К145ИП7 (слева) и К145ИП11 (справа). Фотографии взяты с интересного сайта «Радиокартинки».
Микропроцессор калькулятора принципом работы очень мало отличается от обычного персонального компьютера с процессором, памятью, клавиатурой и видеокартой.
Если быстро посмотреть на фото кристаллов, то можно примерно поделить на три области: область постоянного запоминающего устройства (ПЗУ) с программной («прошивкой»), область оперативного запоминающего устройства (ОЗУ), где хранятся регистры памяти калькулятора, и остальные цепи процессора, которые включают арифметическо-логическое устройство (АЛУ), драйвер индикатора, драйвер клавиатуры, преобразователи напряжения и другие вспомогательные цепи.
Это структурная схема процессора калькулятора МК-62.
В верхней части мы видим, что есть блоки:
— генератор опорной частоты (ГОЧ), который задает частоту, с которой регенерируется изображение на индикаторе;
— схема удвоения напряжения, умножающая напряжение солнечное батареи на два, чтобы хватило для индикатора;
— генератор, формирователь импульсов общих электродов и регистр-формирователь сегментного кода постоянно выводят заданные для вывода сегменты на индикатор. Там есть специальный регистр памяти, куда микропроцессор записывает информацию, какие надо отображать сегменты, а какие не надо. После этого процессор не отвлекается на отображение, и эти блоки выводят все сами;
— ОЗУ с регистрами данных и ПЗУ с прошивкой;
— и узел с процессором, состоящим из АЛУ с обвязкой. Счетчик адреса АЛУ выбирает очередное слово программы из ПЗУ. Разрядность этого слова может быть разной в разных калькуляторах. Отдельные биты в слове определяют работу АЛУ: например, сложить два 4-х битных числа из регистров, или считать из ОЗУ цифру, или сравнить два числа, или сдвинуть на один разряд и т. д.
Как работает микропроцессор.
Сначала срабатывает сброс по питанию. При подаче электричества специальный узел заставляет программу работать с начального адреса. Команда за командой извлекается из ПЗУ и исполняется. Вначале происходит обнуление регистров, формирование числа «0.», сброс всяких признаков переполнения, операций и прочее. После сброса программа ожидает события от клавиатуры (нажатие кнопки).
Когда нажата кнопка, то процессор через некоторое время еще раз опрашивает клавиатуру, чтобы подавить дребезг кнопок (когда из-за плохого контакта может произойти одновременно несколько нажатий).
А дальше, в зависимости от предыдущих состояний, он по программе определяет, что с этим нажатием делать. Например, если идет ввод числа и введена цифра, то продолжить ввод. Если нажата кнопка операции, то выполнить операцию.
Сам алгоритм и логика выполнения операций целиком лежит на ПЗУ и программистах, которые писали прошивки.
Что интересно, все простые операции выполняются так, как их учат в школе.
— сложение и вычитание. В столбик. Выравниваются порядки двух введенных чисел и происходит сложение или вычитание.
— умножение и деление. Так же в столбик. Разряд за разрядом. Сначала последовательным сложением умножают на младшую цифру множителя, затем вторую и так далее до старшей. Деление — последовательным вычитанием.
После выполнения операции отдельная подпрограмма нормализует результат: отбрасывает незначащие нули и сдвигает его вправо.
Если в калькуляторе есть тригонометрические функции, то они также выполняются, как их запрограммировал программист. Есть разные способы вычисления элементарных функций: разложение в ряд Тейлора или по методу «Cordic».
Вот примерно так работает калькулятор.
Я вам дам ссылку на несколько сайтов. В одном вы можете еще прочитать про то, как они работают: http://datamath.org/Story/Intel.htm#The.
А еще две ссылки — очень познавательный интерактивный сайт, где обратным реверсом считали прошивку и сделали симулятор. Там можно «прогнать» работу процессора реального калькулятора.
http://files.righto.com/calculator/TI_calculator_simulator.html и
http://files.righto.com/calculator/sinclair_scientific_simulator.html.
Вот, наверно, и все. Надеюсь, я вас не сильно утомил. 🙂
Кто не устал, добро пожаловать в мой музей советской цифровой электроники:
http://www.leningrad.su/museum/
Четырёхбитный калькулятор из картона и шариков / Habr
Внешний вид картонного четырёхбитного калькулятора из картона. Хорошо видны полусумматор вверху и три сумматора в средней и нижней части калькулятора
Давным-давно, до изобретения электроники, люди изготавливали механические компьютеры из подручных материалов. Самым известным и сложным примером такой машины является антикитерский механизм — сложнейшее устройство из не менее чем 30 шестерёнок использовалось для расчёта движения небесных тел и позволяло узнать дату 42 астрономических событий.
В наше время механические компьютеры (калькуляторы) — скорее предмет развлечения гиков и повод устроить забавное шоу. Например, как компьютер из 10 000 костяшек домино, который складывает произвольные четырёхзначные бинарные числа и выдаёт пятизначную двухбитную сумму (математическая теория этого калькулятора и архитектура). Такие перфомансы позволяют детям лучше понять, как работают битовые логические операции в программировании, как устроены логические вентили. Да и вообще сделать маленький компьютер своими руками из подручных материалов очень интересно, тем более если вы делаете это вместе с ребёнком.
Логическая операция AND в компьютере из 10 000 костяшек домино
Для изготовления механического калькулятора отлично подходит конструктор Lego. На YouTube можно найти немало примеров таких калькуляторов.
Калькулятор из компьютера Lego
Вдохновлённый примером компьютера из домино и механических калькуляторов из конструктора Lego, программист C++ под ником lapinozz вместе со своими младшими сестричками решил соорудить в домашних условиях нечто подобное для школьного научного проекта одной из сестёр. Он задумал и реализовал полностью функциональный четырёхбитный калькулятор LOGIC (Logic cardbOard Gates Inpredictable Calculator). Для изготовления этой вычислительной машины не требуется ничего кроме картона и клея, а работает она не на электричестве, а на шариках и земной гравитации. Калькулятор умеет складывать числа от 0 до 15 с максимальной суммой 30.
В отличие от костяшек доминов и кубиков Lego, в производстве этого калькулятора не использовались никакие фабричные компоненты. Все элементы калькулятора склеены из картона с нуля, что хорошо понятно по фотографиям устройства. В этом смысле данное устройство можно считать уникальным.
Наглядное представление, как складывать бинарные числа. Обучение школьника навыкам перевода из десятичной в двоичную систему счисления и обратно. Изучение битовых логических операций и основных логических схем.
Как можно рассмотреть на фотографии калькулятора, в верхней части располагается зона для ввода данных. После прохождения всех логических операций шарики показывают результат операции внизу.
Ввод данных осуществляется шариками. Шарик есть — 1, шарика нет — 0. Бит справа — это наименьший бит числа. Перед началом работы некоторые части калькулятора следует привести в исходное положение. После указания исходных значений отодвигается полоска картона, которая удерживает шарики в исходном положении — и начинается процесс сложения.
Например, так выглядит исходное положение шариков для операции 7+5 (0111 + 0101).
Логические операции картонного калькулятора осуществляется схожим образом, как и в вышеупомянутом компьютере из домино.
Схематически логические вентили для всех логических операций показаны на схеме.
То есть логический вентиль «И» (AND) означает, что при поступлении 0 шариков на входе получается 0 на выходе. При поступлении 1 шарика на входе получается 0 на выходе. При поступлении 2 шариков на входе получается 1 на выходе.
1 на входе, 0 на выходе
2 на входе, 1 на выходе
Логический вентиль XOR сделать немного сложнее. В этом случае если поступает один шарик, он должен пройти. А если поступает два шарика, то они должны аннулировать друг друга, то есть на выходе будет 0. Автор показывает, как это делать, через вертикально висящий кусочек картона с узким горлышком. Если два шарика приходят одновременно, то они блокируют друг друга — и таким образом эффективно реализуют логическую операцию XOR.
Логический вентиль XOR
Чтобы оптимизировать систему и не городить массу логических вентилей AND и XOR, автор реализовал полусумматор — комбинационную логическую схему, имеющую два входа и два выхода. Полусумматор позволяет вычислять сумму A + B, при этом результатом будут два бита S и C, где S — это бит суммы по модулю 2, а C — бит переноса. В нашей картонной конструкции это означает, что если на входе у нас 1 шарик, то он попадает на выход C, а если на входе 2 шарика, то 1 шарик попадает на выход S, а второй никуда не попадает.
Программист придумал довольно простую и эффективную схему для полусумматора. В ней 1 шарик на входе спокойно продолжает свой путь, переворачивая барьер, и проходя в отверстие C. Но если поступают два шарика, то второй шарик уже не может пройти через барьер, перевёрнутый первым шариком — и проваливается в отверстие, прибивая новый путь S. Это и есть полусумматор.
Один шарик на входе полусумматора
Наконец, настоящим шедевром является сумматор. Обычно его делают из двух полусумматоров и логического вентиля «ИЛИ», но автор реализовал другую конструкцию, которая фактически является небольшой модификацией полусумматора.
Один шарик на входе — один шарик по пути 1
Два шарика на входе — один шарик по пути 2
Три шарика на входе — один шарик по пути 1, а другой по пути 2
Весь калькулятор целиком состоит из одного полусумматора и трёх сумматоров.
Калькулятор выдаёт корректный результат вычислений в случае, если шарики падают с правильной скоростью, не слишком быстро и не слишком медленно, и не отскакивают друг от друга. Сама логика безупречна, но на практике калькулятор иногда глючит.
Калькулятор своими руками
Привет всем любителям самоделок. В данной статье я расскажу, как сделать калькулятор своими руками, в сборке которой поможет кит-набор, ссылка на него будет в конце статьи. Данный кит-набор будет полезен для начинающих радиолюбителей и тех, кто хочет попробовать себя в работе с паяльником, ну и конечно же такой калькулятор можно будет использовать по прямому назначению. Для сборки такого радиоконструктора не понадобится много инструментов, поэтому собрать его сможет каждый.
Для того, чтобы сделать калькулятор своими руками, понадобится:
* Кит-набор
* Паяльник, флюс, припой
* Бокорезы
* Крестовая отвертка
Шаг первый.
В комплекте кит-набора присутствует печатная плата с металлизированными отверстиями, ее качество изготовления на высоком уровне.
В роли клавиш здесь выступают кнопки с пластиковой накладкой, их 17 штук.
Инструкция к радиоконструктору не поставляется, так как на плате не так много деталей, тем более они имеют одинаковый номинал, так что смысла в этом нет. Выводится выражение будет на семисегментные индикаторы с красной подсветкой, в темноте они также хорошо видны за счет свечения.
Разобравшись с комплектом, переходим к самой сборке.
Шаг второй.
На плату устанавливаем радиодетали. Сначала вставляем резисторы, их в комплекте шесть штук одинакового номинала, так что определять сопротивление каждого не нужно. С обратной стороны платы загинаем выводы, для того, чтобы они не выпали при пайке. После резисторов на плату устанавливаем неполярные керамические конденсаторы, их выводы также загинаем. Далее на плату ставим все 17 кнопок, а затем и семисегментные индикаторы, на них есть специальная метка в виде точке, также как и на плате, далее загибаем их ножки.
Шаг третий.
Теперь при помощи паяльника и припоя припаиваем выводы радиодеталей к контактам платы, для лучшей пайки наносим флюс. Для того, чтобы выводы не окислялись и не мешали, преждевременно удаляем их часть бокорезами.
После пайки устанавливаем крепление батарейки и микросхему, ее нужно расположить так, чтобы ключ в виде выемки на корпусе совпадал по направлению с ключом, изображенным на плате.
Далее припаиваем микросхему и отсек батареи при помощи паяльника и припоя, паять микросхему желательно быстро, так как ее можно перегреть, после чего она может выйти из строя.
Лишнюю часть выводов также аккуратно удаляем.
Проверяем калькулятор, установив батарейку на место.
На семисегментном индикаторе должны отображать цифры при нажатии на все кнопки. После проверки платы калькулятора можно переходить к сборке его в корпус.
Шаг четвертый.
Для того, чтобы защитить плату и придать калькулятору нужный вид в комплекте имеется несколько частей корпуса из оргстекла. С оргстекянных пластин удаляем защитную пленку и собираем корпусе из них, друг друга скрепляя при помощи винтов и крестовой отвертки.
Чтобы было понятно на какую клавишу нажать, нужно установить пластиковые части на кнопки, в которые нужно установить подписанные бумажки, для правильного расположения можно воспользоваться картинкой с сайта продавца. В конце проверяем калькулятор в работе.
Кнопку включения данный калькулятор не имеет, через некоторое время его бездействия они сам выключается, а для включения достаточно нажать на кнопку C. Такой радиоконструктор поможет освоиться в радиоэлектронике и попробовать себя в этой сфере.
На этом у меня все, всем спасибо за внимание и творческих успехов.
Купить Kit-набор на Aliexpress
Доставка новых самоделок на почтуПолучайте на почту подборку новых самоделок. Никакого спама, только полезные идеи!
*Заполняя форму вы соглашаетесь на обработку персональных данных
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.Самодельный калькулятор. / Блог им. citizen / Сообщество EasyElectronics.ru
Был у меня калькулятор МК51. Вот такой вот: ru.wikipedia.org/wiki/Электроника_МК-51Калькулятор активно использовался некоторое время, а потом начались проблемы с индикацией — начала отходить токопроводящая резинка индикатора. Калькулятор был убран подальше, а на замену ему был куплен citizen spr-350. Он уже на форуме промелькнул: forum.easyelectronics.ru/viewtopic.php?p=83778#p83778 (что-то ссылка не вставляется).
Однажды разобрал я старый МФУ, и обнаружил там очень тонкий LCD индикатор (COG) с 6 выводами на шлейфе, который сразу захотелось куда-то применить. Подписей на индикаторе не было, так что пришлось заняться реверс-инжинирингом, благо что МФУ продолжал выдавать сообщение об ошибке на LCD, даже если от него отключить всю периферию. (Вообще хорошо программа в МФУ работала — отключаешь печатающую часть, продолжает сканировать, отключаешь всю периферию — продолжает флешки читать, картридером, установленным на основной плате. Обычно похожие устройства, обнаружив первую же ошибку, намертво блокируются). Реверс-инжиниринг проводился с помощью осциллографа DISCO, с помощью встроенного логического анализатора. Выяснилось, что индикатор работает на протоколе, похожем на SPI — имеются 3 сигнальных линии — данных, тактовая, RS. Поскольку объем данных был достаточно большим, то я просто записал данные за несколько секунд анализатором, а потом написал программу, которая расшифровывала их (просто определялись байты, передаваемые на LCD). Результат выводился в текстовый файл, заодно выводились символы ASCII, соответствующие каждому принятому байту. Несколько пробных запусков программы давали на выходе хаотический набор символов, после чего я решил, что передача может идти начиная с младшего бита. (В spi первым обычно идет старший). Переписываю программу — заработало, в файле результата читается сообщение МФУ об ошибке. Позже я определил, как производится инициализация индикатора. После проведенного анализа индикатор был отложен, за неимением устройства, в которое его было бы можно поставить.
Как-то раз, разгребая всякие железки в шкафу, я переложил старый калькулятор в коробку с индикатором и остатками МФУ. Тут-то я и решил, что используя этот индикатор, можно дать сломанному калькулятору новую жизнь. (Места в калькуляторе хватало для индикатора и контроллера). Для проверки возможности использовать индикатор подключил его отладочной плате на at90usb162:
Суровый переключатель переключает индикатор от мфу к моей плате. Это позволяет инициализировать индикатор при помощи мфу, а потом управлять им с контроллера.
Программа была написана, индикатор заработал. Мне, правда, до сих пор не удалось понять, что за контроллер LCD там используется. Алгоритм работы похож на алгоритм st7036, часть команд совпадает, но как я уже сказал, данные передаются начиная с LSB, линия RS инвертирована. Если кто знает, что это за контроллер такой может быть, то напишите, пожалуйста.
Индикатор заработал, так что можно было начинать делать калькулятор. Делать решено было на STM8, поскольку хотелось использовать контроллер с 64 кб памяти (я не знал, сколько займут вычисления с плавающей запятой и вычисление выражений), а atmega644 достать проблематично, и стоит она в разы дороже. При этом, отладку и программирование можно вести всего по 3 проводам. Купил отладочную плату STM8L-discovery, поэкспериментировать с STM8, и для использования ее в качестве отладчика. В качестве управляющего контроллера взял STM8S207S8. Изготовил печатную плату. Получилось не очень хорошо, дорожки 0.4 мм для резиновой клавиатуры при переносе тонера кое-где отошли, пришлось маркером рисовать, много работать иголкой. Кроме того, это моя первая двухслойная плата.
Получилась такая плата.
После изготовления платы, и установки на нее контроллера и разъема индикатора опять обнаружились проблемы. Я ухитрился подключить индикатор к выводам контроллера с открытым стоком и при этом еще и неправильно развел разъем. Именно по этому сверху платы такая куча проводов. В этот раз контроллер еще как-то особенно плохо припаялся, постоянно возникали проблемы с контактом. В общем, сплошные грабли. Под конец все заработало как нужно, была написана программа(как ни странно, не такая уж она и сложная получилась, правда, часть алгоритмов по вычислению выражения я до этого продумал).
Результатом стала такая конструкция:
Назвать я решил калькулятор — МК200.
Работает калькулятор на частоте 125Кгц, но во время вычисления частота увеличивается до 16Мгц. В калькуляторе реализован ввод полного выражения, которое вычисляется при нажатии кнопки ‘=’. Калькулятор способен выполнять основные арифметические действия, тригонометрические действия, возведение чисел в степень, в квадрат, извлечение квадратного корня, вычислять натуральный логарифм и экспоненту.
Есть 4 регистра памяти, в которых можно хранить различные константы, и затем использовать их при вводе выражения.
Числа в калькуляторе хранятся в 32-битном виде, так что операции возможны с числами не более, чем 1*10^38.(интересно, собираются ли в IAR делать поддержку 64-разрядных чисел для stm8?)
Так как индикатор питается от 5 вольт, то в схему входит простейший конденсаторный умножитель напряжения.
Поскольку схема потребляет ток 2мА, то через 3 мин после последнего нажатия кнопки калькулятор выключается.
Для тех кто не знает — у всех батареек есть определенный номинальный ток разряда. Для мелких батареек он не превышает 1ма. Если потребление тока будет выше, то батарейка разрядится намного быстрее, чем это вышло бы по расчетам.
Сначала я описал конструкцию здесь www.leningrad.su/calc/cforum.php?topicid=981, но, думаю, здесь она тоже будет интересна.
Исходники — prj_1.zip