계산기를 만드는 방법?


15

나는 전자 공학의 초보자입니다. 나는 바쁜 프로젝트로 간단한 프로젝트와 측면 취미로 계산기를 처음부터 작성하려고합니다.

내 목표는 과학적 또는 그래프 계산기가 아닌 간단한 계산기를 만드는 것입니다.하지만 차기 방법에 대한 정보는 신경 쓰지 않습니다.

이것에 대한 좋은 자습서가 있습니까? 어떻게 시작해야합니까?


2
여기에 기본적인 4 기능 계산기를 만드는 키트가 있습니다 : spikenzielabs.com/Catalog/…
jwygralak67

답변:


26

너무 많은 전자 지식없이 만들 수있는 계산기의 예는 다음과 같습니다. 추가는 포함되어 있지 않지만 전체 기능입니다.

네 농담이야, 너무 심각하게 생각 하지마


lol. 그게 뭐야? 확실하지는 않지만 이전에 본 것 같습니다. 내가 그 중 하나에 손을 댈 수 있는지 궁금합니다. 이름이나 그 중 하나에 대한 링크가 있습니까?
Philoxopher


이것은 내 질문에 영감을주었습니다 : electronics.stackexchange.com/questions/11263
markrages

@KerxPhilo-Hahahahahahahahahahah ...... 아 시간이 어떻게 변하는 지.
코너 울프

@markrages, 귀하의 질문에 대한 조언, 매우 흥미로운 :)
Philoxopher

18

그것은 사소한 프로젝트가 아닙니다. 걱정해야 할 많은 교육용 하위 프로젝트가 있습니다. 하나는 버튼과 수신 거부입니다. 다른 하나는 디스플레이에 문자를 쓰는 것입니다. 이것을 어떻게 구현하고 싶은가에 대한 결정이 있습니다. 큰 낸드 게이트 박스에서 그것을 만들거나 마이크로 컨트롤러 또는 다른 프로세서를 사용하고 소프트웨어를 작성하고 싶습니까? fpga를 사용하고 RTL에서 모든 수학을 수행하는 데 관심이 있습니까? 문제를 해당 구성 요소로 나누고 한 번에 한 구성 요소를 작업 / 학습 한 다음 함께 결합해야합니다. 예를 들어 핵심 수학 엔진이 실제로 마이크로 컨트롤러의 소프트웨어 인 경우 하나의 작업에는 데스크톱 컴퓨터에 C 기능을 작성하여 키 스트로크 및 출력 문자를 표시하여 궁극적으로 디스플레이로 이동할 수 있습니다. 이전에 프로그래밍 한 적이없는 사소한 작업입니다.

교육 프로젝트로 각각 약 5 달러 이하의 몇 가지 msp430 런치 패드 또는 각각 12 달러 정도의 STM32 밸류 라인 디스커버리 (stm32 / arm 기반의 stm32 / arm 기반)가 있습니다. 많은 사람들이 당신을 arduino로 안내 할 것입니다. 그리고 그것은 훌륭한 플랫폼이기도합니다. 그것은 장단점이 있습니다. 나는 그것을 나의 첫 번째 마이크로 컨트롤러로 사용하지 않을 것입니다. 간단한 두 줄 LCD 패널을 구입하십시오. 어스 LCD는 좋은 장소 였을 것입니다. 아마도 sparkfun에 가십시오. 하나의 마이크로 컨트롤러 보드를 LCD 패널에 연결하고 디스플레이에 문자를 넣는 방법을 배우십시오. 그런 다음 블 래스팅 바이트를 시작한 다음 나중에 수신하고 에코하는 마이크로 컨트롤러에서 uart를 사용하는 방법을 배웁니다. uart 리시버를 사용하여 디스플레이에 넣은 물건을 수신 한 다음 바보 터미널 (퍼티, 하이퍼 터미널, 컴퓨터에서 물건을 가져와 작동하는지 확인하십시오. 다음으로 또 다른 마이크로 컨트롤러를 가져 와서 uart in / out 경험을 사용하고 핵심 수학 엔진에서 작업하십시오. 컴퓨터에서 0-9, +,-, =로 피드 한 다음 처음에는 곱셈을 추가하고 나누고 부동 소수점을 계산하십시오 그것을 위해 (또는 적합한 라이브러리를 가지고). 수학 모듈의 출력은 =가 전송 될 때 입력 번호를 출력하고 결과를 인쇄합니다. 그런 다음 버튼으로 수행 할 작업을 파악하고 버튼 배열을 찾은 다음 버튼을 세 번째 마이크로 컨트롤러에 공급하고 어떻게 debounce하고 수학 마이크로 컨트롤러에 0-9, +,-, = 중 uart. 그런 다음 중간에 UART를 사용하지 않고이 모든 것을 단일 마이크로 컨트롤러로 줄이십시오. 컴퓨터에서 uart 안팎의 경험을 사용하고 핵심 수학 엔진에서 작업하십시오. 컴퓨터에서 처음에 0-9, +,-, =를 먹이고 그에 용감한 경우 곱셈을 나누고 부동 소수점을 추가하십시오 (또는 맞는 라이브러리). 수학 모듈의 출력은 =가 전송 될 때 입력 번호를 출력하고 결과를 인쇄합니다. 그런 다음 버튼으로 수행 할 작업을 파악하고 버튼 배열을 찾은 다음 버튼을 세 번째 마이크로 컨트롤러에 공급하고 어떻게 debounce하고 수학 마이크로 컨트롤러에 0-9, +,-, = 중 uart. 그런 다음 중간에 UART를 사용하지 않고이 모든 것을 단일 마이크로 컨트롤러로 줄이십시오. 컴퓨터에서 uart 안팎의 경험을 사용하고 핵심 수학 엔진에서 작업하십시오. 컴퓨터에서 처음에 0-9, +,-, =를 먹이고 그에 용감한 경우 곱셈을 나누고 부동 소수점을 추가하십시오 (또는 맞는 라이브러리). 수학 모듈의 출력은 =가 전송 될 때 입력 번호를 출력하고 결과를 인쇄합니다. 그런 다음 버튼으로 수행 할 작업을 파악하고 버튼 배열을 찾은 다음 버튼을 세 번째 마이크로 컨트롤러에 공급하고 어떻게 debounce하고 수학 마이크로 컨트롤러에 0-9, +,-, = 중 uart. 그런 다음 중간에 UART를 사용하지 않고이 모든 것을 단일 마이크로 컨트롤러로 줄이십시오. 수학 모듈의 출력은 =가 전송 될 때 입력 번호를 출력하고 결과를 인쇄합니다. 그런 다음 버튼으로 수행 할 작업을 파악하고 버튼 배열을 찾은 다음 버튼을 세 번째 마이크로 컨트롤러에 공급하고 어떻게 debounce하고 수학 마이크로 컨트롤러에 0-9, +,-, = 중 uart. 그런 다음 중간에 UART를 사용하지 않고이 모든 것을 단일 마이크로 컨트롤러로 줄이십시오. 수학 모듈의 출력은 =가 전송 될 때 입력 번호를 출력하고 결과를 인쇄합니다. 그런 다음 버튼으로 수행 할 작업을 파악하고 버튼 배열을 찾은 다음 버튼을 세 번째 마이크로 컨트롤러에 공급하고 어떻게 debounce하고 수학 마이크로 컨트롤러에 0-9, +,-, = 중 uart. 그런 다음 중간에 UART를 사용하지 않고이 모든 것을 단일 마이크로 컨트롤러로 줄이십시오.

또 다른 대안은 knjn.com에서 rs-232 fpga 보드 중 하나 또는 격자 brevia (충분히 큰 것입니까?) 또는 기타 여러 가지를 얻은 다음 RTL 언어를 사용하여 각 기능 블록에서 작업하는 것입니다. 그것의 일부는 동등한 소프트웨어 솔루션보다 훨씬 쉬울 것이고, 일부는 소프트웨어 솔루션보다 약간 어려울 것입니다.

당신이 생각하는 것에 대해 더 많은 정보를 제공 할 수 있다면, nand 게이트 또는 마이크로 컨트롤러 기반 솔루션 상자 또는 다른 것에 대해 생각하고 있었습니까?


7

가장 간단한 전자 계산기는 4 기능 이진 계산기입니다. 스위치를 사용하여 이진수를 입력하여 빌드 할 수 있으며 7400 제품군 기본 논리 요소 는 더하기를 처리하는 가산기 를 처리 할 수 ​​있습니다 . 개별 LED를 사용하여 출력의 각 이진수를 나타내거나 몇 개의 7 세그먼트 디스플레이를 사용하여 숫자를 16 진수로 표시 할 수 있습니다. 이진 계산기를 만들면 십진수를 이진 변환기로 만들지 않아도되며 디지털 전자 장치의 작동 방식을 익히는 데 도움이됩니다. 취미로 디지털 전자 제품을 구입할 계획이라면 Logisim 구입 을 고려할 수 있습니다. 계획이라면 회로를 구축하기 전에 회로를 시뮬레이션 할 수있는 무료 프로그램 인 .


2
와. System-on-Chip 시대에, 당신은 그가 추가하기 위해 숫자 당 20 개의 게이트를 연결하기 원합니까? 최초의 휴대용 계산기 조차도 그렇게하지 않았습니다. 단일 칩 계산기는 30 년 동안 사용되어 왔습니다.
Ron

4 비트 슬라이스에 74181을 사용할 수 있습니다. 다른 것이 없다면 더 쉬울 것입니다.
W5VO

1
예, 소프트웨어에서 계산기를 만들려면 하나 또는 두 개의 칩 ( 이 예제 와 같은 마이크로 프로세서 사용)으로 수행 할 수 있습니다 . 개별 구성 요소를 사용하여 전체 계산기를 작성하는 데 시간이 너무 오래 걸리지 만 하드웨어를 사용하려는 경우 이진 계산기가 좋은 출발점이 될 수 있습니다.
발명가 M

이진 비트 수학을 제대로 이해하려면 실제로 좋은 생각입니다. 12 살짜리 딸과 함께 반가산기 프로젝트를했는데 브레드 보드에 공간이 부족한 상태에서 Minecraft에서 가상으로 "빌드"했습니다. 그녀는 게이트의 개념과 "비트 추가"라는 개념을 "잡았다".
Ron J.

가치가있는 계산기는 (보통) 내부적으로 이진 및 변환으로 작동하지 않으며 BCD에서 직접 작동합니다. 4 비트 슬라이스는 ALU로 충분합니다 (사실 인텔 4004의 원래 작업).
Spehro Pefhany

6

내가 한 방법은 다음과 같습니다.

구성 요소를 선택하십시오.

Input Device(필자의 경우 4x4 키패드. 숫자는 10 개, 연산자는 4 개, '='는 하나, '재설정 / 새로 고침'은 하나입니다.)

Processor(8 비트 AVR)

Output device(16x2 LCD)

Power supply(9 볼트 배터리 포함 LM7805 레귤레이터)

BreadBoard(작동을 시작한 후 PCB를 만듭니다)

개인적 선택의 문제로 집회 (학습)로 프로그램을 선택했습니다. 저는 AVR Studio 4를 IDE로 사용했고 16 진수를 AVR로 플래싱하기 위해 홈 베이킹 된 lpt 기반 'ISP'프로그래머를 사용했습니다.

그런 다음 LCD 및 키패드 용 드라이버를 작성했습니다. 입력하고 출력을 얻을 수있을 때 십진수와 연산자로 구문 분석을 시작한 다음 표현식을 구문 분석하고 Infix, Postfix 및 Prefix 메소드에 대해 읽었습니다 . 어셈블리에서 작업을 수행하여 'FLOAT 데이터 유형 지원'이 없었고 사용자 정의 데이터 유형 (15 자리 십진 정밀도를 유지하기위한 BCD 기반 데이터 유형은 RAM에 큰 낭비였습니다!)을 구현했습니다.

이 모든 작업과 Voila .. 내 계산기가 준비되었습니다 (BUB로 명명!).

광산은 1MHz에서 실행되었으며 casio_991MS (소수 정밀도 및 곱셈과 나눗셈)를 이길 수있었습니다.

나는 이것이 다른 사람들을 돕기를 바랍니다.


5

이미 개발 된 키트를 보드에있는 모든 것과 함께 사용하여 소프트웨어에 집중할 수 있습니다. 예를 들어 http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en024858&part=DM240001 이 키트에는 PIC, LCD 및 몇 개의 버튼이 있습니다. 추가 버튼을 추가 할 헤더가 많이 있습니다. 한 가지 단점은 LCD가 더 크다는 것입니다. 처음에 사용하고 싶을 수도 있지만 확실히 시작할 수 있습니다.

주변을 검색하면 처음에는 더 작고 저렴한 것을 찾을 수 있습니다.

이와 같은 키트를 사용하면 코드 작성이 더 쉬워지고 일부 예제가 될 수 있으므로 하드웨어 문제가 올바르게 설정되므로 문제가 해결됩니다. 또 다른 단점은이 키트는 계산기 프로젝트에 과도하게 사용되는 고급 사진을 사용하지만 나중에 다른 작업을 수행하기 위해 성장하고 수정할 공간을 제공한다는 것입니다. 또한 미래에 보드를 만드는 출발점으로 사용할 회로도도 제공합니다.


5

내 선반에는 H. Edward Roberts의 "전자 계산기"가 있으며 Forrest M. Mims III가 편집했습니다. 1974.

사람들 이 1974 년에 계산기를 만드는 데 사용한 방식에 대해 꽤 교육적 입니다. 많은 사진은 대량 생산 된 MITS 계산기의 전체 수명주기에 대한 것입니다. 제도 테이블), 개별 부품, 조립 라인, 웨이브 솔더링 머신 및 문제 해결.

아, 그 이후로 많은 것들이 바뀌 었습니다. 오늘날의 책은 일반적으로 전선의 큰 스파게티 혼란을 피합니다. 오늘날의 계산기는 주전원 전압을 계산기 PCB에 직접 적용하지 않습니다.

많은 것들이 여전히 동일합니다. 사람들은 여전히 ​​프로토 타이핑을하는 동안 와이어의 큰 스파게티를 엉망으로 만듭니다.


3

우선 초보자에게 필요한 주요 구성 요소에 대해 생각해야합니다. 아마도 마이크로 컨트롤러, 키패드 및 LCD 화면이 필요할 것입니다. 이러한 구성 요소를 선택하면 펌웨어를 개발하는 것만 큼 간단해야합니다.


당신이 제공 할 수있는 더 많은 세부 사항은 전자 제품 제작에있어 완전히 초보자이며,이 도전을 나의 첫 번째 도전으로 삼고 싶습니다. 위에서 제공 한 정보로 시작하는 것이 좋지만 어떤 마이크로 컨트롤러가 필요한지 잘 모르겠습니다. 또한 펌웨어를 개발하는 방법은 무엇입니까? C로 펌웨어를 작성하고 펌웨어로 업로드합니까, 아니면 ASM에서 작성해야합니까?
Philoxopher

또한 전자 제품을 매우 저렴한 가격으로 애호가에게 판매하는 좋은 웹 사이트를 제공 할 수 있습니까? 당신의 지원에 감사드립니다!
Philoxopher

두 가지 주요 취미 마이크로 컨트롤러는 PIC와 AVR입니다. 이 두 장치를위한 C 컴파일러가 있습니다. 키패드 및 LCD와 인터페이스하기에 충분한 입력 / 출력 핀이있는 한 간단한 마이크로 컨트롤러가 프로젝트에 적합합니다. 취미 전자 제품을위한 좋은 웹 사이트는 SparkFun
Ryan

2
@KerxPhilo : 예, 대부분의 임베디드 시스템 사용자는 C로 펌웨어를 작성합니다. Ladyada는 C로 펌웨어를 작성하고 마이크로 컨트롤러에 업로드하는 방법에 대한 훌륭한 자습서를 제공합니다. 뿐만 아니라 액정을 연결하고 그 위에 물건을 표시하는 튜토리얼을 .
davidcary

3

나는 이것이 좋은 첫 학습 프로젝트 일 수 있다고 생각하지만 사소한 것은 아니며 프로젝트를 진행하는 데 많은 하위 프로젝트가 포함되어 있기 때문에 인내심을 가져야합니다. 방법.

결정해야 할 첫 번째 디자인 장애물은 어떤 기술 수준을 원하십니까? 마이크로 컨트롤러 (대부분 자급 자족 마이크로 프로세서), 산술 장치 (ALU) 유무에 관계없이 이산 로직 (예 : AND, OR, NOR 게이트 및 플립 플롭), 프로그래머블 로직 (CPLD, FPGA) 등 유무에 관계없이 언급하거나 고려하지 않았습니다. 이것은 계산을 수행하는 데 사용되는 기술에 대해 먼저되어야하며, 입 / 출력 컨트롤은 미적 요소 나 비용의 영향을받는 2 차 결정 (LED 7 세그먼트 디스플레이, LCD 패널)입니다.

디지털 계산에 대해 배울 수있는 잠재적으로 유용한 출발점 중 하나 는 기발한 Clive Maxfield의 접근 방식이 뛰어난 컴퓨터How Computers Do Math (ISBN : 0471732788)입니다. 이것은 "소프트"-프로그래밍 또는 논리 레벨로 작성되며, 실제로 계산을 수행하려면 이해해야합니다.

다른 사람이 uWatch를 언급했습니다 (- -Watch ) 프로젝트를 예로 , 인터넷 에는 1970 년대에 자체 계산기만든 전기 엔지니어 (또는 EE 학생) 에 대한 참조가 있습니다. FPGA (프로그래머블 로직 디바이스) 기반 계산기 구축에 대한 세부 사항 도 있습니다 .

전자 장치 (또는 디지털 전자 장치)에 대한 완전한 초보자를 위해 micrcontroller를 디자인의 시작점으로 사용하는 것이 좋습니다. 프로그래밍의 복잡성을 느끼기 위해 언급 된 책의 웹 사이트를 살펴보십시오 (프로그래밍 경험이있는 경우별로 많지 않음) 마이크로 컨트롤러를위한 것입니다.



0

하드웨어 요구 사항

  • 사용자 입력을위한 키패드
  • 입력 및 결과를 표시하는 LCD
    실제 계산기 제품에는 =, -M( MC , MRMS 의 경우) 와 같은 특수 문자를 표시하기위한 사용자 정의 LCD가 필요합니다. 작업의 경우) 기호 . 커스텀 LCD 디자인은 최대 3000 $이지만, 커스텀 디자인 된 LCD는 다른 범용 LCD보다 경제성이 높아집니다. 프로젝트는 취미 용이므로 KS0108 컨트롤러와 함께 범용 LCD를 사용하는 것이 좋습니다.
  • 매우 저렴하고 기능이없는 마이크로 컨트롤러
    매우 간단한 작업을 수행하므로 매우 기본적인 컨트롤러가 필요합니다. 저렴한 PIC 마이크로 컨트롤러를 사용할 수 있습니다.

디자인 단계

  • LCD
    구동 LCD 구동 관리. 숫자를 적으십시오. 소프트웨어 인터페이스를 작성하십시오.
  • 키패드 테스트
    LCD와 동일한 단계를 수행하십시오. 키패드에서 소프트웨어를 제어해야합니다.
  • 산술 연산을 수행하는 알고리즘 작성
    곱셈과 나눗셈이 가능한 마이크로 컨트롤러를 사용하는 경우 해당 연산을 직접 수행 할 필요는 없습니다. 그러나 마이크로 컨트롤러에 대해 더 많은 비용을 지불해야하는 반면, 프로젝트 기간 동안 배우는 시간이 줄어들고 경험이 줄어 듭니다.

제곱근, 사인 / 코사인 계산 등과 같은 고급 산술 기능을 추가하려면 Newton의 Method 또는 Taylor Series Expansion을 사용하여 관련 계산 알고리즘을 구현해야합니다 .

그렇지 않으면 간단한 프로젝트가됩니다. 이전에 경험이 많지 않은 경우 LCD와 키패드를 운전하는 것이 가장 큰 과제입니다.


사용자의 야망 수준에 따라 "ROM"(아마도 EPROM 또는 병렬 플래시)과 함께 몇 개의 시프트 레지스터와 약간의 이산 논리를 사용하여 매우 조잡한 마이크로 컨트롤러를 구축 할 수 있습니다. 20 개 이하의 칩, 예를 들어 간단한 계산기를 사용할 수 있습니다. 상당히 큰 ROM을 사용하는 경우. 일반적인 명령어는 "시프트 레지스터 1의 출력 X, 시프트 레지스터 2의 Y, 출력 스트로브를 Z로 설정 한 다음 일부 레지스터의 값을 상수 A에 연결하여 형성된 주소에서 다음 명령어를 가져 오는 것"입니다.
supercat

코드 내에서 모두 처리 할 수있는 BCD 추가를 수행하기 위해 회로가 필요하지 않습니다. 하나에 개별적으로 제어 가능한 시프트 레지스터가있는 경우 소스 및 대상 피연산자가 정렬되도록 필요에 따라 해당 레지스터를 전진시킨 다음 4 개의 명령어를 사용하여 각 값에서 가져온 4 비트의 값에 따라 CPU를 20 개의 상태 중 하나에 놓으십시오. 다음 4 개의 명령어는 각 시프트 레지스터에서 다음 4 비트를 가져 와서 그 중 하나를 계산 된 결과의 첫 4 비트로 덮어 씁니다.
supercat

"사용자 정의 LCD"요구 사항에 대해 이의를 제기합니다. 계산기 LCD는 패드 피치, 단순 대 과학 (일반적으로 8 대 10 자리를 의미)과 같은 몇 가지 변형만으로 상품 품목의 모든 모양을 제공합니다. 위의 주어진 선택 내에서, 크기 나 글꼴 스타일이 약간 다르더라도 기능적으로 동등한 수백 개의 항목이 없다면 수십 가지가 있습니다.
Chris Stratton

@ChrisStratton : 표시 기호가없는 8 자리 디스플레이를 원하는 경우 해당 설명을 충족하는 상용 부품을 사용할 수 있습니다. 나는 전형적인 계산기의 기능과 동등한 기성품 디스플레이를 본 적이 없다고 생각합니다. 계산기는 핀보다 저렴하지만 DIY 프로젝트에서 작업하기 어려운 지브라 스트립 연결을 사용하는 것이 좋습니다.
supercat

@supercat-저렴한 계산기에 사용되는 LCD는 지브라 ​​스트립이 아닌 열 활성화 접착제가있는 리본을 사용하는 경향이 있습니다. 그리고 그들은 이다 제조 실행 등의 사이에서 교환 할 수있다 대부분 표준 규격품 항목.
Chris Stratton

0

계산기를 구현하는 가장 쉬운 방법은 마이크로 컨트롤러를 사용하는 것입니다. 해당 경로로 이동하기로 결정한 경우 첫 번째 단계는 실제로 계산을 수행 할 코드를 찾는 것입니다. 피연산자와 연산자를 허용하고 결과를 추출하는 프로그램이 필요합니다. 이것은 C로 작성된 비교적 간단한 계산기 모듈당신에게 무엇이 필요한지에 대한 아이디어를 줄 것입니다. 비트 연산뿐만 아니라 더하기, 빼기, 곱하기 및 나누기를 할 수 있으며 과학 계산기와 같이 역 폴란드 표기법을 사용하면 괄호 안의 하위 표현식을 해결할 수 있습니다. 따라서 어떤 버튼을 눌렀는지 확인하고, 숫자를 실제 숫자 값으로 변환하는 버퍼에서 각 "토큰"을 수집 한 다음 "="버튼을 받으면 토큰 목록을이 평가 코드에 공급하여 단일 값을 생성하는 식입니다.


0

초보자를 위해 다음은 프로젝트에 제안 된 BOM입니다.

  • 1x Arduino Uno 또는 Leonardo 보드, 필요한 마이크로 컨트롤러가 있음
  • HD44780유비쿼터스 16x2와 같은 1x 기반 LCD
  • 1x 4x4 매트릭스 키패드

기본 계산기를 만들 수 있습니다.

보다 고급 목적을 위해 제안 된 BOM은 다음과 같습니다.

  • 1x Arduino Mega 2560 또는 Arduino Due (이 경우 프로그램이 클 것입니다)
  • ST7920문자와 그래픽을 모두 지원하는 1x 기반 매트릭스 LCD
  • 키보드 용 Arduino USB 호스트 쉴드 1 개 (Mega 2560 만 해당, 기본 USB 호스트 기능이 있음)

이를 통해 TI-83 Plus 또는 TI-nSpire 시리즈와 같은 정교한 그래프 계산기를 작성할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.