Bity w elektronice
Sterownik wskaźnika postępu z 10 diod LED


Bramki logiczne
Cyfrowe układy scalone TTL i CMOS
Zasilanie układów TTL i CMOS
Zjawisko hazardu w sieciach logicznych
  Projekty
Bramka sterowana OR - AND - EXOR - NAND
Czytnik klawiatury numerycznej
Konwerter kodu 8421 na kod Gray'a
Konwerter kodu Gray'a na kod 8421
8-bitowy generator bitu parzystości
Konwerter kodu BCD na kod Aikena
Konwerter kodu Aikena na kod BCD
Sterowanie wyświetlaczem kostki do gry
Sterowanie wyświetlaczem cyfrowym LED
Konwerter kodu BCD na kod 1 z 10
Sterownik wskaźnika postępu z 10 diod LED
4-bitowy multiplekser
4-bitowy demultiplekser
1-bitowy sumator

Opis

Wskaźniki postępu (ang. LED Light Bar Graph Displays) są zbudowane z kilkunastu diod LED, które zapalają się w ten sposób, iż tworzą słupek świetlny o różnych wysokościach. Stosuje się je powszechnie w sprzęcie audiowizualnym do wskazywania poziomu sygnałów wejściowych lub wyjściowych - człowiek lepiej reaguje na sygnały ilościowe (długość paska, wychylenie wskazówki), niż na liczby. Z tego powodu do dzisiaj wciąż używa się w lotnictwie wskaźniki analogowe zamiast czysto cyfrowych.

 

 

LED display  

 

 


Sam wskaźnik można zakupić jako gotowy produkt lub zbudować samemu z pojedynczych diod LED. Diody łączy się anodami lub katodami, uzyskując w ten sposób różne schematy zasilania z wyjść układów cyfrowych:

 

Wspólna anoda


dla Ud = 1,8V
otrzymujemy:

Dioda świeci przy
stanie niskim na
wyjściu bramki
sterującej

Wspólna katoda

       


dla Ud = 1,8V
otrzymujemy:

Dioda świeci przy
stanie wysokim na
wyjściu bramki
sterującej

 

Określenie funkcji logicznych

Zaprojektujemy sterownik wskaźnika postępu zbudowanego z 10 czerwonych diod LED połączonych anodami - stanem aktywnym będzie stan niski. Na wejścia sterownika podamy wartość od 0 do 10 w kodzie 8421. Na wyjściu otrzymamy sygnały sterujące poszczególnymi diodami LED wskaźnika.

 

 

Funkcje logiczne wyjść q1 ... q10 określimy na podstawie tabelki:

 

Wartość D C B A q1 q2 q3 q4 q5 q6 q7 q8 q9 q10
0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
1 0 0 0 1 0 1 1 1 1 1 1 1 1 1
2 0 0 1 0 0 0 1 1 1 1 1 1 1 1
3 0 0 1 1 0 0 0 1 1 1 1 1 1 1
4 0 1 0 0 0 0 0 0 1 1 1 1 1 1
5 0 1 0 1 0 0 0 0 0 1 1 1 1 1
6 0 1 1 0 0 0 0 0 0 0 1 1 1 1
7 0 1 1 1 0 0 0 0 0 0 0 1 1 1
8 1 0 0 0 0 0 0 0 0 0 0 0 1 1
9 1 0 0 1 0 0 0 0 0 0 0 0 0 1
10 1 0 1 0 0 0 0 0 0 0 0 0 0 0

 

Układamy tablice Karnaugha i odczytujemy z nich zminimalizowane funkcje wyjść sterownika. Funkcje sprowadzamy do operacji NAND.

 

Obszar q1
00 01 11 10
00 1 0 0 0
01 0 0 0 0
11 X X X X
10 0 0 X 0

 

 
Obszar q2
00 01 11 10
00 1 1 0 0
01 0 0 0 0
11 X X X X
10 0 0 X 0

 

Obszar q3A
00 01 11 10
00 1 1 0 1
01 0 0 0 0
11 X X X X
10 0 0 X 0

Obszar q3B
00 01 11 10
00 1 1 0 1
01 0 0 0 0
11 X X X X
10 0 0 X 0

 

Obszar q4
00 01 11 10
00 1 1 1 1
01 0 0 0 0
11 X X X X
10 0 0 X 0

 

Obszar q5A
00 01 11 10
00 1 1 1 1
01 1 0 0 0
11 X X X X
10 0 0 X 0

Obszar q5B
00 01 11 10
00 1 1 1 1
01 1 0 0 0
11 X X X X
10 0 0 X 0

 

Obszar q6A
00 01 11 10
00 1 1 1 1
01 1 1 0 0
11 X X X X
10 0 0 X 0

Obszar q6B
00 01 11 10
00 1 1 1 1
01 1 1 0 0
11 X X X X
10 0 0 X 0

 

Obszar q7A
00 01 11 10
00 1 1 1 1
01 1 1 0 1
11 X X X X
10 0 0 X 0

Obszar q7B
00 01 11 10
00 1 1 1 1
01 1 1 0 1
11 X X X X
10 0 0 X 0

Obszar q7C
00 01 11 10
00 1 1 1 1
01 1 1 0 1
11 X X X X
10 0 0 X 0

 

Obszar q8
00 01 11 10
00 1 1 1 1
01 1 1 1 1
11 X X X X
10 0 0 X 0

 

Obszar q9A
00 01 11 10
00 1 1 1 1
01 1 1 1 1
11 X X X X
10 1 0 X 0

Obszar q9B
00 01 11 10
00 1 1 1 1
01 1 1 1 1
11 X X X X
10 1 0 X 0

 

Obszar q10
00 01 11 10
00 1 1 1 1
01 1 1 1 1
11 X X X X
10 1 1 X 0

 

Podsumujmy otrzymane funkcje wyjść q sterownika:

 

 

Testowy program w języku C++

Przed przystąpieniem do budowy sieci logicznej sprawdzamy poprawność wyprowadzonych funkcji wyjść q w odpowiednio przygotowanym programie testowym w języku C++.

 

// Test funkcji dla sterownika wskaźnika postępu
//----------------------------------------------
// (C)2007 mgr Jerzy Wałaszek I-LO w Tarnowie
//----------------------------------------------

#include <iostream>

using namespace std;

int main()
{
  bool A,B,C,D,q[11];
  int i,j;
  
  cout << " D C B A | 1 2 3 4 5 6 7 8 9 10|\n"
          "---------+---------------------+\n";
  for(i = 0; i <= 10; i++)
  {

// obliczamy sygnały wejściowe

    D = (i & 8) > 0;
    C = (i & 4) > 0;
    B = (i & 2) > 0;
    A = (i & 1) > 0;
    
// obliczamy sygnały wyjściowe

    q[1]  = !!(!A&&!B&&!C&&!D);
    q[2]  = !!(!B&&!C&&!D);
    q[3]  = !!(!(A&&B)&&!C&&!D);
    q[4]  = !!(!C&&!D);
    q[5]  = !!(!(!(!A&&!B)&&C)&&!D);
    q[6]  = !!(!(B&&C)&&!D);
    q[7]  = !!(!(A&&B&&C)&&!D);
    q[8]  = !D;
    q[9]  = !(!(!A&&!B)&&D);
    q[10] = !(!A&&B&&!C&&D);
    
// wyświetlamy wyniki

    cout << " " << D << " " << C << " " << B << " " << A << " | ";
    for(j = 1; j <= 10; j++) cout << q[j] << " ";
    cout << "|\n";
  }
  cout << endl;
  return 0;
}
 D C B A | 1 2 3 4 5 6 7 8 9 10|
---------+---------------------+
 0 0 0 0 | 1 1 1 1 1 1 1 1 1 1 |
 0 0 0 1 | 0 1 1 1 1 1 1 1 1 1 |
 0 0 1 0 | 0 0 1 1 1 1 1 1 1 1 |
 0 0 1 1 | 0 0 0 1 1 1 1 1 1 1 |
 0 1 0 0 | 0 0 0 0 1 1 1 1 1 1 |
 0 1 0 1 | 0 0 0 0 0 1 1 1 1 1 |
 0 1 1 0 | 0 0 0 0 0 0 1 1 1 1 |
 0 1 1 1 | 0 0 0 0 0 0 0 1 1 1 |
 1 0 0 0 | 0 0 0 0 0 0 0 0 1 1 |
 1 0 0 1 | 0 0 0 0 0 0 0 0 0 1 |
 1 0 1 0 | 0 0 0 0 0 0 0 0 0 0 |
D C B A q1 q2 q3 q4 q5 q6 q7 q8 q9 q10
0 0 0 0 1 1 1 1 1 1 1 1 1 1
0 0 0 1 0 1 1 1 1 1 1 1 1 1
0 0 1 0 0 0 1 1 1 1 1 1 1 1
0 0 1 1 0 0 0 1 1 1 1 1 1 1
0 1 0 0 0 0 0 0 1 1 1 1 1 1
0 1 0 1 0 0 0 0 0 1 1 1 1 1
0 1 1 0 0 0 0 0 0 0 1 1 1 1
0 1 1 1 0 0 0 0 0 0 0 1 1 1
1 0 0 0 0 0 0 0 0 0 0 0 1 1
1 0 0 1 0 0 0 0 0 0 0 0 0 1
1 0 1 0 0 0 0 0 0 0 0 0 0 0

 

Wyprowadzone funkcje są poprawne - możemy na ich podstawie zbudować sieć logiczną.

 

Symulacja sieci logicznej

Zwróć uwagę, iż sterownik działa poprawnie tylko dla kodów wejściowych od 0 do 10. Po prostu nie określaliśmy zachowania się sieci logicznej dla pozostałych kodów.

 

Zestawienie elementów

Obciążenia wnoszone przez poszczególne wejścia: A - 1,  B - 1, C - 1,  D - 1,

 

SN7400 x 3

SN7404 x 3

SN7410 x 1

SN7420 x 1

  



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.