| STRONA GŁÓWNA | MAPA SERWISU | FORUM ELPORTALU | ElCafe |
element.14
Telewizja przemysłowa
03 Wrz 2010 - 04:27
N0003c2
Last Updated : 2008-04-30 22:14:54 (3850 read)
Wyświetlacz stanu
szyny danych
Jednym z zastosowań układów pamięci tylko do odczytu jest realizacja różnego rodzaju przekodowań, czyli zamiany jednego kodu liczbowego na inny. Opisane niżej urządzenie przetwarza liczbę 8-bitową na postać, która jest prezentowana na wyświetlaczu 7-segmentowym w kilku formatach zapisu. Trudno jest sobie wyobrazić prostsze rozwiązanie, w którym dokonywane są operacje pozwalające na zamianę jednego kodu na inny. Koncepcyjnie zagadnienie nie jest skomplikowane i możliwa jest jego realizacja w oparciu o typowe bramki logiczne. Jedyna trudność w sprzętowej realizacji dotyczy liczby potrzebnych układów logicznych. Sądzę, że duże kilkadziesiąt (może nawet kilkaset) bramek nie będzie liczbą przesadzoną. Użycie pamięci stałej sprowadza całość do zastosowania jednego układu (w sensie zespołu przetwarzającego kod).
Zadaniem urządzenia jest przedstawienie na 4-cyfrowym 7-segmentowym wyświetlaczu LED analizowanej liczby 8-bitowej (przykładowo 8-bitowe liczby są powszechnie stosowane w systemach mikroprocesorowych). Na liczbę reprezentowaną przez zbiór 8 stanów logicznych można spojrzeć na kilka sposobów:
  • liczbę w kodzie naturalnym binarnyn wyświetloną w notacji szesnastkowej,
  • liczbę w kodzie naturalnym binarnym wyświetloną w notacji dziesiętnej,
  • liczbę w kodzie U2 wyświetloną w notacji dziesiętnej.
Poniższe urządzenie realizuje tą funkcjonalność. Składa się ono z kilku zespołów. Pierwszy zespół (rysunek 1) jest wejściowym 8-bitowym interfejsem równoległym.

Rys.1: Bufor wejściowy

Stan szyny danych (reprezentowanej przez sygnały DAT0M .. DAT7M z rysunku 1) podlega dalszemu przetworzeniu.

Rys.2: Układ przetwarzający liczby (powiększenie)

Dostarczona liczba do przekodowania (pamięć EPROM – układ U301, rysunek 2) jest przetworzona do wyświetlania multipleksowego. W oparciu o układ NE555 (U305, rysunek 2) zbudowany jest generator do takowania, przełączający wyświetlane cyfry w trybie multipleksowym. Impulsy z generatora są zliczana przez dwubitowy licznik (układ U303, rysunek 2) zbudowany w oparciu o przerzutniki typu D. Stan licznika określa numer aktualnie wyświetlanej w systemie multipleksowym cyfry na wyświetlaczu i jest doprowadzony do zespołu sterującego włączaniem kolejnych cyfr (układ U304 plus zespół tranzystorowy, rysunek 2). Jednocześnie informacja o numerze wyświetlanej cyfry jest doprowadzona do pamięci EPROM. Dodatkowo do pamięci dochodzi informacja (z zespołu obsługi klawiatury, rysunek 3) określająca w jakim systemie ma być wyświetlona liczba. Uzyskana z pamięci kombinacja poprzez układ ULN2803 (U302) dostarczona jest do zespołu wyświetlacza (reprezentowanego na schemacie złączem P301).

Rys.3: Obsługa klawiatury

Klawiatura działa w oparciu o proste przerzutniki RS w ten sposób, że naciśnięcie jednego z przycisków powoduje przejście danego przerzutnika do stanu wyróżnionego (stanem tym jest logiczne zero).
Schemat zespołu wyświetlacza pokazuje rysunek 4.

Rys.4: Zespół wyświetlacza

Do kompletu dochodzi jeszcze moduł zasilacza, którego schemat pokazany jest na rysunku 5.

Rys.5: Zespół zasilacza

Cała “magia” urządzenia zawarta jest w pamięci EPROM. By wyjaśnić zasadę działania należy popatrzeć na jej aplikację (rysunek 6).

Rys.6: Układ przekodowania


Rys.7: Układ przekodowania w rzeczywistości

Do pamięci dochodzi 8-bitowa liczba odzwierciedlająca monitorowaną szynę danych, numer wyświetlanej cyfry (z dzielnika modulo 4) oraz informacja o sposobie wyświetlenia (pochodząca z zespołu klawiatury). Doprowadzone do pamięci EPROM sygnały:
  • sygnały szyny danych mogą przyjmować każdy 8-bitowy stan,
  • sygnały określające numer cyfry mogą przyjmować każdy 2-bitowy stan,
  • sygnały trybu wyświetlania mogą przyjmować następujące stany: 110 dla wyświetlania szesnastkowego, 101 dla wyświetlania liczb dziesiętnych i 011 dla wyświetlania liczb ze znakiem.
Z racji, że informacja o trybie wyświetlania nie wypełnia wszystkich możliwych kombinacji, pewne obszary w pamięci nie powinny (teoretycznie) być użyte i jako takie są wypełnione kodem odzwierciedlającym znak '-'.
Analizując schematy można zauważyć, że za sterowanie poszczególnymi segmentami wyświetlacza odpowiedzialne są następujące bity w pamięci EPROM:

Segment

Bit pamięci

A

bit B0

B

bit B1

C

bit B2

D

bit B3

E

bit B4

F

bit B5

G

bit B6

K (kropka)

bit B7


Właściwie segment kropki nigdy nie zostanie wysterowany, więc może być pominięty w schematach (początkowo był przewidywany do sygnalizacji pracy poza dopuszczalnymi trybami, ale w efekcie ten stan jest sygnalizowany samymi minusami: segmentem G).
Sposób działania wyjaśnia następujący przykład:
Niech do wyświetlacza będzie doprowadzona liczba o następującym zapisie binarnym: 11111011. Ta liczba w zapisie szesnastkowym wynosi: FB, w zapisie dziesiętnym bez znaku jest to 251, w zapisie dziesiętnym ze znakiem jest to -5.
W pamięci EPROM w komórkach o odpowiednich adresach muszą być zapisane następujące informacje:

Adres w pamięci
[binarnie]

Znak na
wyświetlaczu

Dane w pamięci
[hex]

Znaczenie

0110011111011

5

6D

Najmłodsza cyfra z wyświetlanej liczby w kodzie U2, tu liczba -5

0110111111011

-

40

Znak z wyświetlanej liczby w kodzie U2

0111011111011

odstęp

00

Znak odstępu z wyświetlanej liczby

0111111111011

odstęp

00

Znak odstępu z wyświetlanej liczby

1010011111011

1

06

Najmłodsza cyfra z wyświetlanej liczby w kodzie NB, tu liczba 251

1010111111011

5

6D

Kolejna cyfra z wyświetlanej liczby w kodzie NB

1011011111011

2

5B

Kolejna cyfra z wyświetlanej liczby w kodzie NB

1011111111011

odstęp

00

Znak odstępu z wyświetlanej liczby

1100011111011

B

7C

Najmłodsza cyfra z wyświetlanej szesnastkowo liczby, tu FB

1100111111011

F

71

Kolejna cyfra z wyświetlanej szesnastkowo liczby

1101011111011

odstęp

00

Znak odstępu z wyświetlanej liczby

1101111111011

odstęp

00

Znak odstępu z wyświetlanej liczby


Kolor reprezentuje tryb wyświetlania, kolor reprezentuje numer cyfry na wyświetlaczu, kolor reprezentuje szynę danych.
Do zaprogramowania pamięci EPROM należałoby wklepać bez pomyłki ponad osiem tysięcy liczb. Ponieważ zawartość pamięci jest regularna (to znaczy można podać algorytm określający co i gdzie ma znajdować się w pamięci), można opracować program, który wygeneruje zawartość pamięci (program PC-towy, który wygeneruje program, po skompilowaniu którego uzyskany zostanie wsad do pamięci EPROM). Jak zwykle w takiej sytuacji niezastąpione są języki typu asembler (istnieje absolutnie pełna kontrola nad umieszczanymi danymi) oraz można “ścigać pomyłki” przez uważną lekturę wygenerowanego kodu bez konieczności programowania pamięci (trzeba przyznać, że efekt końcowy nie został osiągnięty za pierwszym razem i tekst programu trzeba było kilka razy modyfikować).
Wygenerowany tekst programu do uzyskania wsadu do pamięci EPROM należy skompilować (i zlinkować) programem z pakietu AVSIM51. Tekst programu jest następujący (we fragmentach, gdyż lektura ponad ośmiu tysięcy wierszy nie jest zajęciem zbyt fascynującym):

;
           NAME    DISPLAY
;
SEG_A      EQU     00000001B
SEG_B      EQU     00000010B
SEG_C      EQU     00000100B
SEG_D      EQU     00001000B
SEG_E      EQU     00010000B
SEG_F      EQU     00100000B
SEG_G      EQU     01000000B
SEG_K      EQU     10000000B
;
Minus      EQU SEG_G
Space      EQU 0
Digit_0    EQU SEG_A+SEG_B+SEG_C+SEG_D+SEG_E+SEG_F
Digit_1    EQU SEG_B+SEG_C
Digit_2    EQU SEG_A+SEG_B+SEG_D+SEG_E+SEG_G
Digit_3    EQU SEG_A+SEG_B+SEG_C+SEG_D+SEG_G
Digit_4    EQU SEG_B+SEG_C+SEG_F+SEG_G
Digit_5    EQU SEG_A+SEG_C+SEG_D+SEG_F+SEG_G
Digit_6    EQU SEG_A+SEG_C+SEG_D+SEG_E+SEG_F+SEG_G
Digit_7    EQU SEG_A+SEG_B+SEG_C
Digit_8    EQU SEG_A+SEG_B+SEG_C+SEG_D+SEG_E+SEG_F+SEG_G
Digit_9    EQU SEG_A+SEG_B+SEG_C+SEG_D+SEG_F+SEG_G
Digit_A    EQU SEG_A+SEG_B+SEG_C+SEG_E+SEG_F+SEG_G
Digit_B    EQU SEG_C+SEG_D+SEG_E+SEG_F+SEG_G
Digit_C    EQU SEG_A+SEG_D+SEG_E+SEG_F
Digit_D    EQU SEG_B+SEG_C+SEG_D+SEG_E+SEG_G
Digit_E    EQU SEG_A+SEG_D+SEG_E+SEG_F+SEG_G
Digit_F    EQU SEG_A+SEG_E+SEG_F+SEG_G
;
           ASEG
;
           ORG     0
;
     DB  Minus       ; adr=   0[0000]   sekc=??
     DB  Minus       ; adr=   1[0001]   sekc=??

(...)

     DB  Digit_0     ; adr=3192[0C78]   arg=120 sekc=U2  cyfra=0
     DB  Digit_1     ; adr=3193[0C79]   arg=121 sekc=U2  cyfra=0
     DB  Digit_2     ; adr=3194[0C7A]   arg=122 sekc=U2  cyfra=0
     DB  Digit_3     ; adr=3195[0C7B]   arg=123 sekc=U2  cyfra=0
     DB  Digit_4     ; adr=3196[0C7C]   arg=124 sekc=U2  cyfra=0
     DB  Digit_5     ; adr=3197[0C7D]   arg=125 sekc=U2  cyfra=0
     DB  Digit_6     ; adr=3198[0C7E]   arg=126 sekc=U2  cyfra=0
     DB  Digit_7     ; adr=3199[0C7F]   arg=127 sekc=U2  cyfra=0
     DB  Digit_8     ; adr=3200[0C80]   arg=-128 sekc=U2  cyfra=0
     DB  Digit_7     ; adr=3201[0C81]   arg=-127 sekc=U2  cyfra=0
     DB  Digit_6     ; adr=3202[0C82]   arg=-126 sekc=U2  cyfra=0
     DB  Digit_5     ; adr=3203[0C83]   arg=-125 sekc=U2  cyfra=0
     DB  Digit_4     ; adr=3204[0C84]   arg=-124 sekc=U2  cyfra=0
     DB  Digit_3     ; adr=3205[0C85]   arg=-123 sekc=U2  cyfra=0
     DB  Digit_2     ; adr=3206[0C86]   arg=-122 sekc=U2  cyfra=0

(...)

     DB  Digit_1     ; adr=3572[0DF4]   arg=-12 sekc=U2  cyfra=1
     DB  Digit_1     ; adr=3573[0DF5]   arg=-11 sekc=U2  cyfra=1
     DB  Digit_1     ; adr=3574[0DF6]   arg=-10 sekc=U2  cyfra=1
     DB  Minus       ; adr=3575[0DF7]   arg= -9 sekc=U2  cyfra=1
     DB  Minus       ; adr=3576[0DF8]   arg= -8 sekc=U2  cyfra=1
     DB  Minus       ; adr=3577[0DF9]   arg= -7 sekc=U2  cyfra=1
     DB  Minus       ; adr=3578[0DFA]   arg= -6 sekc=U2  cyfra=1
     DB  Minus       ; adr=3579[0DFB]   arg= -5 sekc=U2  cyfra=1
     DB  Minus       ; adr=3580[0DFC]   arg= -4 sekc=U2  cyfra=1
     DB  Minus       ; adr=3581[0DFD]   arg= -3 sekc=U2  cyfra=1
     DB  Minus       ; adr=3582[0DFE]   arg= -2 sekc=U2  cyfra=1
     DB  Minus       ; adr=3583[0DFF]   arg= -1 sekc=U2  cyfra=1
     DB  Space       ; adr=3584[0E00]   arg=  0 sekc=U2  cyfra=2
     DB  Space       ; adr=3585[0E01]   arg=  1 sekc=U2  cyfra=2
     DB  Space       ; adr=3586[0E02]   arg=  2 sekc=U2  cyfra=2
     DB  Space       ; adr=3587[0E03]   arg=  3 sekc=U2  cyfra=2
     DB  Space       ; adr=3588[0E04]   arg=  4 sekc=U2  cyfra=2
     DB  Space       ; adr=3589[0E05]   arg=  5 sekc=U2  cyfra=2
     DB  Space       ; adr=3590[0E06]   arg=  6 sekc=U2  cyfra=2

(...)

     DB  Minus       ; adr=3988[0F94]   arg=-108 sekc=U2  cyfra=3
     DB  Minus       ; adr=3989[0F95]   arg=-107 sekc=U2  cyfra=3
     DB  Minus       ; adr=3990[0F96]   arg=-106 sekc=U2  cyfra=3
     DB  Minus       ; adr=3991[0F97]   arg=-105 sekc=U2  cyfra=3
     DB  Minus       ; adr=3992[0F98]   arg=-104 sekc=U2  cyfra=3
     DB  Minus       ; adr=3993[0F99]   arg=-103 sekc=U2  cyfra=3
     DB  Minus       ; adr=3994[0F9A]   arg=-102 sekc=U2  cyfra=3
     DB  Minus       ; adr=3995[0F9B]   arg=-101 sekc=U2  cyfra=3
     DB  Minus       ; adr=3996[0F9C]   arg=-100 sekc=U2  cyfra=3
     DB  Space       ; adr=3997[0F9D]   arg=-99 sekc=U2  cyfra=3
     DB  Space       ; adr=3998[0F9E]   arg=-98 sekc=U2  cyfra=3
     DB  Space       ; adr=3999[0F9F]   arg=-97 sekc=U2  cyfra=3
     DB  Space       ; adr=4000[0FA0]   arg=-96 sekc=U2  cyfra=3
     DB  Space       ; adr=4001[0FA1]   arg=-95 sekc=U2  cyfra=3
     DB  Space       ; adr=4002[0FA2]   arg=-94 sekc=U2  cyfra=3
     DB  Space       ; adr=4003[0FA3]   arg=-93 sekc=U2  cyfra=3

(...)

     DB  Digit_0     ; adr=5370[14FA]   arg=250 sekc=NB  cyfra=0
     DB  Digit_1     ; adr=5371[14FB]   arg=251 sekc=NB  cyfra=0
     DB  Digit_2     ; adr=5372[14FC]   arg=252 sekc=NB  cyfra=0
     DB  Digit_3     ; adr=5373[14FD]   arg=253 sekc=NB  cyfra=0
     DB  Digit_4     ; adr=5374[14FE]   arg=254 sekc=NB  cyfra=0
     DB  Digit_5     ; adr=5375[14FF]   arg=255 sekc=NB  cyfra=0
     DB  Space       ; adr=5376[1500]   arg=  0 sekc=NB  cyfra=1
     DB  Space       ; adr=5377[1501]   arg=  1 sekc=NB  cyfra=1
     DB  Space       ; adr=5378[1502]   arg=  2 sekc=NB  cyfra=1
     DB  Space       ; adr=5379[1503]   arg=  3 sekc=NB  cyfra=1
     DB  Space       ; adr=5380[1504]   arg=  4 sekc=NB  cyfra=1
     DB  Space       ; adr=5381[1505]   arg=  5 sekc=NB  cyfra=1
     DB  Space       ; adr=5382[1506]   arg=  6 sekc=NB  cyfra=1
     DB  Space       ; adr=5383[1507]   arg=  7 sekc=NB  cyfra=1
     DB  Space       ; adr=5384[1508]   arg=  8 sekc=NB  cyfra=1
     DB  Space       ; adr=5385[1509]   arg=  9 sekc=NB  cyfra=1
     DB  Digit_1     ; adr=5386[150A]   arg= 10 sekc=NB  cyfra=1
     DB  Digit_1     ; adr=5387[150B]   arg= 11 sekc=NB  cyfra=1
     DB  Digit_1     ; adr=5388[150C]   arg= 12 sekc=NB  cyfra=1
     DB  Digit_1     ; adr=5389[150D]   arg= 13 sekc=NB  cyfra=1

(...)

     DB  Digit_4     ; adr=6388[18F4]   arg=F4 sekc=hex cyfra=0
     DB  Digit_5     ; adr=6389[18F5]   arg=F5 sekc=hex cyfra=0
     DB  Digit_6     ; adr=6390[18F6]   arg=F6 sekc=hex cyfra=0
     DB  Digit_7     ; adr=6391[18F7]   arg=F7 sekc=hex cyfra=0
     DB  Digit_8     ; adr=6392[18F8]   arg=F8 sekc=hex cyfra=0
     DB  Digit_9     ; adr=6393[18F9]   arg=F9 sekc=hex cyfra=0
     DB  Digit_A     ; adr=6394[18FA]   arg=FA sekc=hex cyfra=0
     DB  Digit_B     ; adr=6395[18FB]   arg=FB sekc=hex cyfra=0
     DB  Digit_C     ; adr=6396[18FC]   arg=FC sekc=hex cyfra=0
     DB  Digit_D     ; adr=6397[18FD]   arg=FD sekc=hex cyfra=0
     DB  Digit_E     ; adr=6398[18FE]   arg=FE sekc=hex cyfra=0
     DB  Digit_F     ; adr=6399[18FF]   arg=FF sekc=hex cyfra=0
     DB  Digit_0     ; adr=6400[1900]   arg=00 sekc=hex cyfra=1
     DB  Digit_0     ; adr=6401[1901]   arg=01 sekc=hex cyfra=1
     DB  Digit_0     ; adr=6402[1902]   arg=02 sekc=hex cyfra=1
     DB  Digit_0     ; adr=6403[1903]   arg=03 sekc=hex cyfra=1
     DB  Digit_0     ; adr=6404[1904]   arg=04 sekc=hex cyfra=1
     DB  Digit_0     ; adr=6405[1905]   arg=05 sekc=hex cyfra=1
     DB  Digit_0     ; adr=6406[1906]   arg=06 sekc=hex cyfra=1

(...)

     DB  Minus       ; adr=8189[1FFD]   sekc=??
     DB  Minus       ; adr=8190[1FFE]   sekc=??
     DB  Minus       ; adr=8191[1FFF]   sekc=??
     END

Po zaprogramowaniu pamięci EPROM, urządzenie gotowe jest do pracy.


Rys.8: Gotowe urządzenie

Pamiętając, że interfejs wejściowy ma rezystory wstępnego wymuszenia stanu logicznej jedynki, po włączeniu na wyświetlaczu pokazywana jest następująca informacja:


Rys.9: Wyświetlony wynik w notacji szesnastkowej


Rys.10: Wyświetlony wynik w notacji dziesiętnej bez znaku


Rys.11: Wyświetlony wynik w notacji dziesiętnej ze znakiem

Po podłączeniu urządzenia do monitorowanej szyny danych (w tej roli występuje zespół DIP-SWITCH) na wyświetlaczu prezentowane są następujące wyniki:
Przyjmując, że na szynie danych występuje następująca kombinacja: 10100101, to


Rys.12: Wyświetlony wynik w notacji szesnastkowej


Rys.13: Wyświetlony wynik w notacji dziesiętnej bez znaku


Rys.14: Wyświetlony wynik w notacji dziesiętnej ze znakiem

W przypadku innej kombinacji wejściowej uzyskane są następujące wyniki:


Rys.15: W notacji hex


Rys.16: Jako liczba w kodzie NB


Rys.17: Jako liczba w kodzie U2

Wsad EPROM źródłowo: DISPL.S03.
Wsad EPROM hex: DISPL.HEX.
To samo w wersji PDF: pdf.

/Gaweł, 18-04-2008/

[Wersja do wydruku | Poleć tę stronę przyjacielowi]
 PostNuke  | Wsparcie PostNuke  | Programiści  

Web site powered by PostNuke ADODB database libraryPHP Language

All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest (c) 2003 by me
This web site was made with PostNuke, a web portal system written in PHP. PostNuke jest Darmowym Oprogramowaniem na licencji GNU/GPL.
Możesz publikować u siebie nasze newsy za pomocą pliku backend.php