Serwisy partnerskie:
Close icon
Serwisy partnerskie

Budowa kalkulatora TTL część 1 - schemat, montaż, opis układu

Bardzo interesujący i specyficzny projekt, który może spełniać ważną dydaktyczną funkcję w próbach zrozumienia zagadnień związanych z elektroniką cyfrową.
Article Image

Prezentowane urządzenie jest niekonwencjonalnym kalkulatorem, który nie zawiera żadnego specjalizowanego układu scalonego takiego jak: mikroprocesor, CPLD, FPGA, itd. Nie ma również typowej wyspecjalizowanej pamięci RAM ani ROM. Cała logika sterująca zrobiona jest na podstawowych układach cyfrowych w technologii TTL, takich jak: bramki logiczne, bufory, multipleksery, różnego rodzaju dekodery, przerzutniki, liczniki; rejestry przesuwające, dzielniki częstotliwości, komparatory i sumatory (fotografia 1).

Fot.1 Układay cyfrowe w technologii TTL

Mniej więcej jedna piąta z nich tworzy zaprojektowany przeze mnie procesor z 59 instrukcjami, w których może znajdować się od jednej do kilkunastu funkcji wykonawczych, które mogą być blokowane jedną z 40 funkcji warunkowych. Nietypową pamięć RAM wykonałem na 99 sztukach czterobitowych rejestrów przesuwnych 74LS194, co sumarycznie daje 396 bitów (fotografia 2).

Natomiast pamięć ROM jest pamięcią diodową o łącznej pojemności 3840 bitów (fotografia 3). Kalkulator składa się z czterech rejestrów: rejestry wprowadzania wartości A i B, które w trybie standardowym są 12-cyfrowe, rejestru pamięci M, który również jest 12-cyfrowy oraz rejestru wartości W, który jest 24-cyfrowy (dzięki temu np. mnożenie dwóch liczb 12-cyfrowych zawsze da maksymalny wynik 24-cyfrowy bez przepełnienia).

Skonstruowany przeze mnie kalkulator działa na zasadzie trójpodziału władzy: władza ustawodawcza, czyli pamięć ROM, władza wykonawcza, czyli logika dekodująca instrukcję oraz władza sądownicza, czyli logika warunkująca zdekodowaną instrukcję.

Fot.2 Pamięć RAM na rejestrach przesuwnych 74LS194

Opis słowny nie opowie wszystkiego. Zachęcam do pobrania trzech filmików, które dostępne są w Elportalu wśród materiałów dodatkowych do tego numeru EdW. Przybliżą one działanie tego niezwykłego kalkulatora oraz jego obsługę.

Pomysł na to urządzenie powstał w maju 2014 roku i spadł na mnie jak grom z jasnego nieba. Pamiętam, że nie spałem wtedy całą noc pochłonięty wymyślaniem rozwiązań układowych. Planowałem, że projekt ten ukończę w ciągu roku, jednak czas ten wydłużył się prawie sześciokrotnie. Pierwsza wersja urządzenia miała być tylko czterodziałaniowym kalkulatorem bez możliwości podglądania algorytmów. Jednak od tego odwiódł mnie mój Serdeczny Znajomy Pan Piekarski z Warszawy, który nadał temu urządzeniu charakter bardziej dydaktyczny i powiem szczerze, że trafił w dziesiątkę.

Fot.3 Pamięć ROM (diodowa)

Wielu Czytelników zapewne zapyta: czemu wyważyłem otwarte drzwi i wykonałem urządzenie w ten sposób, nie wykorzystując żadnego współczesnego specjalizowanego układu?

Odpowiedzią na to pytanie jest mój niespełniony projekt z dzieciństwa, a mianowicie robot, który budowałem też na znacznej liczbie układów TTL. Nie rozumiałem zbytnio ich działania, przez co finalnie dwuletnia praca okazała się całkowitym rozczarowaniem...

Z drugiej strony uwielbiam duże projekty robione na podstawowych „cegiełkach” elektroniki – dzięki temu wiem, jak to wszystko dokładnie działa i widzę każdy obwód z osobna. Mam wielki sentyment do elektroniki retro i dlatego cały mój projekt zrobiony jest w tym stylu. Każdy zastosowany tu element nie jest zbyt nowoczesny. Zastosowałem dużo polskich układów i tranzystorów jeszcze z CEMI, duże kondensatory elektrolityczne są z Elwy, przez te wszystkie lata szukałem stylowych elementów i kiedy tylko nadarzała się okazja – kupowałem je.

Pierwsza wersja projektu miała powstać na sześciu płytkach dwustronnych o łącznej powierzchni ponad 1,5m2 – nawet zaprojektowałem te płytki... Jednak zdałem sobie sprawę, iż wiele strategicznych połączeń będzie zbyt długich, a na elementy kondycjonujące sygnały nie było już fizycznie miejsca. Musiałem zmienić koncepcję i postanowiłem jeszcze raz zaprojektować PCB, ale tym razem jedną ośmiowarstwową o wymiarach 720mm na 500mm i grubości 2mm. Tę płytkę i również te poprzednie projektowałem ręcznie bez użycia autoroutera.

Topologia tej płytki jest następująca: warstwa zasilania, sześć warstw sygnałowych (im bardziej wymagający sygnał, tym niższa warstwa) i wylewka masy na samym dole. W związku z tym, że płytka ta była bardzo droga z racji zamówienia tylko jednej sztuki, musiałem wyeliminować jak najwięcej możliwych błędów. Poświęciłem ogromną ilość czasu na bardzo dogłębne przeanalizowanie każdego zaprojektowanego modułu, obwodu, połączeń między nimi, czego owocem było sporządzenie bardzo dokładnej, szczegółowej dokumentacji technicznej na prawie tysiącu stron A4.

To posunięcie opłaciło się, bo wyeliminowałem ponad 30 błędów różnego kalibru. Nie korzystałem z żadnej symulacji komputerowej do sprawdzania obwodów, zasadę działania różnych bloków i modułów wyobrażałem sobie w pamięci z uwzględnieniem jak najwięcej możliwych pozornych problemów. Nie będąc do końca pewny niektórych zastosowanych rozwiązań – przenosiłem je na płytkę stykową, o ile nie były zbyt skomplikowane.

Po sporządzeniu dokumentacji elektronicznej przyszedł czas na skrupulatne sprawdzenie zaimplementowanych algorytmów. Tu też krok po kroku sprawdzałem każdą instrukcję, każdą funkcje, różne zależności, itd... Również w tym przypadku powstała opasła dokumentacja, dzięki której udało mi się wyeliminować kilka błędów. Dopiero po tych zabiegach i poprawieniu wszystkich błędów na płytce zdecydowałem się ją zamówić. Płytkę zamówiłem w Chinach przez polską firmę pośredniczącą z Gdańska (laminat FR4, podwójna zielona soldermaska, warstwa opisowa od strony TOP, grubość miedzi we wszystkich warstwach 35μm).

Płytkę otrzymałem po miesiącu od zamówienia, rozpoczął się ręczny montaż kilku tysięcy elementów... Wszystkie elementy są przewlekane, nie ma żadnego elementu SMD, pod wszystkie układy scalone są wlutowane podstawki – praktycznie każda z nich ma wbudowany kondensator blokujący (zdecydowana większość elementów jest na stronie TOP, około 200 sztuk znajduje się po stronie BOTTOM – głównie tranzystorów sterujących wyświetlaczami).

Montaż zajął mi prawie trzy miesiące i powiem szczerze, przy takich gabarytach płytki i liczbie wlutowanych elementów płytka stawała się coraz bardziej ciężka i trzeba było bardzo uważać, aby jej nie uszkodzić. Na etapie montażu też pojawiło się kilka problemów z elementami, które musiałem szlifować o ułamki milimetra, aby dobrze się osadziły w swoich miejscach. Z racji tego, że miałem do polutowania około 16500 punktów lutowniczych, zużyłem prawie 0,5kg cyny!

W końcu przyszedł czas na uruchamianie... Ze względu na to, że wszystkie układy miały swoje podstawki, uruchamiałem ten projekt etapami. Tu dała o sobie znać kolejna niedogodność, a mianowicie w niektórych miejscach tak zagęściłem układy scalone, że nie mogłem ich wstawić w podstawki. Okazało się, że każdy układ DIP jest trochę dłuższy w porównaniu ze swoją podstawką, pozostało szlifowanie około stu sztuk układów...

Uruchamianie szło całkiem sprawnie i coraz więcej bloków urządzenia zaczynało działać prawidłowo. Gdy udało mi się uruchomić urządzenie w całości, przyszedł czas na finalne testy. Niestety, ujawniło się kilka błędów – czego zresztą się spodziewałem, bo przecież nic nie jest idealne... Gdzieniegdzie musiałem zmienić wartości rezystorów, w innych miejscach je dolutować, również musiałem dolutować w paru newralgicznych miejscach kilka kondensatorów o pojemności pojedynczych nF, aby zdławić niepożądane szpilki. Lecz dwa błędy okazały się bardziej skomplikowane... Jeden związany był z obliczeniami procentowymi, a drugi z algorytmem pierwiastka.

Z racji tego, że zostawiłem sobie furtki w postaci niewykorzystanych funktorów logicznych (intuicja podpowiedziała mi, żeby ich wejść nie podłączać do warstw zasilających), problemy zostały opanowane. Aby wyeliminować pierwszy błąd, wykorzystałem trzy bramki NOT, dwie AND i jedną NOR i odpowiednie połączenia z innymi obwodami wykonałem od strony druku kynarem. Przy drugim błędzie było o wiele więcej zachodu, gdyż błąd dotyczył skrojonego na miarę algorytmu. Dzięki temu, że urządzenie ma tryb diagnostyczny, mogłem znaleźć dokładną przyczynę. Okazało się, że porównywanie relacji między rejestrami wartości A i B nie było w tym miejscu, gdzie potrzeba.

Po bardzo wnikliwej analizie musiałem zastosować następujące zmiany: w pięciu instrukcjach zmodyfikować ich warunkowanie, w jednej zmienić dane BCD dla licznika CU, w dwóch zmienić adresy skoków, dwie scalić w jedną. Dzięki temu scaleniu otrzymałem wolną kolumnę w pamięci ROM, do której podłączyłem dodatkową logikę, która warunkuje w odpowiednim miejscu jedną z instrukcji skoku. Konsekwencją tej przebudowy było wylutowanie 14 diod z odpowiednich kolumn pamięci ROM i wlutowanie dodatkowych 22 diod od strony druku. Również musiałem przesunąć siedem instrukcji o jedno miejsce do przodu, a jedną kolumnę podłączyć o 15 miejsc dalej.

Przesunięcia te zrealizowałem za pomocą dodatkowej podstawki na jednym z dekoderów pamięci ROM (fizycznie ją zmodyfikowałem, lutując siedem pinów dekodera o jedno miejsce dalej). Dodatkowa logika zawiera jeden przerzutnik typu D, jedną bramkę OR i AND oraz jedną diodę przełączającą. Podobnie jak poprzednio – tu też od strony druku wykonałem połączenia kynarem do odpowiednich obwodów urządzenia.

Operacja okazała się pełnym sukcesem, w związku z czym algorytm działa prawidłowo. Ironią losu było to, że sytuacja dotycząca błędnie liczonego pierwiastka śniła mi się kilka razy w ciągu tych lat pracy nad kalkulatorem. Chciałbym też podkreślić, że ten błąd ujawniał się tylko w niektórych pierwiastkowanych liczbach – w dokumentacji dotyczącej algorytmów przeanalizowałem bardzo dokładnie przykład na √2, a tu ten błąd nie występował…

Przyszedł w końcu czas na osadzenie płyty PCB wraz z układami zasilającymi na jakimś stojanie. Zaprojektowałem stojan z płyty meblowej, wykonawstwo powierzyłem wraz z wywierceniem około setki otworów znajomemu stolarzowi. Już na bardzo wczesnym etapie zaplanowałem na PCB ponad sześćdziesiąt otworów M2 i M3, dzięki którym po zastosowaniu metalowych gwintowanych tulejek dystansowych przykręciłem ją do frontowej płyty stojana.

Po przeciwnej stronie czołowej płyty stojana przykręciłem plastikową transparentną obudowę z obwodami sieciowymi zawierającymi m.in. transformator toroidalny wraz z mostkiem Graetza na diodach Schottky’ego w stylowych metalowych obudowach DO4, potężny radiator z tranzystorami mocy oraz obsadziłem dwa wielkie kondensatory po 10 000 μF każdy.

Tu też, aż wstyd się przyznać, ale w pierwszej wersji zasilacza kupiłem transformator na specjalne zamówienie o napięciu nominalnym 5,5V (tak, żeby jak najmniej mocy wytracać na tranzystorach) i wszystkimi możliwymi sposobami nie mogłem uzyskać stabilizacji na wyjściu, zabrakło dosłownie 1,5V, które sumarycznie gubiłem na każdym przewodzie i elementach półprzewodnikowych. Trochę zwiodła mnie myśl, że przecież na tak prostym obwodzie nie da się pomylić...

Zdaję sobie sprawę, że jest to projekt karkołomny i mało kto w dzisiejszych czasach podejmuje się w pojedynkę takich zadań i to w dodatku typowo hobbystycznie. Jednak elektronika jest moją życiową pasją od niepamiętnych czasów i cały czas mnie inspiruje. Tym projektem chciałbym udowodnić, że nawet nie mając żadnego wykształcenia elektronicznego i pracując w zupełnie innej branży, w moim wypadku budowlanej, można osiągać swoje zamiary przez samodoskonalenie, zdobywanie niezbędnej wiedzy. Przede wszystkim ciężką, systematyczną pracą trzeba i można dążyć uparcie do postawionego przez siebie celu.

Spróbowałem policzyć, ile godzin zajął mi ten projekt – wyszło prawie 6000, z czego połowa to żmudna nauka na własnych błędach i ciągłe zmienianie koncepcji. Tu muszę podziękować za nieskończoną cierpliwość mojej żonie Monice...

Moim marzeniem jest zarażanie entuzjazmem i dzielenie się zdobytą wiedzą teoretyczną oraz praktyczną na bazie tego urządzenia z uczniami i studentami różnych szkół zawodowych, szkół technicznych oraz uczelni wyższych o profilu elektronicznym.

Opis układu - kalkulator TTL

Kalkulator ten realizuje następujące funkcje: niezależne wprowadzanie w aktywnym rejestrze (A lub B): cyfr od 0 do 9, ciągu 00, załączanie punktu dziesiętnego, cofanie wprowadzonych wartości, wyświetlanie liczby Pi, zmiany znaku liczby; wprowadzanie obliczonego wyniku z rejestru W do aktywnego rejestru, zamiana argumentów w rejestrach wprowadzania, kopiowanie aktywnego rejestru wprowadzania do rejestru pamięci M, kopiowanie rejestru M do aktywnego rejestru wprowadzania, kasowanie błędu ERROR, rejestru M i całego urządzenia.

Urządzenie te obsługuje następujące działania: dodawanie, odejmowanie, mnożenie, dzielenie, potęga kwadratowa, dzielenie przez odwrotność, pierwiastek kwadratowy i kompleksowe działania na procentach. Kalkulator prawidłowo obsługuje wszystkie działania na liczbach ujemnych i zgłasza wyjątki błędu ERROR, takie jak: pierwiastek kwadratowy z liczby ujemnej, dzielenie przez zero oraz w przypadku działań na procentach, takich jak dodawanie lub odejmowanie, gdy wystąpi przepełnienie.

Fot.4 Matryca diod LED

Każde wybrane działanie matematyczne obrazowane jest na matrycy diod LED, która wyświetla odpowiedni symbol (fotografia 4), klawiatura składa się z 33 przycisków (fotografia 5), które są w pełni interaktywne (te, które są podświetlone, są aktywne; reagują na daną sytuację w czasie rzeczywistym, np. nie można wprowadzić zera do aktywnego rejestru wartości, gdy nie ma włączonego punktu dziesiętnego lub nie ma już wprowadzonej przynajmniej jednej cyfry większej od zera).

Fot.5 Klawiatura kalkulatora TTL

Kalkulator ten, co jest bardzo cenną funkcją, ma tryb podglądu przetwarzających się algorytmów w czasie rzeczywistym (fotografia 6), z tego powodu rejestry wprowadzania wartości A i B są wtedy 24-cyfrowe. Tryb ten może być automatyczny, a wtedy ze zwolnioną prędkością zegara obserwujemy przetwarzające się instrukcje (trybów ustawień prędkości jest 16) lub ręczny, gdzie przeznaczonym do tego przyciskiem podajemy pojedyncze impulsy zegarowe do sekwencera.

Fot.6 Podgląd przetwarzających się algorytmów w czasie rzeczywistym - kalkulator TTL

Tryb, o którym mowa, oprócz tego, że na wyświetlaczach rejestrów obrazuje przetwarzający się algorytm, uruchamia jeszcze dodatkowo 16 wyświetlaczy, które dla odróżnienia są w kolorze zielonym (pozostałe robocze wyświetlacze są czerwone).

Wyświetlacze te wyświetlają następujące informacje: dane wyjściowe ROM wraz z aktywnym w danej chwili ich adresem – wszystko to w kodzie szesnastkowym, wartości dziesiętne trzech liczników specjalnych (licznik pozostałych cyfr do policzenia pierwiastka kwadratowego, licznik pozostałych przesunięć w cząstkowej operacji arytmetycznej takiej jak dodawanie lub odejmowanie, licznik uniwersalny używany w algorytmach do różnych funkcji), wartości dziesiętne trzech liczników argumentów (licznik ilości powtarzanych dodawań dla mnożenia, dwa liczniki powtarzanych się odejmowań, dopóki A≥B dla dzielenia i pierwiastkowania).

Oprócz tego uaktywnia się również 36 diod LED diagnostycznych, które wyświetlają chwilowy stan obwodów zaangażowanych w przetwarzający się algorytm. Są to między innymi sygnały z sekwencera, sygnały uruchomionych bieżących wariantów, sygnały egzekwowania instrukcji, sygnały obsługujące pamięć ROM, sygnały relacji między wartościami liczb rejestrów A i B oraz między ich punktami dziesiętnymi, sygnały z arytmometru oraz sygnały załączonych funkcji pomocniczych.

Również w tym trybie uaktywnia się 240 diod LED w pięciu kolorach, diody te sprzężone są bezpośrednio z kolumnami pamięci ROM. Ich kolory wskazują, jaki typ instrukcji wykonywany jest w danej chwili – mogą to być standardowe instrukcje (kolor żółty), instrukcje resetowania (kolor zielony), instrukcje ładowania równoległego (kolor pomarańczowy), instrukcje skoku (kolor niebieski) oraz instrukcje warunkowe (kolor czerwony).

Rys.1 Schemat blokowy kalkulatora TTL

Dla lepszego zrozumienia budowy i działania tego dość skomplikowanego urządzenia warto przeanalizować schemat blokowy, który bardzo uprościłem, pokazany jest on na rysunku 1. Składa się z 27 modułów, które bardzo ogólnikowo opiszę.

Moduły kalkulatora TTL - lista z opisami

  1. Aktywator/dezaktywator przycisków klawiatury kalkulatora. Obwody zawarte w tym module mają za zadanie w czasie rzeczywistym wygaszać, a co za tym idzie, wyłączać odpowiednie przyciski bądź grupy przycisków. Są to warstwy warunkowe nadrzędne o priorytetach 0 i 1, które chronią przed różnymi anomaliami, takimi jak np.: minus zero, wprowadzenie zera lub ciągu zer jako pierwszych, doprowadzenie do przepełnienia rejestrów wprowadzania, czego konsekwencją byłoby wyrzucenie najstarszej cyfry oraz wielu innych niewłaściwości, których w sumie jest szesnaście.
  2. Klawiatura kalkulatora. Moduł ten ma zadanie wykrywać interakcje ze światem zewnętrznym i wstępnie przygotować do dalszej obróbki zakodowany sygnał załączonego klawisza. Robocza klawiatura jest multipleksowana, podzielona na dwie grupy (grupa A zawiera 15 klawiszy, grupa B składa się z 16 klawiszy). Niezależnym klawiszem jest nadrzędny klawisz AC, który resetuje całe urządzenie. Również do tego modułu należy: przycisk LT, który testuje wszystko, co świeci pod filtrem z pleksi; poczwórny mikroprzełącznik, który ustawia częstotliwość zegara w trybie standardowym (wybór szesnastu prędkości zegara od 310Hz do 1,25MHz); przełączniki, które ustawiają urządzenie w tryb diagnostyczny automatyczny (kolejne cztery przełączniki umożliwiają w tym trybie wybór szesnastu prędkości zegara od 0,002Hz do 155Hz) lub krokowy ręczny – w tym trybie aktywny jest klawisz CLK, dzięki któremu możemy podawać pojedyncze sygnały zegarowe bezpośrednio do sekwencera.
  3. Sterownik klawiatury kalkulatora. Moduł ten wytwarza wszystkie sygnały sterujące multipleksowaną klawiaturą kalkulatora. Obwody w nim zawarte zapobiegają błędom w przypadku naciśnięcia więcej niż jednego przycisku (gdy wciśniemy jakikolwiek przycisk, pozostałe są automatycznie dezaktywowane). Sygnałem wyjściowym tego modułu jest impuls aktywujący pięciobitowy adres załączonego przycisku.
  4. Selektor aktywacji funkcji, procedur i programów obliczeniowych. Podstawową funkcją tego modułu jest zdekodowanie pięciobitowego adresu załączonego przycisku oraz sterowanie matrycą diod LED obrazującą wykonywane działanie matematyczne.
  5. Matryca diod LED wyświetlająca znaki działań arytmetycznych i znak równości. Moduł ten ma za zadanie graficzne wyświetlenie symboli działań takich jak: dodawanie, odejmowanie, mnożenie, dzielenie, pierwiastkowanie, potęgowanie kwadratowe, dzielenie przez odwrotność, symbol procentów przy dodawaniu, odejmowaniu, mnożeniu i dzieleniu. Matryca ma organizację 10 na 10, lecz efektywnie użytych jest w niej 88 diod (pozostałe 12 nie są potrzebne ze względu na to, że nie biorą udziału w projekcji znaku). Znak równości to dwa wiersze diod LED po 10 sztuk.
  6. Starter funkcji, procedur i programów obliczeniowych. Najważniejszym zadaniem tego modułu jest kompleksowe sterowanie pamięcią ROM. Również w tym module następuje załadowanie adresu początkowego wybranego algorytmu do odpowiedniego obszaru w pamięci stałej, w której razem zaimplementowanych jest piętnaście algorytmów.
  7. Generator sygnału zegarowego wraz z preselektorem impulsów sekwencyjnych. Moduł ten jest sercem urządzenia, dzięki generatorowi kwarcowemu i dzielnikowi częstotliwości wytwarza impulsy zegarowe o odpowiednich częstotliwościach związanych z uruchomionym trybem pracy kalkulatora. Podzespół ten wytwarza dwanaście sygnałów sekwencyjnych, które są przetwarzane w kolejnym module:
  8. Selektor impulsów sterujących cyklem programowym (sekwencer). Jest to bardzo ważna jednostka zarządzająca pracą całego urządzenia. Jest to dość skomplikowany moduł, który obsługuje cztery procedury sterujące:
    • PROCEDURA STARTOWA – Procedura ta uruchamiana jest na początku każdego przetwarzanego algorytmu w urządzeniu. Jej zadanie polega na: załadowaniu adresu początkowego wybranego algorytmu do licznika pamięci ROM, przełączeniu multipleksera obsługującego ładowane dane dla licznika pamięci ROM w tryb pobierania danych z ośmiobitowego rejestru, podwójnej inkrementacji licznika BDP (aktywne tylko w przypadku działań na procentach i przy uruchomionej procedurze programu obliczeniowego), aktywacji wariantu A (wykonywanie algorytmów), resetowaniu sekwencera. Procedura startowa uruchamiana jest tylko raz w całym przetwarzaniu wybranego algorytmu.
    • PROCEDURA STANDARDOWA – Procedura ta zawsze jest uruchamiana po procedurze startowej. Jej zadanie polega na: wpisaniu danych LSB z pamięci ROM do ośmiobitowego rejestru, wykonaniu bieżącej linijki programu, inkrementacji licznika pamięci ROM (przejście do następnej linijki programu), resetowaniu sekwencera. Procedura standardowa wykonywana jest wiele razy podczas przetwarzania wybranego algorytmu.
    • PROCEDURA SKOKU – Procedura skoku może wystąpić praktycznie w każdym miejscu wykonywanego algorytmu jeden bądź wiele razy. Jej zadanie polega na: wpisaniu danych LSB z pamięci ROM do ośmiobitowego rejestru (w tym przypadku jest to ośmiobitowy adres pamięci ROM), wykonaniu bieżącej linijki programu (w tym przypadku jest to instrukcja skoku, co w konsekwencji uruchamia wariant E), wpisaniu danych z ośmiobitowego rejestru do licznika pamięci ROM (skok do zaadresowanej komórki pamięci ROM), resetowaniu sekwencera. Po wykonaniu wszystkich kroków w tej procedurze następuje automatyczne przełączenie na procedurę standardową.
    • PROCEDURA PĘTLI INSTRUKCJI PROGRAMU – Procedura pętli instrukcji programu może wystąpić praktycznie w każdym miejscu wykonywanego algorytmu jeden bądź wiele razy. Jej zadanie polega na: wpisaniu danych LSB z pamięci ROM do ośmiobitowego rejestru, wykonaniu bieżącej linijki programu (w tym przypadku może to być aktywacja pętli CU, która uruchomi wariant C lub aktywacja pętli CARYT, która uruchomi wariant C i D), inkrementacji licznika pamięci ROM (przejście do następnej linijki programu, instrukcja w niej zawarta będzie powtarzana do momentu osiągnięcia zera przez licznik CU lub CARYT), aktywacji wariantu B (wykonywanie aktywnej pętli), resetowaniu sekwencera, wykonaniu bieżącej linijki programu objętej aktywną pętlą, tak długo, aż stan liczników CU lub CARYT zmniejszanych w kolejnym kroku osiągnie zero, zresetowaniu wariantów B, C, ewentualnie D wraz z przejściem do następnej linijki programu, kolejnym zresetowaniu sekwencera. Po wykonaniu wszystkich kroków w tej procedurze następuje automatyczne przełączenie na procedurę standardową.
  9. Sterownik znaków liczb w rejestrach. Moduł ma za zadanie zarządzać znakami „minus” w czterech rejestrach urządzenia.
  10. Sterownik punktów dziesiętnych liczb w rejestrach. Moduł ten kompleksowo steruje położeniem punktów dziesiętnych we wszystkich czterech rejestrach urządzenia. Liczniki binarne punktów dziesiętnych ADP i BDP mogą zliczać w górę i w dół, ładować dane równoległe krzyżowo pomiędzy sobą lub z liczników punktów MDP czy WDP albo z zaprogramowanych wartości. Licznik MDP obsługuje równoległe ładowanie danych z licznika ADP lub BDP. Natomiast licznik WDP może zliczać w górę i w dół oraz ładować dane równoległe z arytmometru albo z zaprogramowanych wartości. Wszystkie liczniki mogą być niezależnie resetowane.

Dokończenie artykułu w następnym numerze.

Tematyka materiału: kalkulator, układy TTL
AUTOR
Źródło
Elektronika dla Wszystkich lipiec 2020
Udostępnij
UK Logo