<< Zpět

 

  Česky: , English:

TI58 tiny - replika kalkulátoru TI-58C

>>> NEDOKONČENO <<<

Replika kalkulátoru TI-58C s procesorem ATmega8.
Přesnost výpočtů na 19 platných číslic, exponent 4 číslice.

Původně šlo o pokus, zda by se nedala naprogramovat velmi jednoduchá replika kalkulátoru TI58 do novějšího typu procesoru, ATmega8. Paměti RAM, ROM i EEPROM má tak akorát na takový úkol. Neřešil jsem proto mechanickou stránku - s tím že když se software povede, tak pak se věnuji i konstrukci. Z důvodu maximální šetrnosti kódu byl firmware programován v assembleru, s využitím optimalizací z počítače ZX Spectrum (makro jazyk). Práce šla hezky a podařilo se dosáhnout zajímavých výsledků. Bohužel v 90% práce začala docházet paměť ROM a začalo být zřejmé, že kód se celý do ROM nevejde. Navíc kód díky assembleru začal být už dost nepřehledný a začal jsem se ztrácet. Tedy jsem to nakonec vzdal, přestože moc nechybělo. Použít vyšší, větší procesor - to by už ztrácelo tu pointu. Je to škoda, protože je hotová už většina firmware, tak možná se k projektu někdy vrátím, ale spíš se budu dál věnovat jinému kalkulátoru s podstatně větším procesorem programovaném v C.

EDIT: Nakonec jsem pokračoval v assembleru, s procesorem ATmega328P, a vznikla kalkulačka ET-58.

Pozn.: Obrázky zde uvedené zvětšíte kliknutím

Vlastnosti:

Na rozdíl od originálního kalkulátoru bylo dosaženo podstatně vyšší přesnosti a rozsahu exponentu (originální kalkulátor počítá na 13 platných číslic s exponentem 2 číslice). Některé funkce byly vylepšené - např. tlačítkem '=' se opakuje poslední aritmetická operace. Program je uložen v paměti EEPROM (512 bajtů) a tak je uchován i po vypnutí napájení. Paměť RAM (1 KB) je využita z velké části pro uživatelské paměťové buňky. Paměťové buňky nesdílí prostor s pamětí programu a proto není třeba měnit mezi nimi rozdělení (vždy je přístupné vše). Každá paměťová buňka má 10 bajtů, z toho 8 bajtů je mantisa se znaménkem a 2 bajty exponent s biasem 0x8000. V koncepci kalkulátoru se nepočítá s používáním knihovních modulů. Displej lze snadno vyměnit buď za modrý nebo zelený.

Co je hotovo:

Kalkulátor lze v současném stavu používat jako běžnou kalkulačku - tj. jsou k dispozici aritmetické operace + - * /, mocnina a odmocnina y^x, přirozený a dekadický logaritmus a exponent, goniometrické funkce a reverzní goniometrické funkce (přepínatelné mezi stupni, radiány a grady), práce s pamětí (ukládání do paměťových buněk, přičítání atd.).

Co chybí:

Je jen z malé části zprovozněno programování a interpretace programu. V současném stavu lze využít jen zopakování posloupnosti kláves při spuštění od adresy 0. Nejsou funkční kódy pro řízení programu - GTO, SBR, Dsz, Labely, flagy. Nejsou funkční funkce využívající mikrokód: Op, HIR, P->R, statistika a regresní přímky.

Možná pokračování a vylepšení:

Je reálné dotáhnout do funkčního stavu programování - tj. skoky, podprogramy, labely, flagy. Na to by ještě místo v ROM mohlo být. Při další optimalizaci by bylo možné zprovoznit některé funkce mikrokódu - P->R a základní statistika, s využitím makrokódu (který je efektivnější než původní mikrokód). Dost problematické už mohou být funkce Op a HIR a složitější statistika a regrese.

Zapojení kalkulátoru lze zjednodušit vypuštěním rezistorů R4 až R8 (ve sloupcích klávesnice), které původně počítaly se sdílením sloupců se signály pro displej.

Pokud by se kalkulátor měl provozovat na baterii, bylo by možné použít tento postup: Při použití akumulátoru 3.7V může v nejjednodušším případě stačit nabíjení z USB kabelu přes odpor (ani původní TI-58 neměl dokonalejší nabíjení). Problematickým v tom případě bude displej, protože řízení kontrastu V0 vyžaduje oproti napájecímu napětí rozdíl 5V. Běžně se to řeší LCD displeji pro 3.3V, které obsahují nábojovou pumpu. Ty bývají drahé. Mnohé displeje obsahují na plošném spoji místo pro přiletování obvodu pro nábojovou pumpu - viz článek https://www.codrey.com/electronic-circuits/hack-your-16x2-lcd/ . Ovšem nejjednodušší řešení je generovat záporné napětí přímo procesorem - využít výstup multiplexu sloupce klávesnice a přes kondenzátor, diodu a odporový dělič vytvořit záporné napětí asi -1.8V, které se přivede na vstup V0 displeje. V tom případě je vhodné napětí z akumulátoru stabilizovat na 3.3V, aby zůstal kontrast stabilní i při změně napájení. Jinou alternativou je násobit napětí z baterie pro celou kalkulačku spínaným násobičem na +5V, čímž se zajistí stabilní pracovní podmínky nezávislé na napájení.

Dalším možným vylepšením je sériová Flash paměť, která může obsahovat knihovní moduly a případně i možnost ukládání uživatelských programů. Jako signály by se využily piny MOSI/MISO/CLK, ovšem v tom případě je nutné budiče sloupce klávesnice sdílet se signály DBx pro displej a jsou nutné ochranné odpory (bránící zkratu signálů při stisku více tlačítek současně; při současném zapojení se signály přepínají mezi LOW a 3D stavem, proto zkrat nehrozí a odpory nejsou nutné).

Displej:

Displej je dvouřádkový. V dolním řádku probíhá výpočet a programování, horní řádek slouží k indikací přepínačů a k zobrazení sousedních kroků paměti během programování. Zobrazené přepínače: Deg/Rad/Grd úhlová míra, Fx pevná desetinná místa 0..8, Eng/EE exponenciální mód (Eng technický mód, kdy je exponent násobkem 3), 2nd přepínač funkcí, INV inverzní operace. Na poslední pozici 1. řádku se zobrazuje aktuálně prováděná aritmetická operace.

Zapojení:

Konektor USB je využit pouze k napájení kalkulačky +5V. Odpory R4 až R8 nejsou nutné, výstupy COLx se přepínají mezi stavy LOW a 3D, nehrozí tedy zkrat mezi nimi. Krystal lze vypustit a namísto něj využít interní RC oscilátor 8 MHz, rychlost kalkulátoru bude i tak značná (pracuje podstatně rychleji než původní kalkulátor).

Konstrukce:

Pro maximální zjednodušení konstrukce byly jako tlačítka využity mikrospínače bez hmatníku, pouze vystupující nad plochu kalkulátoru. Displej se připojuje přes pinovou lištu, aby byl snadný přístup k desce. Umožňuje to snadnou výměnu displeje - byl testován modrý i zelený LCD displej. Plošný spoj stačí jednostranný, s několika drátovými propojkami. Velikost plošného spoje je podřízena omezení rozměru Eagle Free a použitému plošnému spoji 10x7.5 cm.

dolní strana:

horní strana (stačí drátové propojky):

osazení:

potisk:

štítky pod tlačítky:

plošný spoj (okraje se mi podleptaly, protože mají slabší vrstvu fotorezistu, bylo nutné "dodrátování"):

Deska je přišroubována ke spodnímu dílu krabičky:

osazená deska a konektor pro displej:

displej je k desce připevněn distančním sloupkem:

lze použít modrý nebo zelený displej:

Downloady

Zdrojové kódy TI58tiny s firmware

Schéma zapojení v Eagle Free

Grafické podklady (schéma a plošný spoj)

Kompletní download podkladů (včetně www stránky)

Použité součástky

Součet ceny za vše asi 400 Kč (včetně krabičky, fotocuprextitu, mikrospínače s využitím množstevní slevy za 50 ks).

Miroslav Němeček

<< Zpět