background image

LABORATORIUM - ELEKTRONIKA 

TECHNIKA CYFROWA: Wykorzystanie układów scalonych: kodery, dekodery, transkodery; liczniki scalone 

 

1. 

Cel ćwiczenia 

Celem ćwiczenia jest pokazanie podstawowych rozwiązań scalonych liczników oraz koderów/dekoderów TTL, zasady 

ich działania i realizowanych przez nie funkcji, a także ich konfiguracji do działania w określony sposób. 

 

2. 

Wstęp teoretyczny 

 

2.1. 

Kodery, dekodery, transkodery 

Przesyłanie,  przetwarzanie  i  obróbka  informacji  w  systemach  cyfrowych  jest  wykonywana  w  oparciu  o  reprezentację 

odpowiednich  zmiennych w  postaci  kodów  liczbowych. Wybór  kodu  do  zastosowania  w  danej  aplikacji  zależy  od  potrzeb, 

szczególnie  chodzi  o  ułatwienie  wykonywania  operacji  na  zmiennych  w  tym  układzie  oraz  zapewnienie  ich  prawidłowości 

przy  występowaniu  zakłóceń  i  uszkodzeń  w  układzie.  Przy  wyborze  kodu  umożliwiającego  osiągnięcie  minimum  kosztów 

układu  realizującego  daną  operację  (np.  arytmetyczną)  należy  również  uwzględnić  problemy  konwersji  tego  kodu  na 

inny/inne stosowane w tym systemie. Do tego celu stosuje się właśnie układy koderów, dekoderów i transkoderów które to 

układy  mają  za  zadanie  przeliczyć  dany  kod  binarny  na  inny.  Innym  typowym  zastosowaniem  tego  typu  układów  jest 

przetworzenie informacji w danym kodzie na kod który jest „czytelny z zewnętrz”. Typowym układem tego typu jest używany 

w  ćwiczeniu  układ  7447,  który  ma  za  zadanie  przeliczać  kod  BCD  na  kod  wyświetlacza  siedmiosegmentowego.  Innym  

znanym układem scalonym podobnego zastosowania jest układ 7442 przeliczający kod BCD na kod 1 z 10. 

 

2.2. 

Liczniki 

Licznik scalony jak sama nazwa wskazuje jest układem scalonym służącym do… liczenia. Ilość bitów wyjścia danego 

układu definiuje ”do ilu” w danym układzie można liczyć. Najczęściej stosowane są liczniki 4-bitowe, co oznacza, że można 

na nich liczyć od 0000 do 1111 (binarnie), czyli od 0 do 15 (dziesiętnie). Spotyka się też liczniki scalone dekadowe, czyli 

takie które zliczają od 0000 do 1001, więc od 0 do 9. W ćwiczeniu zajmiemy się jednak licznikiem scalonym 74191 liczącym 

w pełnym zakresie 4-bitowym. W programie MultiSIM wygląda on tak jak na rysunku poniżej: 

 

 

 

Dobrze, zajmijmy się zatem działaniem tego układu. Widzimy licznik. Ma on 14 widocznych pinów. W MultiSIMie jest 

przyjęte że piny „po lewej” to wejścia, piny „po prawej” to wyjścia, więc ten układ ma jak widać 8 wejść i 6 wyjść. Należy 

pamiętać, że gdybyśmy używali tego układu w rzeczywistości to ma on jeszcze dwa dodatkowe piny, do których należałoby 

podłączyć zasilanie układu scalonego. No ale patrzymy na ten układ i… Jak go używać? No właśnie. 

background image

Należy  zrobić  to  co  się  robi  zawsze  gdy  chcemy  zidentyfikować  lub  użyć  jakiegokolwiek  układu  scalonego.  Czyli 

szukamy jego noty katalogowej, np. na 

www.datasheetcatalog.com

. Znaleziona. Przykładową notę tego układu załączono do 

instrukcji. Co w niej można znaleźć? 

Na  pewno  informację,  że  pin  CLK  to  wejście  liczące  tego  układu.  Tu  podamy  zerojedynkowy  sygnał  który  będzie 

zliczany.  To  podstawa.  Podobnie  jak  fakt,  że  piny  Q

D

,  Q

C

,  Q

B

  i  Q

A

  to  wyjścia  licznika.  To  tu  będą  się  pojawiały  kolejno 

zliczane liczby. Warto zapamiętać że zasadą jest nazewnictwo takie że Q

A

 jest bitem najmniej znaczącym. Aby użyć tego 

układu  musimy jeszcze zadbać o piny ~CTEN, ~LOAD i ~U/D. Pozostałe możemy na razie zaniedbać. Po kolei: 

 

Pin ~U/D w nocie katalogowej jest opisany jako „up/down input”. Sprawa jest banalna. Tym pinem decydujemy jak 

ma liczyć licznik tzn. w górę czy w dół. Falka przy opisie oznacza negację, czyli że aby liczyć w górę (up), na ten pin 

należy podłączyć zero, w dół (down) – jedynkę; 

 

Pin  ~LOAD  jest  opisany  jako  „asynchronous  parallel  load  input”.  Jest  to  zatem  wejście  decydujące  o  zerowaniu 

licznika,  czy  też  mówiąc  ogólniej  o  narzuceniu  licznikowi  pewnego  stanu  (który,  jak  się  przekonamy  później  – 

niekoniecznie  musi  oznaczać  zero).  Ma  on  falkę,  co  oznacza,  że  aby  wyzerować  licznik  należy  podać  tu  zero, 

natomiast żeby licznik „normalnie” zliczał, powinna być tu podana jedynka. 

 

Pin ~CTEN jest opisany jako „count enable input”. Jest to zatem wejście które „pozwala” liczyć. Też ma falkę, czyli 

żeby licznik mógł liczyć, należy tu podać zero. 

Wiemy  już  zatem  że  licznik  skonfigurowany  jak  na  rysunku  poniżej  będzie  licznikiem  który  będzie  zliczał  impulsy 

podawane na wejście CLK w górę, w zakresie od 0 do 15 i swój aktualny stan pokazywał  na wyjściach Q

D

, Q

C

, Q

B

 i Q

A

 

 

 

A co jeżeli nie chcemy liczyć do 15, a np. do 9? Wtedy właśnie wykorzystamy wejście ~LOAD. Jak już wiemy, podanie 

na ten pin logicznego zera wyzeruje układ. A skąd wziąć to zero? Powinno się ono nam pojawić „samo”, automatycznie, w 

momencie kiedy licznik doliczy do 10. Do 10, nie do 9, ponieważ licznik nie powinien być zerowany w momencie gdy doliczy 

do 9, ale w momencie gdy „przekroczy” 9. Czyli pozwalamy mu zliczyć 9, a gdy chce przeskoczyć na 10, wykrywamy to i go 

zerujemy. 

 Zatem wykrywamy dziesiętną 10 czyli binarnie 1010. 1010 które pojawia się na pinach Q

D

, Q

C

, Q

B

 i Q

A

. Wiemy że Q

A

 

jest bitem najmniej znaczącym, czyli wykrywamy następujący stan Q

D

Q

C

Q

B

Q

A

=1010. Jak to zrobić? 

Pomyślmy logicznie, dosłownie i w przenośni. Wykrywamy jeden konkretny stan – 1010. Zerujemy układ dokładnie w 

momencie gdy Q

D

=1 

i Q

C

=0 

i Q

B

 = 1 

i Q

A

=0. Kluczem jest spójnik „i”. Skoro go tam wstawiłem to chcę tam wykonać operację 

logiczną I czyli AND. Zatem wstawię do układu czterowejściową bramkę AND która wykryje ten stan.  

background image

No, prawie, zapomnieliśmy o jednym. Bramka AND daje na swoim wyjściu jedynkę gdy na jej wejściach są jedynki. A 

my mamy na pinie zerującym LOAD „falkę”, czyli zerowanie nie następuje w wyniku podania tam jedynki, lecz zera. Zatem 

musimy jeszcze odwrócić (zanegować) wyjście tej bramki. Czyli albo negujemy jej wyjście bramką NOT albo zamiast bramki 

AND wstawiamy bramkę NAND (NAND = NOT AND). To już wszystko, układ liczący od 0 do 9 wygląda tak: 

 

 

 

Na  wejścia  bramki  NAND  podaliśmy  bezpośrednio  wyjścia  licznika  Q

D

  i  Q

B

,  bo  na  tych  wyjściach  zgodnie  z  tym  co 

opisano wyżej wykrywamy jedynki, natomiast wyjścia Q

C

 i Q

A

 podaliśmy przez bramki NOT, bo tu wykrywamy zera. 

Dobrze, nauczyliśmy się zerować licznik w dowolnym momencie. Co jeszcze można z tym licznikiem zrobić? Wiemy jak 

skończyć  liczenie w  dowolnym  momencie.  A  jak  zacząć  w  dowolnym?  Jeśli  np.  chcemy  liczyć  nie  od  0,  a od  5?  Do  tego 

służą piny D, C, B i A. Jeżeli chcemy liczyć od 5 to na te piny muszę podać binarne 5 czyli DCBA=0101. Układ wygląda tak: 

 

 

 

Piny D i B są podłączone do masy, czyli do logicznego zera, natomiast piny C i A podłączone są do V

CC

 = 5 [V], czyli do 

logicznej jedynki. Układ liczy w zakresie 5-9. 

 

 

background image

To już właściwie wszystko, wiemy jak użyć licznika scalonego 74191 do liczenia w dowolnym zakresie, w górę lub w 

dół. Warto jednak jeszcze wspomnieć o pinach MAX/MIN i ~RCO. Pin MAX/MIN przechodzi w stan wysoki w momencie gdy 

licznik jest w stanie 1111, czyli doliczył do końca. Pin ~RCO („ripple clock output”) działa odwrotnie, czyli gdy licznik doliczy 

do końca przechodzi w stan niski (logiczne zero), cały pozostały czas jest w stanie wysokim. Pin ~RCO jest używany gdy 

chcemy  liczyć  dalej  niż  do  15.  Wtedy  podłączamy  go  do  wejścia  CLK  następnego  licznika  i  zamiast  liczyć  na  4  bitach, 

liczymy na 8, zatem zamiast liczyć maksymalnie do 15 możemy liczyć do 255. Układ dwóch liczników skonfigurowanych do 

liczenia w zakresie 0-255 pokazano na rysunku poniżej: 

 

 

 

Oczywiście  cały  czas  obowiązują  te  same  zasady  co  poprzednio.  Czyli  taki  układ  jak  powyżej  możemy  spokojnie 

skonfigurować  do  liczenia  w  zakresie  np.  od  34  do  134.  Różnica  jest  tylko  taka,  że  zerujemy  oba  liczniki  jednocześnie  i 

wykrywamy stan na wyjściach obu jednocześnie. 

Wszystko jasne? 

Dla treningu przeanalizujmy układ z rysunku poniżej: 

 

 

background image

OK. Mamy układ. Licznik jest jeden. 

Widzimy że jest w nim zerowanie, bo na wejście ~LOAD jest podane wyjście bramki NAND. 

Widzimy  też  że  układ  nie  liczy  od  0  bo  mamy  skonfigurowane  wejścia  DCBA.  No  to  od  tego  zacznijmy.  Na  wejścia 

DCBA podano stan 1000, czyli dziesiętnie 8. Od tej liczby zacznie liczyć ten układ. 

Idziemy dalej. Patrzymy na pin ~U/D, jest na niego podana logiczna jedynka. Aha, zatem licznik liczy w dół. 

Zostało nam sprawdzić „do ilu” liczy ten układ, czyli jaką liczbę wykrywa bramka NAND. Patrzymy na bramkę NAND – 

na jej wejścia podano bezpośrednio wyjścia Q

D

 i Q

C

, czyli tu wykrywamy jedynki. Natomiast wyjścia Q

B

 i Q

A

 podano przez 

bramkę NOT zatem tu wykrywamy 0. Dobra, składamy z tego słowo i wychodzi nam: Q

D

Q

C

Q

B

Q

A

=1100 czyli dziesiętnie 12. 

No to liczymy. 

Start. 

Zaczyna się od 8. 

Liczymy w dół, zatem dalej, po 8: 7, 6, 5, 4, 3, 2, 1, 0… 

Co po zerze? Licznik liczy w „kółko”, zatem po 0 jest: 15, 14, 13… 

Co po 13? Po 13 powinno być 12, ale 12, jak wcześniej sprawdziliśmy, jest wykrywana bramką NAND i zeruje układ. 

Zatem po 13 jest 8 (bo jak wiemy od 8 układ zaczyna). 

Podsumujmy zatem, licznik w tym układzie liczy: 8, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 8, 7, 6… i tak w kółko… 

 

Znów zapytam… Wszystko jasne? Teraz już na pewno :) 

Skoro tak, to zastanów się w jakim zakresie liczą liczniki skonfigurowane jak na rysunku poniżej: 

 

 

 

Jeśli z analizy układu wyszło że od 24 do 100 - gratulacje, umiesz konfigurować i analizować działanie liczników scalonych, 

przynajmniej kawałek kolokwium nie powinien być dla Ciebie straszny :) 

background image

3. 

Przebieg ćwiczenia 

W ćwiczeniu nie będziemy się zajmować licznikiem ‘191 lecz licznikiem ‘193. Jest to także licznik scalony liczący w 

pełnym zakresie 4-bitowym, konfiguruje się go w sposób bardzo podobny. Spójrzmy: 

 

Piny  D,  C,  B  i  A  oraz  Q

D

,  Q

C

,  Q

B

  i  Q

A

  mają  dokładnie  takie  same  funkcje  jak  w  liczniku  ‘191,  czyli  te  pierwsze 

decydują gdzie zacząć liczyć, te drugie pokazują aktualny stan licznika. Inaczej decyduje się o kierunku zliczania, w liczniku 

‘193 po prostu podajemy sygnał na odpowiednie wejście UP lub DOWN, drugie pozostawiając wolnym. Wejście CLR (czyli 

clear) służy do zerowania licznika (nie ma ono „falki” zatem zerowanie następuje poprzez podanie tam jedynki), natomiast 

wejście ~LOAD również resetuje licznik przy czym zaczyna on wtedy liczyć nie od zera (jak przy zerowaniu przez CLR) ale 

od liczby podanej na wejścia DCBA. 

 

3.1. 

Zacznijmy w końcu liczyć. Bierzemy licznik ‘193 i podłączamy mu zasilanie (+5[V] i masę). 

3.2. 

Co  będziemy  zliczać?  Zera  i  jedynki  z  generatora.  Powiedzmy  że  chcemy  liczyć  w  górę  zatem  na  wejście  UP 

licznika podłączamy wyjście TTL output generatora częstotliwości. Mamy zatem taki prosty układ (na CLR podane 

jest zero, bowiem nie podanie sygnału to tak jak podanie jedynki i układ permanentnie by się zerował): 

 

 

 

3.3. 

Niby wszystko gra, no ale skoro chcemy zobaczyć jak układ liczy to musimy gdzieś to wyświetlić. Użyjmy zatem 

wyświetlacza siedmiosegmentowego: 

  

 

 

background image

Wyświetlacz  siedmiosegmentowy  jest  układem  w  którym  za  zaświecenie  każdego  segmentu  odpowiada  jedno 

wejście. Do sterowania takim wyświetlaczem służy układ scalony ’47, którego jedynym zadaniem jest „przetłumaczyć” kod 

binarny  8421  na  kod  tego  wyświetlacza  (więcej  o  tego  typu  układach  w  innym  ćwiczeniu).  Skoro  tak,  to  użyjmy  go  by 

„przetłumaczyć” wyjścia licznika na wejścia wyświetlacza. Nasz układ wygląda teraz tak: 

 

 

3.4. 

Montujemy i można włączać. Zasilanie i generator. Na generatorze oczywiście należy ustawić częstotliwość taką 

„że widać jak liczy”, czyli najlepiej kilka Hz. 

 

3.5. 

OK, liczy. Można zobaczyć że układ tak zmontowany zlicza impulsy sygnału z generatora w kółko, w zakresie od 0 

do 15. Warto sprawdzić jak zachowuje się układ gdy pin CLR odłączymy od zera, albo gdy podamy zero na pin 

~LOAD. 

 

3.6. 

Przerysować  do  protokołu  sposób  wyświetlania  poszczególnych  liczb -  w  zakresie  od  zera  do  15.  Widać  w  tym 

momencie jak działa układ ’47. 

 

3.7. 

Następnie należy zaprojektować i zrealizować na tym liczniku układy zliczające w zadanych przez prowadzącego 

zakresach… Powodzenia. 

Sposób konfiguracji licznika scalonego do liczenia w zadanym zakresie opisano we wstępie do ćwiczenia. 

Potrzebne do tego celu bramki logiczne NAND i NOT są w zestawie kostek ćwiczeniowych (7404 i 7420). 

Zaprezentować prowadzącemu poprawność zliczania zadanych układów. 

 

background image

4. 

Opracowanie wyników 

 

4.1. 

Zaprojektować na dwóch licznikach ‘191 układ zliczający w dół w zakresie od B do A, gdzie: A – dzień miesiąca w 

którym wykonano ćwiczenie, B = 255 - A. 

 

4.2. 

Na podstawie przerysowanego sposobu wyświetlania liczb z użyciem dekodera ’47 wypełnić tabelę: 

wyjścia 

wejścia 

 

dziesiętnie 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10 

 

 

 

 

 

 

 

11 

 

 

 

 

 

 

 

12 

 

 

 

 

 

 

 

13 

 

 

 

 

 

 

 

14 

 

 

 

 

 

 

 

15 

 

 

 

 

 

 

 

 

Sprawdzić prawidłowość działania tego układu (na podstawie porównania z notą katalogową (do pobrania z [7]) – 

NIE załączać noty do sprawozdania!). 

 

4.3. 

Zaprojektować  układ  czterobitowego  konwertera  naturalnego  kodu  dwójkowego  (BCD)  na  kod  wyświetlacza 

siedmiosegmentowego (czyli układ realizujący układ według powyższej tabeli), lecz z poprawionym wyświetlaniem 

liczb 6 i 9, wykorzystując wyłącznie bramki NAND. 

 

4.4. 

Zaprojektować układ trzybitowego konwertera naturalnego kodu dwójkowego (BCD) na kod dwójkowy refleksyjny 

(Graya) z wykorzystaniem wyłącznie bramek NOR. 

 

4.5. 

Zaprojektować  układ  czterobitowego  konwertera  kodu  6421  na  naturalny  kod  dwójkowy  (BCD,  czyli  8421)  z 

wykorzystaniem dowolnych bramek logicznych. 

 

4.6. 

Mile widziane dodatkowe wnioski i przemyślenia. 

background image

5. 

Co trzeba wiedzieć na temat liczników?  

 

Jak  skonfigurować  licznik  scalony  do  liczenia  w  dowolnym  zakresie  w  górę  lub  w  dół.  Czyli  trzeba  umieć 

rozwiązać zadanie typu: 

Dany jest licznik ‘191. Skonfiguruj go tak, by liczył w dół w zakresie od 11 do 4: 

 

 

 

 

Jak i ile liczników należy ze sobą połączyć by zwiększyć zakres zliczania. Czyli zadanie jak powyżej w wersji 

z więcej niż jednym licznikiem. Np.: 

Zbuduj na licznikach 74191 układ zliczający od 10 do 110. 

 

Oczywiście zamiast licznika 74191 w zadaniu może być licznik 74193. 

 

6. 

Co trzeba wiedzieć na temat koderów/dekoderów/transkoderów?  

 

Jak stworzyć tabelę i następnie na jej podstawie zbudować dowolny układ konwertujący między sobą zadane 

kody binarne (np. BCD, Graya, 1 z 10, 6421, 5421...). 

 

7. 

Literatura 

[1]  Filipkowski A., „Układy elektroniczne analogowe i cyfrowe”, WN-T, Warszawa 1978 

[2]  Głocki W., Grabowski L., „Pracownia podstaw techniki cyfrowej”, WSiP, Warszawa 1998 

[3]  Górecki P., „Układy cyfrowe, pierwsze kroki”, Wydawnictwo BTC, Warszawa 2004 

[4]  Kalisz  J., „Cyfrowe układy scalone w technice systemowej”, WMON, Warszawa 1997 

[5]  Pieńkos J., Turczyński J., „Układy scalone TTL w systemach cyfrowych”, WKiŁ, Warszawa 1986 

[6]  Sasal W., „Układy scalone serii UCA64/UCY74, parametry i zastosowania”, WKiŁ, Warszawa 1985 

[7]  www.datasheetcatalog.com 

 

 

Opracowanie ćwiczenia: Seweryn Lipiński