Kalkulus

Kategória:

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.