Как построить калькулятор?

15

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

Моя цель - создать простой калькулятор, а не научный или графический калькулятор, хотя я тоже не против получить информацию о том, как это сделать, просто ради удовольствия.

Есть хороший учебник для этого? Как мне начать?

Philoxopher
источник
2
Здесь есть набор для создания базового 4-х функционального калькулятора: spikenzielabs.com/Catalog/…
jwygralak67

Ответы:

26

Вот пример калькулятора, который вы можете построить без особых знаний в области электроники. Это полнофункциональный, хотя дополнение не включено.

Да, я шучу, не принимайте это всерьез

W5VO
источник
лол. Это что? Я думаю, что видел это раньше, хотя я не уверен. Очень любопытно посмотреть, смогу ли я достать одну из них. У вас есть имя или ссылка на один из них?
Философ
это вдохновило меня на вопрос: electronics.stackexchange.com/questions/11263
markrages
@KerxPhilo - Хахаха-ха-ха-ха-ха-ха-ха ... о, как меняются времена.
Коннор Вольф
@markrages, слава твоему вопросу, очень интересно :)
Philoxopher
18

Это не тривиальный проект. Есть много образовательных подпроектов, о которых нужно беспокоиться. Одним из них является кнопки и разоблачение. Другой - это запись символов на дисплей. Есть решение о том, как вы хотите реализовать это: вы заинтересованы в том, чтобы сделать это из большой коробки nand gates, или хотите взять микроконтроллер или другой процессор и написать программное обеспечение? Вы заинтересованы в использовании FPGA и выполнении всей математики в RTL? Вы должны разбить проблему на эти компоненты и поработать / изучить один компонент за раз, а затем объединить их вместе. Например, если основной математический движок на самом деле является программным обеспечением на микроконтроллере, одна задача может включать написание некоторых функций C на вашем настольном компьютере, чтобы вы могли вводить нажатия клавиш и выводить символы, которые в конечном итоге будут отображаться на дисплее. Нетривиальная задача, если вы никогда не программировали раньше.

В качестве образовательного проекта я хотел бы получить несколько стартовых площадок msp430 по 5 баксов каждая или обнаружение линии ценностей STM32 (основанный на stm32 / arm, а не другой) по 12 баксов каждая. Ряд людей будет направлять вас к Arduino, и это также хорошая платформа, у нее есть свои плюсы и минусы, я бы не стал использовать ее в качестве моего первого микроконтроллера. Купите простую двухстрочную жидкокристаллическую панель, земляной ЖК-дисплей когда-то был хорошим местом, возможно, просто зайдите в sparkfun Возьмите одну плату микроконтроллера, подключите ее к ЖК-панели и научитесь размещать символы на дисплее. Затем я узнал бы, как использовать UART на микроконтроллере, который часто начинается с выстрела байтов, а затем приема и эхо. Используйте приемник UART, чтобы получать вещи для отображения на дисплее, а затем использовать тупой терминал (замазка, гипертермия, minicom) с компьютера введите материал и убедитесь, что он работает. Затем возьмите другой микроконтроллер, используйте свой опыт Uart in and out и поработайте над ядром математики, сначала с вашего компьютера введите его 0 - 9, +, -, =, затем добавьте умножение и деление, а затем с плавающей запятой, если вы достаточно смелы. для этого (или есть библиотека, которая подходит). Вывод из математического модуля будет отображать вводимые числа и выводить результаты при отправке = и т. Д. Затем выясните, что делать с кнопками, найдите массив кнопок, каким-то образом вставьте их в третий микроконтроллер, откажитесь и сделайте так, чтобы они превратились в uart из 0 - 9, +, -, = к математическому микроконтроллеру. ПОТОМ уменьшите все это в один микроконтроллер без UART. используйте свой опыт Uart in и out и работайте над основным математическим движком, сначала с вашего компьютера введите 0 - 9, +, -, =, затем добавьте умножение и деление, а затем с плавающей запятой, если вы достаточно смелы для этого (или имеете библиотека, которая подходит). Вывод из математического модуля будет отображать вводимые числа и выводить результаты при отправке = и т. Д. Затем выясните, что делать с кнопками, найдите массив кнопок, каким-то образом вставьте их в третий микроконтроллер, откажитесь и сделайте так, чтобы они превратились в uart из 0 - 9, +, -, = к математическому микроконтроллеру. ПОТОМ уменьшите все это в один микроконтроллер без UART. используйте свой опыт Uart in и out и работайте над основным математическим движком, сначала с вашего компьютера введите 0 - 9, +, -, =, затем добавьте умножение и деление, а затем с плавающей запятой, если вы достаточно смелы для этого (или имеете библиотека, которая подходит). Вывод из математического модуля будет отображать вводимые числа и выводить результаты при отправке = и т. Д. Затем выясните, что делать с кнопками, найдите массив кнопок, каким-то образом вставьте их в третий микроконтроллер, откажитесь и сделайте так, чтобы они превратились в uart из 0 - 9, +, -, = к математическому микроконтроллеру. ПОТОМ уменьшите все это в один микроконтроллер без UART. Вывод из математического модуля будет отображать вводимые числа и выводить результаты при отправке = и т. Д. Затем выясните, что делать с кнопками, найдите массив кнопок, каким-то образом вставьте их в третий микроконтроллер, откажитесь и сделайте так, чтобы они превратились в uart из 0 - 9, +, -, = к математическому микроконтроллеру. ПОТОМ уменьшите все это в один микроконтроллер без UART. Вывод из математического модуля будет отображать вводимые числа и выводить результаты при отправке = и т. Д. Затем выясните, что делать с кнопками, найдите массив кнопок, каким-то образом вставьте их в третий микроконтроллер, откажитесь и сделайте так, чтобы они превратились в uart из 0 - 9, +, -, = к математическому микроконтроллеру. ПОТОМ уменьшите все это в один микроконтроллер без UART.

Другой альтернативой является получение одной из плат rs-232 fpga от knjn.com или решетки бревии (это достаточно большой?) Или ряда других, а затем работа над каждым из функциональных блоков с использованием языка RTL. его части будут намного проще, чем эквивалентные программные решения, некоторые части будут немного сложнее, чем программные решения.

Если вы можете предоставить больше информации о том, что вы думаете, коробку Nand Gates или решение на основе микроконтроллера или вы думали о чем-то еще?

Старожил
источник
7

Самым простым электронным калькулятором, который вы могли бы создать, был бы четырехфункциональный двоичный калькулятор. Вы можете создать его, используя переключатели для ввода двоичных чисел, а базовые логические элементы семейства 7400 могут обрабатывать сумматоры, которые будут обрабатывать сложение. Вы можете использовать либо отдельные светодиоды для представления каждого двоичного числа на выходе, либо несколько семисегментных дисплеев для отображения числа в шестнадцатеричном формате. Создание бинарного калькулятора позволит вам избежать создания десятичного-двоичного преобразователя и поможет вам ознакомиться с работой цифровой электроники. Если вы планируете заняться цифровой электроникой в ​​качестве хобби, вы можете подумать о приобретении Logisim , бесплатной программы, которая позволяет имитировать ваши схемы перед их сборкой.

inventorM
источник
2
Вау. В эпоху System-on-Chip, вы хотите, чтобы он подключил двадцать ворот на цифру, чтобы просто добавить ? Даже первый портативный калькулятор этого не делал. Одночиповые калькуляторы существуют уже тридцать лет.
Рон
Ну, вы можете использовать 74181 для 4-битного среза. Это было бы проще, если бы ничего больше.
W5VO
1
Да, это можно сделать с одной или двумя микросхемами (используя микропроцессор, как в этом примере ), если он хочет создать калькулятор в программном обеспечении. Возможно, создание всего калькулятора с использованием дискретных компонентов займет слишком много времени, но если он хочет перейти на аппаратное обеспечение, бинарный калькулятор может быть хорошей отправной точкой.
изобретательM
На самом деле это хорошая идея, чтобы получить правильное понимание двоичной битовой математики. Я сделал проект с половинным сумматором с моей 12-летней дочерью, в то время как у нас не хватало места на макете - она ​​продолжила «строить» его практически в Minecraft. Она «поняла» концепцию ворот и добавления битов, и в этом весь смысл.
Рон Дж.
Что бы это ни стоило, калькуляторы (обычно) не работают внутренне в двоичном формате и конвертируются, они работают непосредственно в BCD. Четырехбитного среза достаточно для ALU (фактически это была первоначальная работа Intel 4004).
Спехро Пефхани
6

Вот как я это сделал.

Выберите компоненты:

Input Device(В моем случае клавиатура 4x4. 10 клавиш для цифр, 4 для операторов, одна для «=» и одна для «сброса / обновления»)

Processor(8-битный AVR)

Output device(16x2 LCD)

Power supply(Регулятор LM7805 с 9-вольтовой батареей)

BreadBoard(сделать печатную плату после того, как она начнет работать)

Я выбрал программирование на ассемблере (для изучения), вопрос личного выбора. Я использовал AVR Studio 4 в качестве IDE и домашний программист на основе lpt на базе ISP для прошивки hex в AVR.

Затем я написал драйверы для ЖК-дисплея и клавиатуры. Когда я смог получить ввод и произвести вывод, начал разбирать десятичные цифры и операторы, затем я проанализировал выражения и прочитал о методах Infix, Postfix и Prefix . Я выполнил свою работу по сборке, поэтому у меня не было «поддержки типов данных FLOAT», и в итоге я реализовал свой собственный тип данных (тип данных на основе BCD для поддержания точности до 15 цифр, хотя это было огромной тратой на ОЗУ!).

Все это сделано и вуаля .. мой калькулятор был готов (я назвал его BUB!).

Мой работал на частоте 1 МГц и смог побить casio_991MS (с точки зрения десятичной точности, умножения и деления).

Я надеюсь, что это помогает другим.

vvy
источник
5

Вы можете использовать комплект разработчика со всем, что уже есть на плате, чтобы вы могли сосредоточиться на программном обеспечении. Например, http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en024858&part=DM240001 этот комплект имеет PIC, LCD и несколько кнопок. Существует множество заголовков для добавления дополнительных кнопок. Единственным недостатком является то, что ЖК-дисплей больше, чем вы хотели бы использовать изначально, но он, безусловно, поможет вам начать работу.

Если вы будете искать вокруг, вы сможете найти меньшие (и более дешевые), с которых вы можете начать.

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

smashtastic
источник
5

На полке у меня есть «Электронные калькуляторы» Х. Эдварда Робертса, под редакцией Форреста М. Мимса III. 1974.

Это довольно образовательный о том , как люди , используемые для сборки калькуляторов в 1974 г. Многие фотографии имеют полный жизненный цикл массового производства MITS калькулятор - фотографии прототипирования (большой спагетти беспорядок проводов), дизайн печатных плат (прокладки Rubylith на чертежный стол), отдельные детали, сборочная линия, машина для пайки волной припоя и устранение неисправностей.

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

Многие вещи все те же. Люди все еще обычно делают большой беспорядок спагетти проводов во время прототипирования.

davidcary
источник
3

Для начала, вы должны подумать об основных компонентах, которые вам понадобятся. Вам, вероятно, понадобится микроконтроллер, клавиатура и ЖК-экран. После того, как вы выберете эти компоненты, это будет так же просто, как разработка прошивки.

Райан
источник
Любые подробности, которые вы могли бы предоставить, помните, что я новичок, когда дело доходит до создания электроники, и я хочу принять этот вызов как свой первый. С информацией, которую вы предоставили выше, это хорошее начало, однако я не знаю, какой микроконтроллер мне понадобится. Также как разработать прошивку? Вы пишете прошивку на C и загружаете ее в прошивку, или вам нужно писать на ASM?
Философ
также могли бы вы предоставить хороший сайт, который продает электронное оборудование по очень недорогой цене для любителей? Ценю твою поддержку!
Философ
Двумя основными любителями микроконтроллеров являются PIC и AVR. Есть компиляторы C для обоих этих устройств. Простой микроконтроллер будет работать для вашего проекта, если он имеет достаточно контактов ввода / вывода для взаимодействия с клавиатурой и ЖК-дисплеем. Хорошим веб-сайтом для любителей электроники будет SparkFun
Райан,
2
@KerxPhilo: Да, большинство людей, занимающихся встроенными системами, пишут прошивку на C. У Ladyada есть хорошие учебные пособия о том, как писать прошивку на C и загружать ее в микроконтроллер, а также учебные пособия по подключению ЖК-дисплея и отображению содержимого на нем .
Дэвидкари
3

Я считаю, что это может быть хорошим первым учебным проектом, но он нетривиален, и вам придется немало учиться по ходу дела, а также набраться терпения, так как проект включает в себя целый ряд подпроектов, которые нужно решать по путь.

Первое препятствие для проектирования, которое вам нужно решить, - на каком уровне технологий вы хотите это сделать? С микроконтроллером или без него (в значительной степени самодостаточный микропроцессор), дискретная логика (например, вентили AND, OR, NOR и триггеры) с / без арифметических единиц (ALU), программируемая логика (CPLD, FPGA), что-то еще, что у меня есть не упоминается или не рассматривается. Это должно быть в первую очередь о технологии, используемой для расчетов, элементы управления вводом / выводом являются вторичными решениями (светодиодные семисегментные дисплеи, ЖК-панель), в основном под влиянием эстетики или стоимости.

Потенциально полезной отправной точкой для изучения цифровых вычислений является очень доступная книга « Компьютеры делают математику». (ISBN: 0471732788), написанная причудливым Клайвом Максфилдом. Это написано на «мягком» - программном или логическом уровне, который вам нужно будет понять для того, чтобы действительно выполнять вычисления.

Кто-то еще упомянул в качестве примера проект uWatch (- micro-Watch ), и в Интернете есть ссылки на инженеров-электриков (или студентов EE), которые создали свой собственный калькулятор в 1970-х годах. Есть также некоторые подробности о построении калькулятора на основе FPGA (программируемое логическое устройство) .

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

mctylr
источник
0

Требования к оборудованию

  • Клавиатура для пользовательского ввода
  • ЖК-дисплей для отображения входных данных и их результатов.
    В реальном калькуляторном продукте необходим специальный ЖК-дисплей для отображения специальных символов, таких как =, -и M(для MC , MR и MS. операций) признаки. Индивидуальный дизайн ЖК-дисплея стоит до 3000 $, но тогда индивидуально спроектированные ЖК-дисплеи становятся более экономичными, чем другие универсальные. Поскольку ваш проект только для хобби, я предлагаю вам использовать ЖК-дисплей общего назначения с контроллером KS0108.
  • Очень дешевый и неиспользуемый микроконтроллер.
    Вам нужен очень простой контроллер, поскольку вы будете выполнять очень простые задачи. Вы можете использовать дешевый микроконтроллер PIC.

Шаги дизайна

  • Управляй своим ЖК-дисплеем
    Управляй своим ЖК-дисплеем. Напишите на нем несколько цифр. Напишите программный интерфейс для этого.
  • Проверьте клавиатуру.
    Выполните те же действия, что и на ЖК-дисплее. Убедитесь, что у вас есть программное управление на клавиатуре.
  • Напишите алгоритмы, которые выполняют арифметические операции.
    Если вы используете микроконтроллер, который может умножать и делить, вам не нужно выполнять эти операции самостоятельно; но вы должны платить больше за микроконтроллер, с другой стороны, вы меньше учитесь и получаете меньше опыта во время вашего проекта.

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

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

hkBattousai
источник
В зависимости от уровня амбиций, можно использовать несколько сдвиговых регистров и немного дискретной логики, а также «ROM» (вероятно, EPROM или параллельную вспышку), чтобы создать очень грубый микроконтроллер. Простой калькулятор может быть возможно с использованием 20 фишек или меньше, особенно если использовать довольно большой ROM. Типичной инструкцией будет «вывод X в сдвиговом регистре 1, Y в сдвиговом регистре 2, установка выходного строба в Z, а затем выборка следующей инструкции из адреса, сформированного путем объединения значений некоторых регистров в константу A».
суперкат
Не нужно иметь никаких схем для выполнения добавления BCD - все это может быть обработано в коде. Если у одного есть два отдельно управляемых регистра сдвига, продвигайте их по мере необходимости, чтобы выровнять операнды источника и назначения, а затем используйте четыре инструкции, чтобы перевести ЦП в одно из 20 состояний на основе значений четырех битов, взятых из каждого значения; следующие четыре инструкции могут взять следующие четыре бита из каждого сдвигового регистра при перезаписи одной из них первыми четырьмя битами вычисленного результата.
суперкат
Я бы оспаривал требование «заказной ЖК-дисплей». ЖК-дисплеи калькулятора создают впечатление, что они представляют собой товарные предметы, только с несколькими вариациями - шаг площадки, простой и научный (что обычно подразумевает 8 против 10 цифр). В рамках данного выбора выше будут десятки, если не сотни элементов, которые функционально эквивалентны, даже если они немного различаются по размерам или стилю шрифта.
Крис Страттон
@ChrisStratton: Если требуется 8-значный дисплей без оповещателей, доступны готовые детали, которые бы соответствовали этому описанию. Я не думаю, что видел какие-либо готовые дисплеи, которые были бы функционально эквивалентны таковым в обычном калькуляторе. Обратите внимание, что калькуляторы склонны использовать соединения «зебра», которые дешевле в изготовлении, чем контакты, но с которыми сложнее работать в проекте «сделай сам».
суперкат
@supercat - ЖК-дисплеи, используемые в дешевых калькуляторах, обычно используют ленту с активируемым теплом клеем, а не полоску зебры. И это в основном стандартные готовые изделия, которые можно менять между производственными процессами.
Крис Страттон
0

Самым простым способом реализации калькулятора, вероятно, будет использование микроконтроллера. Если вы решите пойти по этому пути, первым шагом будет найти какой-то код для фактического вычисления. Вам нужна программа, которая принимает операнды и операторы и выдает результат. Это относительно простой калькуляторный модуль написан надолжен дать вам представление о том, что необходимо. Он может складывать, вычитать, умножать и делить, а также некоторые побитовые операции, и, если вы используете обратную польскую запись, как в научных калькуляторах, он может решать подвыражения в скобках. Таким образом, вы читаете, какие кнопки были нажаты, собираете каждый «токен» в буфере, преобразуя любые цифры в фактические числовые значения, а затем, когда вы получаете кнопку «=», вы передаете список токенов в этот eval-код, который уменьшает и решает выражение, приводящее к единственному значению.

squarewav
источник
0

Для начинающих, вот моя рекомендуемая спецификация для вашего проекта:

  • 1 плата Arduino Uno или Leonardo, на которой установлен микроконтроллер
  • 1x HD44780ЖК-дисплей, как и вездесущие 16x2
  • 1x матричная клавиатура 4x4

Это позволит построить основной калькулятор.

Для более продвинутых целей вот моя рекомендуемая спецификация:

  • 1x Arduino Mega 2560 или Arduino Due (в этом случае программа будет большой)
  • 1x ST7920 матричный ЖК-дисплей, который поддерживает как символы, так и графику
  • 1x Arduino USB Host (только для Mega 2560, имеет встроенную функцию USB host) для клавиатуры

Это позволит вам создать сложный графический калькулятор, такой как серии TI-83 Plus или TI-nSpire.

Макстон Чан
источник