 | |
|
 | |  |
| 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
|
/Gaweł,
18-04-2008/
| | [Wersja do wydruku | Poleć tę stronę przyjacielowi] |
| |
|  |  |  |  | PostNuke | Wsparcie PostNuke | Programiści |  |
 
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
|
|