A KALKULUS sok tekintetben megközelíti a 70-es évek közepe-vége felé gyártott „profi” számológépek tudását. Néhány tekintetben, elsősorban a modern hardware miatt, túlszárnyalja azokat. A cél nem egy szuper-számológép elkészítése volt, hanem bizonyítani, elsősorban magamnak, hogy egy PIC mikrovezérlővel is megvalósítható egy bonyolult, tízes számrendszerű aritmetika. A processzorban még rengeteg hely (program-memória) van. Nem kis munkával és a billentyűk megfelelő újra-címkézésével, akár programozható kalkulátort is lehet készíteni. (A 30 nyomógomb kevésnek tűnhet, de vegyük figyelembe, hogy a HP Woodstock és Spice sorozatú számológépei is csak 30 gombosak.)
Műszaki adatok
Működő funkciók, függvények: | Összeadás, kivonás, osztás, szorzás, reciprok, gyökvonás, faktoriális, trigonometrikus függvények és inverzeik (szinusz, koszinusz, tangens), természetes és tízes alapú logaritmus, yx, ex, π. |
Tervezett funkciók: | Kerekítés |
Alkalmazott matematikai eljárások: |
Az alapműveleteket a saját fejlesztésű program hajtja végre. Az összes többi funkció erre a négy alapműveletre épül: – gyökvonás: Newton-Raphson módszer, – exponenciális : Taylor-sor, – trigonometrikus függvények és inverzeik: CORDIC módszer, – a faktoriális értékeket nem számolja a program. Táblázatból olvasott értékek. |
Számábrázolás a kijelzőn: | Előjel és 8 digites mantissza, előjel és 2 digites exponens, balra rendezett. |
Belső számábrázolás: | Normalizált számformátum: előjel és 1 egész valamint 12 jegyű tizedes-érték, előjel és 2 számjegyű exponens |
Műveletvégzés: | RPN, Reverse Polish Notation, azaz Fordított Lengyel Szervezés |
Memóriakapacitás: | X, Y, Z, és T „stack” regiszterek, LASTx regiszter,
10 darab memóriaregiszter. A PIC még tartalmaz több, mint 2kByte szabad RAM-ot. |
Szoftver frissítés (még nem tartalmazza):
(A szoftver frissítéshez kell egy USB-soros átalakító is.) |
A Microchip által kiadott „Bootloader” program segítségével.
(AN1310 High-Speed Bootloader for PIC16 and PIC18 Devices” |
Billentyűzet: | 30 gombos, 6 * 5–ös mátrixba rendezve |
Kijelző: | 132 * 32 pixeles grafikus kijelző (EA DOGM132L-6 vagy EA DOGM132W-6)karakterméretek:kis méret: 5*7 mátrixközepes méret: 7*9 mátrixnagy méret: 7*14 mátrix (csak a számok és az előjel) |
Méretek: | 145 * 85 * 19 mm |
Tömeg: | 160 g |
Tápellátás: | 1 darab CR2032-es lítium elem (150 mAh) |
Áramfelvétel kikapcsolva: | <10 µA (függ a kiépítéstől is) |
Áramfelvétel bekapcsolva: | < 800 µA @ 1MHz, < 8mA @ 32MHz |
Opcionális bővítések:
(A bővítésekhez szükséges programokat csak részben tartalmazza a szoftver.) |
– RTC (A PIC tartalmazza a beépített óraáramkört. A bővítéshez csak két kondenzátort és egy 32768 Hz-es rezgőkvarcot kell beforrasztani.),
– soros Flash memória (1…8 Mbyte), – piezo zümmögő. |
Hardware jellemzők
Microchip PIC18F sorozatú mikrovezérlő alkalmazása, amely 128kByte program-memóriával rendelkezik. A Kalkulus processzora: 18F27J13. Más saját készítésű számológépekben tesztelt típusok: 18F87K22, 18F67K22, 18F46K22 és 18F87J94. (A 18F46K22-es típus “csak” 64 KByte-os. Ebben nincs szorzótábla. A számológép-program ugyanolyan pontos, de kicsit lassabb.)
- 30 nyomógombos billentyűzet, 5*6-os mátrixba rendezve. 132*32 pixel-es grafikus kijelző (EA DOGM132L-6 vagy EA DOGM132W-6).
- A lehető legegyszerűbb hardware, amelynek minden eleme kereskedelmi forgalomban beszerezhető és némi kézügyességgel házilag is elkészíthető,
- Opcionális kiegészítő áramkörök: RTC, 8Mbyte soros Flash memória, zümmögő.
Software jellemzők
- PIC assembly nyelven írt forráskód az MPLAB-IDE használatával,
- Becsomagolt BCD számok használata,
- A regiszterekben (X, Y, Z, T stb.) lévő számok mindig normalizált alakúak (Itt a kalkulátor regisztereit értjük és nem a PIC egyes „file” regisztereit),
- Intenzív táblázathasználat,
- Műveletvégzés: RPN (Reverse Polish Notation) „Fordított Lengyel Szervezés” szerint,
- 1MHz-es órajel az egyszerű számításoknál, 32MHz-es órajel a hosszú számításoknál.
- Különböző iterációs módszerek alkalmazása (Taylor-sor, CORDIC stb.).
Kalkulus táblázatok
Szorzótábla (TBL_MULTIPLICATION.INC)
A Kalkulus legnagyobb méretű táblázata. Elvileg 100*100 elemet tartalmaz. A gyakorlatban ez csak 100*98 elemű táblázat. Először is, kihasználjuk azt a tényt, hogy bármely szám nullával szorozva nulla eredményt ad. Másodszor, bármely szám1-gyel szorozva: önmaga. Ezt a két speciális esetet a software figyeli. Ezek nagyon fontos kivételek, mert így a táblázat nem a H’00000’ címen kezdődik, hanem a H’00400’ címen. Különben gond lenne a program H’00000’ címről való indulásával. A H’00400’-as címig „szabad” a program-memória, így egy rövid boot-loader használata is megoldott.
A táblázat címzéséhez a szorzótényezőket használjuk. (Ezek becsomagolt BCD Byte-ok!) Az egyik szorzótényező adja a TBLPTRL értékét, míg a másik a TBLPTRH értékét. Az így kapott 16 bit-es számot meg kell szorozni 2-vel, mert az eredmény 2 Byte-os. Jó, hogy tízes számrendszert használunk, mert így jókora rések vannak a táblázatban, ahová elfér a program legnagyobb része. Tizenhatos számrendszernél a teljes program-memóriát kitöltené a táblázat.
A 2 hatványai táblázat (TBL_PWR_OF_2.INC)
Az osztásnál használatos számértékeket tartalmazza, 2^0-tól 2^43-ig. Ezeknek a számoknak a szerepét az osztás ismertetésénél részletesen tárgyaljuk.
Faktoriális táblázat (TBL_FACTORIAL.INC)
A legtöbb tudományos-kalkulátor beépített funkciója a faktoriális kiszámítása. Azok a gépek, melyeknél az exponenst értéke 00 és 99 között van, az n = 0….69 közötti természetes számok faktoriálisát tudják kiszámolni. A Kalkulus, számolás helyett, itt is egy táblázatot hív segítségül.
Reciprok faktoriális táblázat (TBL_REC_FACTORIAL.INC)
A függvények többsége kiszámítható Taylor-sor segítségével is. Ezeknél a számításoknál a faktoriális értékek a nevezőben szerepelnek. Osztás helyett gyorsabb a faktoriális érték reciprokával szorozni. Például, az ex függvény Taylor-sora a következő:
ex = 1 + x^1/1! + x^2/2! + x^3/3! + x^4/4! + x^5/5! + x^6/6! …..
Négyzetgyök táblázat (TBL_SQUARE_ROOT.INC)
A Kalkulus a négyzetgyökvonást a Newton-Raphson módszerrel számolja ki. Hogy minél kevesebb lépéssel lehessen pontos eredményt kapni, jól kell megválasztani a kezdeti értéket. Ezt a célt szolgálja ez a táblázat. A módszer a következő:
Rn+1 = (Rn + N/Rn) / 2
N = a szám, amelynek a négyzetgyökét keressük
R0 = a kezdeti érték
Arcus tangens táblázat (TBL_ARCTAN.INC)
A trigonometrikus függvények CORDIC módszerrel való kiszámításánál használatos értékek.
Állandók táblázata (TBL_CONSTANT.INC)
A számításoknál felhasznált állandók találhatók ebben a táblázatban. Például a 180 (1,800.000.000.000 * 10^2). A 180-at használja a program a fok-ban mért szögérték radiánba való átszámításakor. A jövőben ez a táblázat bővíthető fizikai állandókkal is.
Karaktertáblázat (DOGM132_CHARGEN.INC)
A számológép kijelzőjén 3-féle méretű karaktert lehet megjeleníteni. Ez a táblázat a kicsi és közepes méretű karakterek „képeit” tartalmazza. A kis karakterek a hagyományos 5*7-es méretűek. A közepes karakterek 7*9-es méretűek.
Egy számológép működésének legfontosabb része a négy alapművelet pontos és gyors elvégzése. A négy alapműveletre épül az összes többi. A Kalkulus-ban és a többi 128 kByte-os PIC-ben, a négy alapműveletet az ASMD_ROUTINES.INC alprogram hajtja végre. (A kisebb kapacitású processzorokban, mint például a PIC18F46K22, az ASMD_ROUTINES_WO_MULTBL.INC végzi el.) A négy alapművelet elvégzésének részletes leírását a K14 műveletvégzés.pdf file tartalmazza.
Utolsó módosítás: 2021. 01. 02.