계산기를 만드는 방법?


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 , MR 및 MS 의 경우) 와 같은 특수 문자를 표시하기위한 사용자 정의 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.