Як побудувати калькулятор?


15

Я новачок в електроніці. Я намагаюся створити калькулятор з нуля, як простий проект і бічне хобі, щоб не зайняти мене.

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

Чи є для цього хороший підручник? З чого слід почати?


2
Тут є набір для побудови базового 4-функційного калькулятора: spikenzielabs.com/Catalog/…
jwygralak67

Відповіді:


26

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

Yes I'm joking, don't take this too seriously


Лол. Що це? Я думаю, я це бачив і раніше, хоча не впевнений. Дуже цікаво побачити, чи можу я взяти руку на одну з таких. У вас є ім’я чи посилання на одне з них?
Філоксофер


це надихнуло моє запитання: electronics.stackexchange.com/questions/11263
позначки

@KerxPhilo - Hahahahahahahahahahah ...... ой, як змінюються часи.
Вонор Коннор

@markrages, кудо ваше запитання, дуже цікаво :)
Філоксофер

18

Це не тривіальний проект. Є багато освітніх підпроектів, про які варто хвилюватись. Один - кнопки та розвінчання. Інша - запис символів на дисплей. Існує рішення, як ви хочете це здійснити? Ви зацікавлені в тому, щоб зробити це з великого ящика нанд-воріт або хочете взяти мікроконтролер чи інший процесор і написати програмне забезпечення? Вам цікаво використовувати fpga та робити всю математику в RTL? Вам потрібно розбити проблему на ці компоненти та працювати / вивчати один компонент за один раз, а потім з'єднувати їх. Наприклад, якщо основний двигун з математики насправді є програмним забезпеченням на мікроконтролері, одне завдання включатиме запис деяких функцій C на настільний комп'ютер, щоб ви могли подавати натискання клавіш і виводити символи, які в кінцевому підсумку перейдуть на дисплей. Нетривіальне завдання, якщо ви ніколи раніше не програмували.

Як навчальний проект, я б хотів зробити декілька запуску msp430, меншою за 5 баксів, або відкриття значення вартості STM32 (на основі stm32 / arm, а не інше), приблизно за 12 баксів. Кілька людей будуть спрямовувати вас до ардуїно, і це також чудова платформа, у неї є свої плюси і мінуси, я б не пішов з нею як мій перший мікроконтролер. Купіть просту двоколірну панель з рідкокристалічним екраном. Земляний lcd раніше був хорошим місцем, можливо, просто перейдіть до іскрофону. Візьміть одну плату мікроконтролера, підключіть її до панелі lcd і навчіться ставити символи на дисплей. Тоді я б навчився використовувати uart на мікроконтролері, який часто починається з вибуху байтів, а потім пізніше отримання та відлуння. Використовуйте приймач uart, щоб отримувати речі, які можна поставити на дисплей, а потім за допомогою німого терміналу (шпаклівка, гіпертерм, minicom) з комп'ютерної стрічки і переконайтеся, що вона працює. Далі візьміть ще один мікроконтроллер, використовуйте досвід уарт-оф і працюйте над основним математичним двигуном, з комп'ютера спочатку подайте його 0 - 9, +, -, = потім додайте множення та ділення, а потім плаваючу крапку, якщо ви досить сміливі для цього (або мати бібліотеку, яка підходить). Вихід з математичного модуля відображатиме цифри введення та друкує результати, коли надсилається = тощо. Потім з’ясуйте, що робити з кнопками, знайдіть масив кнопок, якось подайте їх у третій мікроконтролер, зніміть його та перетворіть у uart з 0 - 9, +, -, = до математичного мікроконтролера. ТОГО, зменшіть усе це в один мікроконтролер, не маючи на увазі речі в середині. використовуйте свій досвід uart і out та працюйте над основним двигуном з математики, з комп'ютера спочатку подайте його 0 - 9, +, -, = потім додайте множення та ділення, а потім плаваючу крапку, якщо ви досить сміливі для цього (або у вас є бібліотека, яка підходить). Вихід з математичного модуля відображатиме цифри введення та друкує результати, коли надсилається = тощо. Потім з’ясуйте, що робити з кнопками, знайдіть масив кнопок, якось подайте їх у третій мікроконтролер, зніміть його та перетворіть у uart з 0 - 9, +, -, = до математичного мікроконтролера. ТОГО, зменшіть усе це в один мікроконтролер, не маючи на увазі речі в середині. використовуйте свій досвід uart і out та працюйте над основним двигуном з математики, з комп'ютера спочатку подайте його 0 - 9, +, -, = потім додайте множення та ділення, а потім плаваючу крапку, якщо ви досить сміливі для цього (або у вас є бібліотека, яка підходить). Вихід з математичного модуля відображатиме цифри введення та друкує результати, коли надсилається = тощо. Потім з’ясуйте, що робити з кнопками, знайдіть масив кнопок, якось подайте їх у третій мікроконтролер, зніміть його та перетворіть у uart з 0 - 9, +, -, = до математичного мікроконтролера. ТОГО, зменшіть усе це в один мікроконтролер, не маючи на увазі речі в середині. Вихід з математичного модуля відображатиме цифри введення та друкує результати, коли надсилається = тощо. Потім з’ясуйте, що робити з кнопками, знайдіть масив кнопок, якось подайте їх у третій мікроконтролер, зніміть його та перетворіть у uart з 0 - 9, +, -, = до математичного мікроконтролера. ТОГО, зменшіть усе це в один мікроконтролер, не маючи на увазі речі в середині. Вихід з математичного модуля відображатиме цифри введення та друкує результати, коли надсилається = тощо. Потім з’ясуйте, що робити з кнопками, знайдіть масив кнопок, якось подайте їх у третій мікроконтролер, зніміть його та перетворіть у uart з 0 - 9, +, -, = до математичного мікроконтролера. ТОГО, зменшіть усе це в один мікроконтролер, не маючи на увазі речі в середині.

Іншою альтернативою є отримання однієї з плат frga rs-232 від knjn.com або ґратчастої бревії (це достатньо велика?) Або ряду інших, а потім працювати над кожним з функціональних блоків за допомогою мови RTL. частини його буде набагато простіше, ніж еквівалентне програмне рішення, деякі частини будуть трохи складніше, ніж програмне рішення.

Якщо ви можете надати додаткову інформацію про те, що ви думаєте, коробку вхідних воріт або рішення на основі мікроконтролера чи ви думали про щось інше?


7

Найпростішим електронним калькулятором, який ви могли б скласти, був би двійковий калькулятор на чотири функції. Ви можете побудувати його за допомогою перемикачів для введення двійкових чисел, а базові логічні елементи 7400 сімейства могли обробляти суматори, які могли б обробляти додавання. Ви можете використовувати або окремі світлодіоди, щоб представляти кожне бінарне число у висновку, або ви можете використовувати кілька семисегментних дисплеїв для відображення числа в шістнадцятковій кількості. Побудова двійкового калькулятора дозволить уникнути побудови перетворювача від десятків до двійкових і допоможе вам ознайомитись з тим, як працює цифрова електроніка. Якщо ви плануєте займатися цифровою електронікою як хобі, ви можете розглянути можливість отримання Logisim - безкоштовної програми, яка дозволяє імітувати схеми, перш ніж будувати їх.


2
Ого. В епоху System-on-Chip, ви хочете, щоб він з'єднав двадцять воріт на цифру, щоб просто додати ? Навіть перший кишеньковий калькулятор цього не зробив. Одиночні мікросхеми існують вже тридцять років.
Рон

Ну, ви можете використовувати 74181 для 4-бітового фрагмента. Це було б простіше, якби нічого іншого.
W5VO

1
Так, це можна зробити за допомогою однієї або двох мікросхем (використовуючи мікропроцесор, як цей приклад ), якщо він хоче створити калькулятор в програмному забезпеченні. Можливо, побудова цілого калькулятора за допомогою дискретних компонентів зайняло б занадто багато часу, але якщо він хоче ввійти в апаратне забезпечення, двійковий калькулятор може стати хорошою відправною точкою.
винахідникМ

Це насправді гарна ідея, щоб правильно зрозуміти бінарну математику. Я робив проект на півзахисту зі своєю 12-річною донькою, поки ми вибігали з кімнати на дошці - вона продовжувала "будувати" її практично в Minecraft. Вона "отримала" концепцію ворота та додавання бітів, в чому й полягала вся суть.
Рон Дж.

Для чого варто, що калькулятори (як правило) не працюють всередині двійкових і перетворюють, вони працюють безпосередньо в BCD. Чотири бітового фрагмента достатньо для ALU (адже це було оригінальною роботою Intel 4004).
Spehro Pefhany

6

Ось як я це зробив.

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

Input Device(Клавіатура 4x4 у моєму випадку. 10 клавіш для цифр, 4 для операторів, одна для '=', а одна для 'скидання / оновлення')

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

Output device(16x2 LCD)

Power supply(Регулятор LM7805 з 9-вольтовим акумулятором)

BreadBoard(зробіть друковану плату після того, як вона почне працювати)

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

потім я написав драйвери для РК та клавіатури. Уміючи взяти введення та отримати вихід, почав розбирати десяткові цифри та оператори, потім я розбирав вирази та читав про методи Infix, Postfix та Prefix . Я зробив свою роботу в зборі, щоб не було «підтримки даних FLOAT», і я в кінцевому підсумку впровадив свій власний тип даних (тип даних на основі BCD для підтримки 15-ти значної десяткової точності, хоча це була велика трата на оперативну пам’ять!).

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

Шахта працювала при частоті 1 МГц і була здатна перемогти casio_991MS (з точки зору десяткової точності та множення та ділення).

Я сподіваюся, що це допомагає іншим.


5

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

Якщо ви шукаєте навколо, ви, можливо, зможете знайти менші (і дешевші), з яких можна почати.

Використання такого набору полегшить початок написання вашого коду, оскільки вони будуть прикладом, а також усуне проблеми з апаратними засобами, оскільки все налаштовано правильно. Ще одним недоліком є ​​те, що цей комплект використовує фотографії високого класу, які є надмірними для проекту калькулятора, але це дає вам можливість рости та змінювати його в майбутньому для виконання інших завдань. Це також дасть вам схеми для використання в якості відправної точки для створення власних дощок у майбутньому.


5

На своїй полиці у мене є "Електронні калькулятори" Х. Едварда Робертса за редакцією "Форест М. Мімс III". 1974 рік.

Це досить навчально про те, як люди використовували для побудови калькуляторів у 1974 році. Багато фотографій є повним життєвим циклом масового калькулятора MITS - фотографії прототипування (велика безладна спагетті дротів), дизайн друкованої плати (накладення Rubylith на таблиця складання), окремі деталі, конвеєр, хвильовий паяльний апарат та усунення несправностей.

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

Багато речей все одно. Люди, як правило, зазвичай роблять великий спагеті з дроту під час прототипування.


3

Ну а для початку вам слід подумати про основні компоненти, які вам знадобляться. Можливо, вам знадобиться мікроконтролер, клавіатура та РК-екран. Щойно ви вибираєте ці компоненти, це може бути таким же простим, як і розробка прошивки.


Будь-які деталі, які ви могли б надати, пам’ятайте, що я абсолютно новачок, коли справа стосується побудови електроніки, і я хочу прийняти це завдання як своє перше. З інформацією, яку ви подали вище, це чудовий початок, проте я не знаю, який мікроконтролер мені знадобиться. Також, як розробити прошивку? Ви пишете прошивку на C і завантажуєте її в прошивку, чи потрібно писати її в ASM?
Філоксофер

Ви також можете надати хороший веб-сайт, який продає електронічне обладнання за дуже дешевим тарифом для любителів? Вдячний за вашу підтримку!
Філоксофер

Дві основні мікроконтролери-хобі - це PIC та AVR. Для обох цих пристроїв є компілятори C. Простий мікроконтролер буде працювати для вашого проекту, якщо у нього є достатньо штифтів вводу / виводу для взаємодії з вашою клавіатурою та РК-екраном. Хорошим веб-сайтом для електроніки-хобі буде SparkFun
Райан


3

Я вважаю, що це може бути хорошим першим навчальним проектом, але це нетривіально, і вам доведеться навчитися трохи на цьому шляху, а також будьте терплячі, оскільки проект включає в себе досить багато підпроектів, щоб вирішити їх шлях.

Перше дизайнерське перешкода, яке вам потрібно вирішити, - це на якому рівні технології ви хочете це зробити? З мікроконтролером або без нього (значною мірою самодостатній мікропроцесор), дискретна логіка (наприклад, AND, АБО, ворота NOR і шльопанці) з / без арифметичних одиниць (ALU), програмована логіка (CPLD, FPGA), щось інше, що я маю не згадуються та не розглядаються. Спершу це має стосуватися технології, яка використовується для розрахунків, управління входом / виходом є вторинними рішеннями (семисегментні світлодіодні дисплеї, РК-панель), в основному впливають на естетику або вартість.

Одне з потенційно корисних вихідних місць для вивчення цифрових обчислень - це дуже доступна книга « Як комп’ютери роблять математику» (ISBN: 0471732788) вигадливого Клайва Максфілда. Це написано на "м'якому" - програмуванні або логічному рівні, який вам потрібно буде зрозуміти, щоб насправді зробити розрахунки.

Хтось ще згадав uWatch (- micro-Watch ) як приклад, і в Інтернеті є посилання на інженерів-електриків (або студентів ЕЕ), які створили власний калькулятор у 1970-х. Також є деякі деталі щодо побудови калькулятора на основі FPGA (програмованого логічного пристрою) .

Для цілковитого прихильника електроніки (або цифрової електроніки) я б запропонував використовувати мікроконтролер як вихідний пункт у вашому дизайні, перегляньте веб-сайт згаданої книги, щоб відчути складність у програмуванні (не дуже багато, якщо у вас є досвід програмування) для мікроконтролера та йди звідти.



0

Вимоги до апаратного забезпечення

  • Клавіатура для введення користувачем
  • Дисплей для відображення вхідного сигналу і його результат
    в реальному калькулятор продукту, вам потрібен власний LCD для відображення спеціальних символів на кшталт =, -і M(для MC , MR і МС операцій) ознаки. Індивідуальний дизайн ЖК коштує до 3000 доларів, але тоді розроблені на замовлення LCD екрани стають більш економічними, ніж інші. Оскільки ваш проект призначений лише для хобі, я пропоную вам використовувати РК загального призначення з контролером KS0108.
  • Дуже дешевий і нефункціональний мікроконтролер
    Вам потрібен дуже базовий контролер, оскільки ви будете робити дуже прості завдання. Можна скористатися дешевим мікроконтролером PIC.

Етапи проектування

  • Керуйте своїм РК-дисплеєм
    Управління керуванням вашим РК-дисплеєм. Напишіть на ньому кілька цифр. Напишіть для нього програмний інтерфейс.
  • Перевірка клавіатури
    Виконайте ті ж дії, які ви робили з РК-екраном. Переконайтеся, що у вас є керування програмним забезпеченням на клавіатурі.
  • Напишіть алгоритми, що виконують арифметичні операції.
    Якщо ви використовуєте мікроконтролер, який може множити і ділити, вам не потрібно робити ці операції самостійно; але вам доведеться платити більше за мікроконтролер, з іншого боку, ви навчаєтеся менше і отримуєте менше досвіду під час свого проекту.

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

Інакше це буде простий проект. Ваша основна проблема буде з керуванням вашим рідкокристалічним екраном та клавіатурою, якщо ви до цього не мали великого досвіду.


Залежно від рівня амбіцій, можна створити декілька регістрів зсуву та трохи дискретної логіки, а також "ПЗУ" (можливо, EPROM або паралельний спалах), щоб створити дуже сирий мікроконтролер. Простий калькулятор може бути можливим, використовуючи 20 мікросхем або менше, esp. якщо використовується досить великий ПЗУ. Типовою інструкцією буде "вихід X на регістр зсуву 1, Y на регістр зсуву 2, встановити вихідну стробу на Z, а потім отримати наступну інструкцію з адреси, утвореної шляхом об'єднання значень деяких регістрів на константу A".
supercat

Не потрібно мати жодної схеми, щоб виконати додавання BCD - все це можна обробляти в коді. Якщо в одному є два регістри зсуву, що керуються окремо, просуньте їх за необхідності, щоб вибудовані вихідні та цільові операнди вишикувалися, а потім скористайтеся чотирма інструкціями, щоб перенести ЦП в одне з 20 станів на основі значень чотирьох біт, взятих від кожного значення; наступні чотири вказівки можуть приймати наступні чотири біти з кожного регістру зсуву, перезаписуючи один з них першими чотирма бітами обчисленого результату.
supercat

Я б заперечував вимогу "користувальницький РК". РК-дисплей калькулятора дає змогу виглядати як товарний товар лише з декількома варіаціями - крок колодки, простий та науковий (що зазвичай передбачає 8 проти 10 цифр). У межах даного вибору вищезазначених буде десятки, якщо не сотні предметів, які функціонально еквівалентні, навіть якщо вони незначно відрізняються за розмірами або стилем шрифту.
Кріс Страттон

@ChrisStratton: Якщо потрібно 8-значний дисплей без оповіщувачів, доступні запчастини, які відповідають цьому опису. Я не думаю, що я не бачив жодних дисплеїв, які були б функціонально еквівалентні типовим у калькуляторі. Зауважте, що калькулятори в змозі використовувати з'єднання із зебрами, які дешевше, ніж шпильки для виготовлення, але важче працювати з проектом "Зроби сам".
supercat

@supercat - РК-дисплеї, які використовуються в дешевих калькуляторах, як правило, використовують стрічку з клеєм, що активується теплом, а не смужку зебри. І вони значною мірою є стандартними позаштатними виробами, які можна міняти між випусками.
Кріс Страттон

0

Найпростішим способом реалізації калькулятора, напевно, було б використання мікроконтролера. Якщо ви вирішили пройти цей маршрут, першим кроком було б знайти якийсь код, щоб насправді зробити розрахунок. Вам потрібна програма, яка приймає операнди та оператори і розплющує результат. Цей порівняно простий модуль калькулятора, написаний cповинен дати вам уявлення про те, що необхідно. Він може додавати, віднімати, множувати та ділити, а також деякі побізні операції, і якщо ви використовуєте Зворотну польську нотацію, як у наукових калькуляторах, вона може вирішувати під вирази в дужках. Таким чином, ви прочитали, які кнопки натискали, збирайте кожен "маркер" у буфері, перетворюючи будь-які цифри у фактичні числові значення, а потім, коли ви отримуєте кнопку "=", ви подаєте список жетонів до цього коду eval, який зменшує та вирішує значення вираз, що призводить до одиничного значення.


0

Для початківців ось моя запропонована BOM для вашого проекту:

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

Це дозволить побудувати базовий калькулятор.

Для більш досконалих цілей, ось моя запропонована BOM:

  • 1x Arduino Mega 2560 або Arduino Due (програма в цьому випадку буде великою)
  • ST7920Матричний LCD-дисплей на основі 1x , який підтримує як символи, так і графіку
  • 1x Arduino USB хост-щит (лише для Mega 2560, Due мають функцію USB-хоста) для клавіатури

Це дозволить вам створити складний графічний калькулятор, подібний до тих, що є у серії TI-83 Plus або TI-nSpire.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.