Hradla, volty, jednočipy
  • index
  • Poděkování
  • Předmluva vydavatele
  • Předmluva mentora
  • Výmluvy místo předmluvy
  • 1 Budu velkým elektronikem a budu stavět hrozně cool obvody!
    • 1.1 Blikač
    • 1.2 „Dílna“
    • 1.3 Kde nakoupit součástky?
    • 1.4 Nákupní seznam: Součástky pro blikač
  • 2 Postavte si blikač – teď už to snad půjde lépe
    • 2.1 Který rezistor je ten pravý?
    • 2.2 Měření multimetrem
    • 2.3 LED podrobněji
  • 3 Hlava, koleno, zem…
    • 3.1 „Nemá to něco společného s atomy?“
    • 3.2 Napětí
    • 3.3 Proud
    • 3.4 Vodič a nevodič
    • 3.5 Odpor
    • 3.6 Měření, měření!
    • 3.7 Ohmův zákon
    • 3.8 Výkon
    • 3.9 … a malé opáčko
    • 3.10 Zkratky u značení
    • 3.11 Vyvolená čísla
    • 3.12 Pro lepší představu
    • 3.13 Střídavý proud
    • 3.14 Zkrat
    • 3.15 Multimetr jako zkrat?
    • 3.16 Elektromagnetická indukce
    • 3.17 Značky pro schémata
  • 4 Zdroje napětí
    • 4.1 Společná zem
  • 5 Vedle sebe, za sebou
    • 5.1 Svítilna s LEDkou
    • 5.2 Sériové zapojení
    • 5.3 Dělič napětí
    • 5.4 Paralelní zapojení
    • 5.5 Kirchhof 2
    • 5.6 Baterie sériově – paralelně
    • 5.7 Potenciometr
    • 5.8 Úbytek napětí na LED
    • 5.9 Co jsou vlastně ty diody zač?
    • 5.10 Datasheet
  • 6 Základní elektronické součástky
    • 6.1 Rezistor
    • 6.2 Kondenzátor
    • 6.3 Cívka
    • 6.4 Transformátor
  • 7 Polovodiče
    • 7.1 P-N přechod
    • 7.2 Dioda
    • 7.3 Tranzistor
    • 7.4 Rozsvítíme prstem LED!
    • 7.5 Tranzistor řízený polem (FET)
    • 7.6 Šoupejte nožkou…
    • 7.7 MOSFET
    • 7.8 A to je všechno s polovodiči?
  • 8 Pouzdra elektronických součástek
    • 8.1 Co je to SMT a THT
    • 8.2 DIP, DIL
    • 8.3 Co s těmi ostatními?
  • 9 Blikač s Arduinem
    • 9.1 Když se řekne Arduino
    • 9.2 Programování Arduina
    • 9.3 Blikání Arduinem
    • 9.4 Krok zpět k drátům
    • 9.5 Arduino a EduShield
  • 10 Fotorezistor
    • 10.1 Obrácená logika
    • 10.2 Trimry
    • 10.3 Lepší řešení detektoru tmy
    • 10.4 Fotorezistor a Arduino
  • 11 Termistor
  • 12 LM35
  • 13 „Jak naučit kámen počítat“
    • 13.1 Stavebnice
    • 13.2 Logické funkce
    • 13.3 TTL a CMOS
    • 13.4 Operace s bity
    • 13.5 Booleova algebra, výroková logika
    • 13.6 Logika v číslicové technice
    • 13.7 U-káz-ka! U-káz-ka!
    • 13.8 Tlačítko a přepínač
    • 13.9 Pull Up a Pull Down
    • 13.10 Pomalé tlačítko
    • 13.11 Schmittův obvod
    • 13.12 Blokovací kondenzátor
    • 13.13 Buzení z Arduina
  • 14 Kombinační logika
    • 14.1 De Morganův zákon
    • 14.2 XOR
    • 14.3 Logické funkce dvou proměnných
    • 14.4 Vícevstupová hradla
    • 14.5 Mimochodem, když máme NAND, co ty ostatní?
    • 14.6 Zjednodušování logických výrazů
    • 14.7 AND-OR-INVERT
    • 14.8 Multiplexor
    • 14.9 Proč slučujeme přes OR?
    • 14.10 Dekodér (demultiplexor) „1-z-N“
    • 14.11 Vícebitové varianty
    • 14.12 Otevřený kolektor, třetí stav, OE
    • 14.13 Dekodéry
    • 14.14 Pojďme, budeme už fakt něco počítat!
    • 14.15 Aritmeticko-logická jednotka (ALU)
  • 15 Sedmisegmentovky LED
    • 15.1 Víc sedmisegmentovek…
  • 16 Jak vypadá hradlo uvnitř
    • 16.1 Proč zapojovat blokovací kondenzátory k napájení
    • 16.2 Negované signály
    • 16.3 MOS, CMOS
  • 17 „Plnou parou vzad!“ – „Ale jak daleko?“
    • 17.1 Ještě pípat!
  • 18 Zpětná vazba
    • 18.1 Astabi-cože?
    • 18.2 Blikač
    • 18.3 Krystalový oscilátor DIL
    • 18.4 Monostabilní klopný obvod
    • 18.5 Detektor pohybu
    • 18.6 Bistabilní klopný obvod R-S
    • 18.7 Zakázané kombinace, zpětná vazba, …
    • 18.8 Hodiny
    • 18.9 Synchronní / Asynchronní
    • 18.10 Symbol pro klopný obvod
    • 18.11 Reálný klopný obvod D: 7474
    • 18.12 Reálný latch 7475
  • 19 Panna, nebo orel?
    • 19. 1 Náhoda? Nemyslím si…
    • 19.2 Střída
    • 19.3 PWM
    • 19.4 Dělení kmitočtů
    • 19.5 Klopný obvod T
    • 19.6 Klopný obvod J-K
  • 20 Čítače
    • 20.1 Čítač s nulováním
    • 20.2 Čítače v praxi
    • 20.3 Hrací kostka
    • 20.4 Další čítače
    • 20.5 Ještě nějaké čítače?
    • 20.6 Rotační enkodér
    • 20.7 Čítač s dekodérem 1-z-10 typu 744017
    • 20.8 Počítadlo k autodráze
  • 21 Posuvné registry
  • 22 Paralelní a sériová rozhraní
    • 22.1 Buzení displeje ze sedmisegmentovek
    • 22.2 Posuvný řadič SIPO 74HCT595
  • 23 Sériová komunikace
    • 23.1 Sériová sběrnice SPI
    • 23.2 Sériová sběrnice I2C
    • 23.3 Prakticky…
    • 23.4 EduShield a displej
    • 23.5 RS-232, UART, Serial…
    • 23.6 Převodník USB na sériové rozhraní
    • 23.7 1-Wire
  • 24 Paměti
    • 24.1 7489 – 64 bitů RAM
    • 24.2 Dynamická RAM
    • 24.3 ROM, PROM a další
    • 24.4 To nejlepší z obou světů
    • 24.5 Několik tipů k pamětem
    • 24.6 Jak se zapisuje do EEPROM či FLASH?
    • 24.7 Sériové paměti
  • 25 Sériová paměť prakticky
  • 26 Hodiny reálného času
  • 27 Paměťové karty
  • 28 Logický analyzátor, logická sonda
  • 29 Elektronika a svět kolem nás
    • 29.1 Ovládáme přírodu elektronikou
    • 29.2 Příroda ovládá elektroniku
  • 30 Meteostanice
    • 30.1 Výběr součástek
    • 30.2 Špinavej trik
    • 30.3 Stavíme z polotovarů
  • 31 Bezdrátový přenos dat
    • 31.1 Vysílání na 433 MHz
    • 31.2 nRF24L01+
  • 32 Procesory, počítače, mikrořadiče
    • 32.1 Mikroprocesor 8080A
    • 32.2 Přerušení
    • 32.3 Periferie
    • 32.4 Složitější periferie
    • 32.5 Jednočipový mikropočítač
    • 32.6 Atmel AVR
    • 32.7 Další mikrokontroléry
    • 32.8 Tak málo nožiček…
    • 32.9 Programování jednočipů
  • 33 Displeje
    • 33.1 Znakový displej 1602, 2004
    • 33.2 Grafický displej 12864
    • 33.3 Další displeje
    • 33.4 Bezdrátový displej k naší meteostanici
  • 34 Klávesnice
    • 34.1 Šetříme vývody
    • 34.2 Připojujeme klávesnici od PC
    • 34.3 Matice tlačítek
    • 34.4 Postavte si třeba… kalkulačku?
  • 35 Osm tlačítek na třech vodičích
    • 35.1 Multiplexior / Demultiplexor
    • 35.2 PISO a SPI
    • 35.3 Analogová cesta
    • 35.4 R-2R
  • 36 Joystick
  • 37 ESP8266 WiFi
    • 37.1 Moduly ESP8266
    • 37.2 Převodník napěťových úrovní
    • 37.3 WeMos D1 Mini, NodeMCU
    • 37.4 Bezdrátový teploměr s WiFi
    • 37.5 Instalace podpory ESP8266 do Arduino IDE
    • 37.6 WiFi Manager
    • 37.7 Klient / server?
  • 38 Low Power
    • 38.1 Solární články
  • 39 Sigfox
    • 39.1 Co je to Sigfox?
    • 39.2 Cloudový teploměr se Sigfoxem
    • 39.3 Co s daty v Sigfoxu?
  • 40 Šťastnou cestu…
  • Přílohy
    • Nástroje a weby
    • Nákupní seznam začínajícího hobby elektronika
    • EduShield
    • Nahrání firmware do EduShieldu
    • Turris Omnia pro experimenty s elektronikou
    • Karnaughova mapa
    • „Dobré rady nad zlato“ na jednom místě
Powered by GitBook
On this page

Was this helpful?

  1. 34 Klávesnice

34.4 Postavte si třeba… kalkulačku?

Previous34.3 Matice tlačítekNext35 Osm tlačítek na třech vodičích

Last updated 5 years ago

Was this helpful?

Našel jsem hezké moduly s šestnácti tlačítky a osmimístným displejem, a když jsem přemýšlel, co z nich postavit, napadla mě, logicky, kalkulačka. Dnes existují dva hlavní způsoby stavby kalkulačky… Ne, pojďme si to říct jinak: Existují dva způsoby, jak přijít ke kalkulačce.

Zaprvé: Buď použijete tu, co máte v počítači, v mobilu, v lednici nebo kdekoli jinde, popřípadě si koupíte některou z 572 modelů, co mají v obchodech, vietnamskými večerkami počínaje. Anebo zadruhé – nějakou si postavíte.

My budeme stavět, protože nás baví elektronika. Dnes existují dva hlavní způsoby stavby kalkulačky. Jeden je opravdu retro, při něm použijete staré kalkulačkové obvody (MHB7001, MC14007), druhý je modernistický, pod heslem pokud to můžu poskládat z hotových modulů z eBay za dolar až pět včetně poštovného, tak to poskládám z modulů!

Já si takhle vyhlédl modul na fotografii. Je tam osm osmisegmentovek a šestnáct tlačítek a připojuje se to přes SPI, tedy tři dráty (+ 2 na napájení). Až ho budete hledat na eBay či AliExpressu, hledejte „keyboard display TM1638“.

Všimněte si, jak jsem ho k Arduinu připojil.

Na Arduinu najdete speciální konektor s šesti piny (2 × 3), označený ICSP. Je tam + 5 V a zem, jsou tam tři datové vývody (11, 12 a 13) a RESET. Pokud zrovna nehodláte programovat jednočip, tak jsou volné a jsou natvrdo připojené na piny, kde je vyvedené rozhraní SPI.

Zmíněný modul používá k řízení tlačítek a displeje čínský obvod TM1638. Existuje datasheet, ale v podobné situaci je nejjednodušší podívat se, jestli už není hotová knihovna pro Arduino. Většinou už ji někdo udělal. Stejně jako v tomto případě.

Všechno propojte, z knihovny otevřete příklad tm1638qyf, změňte nastavení vývodů tak, aby odpovídalo našemu zapojení, a spusťte. Nelekněte se, pokud začne displej zuřivě blikat – to je naprogramované demo!

Práce s klávesnicí je jednoduchá: knihovna vrátí šestnáctibitové číslo, kde co bit, to tlačítko. Nejnižší bit odpovídá tlačítku 1, které je „vlevo nahoře“…

Kalkulačka potřebuje 10 tlačítek pro číslice. Zbývá jich 6. Jedno tlačítko zabere „=“, zbývá jich pět. Takže máme prostor pro čtyři základní matematické operace, a to poslední tlačítko bude „C“ – tedy tlačítko na smazání chyby.

Namapujeme si je takto:

První pokus mi ukázal, že obvod by sice měl odstranit zákmity, ale nějak se mu to nedařilo, takže jsem si je ošetřil sám.

Druhý krok byla jednoduchá funkce: Když zmáčknu tlačítko s číslicí, objeví se na displeji a přidá se k už napsanému číslu. Je to jednoduchá operace: Z = 10 × Z + n. Jestli nevěříte, zkuste si to: Mám na displeji 123, zmáčknu čtyřku, výsledek by měl být 1234, a to je přeci těch původních 123 × 10 + (zmáčknutá) 4! Do téže funkce přidám omezení počtu míst (na sedm, osmou pozici nechám volnou pro symbol „mínus“).

Tlačítko C prostě jen vynuluje pracovní registr (a na displeji se objeví 0).

Až budete implementovat vlastní matematiku, bude se vám hodit pár tipů. Není to úplně triviální, jak by to na první pohled mohlo vypadat. Nezapomeňte, že kalkulačky pracují s infixovou notací, to znamená že 2 + 3 se zadává jako série stisknutí tlačítek 2, +, 3 a =. Algoritmus je tedy takový:

• Pokud uživatel stisknul číslici, přidej ji jako nejnižší řád k tomu, co je na displeji.

• Pokud uživatel stisknul C, nastav displej na 0.

• Pokud uživatel stisknul nějakou operaci, poznamenej si ji. Pak proveď předchozí uloženou operaci, ulož si mezivýsledek do registru X a zobraz ho. Zároveň při dalším stisknutí číslice nejprve vynuluj displej.

• Pokud uživatel stisknul „=“, tak proveď poslední uloženou operaci, výsledek si ulož do registru X a zobraz ho.

K tomu jen poznámka: Kalkulačka nezohledňuje (v téhle verzi) prioritu operátorů, to si můžete vyřešit za domácí úkol.

Kalkulačka potřebuje několik pracovních registrů: jednak registr X na uložení mezivýsledku, pak registr „op“ na uložení zvolené operace, a konečně registr Z, kde je obsah displeje.

Takhle z popisu by to mohlo vypadat, že při stisku tlačítka s nějakou operací se vlastně vykonává ta předchozí, a když se nad tím zamyslíte, tak to tak opravdu je. Ta aktuální se ukládá „na příště“ a provádí se ta předchozí. Tlačítko „=“ je v podstatě stejné jako jakákoli jiná operace, jen s tím rozdílem, že „na příště“ se uloží operace „nedělej nic, jen zkopíruj displej do mezivýsledku!“

Čistě pro formu si zkuste pár cvičení: upravit kalkulačku tak, aby zvládala prioritu operátorů, upravit ji tak, aby umožňovala zadat záporná čísla, upravit ji na RPN, …

RPN (Reversed Polish Notation, obrácená polská notace) je takový zápis matematických operací, kde se nejprve zadávají čísla, a teprve poté operátory. Například 2 + 3 × 4 se s RPN zadá jako 2 3 4 × +. Čísla se průběžně ukládají na zásobník, operátory si ze zásobníku berou argumenty a vrací tam výsledky.

35 Osm tlačítek na třech vodičích

Schéma a zdrojový kód najdete na

eknh.cz/calcuino
380-1.jpeg
381-1.png
382-1.png