Hesap makinesi nasıl oluşturulur?


15

Elektronikte yeni doğmuş biriyim. Beni meşgul etmek için basit bir proje ve yan hobi olarak sıfırdan bir hesap makinesi yapmaya çalışıyorum.

Amacım, basitçe bir hesap makinesi oluşturmak, bilimsel veya grafik hesap makinesi değil, sadece tekmeler için nasıl yapılacağı hakkında bilgi almama rağmen.

Bunun için iyi bir öğretici var mı? Nasıl başlamalıyım?


2
Burada temel bir 4 fonksiyonlu hesap makinesi inşa etmek için bir kit var: spikenzielabs.com/Catalog/…
jwygralak67

Yanıtlar:


26

Çok fazla elektronik bilgisi olmadan inşa edebileceğiniz bir hesap makinesi örneği. Ek dahil değildir, ancak tam özellikli.

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


lol. O nedir? Sanırım daha önce görmüştüm, ama emin değilim. Elimi bunlardan birine alıp alamayacağımı merak ediyorum. Bunlardan birine bir adınız veya bağlantınız var mı?
Philoxopher



@KerxPhilo - Hahahahahahahahahahah ...... oh zaman nasıl değişir.
Connor Wolf

@markrages, sorunuza kudos, çok ilginç :)
Philoxopher

18

Bu önemsiz bir proje değil. Endişelenecek birçok eğitim alt projesi var. Biri düğmeler ve zıplatma. Diğeri ekrana karakterler yazmaktır. Bunu nasıl uygulamak istediğinize karar verdiniz, büyük bir kutu kapıdan yapmak veya bir mikrodenetleyici veya başka bir işlemci almak ve yazılım yazmak mı istiyorsunuz? Bir fpga kullanmak ve RTL'deki tüm matematiği yapmak ister misiniz? Sorunu bu bileşenlere ayırmanız ve her seferinde bir bileşen çalışmanız / öğrenmeniz ve sonra bunları birleştirmeniz gerekir. Örneğin, çekirdek matematik motoru aslında bir mikro denetleyicideki yazılımsa, bir görev, masaüstü bilgisayarınıza sonuçta ekrana gidecek tuş vuruşlarını ve çıktı karakterlerini besleyebileceğiniz bazı C işlevleri yazmayı içerir. Daha önce hiç programlamamışsanız önemsiz olmayan bir görev.

Bir eğitim projesi olarak her biri 5 dolar altında birkaç msp430 launchapads veya her biri yaklaşık 12 dolar için STM32 değer satırı keşfi (stm32 / kol diğeri değil tabanlı) elde etmektir. Bir dizi millet sizi arduino'ya yönlendirecek ve bu da iyi bir platform, artıları ve eksileri var, ilk mikrodenetleyici olarak onunla gitmezdim. Basit bir iki satır lcd panel satın alın, toprak lcd eskiden iyi bir yerdi, belki sadece sparkfun'a gidin. Bir mikrodenetleyici kartını lcd panele asın ve karakterleri ekrana nasıl koyacağınızı öğrenin. Daha sonra mikroişlemcide uart'ın nasıl kullanılacağını öğrenirim, bu genellikle baytları dışarı atma ile başlar, daha sonra alır ve yankılanır. Uart alıcıyı kullanarak ekrana koymak ve aptal bir terminal (macun, hiperterm, minicom) bir bilgisayardan besleyin ve çalıştığından emin olun. Sonra başka bir mikrodenetleyici alın, uart giriş ve çıkış deneyiminizi kullanın ve çekirdek matematik motorunda çalışın, bilgisayarınızdan besleyin 0 - 9, +, -, = ilk önce çarpın ve bölün ve sonra yeterince cesursanız kayan noktayı ekleyin bunun için (veya uygun bir kütüphaneye sahip olmak). Matematik modülünden çıktı, = gönderildiğinde vb. Girdi sayılarını yansıtır ve sonuçları yazdırır. Sonra düğmelerle ne yapacağınızı anlayın, bir dizi düğme bulun, bunları üçüncü mikrodenetleyiciye bir şekilde besleyin, geri dönün ve uart 0 - 9, +, -, = matematik mikrodenetleyicisine. Daha sonra, bunların hepsini ortada uart olmadan tek bir mikrodenetleyiciye indirin. uart giriş ve çıkış deneyiminizi kullanın ve çekirdek matematik motorunda çalışın, bilgisayarınızdan besleyin 0 - 9, +, -, = ilk önce çarpma ve bölme ekleyin ve bunun için yeterince cesursanız kayar nokta (veya uygun bir kütüphane). Matematik modülünden çıktı, = gönderildiğinde vb. Girdi sayılarını yansıtır ve sonuçları yazdırır. Sonra düğmelerle ne yapacağınızı anlayın, bir dizi düğme bulun, bunları üçüncü mikrodenetleyiciye bir şekilde besleyin, geri dönün ve uart 0 - 9, +, -, = matematik mikrodenetleyicisine. Daha sonra, bunların hepsini ortada uart olmadan tek bir mikrodenetleyiciye indirin. uart giriş ve çıkış deneyiminizi kullanın ve çekirdek matematik motorunda çalışın, bilgisayarınızdan besleyin 0 - 9, +, -, = ilk önce çarpma ve bölme ekleyin ve bunun için yeterince cesursanız kayar nokta (veya uygun bir kütüphane). Matematik modülünden çıktı, = gönderildiğinde vb. Girdi sayılarını yansıtır ve sonuçları yazdırır. Sonra düğmelerle ne yapacağınızı anlayın, bir dizi düğme bulun, bunları üçüncü mikrodenetleyiciye bir şekilde besleyin, geri dönün ve uart 0 - 9, +, -, = matematik mikrodenetleyicisine. Daha sonra, bunların hepsini ortada uart olmadan tek bir mikrodenetleyiciye indirin. Matematik modülünden çıktı, = gönderildiğinde vb. Girdi sayılarını yansıtır ve sonuçları yazdırır. Sonra düğmelerle ne yapacağınızı anlayın, bir dizi düğme bulun, bunları üçüncü mikrodenetleyiciye bir şekilde besleyin, geri dönün ve uart 0 - 9, +, -, = matematik mikrodenetleyicisine. Daha sonra, bunların hepsini ortada uart olmadan tek bir mikrodenetleyiciye indirin. Matematik modülünden çıktı, = gönderildiğinde vb. Girdi sayılarını yansıtır ve sonuçları yazdırır. Sonra düğmelerle ne yapacağınızı anlayın, bir dizi düğme bulun, bunları üçüncü mikrodenetleyiciye bir şekilde besleyin, geri dönün ve uart 0 - 9, +, -, = matematik mikrodenetleyicisine. Daha sonra, bunların hepsini ortada uart olmadan tek bir mikrodenetleyiciye indirin.

Başka bir alternatif, rj-232 fpga panellerinden birini knjn.com veya kafes brevia'dan (yeterince büyük mü?) Veya başkalarından almak, daha sonra bir RTL dili kullanarak fonksiyonel blokların her biri üzerinde çalışmaktır. parçaları eşdeğer yazılım çözümünden çok daha kolay olacak, bazı parçalar ise yazılım çözümünden biraz daha zor olacak.

Ne düşündüğünüz hakkında daha fazla bilgi sağlayabilirseniz, bir kutu nand kapıları veya mikrodenetleyici tabanlı bir çözüm mü yoksa başka bir şey mi düşünüyordunuz?


7

Yapabileceğiniz en basit elektronik hesap makinesi, dört fonksiyonlu bir ikili hesap makinesi olacaktır. İkili sayıları girmek için anahtarları kullanarak oluşturabilirsiniz ve 7400 ailesi temel mantık öğeleri, eki işleyecek toplayıcıları işleyebilir. Çıktıdaki her ikili sayıyı temsil etmek için ayrı ayrı LED'leri kullanabilir veya sayıyı onaltılık olarak görüntülemek için birkaç yedi bölümlü ekran kullanabilirsiniz. İkili bir hesap makinesi oluşturmak, ondalık-ikili bir dönüştürücü oluşturmaktan kaçınmanıza izin verir ve dijital elektroniklerin nasıl çalıştığını tanımanıza yardımcı olur. Dijital elektroniğe hobi olarak girmeyi planlıyorsanız , devrelerinizi inşa etmeden önce simüle etmenizi sağlayan ücretsiz bir program olan Logisim'i almayı düşünebilirsiniz .


2
Vay. Çip Üzerinde Sistem çağında, sadece eklemek için rakam başına yirmi kapı tel bağlamasını mı istiyorsunuz ? İlk el tipi hesap makinesi bile bunu yapmadı. Tek çipli hesap makineleri otuz yıldır var.
Ron

4 bitlik bir dilim için 74181 kullanabilirsiniz. Başka bir şey olmasa bu daha kolay olurdu.
W5VO

1
Evet, hesap makinesini yazılımda oluşturmak istiyorsa, bu bir veya iki çip ile ( bu örnek gibi bir mikroişlemci kullanarak ) yapılabilir. Belki de tüm hesap makinesini ayrık bileşenler kullanarak oluşturmak çok zaman alacaktır, ancak donanıma girmek istiyorsa, ikili bir hesap makinesi iyi bir başlangıç ​​noktası olabilir.
mucit

Bu, ikili bit matematiğini doğru bir şekilde anlamak için iyi bir fikirdir. 12 yaşındaki kızımla yarım toplayıcı bir proje yaptım, bir breadboard üzerinde odamız bittiğinde - neredeyse Minecraft'ta "inşa etmeye" devam etti. Kapıları ve bitleri ekleme kavramını "anladı", ki bütün mesele buydu.
Ron

Değeri için, hesap makineleri (genellikle) ikili olarak dahili olarak çalışmaz ve dönüştürmezler, doğrudan BCD'de çalışırlar. Dört bit dilim bir ALU'ya yeterlidir (aslında Intel 4004'ün orijinal işi buydu).
Spehro Pefhany

6

İşte böyle yaptım.

Bileşenleri seçin:

Input Device(Benim durumumda 4x4 tuş takımı. Rakamlar için 10 tuş, operatörler için 4 tuş, biri '=' ve biri 'sıfırlama / yenileme' için)

Processor(8 bit AVR)

Output device(16x2 LCD)

Power supply(9volt batarya ile LM7805 regülatörü)

BreadBoard(çalışmaya başladıktan sonra PCB yapın)

Kişisel seçim meselesi olarak mecliste (öğrenmeyi) programlamayı seçtim. AVR Studio 4'ü IDE olarak ve onaltılık AVR'ye yanıp sönmek için evde pişmiş bir lpt tabanlı 'ISS' programlayıcı kullandım.

sonra LCD ve tuş takımı için sürücüler yazdım. Girdi almak ve çıktı üretmek mümkün olduğunda, ondalık sayılar ve işleçlerde ayrıştırma başladı, sonra ifadeleri ayrıştırdı ve Infix, Postfix ve Prefix yöntemleri hakkında okumak . Montajda çalıştım, böylece 'FLOAT veri tipi desteği' yoktu ve özel veri türümü (sonuç olarak RAM'de büyük bir israf oldu, 15 haneli ondalık hassasiyetini korumak için BCD tabanlı veri tipi!) Uyguladım.

Bütün bunlar ve Voila .. benim hesap makinesi hazırdı (Ben BUB adlandırdı!).

Mine 1MHz'de koştu ve casio_991MS'yi (ondalık hassasiyet ve çarpma ve bölme açısından) yenebildi.

Umarım bu diğerlerine yardım eder.


5

Yazılıma odaklanabilmeniz için tahtada bulunan her şeyi içeren bir geliştirme kiti kullanabilirsiniz. Örneğin, http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en024858&part=DM240001 bu kitte PIC, LCD ve birkaç düğme vardır. Ek düğmeler eklemek için birçok başlık vardır. Tek dezavantajı LCD daha büyük başlangıçta kullanmak isteyebilirsiniz ama kesinlikle başlayacak.

Etrafta arama yaparsanız, başlayabileceğiniz daha küçük (ve daha ucuz olanlar) bulabilirsiniz.

Bunun gibi bir kit kullanmak, bazı örnekler olacağından kodunuzu yazmaya başlamayı kolaylaştıracak ve hepsi doğru bir şekilde kurulduğundan, donanım sorunları sorununu ortadan kaldırır. Diğer bir dezavantaj, bu kitin bir hesap makinesi projesi için aşırıya kaçan yüksek son resimleri kullanmasıdır, ancak gelecekte diğer görevleri yapmak için büyümeye ve değiştirmeye yer verir. Ayrıca gelecekte kendi panolarınızı oluşturmak için başlangıç ​​noktası olarak kullanabileceğiniz şemalar verecektir.


5

Rafımda H. Edward Roberts'ın Forrest M. Mims III tarafından düzenlenen "Elektronik Hesap Makineleri" var. 1974.

İnsanların nasıl hakkında oldukça eğitici kullanılan prototip (tellerin büyük bir spagetti karışıklık), üzerinde Rubilit döşeme PCB tasarımı (fotoğrafları - 1974 Birçok fotoğrafları inşa hesap makineleri bir seri üretilen MITS hesap makinesi tam yaşam döngüsü vardır bir çizim masası), tek tek parçalar, montaj hattı, dalga lehim makinesi ve sorun giderme.

Ah, o zamandan beri birçok şey değişti. Bugünün kitapları genellikle büyük spagetti tel karmaşasından kaçınır. Günümüz hesap makineleri, şebeke voltajını doğrudan hesap makinesi PCB'sine uygulamaktan kaçınırlar.

Birçok şey hala aynı. İnsanlar hala prototipleme yaparken genellikle büyük bir spagetti tel karmaşası yaparlar.


3

Yeni başlayanlar için, ihtiyaç duyacağınız ana bileşenleri düşünmelisiniz. Muhtemelen bir mikro denetleyiciye, bir tuş takımına ve bir LCD ekrana ihtiyacınız olacaktır. Bu bileşenleri seçtikten sonra, ürün yazılımını geliştirmek kadar basit olmalıdır.


Sağlayabileceğiniz daha fazla ayrıntı, elektronik üretimi söz konusu olduğunda tamamen acemi olduğumu ve bu zorluğu ilk olarak almak istiyorum. Yukarıda verdiğiniz bilgilerle harika bir başlangıç, ancak hangi mikrodenetleyiciye ihtiyacım olacağını bilmiyorum. Ayrıca, bir bellenim nasıl geliştirilir? Ürün yazılımını C olarak mı yazıyorsunuz ve ürün yazılımına mı yüklüyorsunuz, yoksa ASM'ye mi yazmanız gerekiyor?
Philoxopher

Ayrıca hobi uzmanları için çok ucuz bir fiyata elektronik ekipman satan iyi bir web sitesi sağlayabilir misiniz? Desteğiniz için teşekkür ederiz!
Philoxopher

İki ana hobi mikrodenetleyici PIC ve AVR'dir. Bu cihazların her ikisi için de C derleyicileri vardır. Basit bir mikrodenetleyici, tuş takımı ve LCD ile arayüz oluşturmak için yeterli Giriş / Çıkış pinine sahip olduğu sürece projeniz için çalışacaktır. Hobi uzmanı elektronik için iyi bir web sitesi SparkFun
Ryan


3

Bunun iyi bir ilk öğrenme projesi olabileceğine inanıyorum, ancak önemsiz değil ve proje boyunca üstesinden gelmek için bir dizi alt proje içerdiğinden, yol boyunca biraz öğrenmeniz gerekecek. yol.

Karar vermeniz gereken ilk tasarım engeli, bunu hangi teknoloji seviyesinde yapmak istediğinizdir? Mikrodenetleyici (büyük ölçüde kendi kendine yeterli bir mikroişlemci) veya aritmetik olmadan, aritmetik üniteler (ALU) içeren / içermeyen ayrık mantık (örn. AND, OR, NOR kapıları ve parmak arası terlik), programlanabilir mantık (CPLD, FPGA), sahip olduğum başka bir şey bahsetmedim veya dikkate alınmadı. Bu ilk olarak hesaplamaları yapmak için kullanılan teknoloji ile ilgili olmalıdır, giriş / çıkış kontrolleri çoğunlukla estetik veya maliyetten etkilenen ikincil kararlardır (LED yedi bölümlü ekranlar, LCD panel).

Dijital hesaplamayı öğrenmek için potansiyel olarak yararlı bir başlangıç ​​yeri , ilginç Clive Maxfield'ın Bilgisayarları Nasıl Matematik Yapıyor (ISBN: 0471732788) adlı çok erişilebilir kitaptır . Bu, hesaplamaları gerçekten yapmak için anlamanız gereken "yumuşak" programlama veya mantıksal düzeyde yazılmıştır.

Birisi örnek olarak uWatch (- micro-Watch ) projesinden bahsetti ve internette 1970'lerde kendi hesap makinelerini yapan elektrik mühendislerine (veya enerji verimliliği öğrencilerine) referanslar var . FPGA (programlanabilir mantık aygıtı) tabanlı bir hesap makinesi oluşturma hakkında bazı ayrıntılar da vardır .

Elektronikte (veya dijital elektroniklerde) tam bir acemi için, tasarımınızda bir başlangıç ​​noktası olarak bir mikro denetleyiciyi kullanmanızı öneririm, programlamadaki karmaşıklığı hissetmek için söz konusu kitabın web sitesine bakın (herhangi bir programlama deneyiminiz yoksa çok fazla) mikrodenetleyici için ve oradan gidin.



0

Donanım Gereksinimleri

  • Kullanıcı girişi için tuş takımı
  • Giriş ve sonucunu görüntülemek için bir LCD
    Gerçek bir hesap makinesi ürününde =, -ve M( MC , MR ve MS işlemleri için) işaretleri gibi özel karakterleri görüntülemek için özel bir LCD'ye ihtiyacınız vardır . Özel bir LCD tasarımın maliyeti 3000 $ 'dır, ancak özel olarak tasarlanmış LCD'ler diğer genel amaçlı olanlardan daha fazla ekonomi haline gelir. Projeniz sadece hobi için olduğundan, KS0108 denetleyicisine sahip genel amaçlı bir LCD kullanmanızı öneririz.
  • Çok ucuz ve özelliksiz bir mikrodenetleyici
    Çok basit görevler yapacağınız için çok temel bir denetleyiciye ihtiyacınız vardır. Ucuz bir PIC mikrodenetleyici kullanabilirsiniz.

Tasarım Adımları

  • LCD'nizi kullanın
    LCD'nizi sürmeyi yönetin. Üzerine bazı rakamlar yazın. Bunun için bir yazılım arayüzü yazın.
  • Tuş takımınızı test
    etme LCD'de yaptığınız adımları uygulayın. Tuş takımınızda yazılım kontrolünüz olduğundan emin olun.
  • Aritmetik işlemleri yapan algoritmaları yazma
    Çarpma ve bölme yapabilen bir mikrodenetleyici kullanırsanız, bu işlemleri kendiniz yapmanız gerekmez; ancak mikrodenetleyici için daha fazla ödeme yapmanız gerekiyor, öte yandan projeniz sırasında daha az öğreniyor ve daha az deneyim kazanıyorsunuz.

Daha gelişmiş aritmetik özellikler (kare köklenme, sinüs / kosinüs hesaplama, vb.) Eklemek istiyorsanız, Newton'un Yöntemi veya Taylor Serisi Genişletme'yi kullanarak ilgili hesaplama algoritmalarını uygulamanız gerekir .

Aksi takdirde, basit bir proje olacaktır. Daha önce fazla deneyiminiz yoksa, ana zorluğunuz LCD ve tuş takımınızı kullanmak olacaktır.


Kişinin hırs düzeyine bağlı olarak, çok kaba bir mikrodenetleyici oluşturmak için bir "ROM" (muhtemelen EPROM veya paralel flaş) ile birlikte birkaç vardiya kaydı ve biraz ayrık mantık kullanılabilir. Basit bir hesap makinesi, 20 veya daha fazla fiş kullanarak mümkün olabilir. biri oldukça büyük bir ROM kullanıyorsa. Tipik bir komut "kaydırma yazmacı 1 üzerindeki X çıkışı, kaydırma yazmacı 2 üzerindeki Y çıkışı, çıkış flaşörünü Z olarak ayarlaması ve daha sonra bazı kayıtların değerlerini A sabitine birleştirerek oluşturduğu adresten bir sonraki talimatı getirmesidir.
supercat

Birinin BCD eklemesini gerçekleştirmek için herhangi bir devresi olması gerekmez - hepsi kod içinde ele alınabilir. Biri ayrı ayrı kontrol edilebilen iki vardiya kaydına sahipse, kaynak ve hedef işlenenlerin sıralanması için bunları gerektiği gibi ilerletin ve ardından her değerden alınan dört bitin değerlerine dayanarak CPU'yu 20 durumdan birine yerleştirmek için dört talimat kullanın; sonraki dört yönerge, hesaplanan sonucun ilk dört bitiyle bunlardan birinin üzerine yazılırken, her kaydırma yazmacından sonraki dört biti alabilir.
supercat

"Özel LCD" gereksinimine itiraz ediyorum. Hesap Makinesi LCD'leri, sadece birkaç varyasyon ile emtia öğeleri olmanın her görünümünü verir - ped aralığı, basit ve bilimsel (genellikle 8'e 10 basamak anlamına gelir). Yukarıdakilerin belirli bir seçiminde, boyutlarda veya yazı tipi stilinde biraz farklı olsalar bile, işlevsel olarak eşdeğer yüzlerce öğe düzinelerce olacaktır.
Chris Stratton

@ChrisStratton: Biri, duyuruları olmayan 8 haneli bir ekran istiyorsa, bu açıklamayı karşılayacak hazır parçalar mevcuttur. Tipik bir hesap makinesinde işlevsel olarak eşdeğer olan herhangi bir hazır ekran gördüğümü sanmıyorum. Hesap makinelerinin, üretilecek pimlerden daha ucuz, ancak bir DIY projesinde çalışmak daha zor olan zebra şerit bağlantılarını kullanmaya eğilimli olduğunu unutmayın.
supercat

@supercat - ucuz hesap makinelerinde kullanılan LCD'ler, zebra şeridi yerine ısıyla aktif yapışkanlı bir şerit kullanma eğilimindedir. Ve onlar vardır imalat koşular arasında takas edilebilir ölçüde standart off-the-raf ürün.
Chris Stratton

0

Bir hesap makinesini uygulamanın en kolay yolu muhtemelen bir mikro denetleyici kullanmak olacaktır. Bu rotaya gitmeye karar verirseniz, ilk adım hesaplamayı yapmak için bazı kodlar bulmak olacaktır. İşlenenleri ve operatörleri kabul eden ve sonucu veren bir programa ihtiyacınız vardır. C ile yazılmış bu nispeten basit hesap makinesi modülüsize neyin gerekli olduğu hakkında bir fikir vermelidir. Bazı bitsel işlemleri ekleyebilir, çıkarabilir, çoğaltabilir ve bölebilir ve bilimsel hesap makinelerinde olduğu gibi Ters Lehçe Notasyonu kullanırsanız, parantez içindeki alt ifadeleri çözebilir. Böylece hangi düğmelere basıldığını okuyacak, her rakamı gerçek sayısal değerlere dönüştüren bir tamponda toplayacak ve daha sonra "=" düğmesini aldığınızda, jeton listesini bu değerlendirme koduna beslersiniz. tek bir değerle sonuçlanan ifade.


0

Yeni başlayanlar için, projeniz için önerilen ürün ağacı:

  • Üzerinde gerekli mikro denetleyiciye sahip 1x Arduino Uno veya Leonardo kartı
  • Her HD44780yerde bulunan 16x2 olanlar gibi 1x tabanlı LCD
  • 1x 4x4 matris tuş takımı

Bu, temel bir hesap makinesinin oluşturulmasına izin verecektir.

Daha gelişmiş amaçlar için, önerilen ürün ağacım:

  • 1x Arduino Mega 2560 veya Arduino Due (program bu durumda büyük olacaktır)
  • ST7920Hem karakterleri hem de grafikleri destekleyen 1x tabanlı matris LCD
  • 1x Arduino USB Host kalkanı (sadece Mega 2560, nedeniyle yerel USB host özelliği var)

Bu, TI-83 Plus veya TI-nSpire serisi gibi ayrıntılı bir grafik hesap makinesi oluşturmanıza olanak tanır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.