8-bitowy monitor szyny danych

Projekty użytkowników forum zarówno sprzętowe, jak i związane z programowaniem w dowolnym języku.
Awatar użytkownika
gaweł
Geek
Geek
Posty: 1259
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

8-bitowy monitor szyny danych

Postautor: gaweł » sobota 10 cze 2017, 01:06

Zastosowanie pamięci EPROM.
btr1_ilu00.jpg


Jednym z zastosowań układów pamięci stałych (pamięci tylko do odczytu) jest realizacja różnego rodzaju przekodowań. Opisane niżej urządzenie przetwarza liczbę o regulowanej liczbie bitów (od 3 bitów do 8 bitów) na postać, która jest prezentowana na wyświetlaczu 7-segmentowym w kilku formatach zapisu. Pozornie zagadnienie wygląda na dosyć złożone, gdyż przetworzenie liczby binarnej przykładowo 8-bitowej na postać znakową wymaga realizacji złożonych operacji związanych z konwersją z postaci binarnej na znakową wygodną do przedstawienia na wyświetlaczu 7-segmentowym. Realizacja bazująca na użyciu mikrokontrolera nie jest zagadnieniem skomplikowanym, jednak w tym przypadku urządzenie nie zawiera żadnego mikrokontrolera.
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, jednak wymaga zastosowania dużej liczby funktorów logicznych. Użycie pamięci stałej (przykładowo EPROM) sprowadza zespół przetwarzający kod do jednego układu scalonego. Koncepcja działania jest banalnie prosta, w pamięci stałej zawarte są wszystkie możliwe przypadki w jaki sposób ma być wyświetlana informacja na wyświetlaczu. Pozostaje jedynie utworzyć prosty układ, którego zadaniem jest odczyt danych z określonych komórek pamięci EPROM i wyświetlenie ich na wyświetlaczu.
Zadaniem urządzenia jest przedstawienie na 8-cyfrowym 7-segmentowym wyświetlaczu LED analizowanej liczby 8-bitowej w kilku różnych formatach:
  • liczbę w kodzie naturalnym binarnym wyświetloną w notacji dwójkowej,
  • liczbę w kodzie naturalnym binarnym wyświetlaną w notacji liczby 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 założoną funkcjonalność.
btr1_ilu01.png

Składa się ono z kilku zespołów, schemat blokowy pokazuje ilustracja 1. Zespół wejściowy zawiera wzmacniacz logiczny separujący „wnętrze” urządzenia od monitorowanej szyny. Schemat pokazuje ilustracja 2.
btr1_ilu02.png
Wejście na każdym bicie monitorowanej szyny zawiera rezystor wymuszający stan logicznego zera. Każde nieużyte do monitorowania wejście jest „widziane” przez monitor jak stan logicznego zera. Dodatkowo pozwala to na przyłączenie urządzenia monitorującego do zespołów zasilanych ze źródła napięcie o wartości 3.3V, które nie tolerują wyższych napięć niż 3.3V.
btr1_ilu03.png
Na ilustracji 3 pokazany jest schemat panelu konfiguracyjnego, którego zadaniem jest określenie sposobu wyświetlania danych oraz liczby bitów branych pod uwagę przy przetwarzaniu informacji (szerokość monitorowanej szyny danych). Obrotowy wielosekcyjny przełącznik SW201 służy do określenie formatu wyświetlanych danych (binarnie, dziesiętnie...) steruje włączaniem świecenia odpowiedniej diody LED, co pozwoli na podświetlenie na frontpanelu ustawionego trybu oraz wypracowaniu kodu (2 bitowe dane na linii MS → Mode Select), każda pozycja ustawienia przełącznika daje na liniach wyboru inną kombinację stanów. Drugi obrotowy przełącznik wielosekcyjny SW202 służy do określenia szerokości monitorowanej szyny danych. Steruje on włączaniem świecenia odpowiedniej diody LED, co pozwoli na podświetlenie na frontpanelu ustawionej szerokości monitorowanej szyny oraz generuje 3-bitowy kod ustawionej pozycji. Przełącznik jest sześciopozycyjny i zaczynając od 8 bitów możliwości ustawień kończą się na 3 bitach (3 bitowe dane na linii BW → Bus Width), każda pozycja ustawienia daje inną kombinację stanów. Mając do dyspozycji 3 bity, istnieje możliwość uzyskania 8 różnych kombinacji, jednak tylko 6 kombinacji jest wykorzystanych (implikuje to obszary w pamięci EPROM „leżące odłogiem”).
btr1_ilu04.png
btr1_ilu05.jpg
„Mózgiem” zespołu przetwarzającego jest pamięć EPROM (U301). Do układu tego doprowadzony jest stan monitorowanej szyny danych (od A0 do A7) oraz ustawiony na frontpanelu tryb wyświetlania MS0 i MS1, stan 3-bitowego licznika służącego do multipleksowanego wyświetlania danych oraz ustawioną na frontpanelu informację o szerokości monitorowanej szyny danych. Wszystkie informacje są w kodzie naturalnym binarnym. Zapisane dane służą do odpowiedniego sterowania świeceniem poszczególnych segmentów na wyświetlaczu. Samo wyświetlanie w trybie multipleksowanym jest realizowane w oparciu o generator sygnału zegarowego (U305), 3-bitowy licznik binarny (U303), dekoder sterujący włączaniem poszczególnych cyfr na wyświetlaczu (U304). Sumaryczna liczba wejściowych danych wynosi 16 bitów, co implikuje konieczność użycia pamięci EPROM o pojemności 64kB (27C512, ilustracja 5).
Schemat samego wyświetlacza pokazany jest na ilustracji 6.
btr1_ilu06.png
Do kompletu dochodzi zasilacz impulsowy mający „na wlocie” mostek prostowniczy, co pozwala na zasilanie nawet bezpośrednio z transformatora.
btr1_ilu07.png
Do schematu została zaprojektowana płytka PCB.
btr1_ilu08.png
btr1_ilu09.png
Układ zmontowany.
btr1_ilu10.jpg
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Ostatnio zmieniony niedziela 18 cze 2017, 15:54 przez gaweł, łącznie zmieniany 2 razy.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1259
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: 8-bitowy monitor szyny danych

Postautor: gaweł » sobota 10 cze 2017, 01:41

Do działania monitora szyny niezbędne jest "wejście w stan posiadania zawartości pamięci EPROM". Jego zawartość można "wydziergać" ręcznie, ale... utworzenie ponad 65000 zapisów bez pomyłki, to ... niemożliwe. Co trzeba zrobić, by się nie narobić? Należy napisać odpowiedni program, którego zadaniem jest wytworzenie zawartości pamięci EPROM. Wygenerowana przez program zawartość pamięci EPROM zapisana jest na dysku w formacie INTEL-HEX (sam format pliku jest opisany w Format plików HEX). Program napisany jest w języku TUBOPASCAL, którego kompilator można bezpłatnie pobrać z sieci internet. Pomimo, że jest to oprogramowanie przeznaczone pod DOS, działa również w środowisku windozy. Uruchomienie programu powoduje wygenerowanie pliku o nazwie EPROM.HEX, którego zawartością należy zaprogramować pamięć EPROM o wielkości 64kB (EPROM o symbolu 27C512).
Pewnego komentarza wymaga przechowywanie danych (generowana zawartość pamięci EPROM). Naturalnym rozwiązaniem jest utworzenie tablicy o odpowiedniej liczbie komórek. Jednak jest z tym związany pewien problem. Należy pamiętać, że TURBOPASCAL (jako oprogramowanie 16-bitowe) miał limit wielkości pamięci przeznaczonej na zmienne (zmienna nie może przekraczać wielkości segmentu, czyli 64kB). Sama tablica na generowany kod wynosi dokładnie tyle, ile limit wielkości pamięci (tego problemu nie ma w windozie 32-bitowej lub 64-bitowej). Rozwiązaniem tej przykrej sytuacji jest podział tablicy na dwa kawałki (EPROMLo i EPROMHi, jako pierwsza oraz druga połowa tablicy na generowany kod) oraz zastosowanie zmiennych wskaźnikowych (obecnie w żadnym miejscu wielkość obszaru danych nie przekracza 64kB).

Kod: Zaznacz cały

type
  EPROMPartType = array [ 0 .. $7fff ] of byte ;

Var
  HexFile : text ;
  CurrentBusWidth : word ;
  EPROMLo : ^ EPROMPartType ;
  EPROMHi : ^ EPROMPartType ;

Implikuje to pewne komplikacje, gdyż obszar zmiennych należy utworzyć:

Kod: Zaznacz cały

begin
  new ( EPROMLo ) ;
  new ( EPROMHi ) ;
(...)
end.

oraz operowanie elementami tablicy wymaga trochę "zachodu".

Kod: Zaznacz cały

function GetEPROMByte ( CurrAdr : longint ) : byte ;
begin (* GetEPROMByte *)
  if CurrAdr >= $8000 then
    GetEPROMByte := EPROMHi ^ [ CurrAdr - $8000 ]
  else
    GetEPROMByte := EPROMLo ^ [ CurrAdr ] ;
end (* GetEPROMByte *) ;


procedure PutEPROMByte ( CurrAdr : longint ;
                         Data    : byte ) ;
begin (* PutEPROMByte *)
  if CurrAdr >= $8000 then
    EPROMHi ^ [ CurrAdr - $8000 ] := Data
  else
    EPROMLo ^ [ CurrAdr ] := Data ;
end (* PutEPROMByte *) ;

Załącznik: program do wygenerowania zawartości pamięci EPROM:
EPROM.ZIP

Załącznik: wygenerowany kod w formacie INTEL-HEX:
Eprom-hex.zip
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

SuperGość
Uber Geek
Uber Geek
Posty: 2346
Rejestracja: piątek 04 wrz 2015, 09:03

Re: 8-bitowy monitor szyny danych

Postautor: SuperGość » sobota 10 cze 2017, 06:27

Chyba zacznę robić zrzuty twoich artykułów żeby nie zniknęło, to w razie jakiejś odpukać "awarii".

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: 8-bitowy monitor szyny danych

Postautor: Antystatyczny » sobota 10 cze 2017, 13:47

Do schematu na ilustracji 4 wkradł się mały błąd. Linie sterujące segmentami podłączone są do układu U302 (ULN2803) w sposób nieprawidłowy. Proponuję całą szynę przesunąć o jeden pin w dół, wtedy wszystkie wyjścia układu U302 zostaną wykorzystane, a pin "DIODE" pozostanie niepodłączony. Domyślam się, że to taka pomyłka powstała przy taśmowej robocie i niemal każdy wie, do czego służy pin "DIODE", ale totalnie początkujący człowiek może się w tym miejscu pogubić.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1259
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: 8-bitowy monitor szyny danych

Postautor: gaweł » sobota 10 cze 2017, 13:55

Antystatyczny pisze:Do schematu na ilustracji 4 wkradł się mały błąd. Linie sterujące segmentami podłączone są do układu U302 (ULN2803) w sposób nieprawidłowy.

Masz słuszność, poprawiłem, dzięki.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1259
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: 8-bitowy monitor szyny danych

Postautor: gaweł » sobota 10 cze 2017, 14:43

Testy
Do testów został zbudowany układ składający się z generatora bazującego na NE555, który napędzał układ CD4060. Jest to 14-bitowy licznik, którego wyjścia są przyłączone do szyny danych monitora stanu.
btr2_ilu01.jpg

Ze względu na to, że CD4060 ma "przerwę" w wyjściach (brak jest wyjścia 8-bitu licznika Q10) na monitorze została ustawiona 7-bitowa szyna danych. Objawia się to tym, że przy wyświetlaniu binarnym jest wyświetlanych 7 cyfr, przy wyświetlaniu szesnastowym układ dochodzi do stanu 7F, przy dziesiętnym dochodzi do 127, przy wyświetlaniu w kodzie U2 od -64 do 63. Układ został przetestowany dla zasilania licznika CD4060 napięciem o wartości 5V oraz o wartości 3.3V.
Filmik prezentujący działanie.
bustra.mov
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
j23
Expert
Expert
Posty: 506
Rejestracja: czwartek 08 paź 2015, 18:40

Re: 8-bitowy monitor szyny danych

Postautor: j23 » sobota 10 cze 2017, 22:47

Ten artykuł Kolego Gaweł jest i świetny i po prostu piękny. Mam tutaj na myśli zwłaszcza bardzo konkretne (co prawda skrótowe, ale i w tym jest piękno) opisanie technologii projektowania algorytmu bez użycia mikrokontrolera (czyli prawie ręcznie, prawie, bo używamy Turbo Pascala).
A co ciekawe ostatnio przeglądałem sobie książkę taką co tutaj na miejscu kupiłem tzn.
practical-electronics-a-complete-introduction.jpg
i czytałem nt. konstruowania podstawowych elementów procesorów, czyli krótko mówiąc bramek logicznych, rejestrów pamięci, rejestrów zatrzaskowych, operacjach flip-flop (set-reset) etc. - ale co.. oczywiście mało.. No i w końcu udało mi się znaleźć fragment nt. jak to bramki są zbudowane. Tam w tej książce jest to opisane oczywiście w możliwie najprostszy sposób, bo bramka przedstawiona jest np. jako wykorzystanie jednego tranzystora, jednego rezystora, podczas gdy normalnie to (jeżeli się teraz nie mylę) jest "troszkę" to bardziej skomplikowane, no bo po pierwsze przeważnie nie korzysta się z jednego tranzystora, ale z dwóch w układzie Darlingtona i takie tam szczegóły. Niemniej zmierzam do tego, że takie rzeczy (jakkolwiek stare i niepotrzebne by komukolwiek się wydawały) warto i TRZEBA wiedzieć. Nawet chciałem po części tłumaczyć tą książkę co ciekawsze sprawy - jak te właśnie, jak to po kolei "leci" z metodologią projektowania CPU (nie wytwarzaniem, bo wiadomo że niewiele osób dysponuje narzędziami do produkcji napylania warstw, etc.).
Wiele rozdziałów z tej książki bazuje na tej stronie:
http://www.electronics-tutorials.ws/

Przepraszam, że tak trochę nieskładnie piszę, ale chodzi mi o to, że jestem wdzięczny Tobie że poruszasz w tak ciekawy, a jednocześnie dokładny takie tematy odnośnie trochę "nietypowego" projektowania. Takie sprawy naprawdę warto wiedzieć.
Wielkie dzięki za bardzo ciekawy artykuł. Kolega Wojtek ma 100% racji, zresztą ja mam taką regułę, że co ciekawsze artykuły regularnie kopiuję (całkiem sporo tego już jest u mnie) - i to jest mądre co Wojtek pisze, bo czasem faktycznie takie tutoriale -z różnych przyczyn- po prostu gdzieś giną i to jest jakaś tragedia wtedy.. A ja w swoich zbiorach mam nawet takie nieco starsze tutoriale co kiedyś Tasza na elportalu pisała, a może ktoś z Kolegów również. Mam tego od groma. Oczywiście nie publikuję tego nigdzie, do własnego użytku, chyba że zajdzie potrzeba wtedy taki backup się bardzo przydaje ;)

Pozdrawiam! j23 Jarek
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Internet łączy ludzi, którzy dzielą się swoimi zainteresowaniami, pomysłami i potrzebami, bez względu na geograficzne (przeciwności).
BOB TAYLOR, PARC

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1259
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: 8-bitowy monitor szyny danych

Postautor: gaweł » niedziela 11 cze 2017, 18:02

j23 pisze:A co ciekawe ostatnio przeglądałem sobie książkę taką co tutaj na miejscu kupiłem tzn. i czytałem nt. konstruowania podstawowych elementów procesorów, czyli krótko mówiąc bramek logicznych, rejestrów pamięci, rejestrów zatrzaskowych, operacjach flip-flop (set-reset) etc. - ale co.. oczywiście mało.. No i w końcu udało mi się znaleźć fragment nt. jak to bramki są zbudowane. Tam w tej książce jest to opisane oczywiście w możliwie najprostszy sposób, bo bramka przedstawiona jest np. jako wykorzystanie jednego tranzystora, jednego rezystora, podczas gdy normalnie to (jeżeli się teraz nie mylę) jest "troszkę" to bardziej skomplikowane, no bo po pierwsze przeważnie nie korzysta się z jednego tranzystora, ale z dwóch w układzie Darlingtona i takie tam szczegóły. Niemniej zmierzam do tego, że takie rzeczy (jakkolwiek stare i niepotrzebne by komukolwiek się wydawały) warto i TRZEBA wiedzieć. Nawet chciałem po części tłumaczyć tą książkę co ciekawsze sprawy - jak te właśnie, jak to po kolei "leci" z metodologią projektowania CPU (nie wytwarzaniem, bo wiadomo że niewiele osób dysponuje narzędziami do produkcji napylania warstw, etc.).

Pozwoliłem sobie wydzielić ciekawy i istotny wątek do Układy cyfrowe

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1259
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: 8-bitowy monitor szyny danych

Postautor: gaweł » niedziela 11 cze 2017, 19:47

j23 pisze:Ten artykuł Kolego Gaweł jest i świetny i po prostu piękny. Mam tutaj na myśli zwłaszcza bardzo konkretne (co prawda skrótowe, ale i w tym jest piękno) opisanie technologii projektowania algorytmu bez użycia mikrokontrolera (czyli prawie ręcznie, prawie, bo używamy Turbo Pascala).

To pozwolę sobie na głębsze dywagacje (spojrzenie bardziej teoretyczne ;) )

Hardware

Monitor 8-bitowej szyny danych można rozpatrywać w kategorii automatu synchronicznego. Jak każdy automat, wymaga „napędu”, czyli generatora sygnału taktującego. W tym przypadku jest to generator, którego schemat pokazuje ilustracja 1.
btr3_ilu01.PNG
Generator napędza właściwy automat (ilustracja 2). Pomimo, że układ 74HC93 jest licznikiem asynchronicznym, to należy należy rozpatrywać go w kategoriach układu synchronicznego (wewnętrzna budowa synchronicznych lub asynchronicznych liczników nie ma znaczenia a istotne jest to, że stan automatu zmienia się synchronicznie z taktem zegarowym). W sumie licznik jest 4-bitowe i wewnętrznie podzielony na dwa liczniki: jednobitowy z wejściem zegarowym na pinie 14 oraz trzybitowy z wejściem zegarowym na pinie 1. Użyty jest fragment 3-bitowy. Wyjście licznika, jako stan automatu wchodzi w układy kombinacyjne. Z punktu widzenia teorii automatów, układ 74HC93 spełnia rolę 8-stanowego automatu, gdzie automat przechodzi bezwarunkowo do kolejnego stanu a jego wyjścia są uwarunkowane jedynie jego stanem wewnętrznym (stanowi automat Moore’a).
btr3_ilu02.PNG
btr3_ilu03.PNG
Stan automatu wchodzi w interakcję z układami wyjściowymi. Sam automat bezwarunkowo przechodzi do kolejnych stanów i w oparciu o jego stan generowane są w układzie kombinacyjnym odpowiednie sterowania. Sam układ pamięci EPROM można traktować jako „zajebiście” skomplikowany układ kombinacyjny, bo w istocie taki jest. Przy wysterowaniu sygnałów Chip Enable i Output Enable (pin 20 i 22) do stanu logicznego zera, pamięć realizuje funkcję układu kombinacyjnego. Podanie na jego wejście (linie adresowe A0..A15) jakiegokolwiek stanu natychmiast (z dokładnością do propagacji „epromowych bramek”) implikuje określonym stanem na jego wyjściu (linie O0 do O7). Z punktu widzenia budowy automatów, reszta to pier...dułki. Wyjścia układu 74HC138 wchodzą w układ elementów wykonawczych, wyjścia układu 27C512 ze wzmacniaczem sygnału ULN2803 wchodzą w układ wykonawczy.
Wszystko, co wchodzi do monitora jest informacją wejściową. I tu są to:
  • 8-bitowa informacja wynikająca z monitorowanej szyny danych (ilustracja 4),
btr3_ilu05.PNG

  • 2-bitowa informacja pochodząca z przełączników (od razu jest w kodzie binarnym), ilustracja 5,
btr3_ilu04.PNG

  • 3-bitwa informacja wynikająca z przełączników; z przełączników wychodzi kod typu 1 z 6 i po przejściu przez układ bramkowy zamieniany jest na od naturalny binarny (ilustracja 6).
btr3_ilu06.PNG

Wszystkie informacje dochodzące do EPROM'a są w kodzie naturalnym binarnym.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1259
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: 8-bitowy monitor szyny danych

Postautor: gaweł » poniedziałek 12 cze 2017, 00:02

Oprogramowanie

Implikacje w budowy sprzętowej w programie generującym zawartość pamięci EPROM muszą ujmować wszystkie aspekty rozwiązania sprzętowego. Do pamięci EPROM dochodzi (ilustracja 1):
btr4_ilu01.PNG
Czyli dla kombinacji adresowej:
A15 … A0
0100000000000000 – w pamięci ma być zapisana taka kombinacja zer i jedynek, która na wyświetlaczu utworzy oczekiwaną cyfrę, w tym przypadku jest to 010 – szyna danych 8-bitowa, 000 – stan automatu 0 odpowiadający wyświetleniu cyfry skrajnie lewej, 00 – wyświetlenie w reprezentacji binarnej, 00000000 – przetwarzana liczba ma wartość 0 i na wyświetlaczu ma być zobrazowany znak '0', czyli włączony segment A, B, C, D, E, F.
Zadaniem PASCAL'owego programu jest umieszczenie w odpowiednich komórkach pamięci (reprezentowanej przez szynę adresową EPROM) takich danych, by składały się na właściwe cyfry na wyświetlaczu. Wyjścia pamięci EPROM mają następujące znaczenie:
btr4_ilu02.PNG

  • Bit D0 steruje segmentem A
  • Bit D1 steruje segmentem B
  • Bit D2 steruje segmentem C
  • Bit D3 steruje segmentem D
  • Bit D4 steruje segmentem E
  • Bit D5 steruje segmentem F
  • Bit D6 steruje segmentem G
  • Bit D7 steruje segmentem K
Dokładniejsze przyjrzenie się dla toru sterowania segmentami pokazuje, że dany segment świeci w sytuacji, gdy na wyjściu pamięci EPROM jest stan logicznej jedynki. No więc implikuje to następujący fragment programu (znak $ w turbopascalu oznacza zapis szesnastkowy):

Kod: Zaznacz cały

  SegmentA                = $01 ;
  SegmentB                = $02 ;
  SegmentC                = $04 ;
  SegmentD                = $08 ;
  SegmentE                = $10 ;
  SegmentF                = $20 ;
  SegmentG                = $40 ;
  SegmentK                = $80 ;
To z kolei implikuje, że dane zapisane w EPROM reprezentujące poszczególne cyfry mają mieć następujące wartości:

Kod: Zaznacz cały

  SpaceDisplayEquivalent  = $00 ;
  MinusDisplayEquivalent  = SegmentG ;
  Digit0DisplayEquivalent = SegmentA + SegmentB + SegmentC + SegmentD + SegmentE + SegmentF ;
  Digit1DisplayEquivalent = SegmentB + SegmentC ;
  Digit2DisplayEquivalent = SegmentA + SegmentB + SegmentD + SegmentE + SegmentG ;
  Digit3DisplayEquivalent = SegmentA + SegmentB + SegmentC + SegmentD + SegmentG ;
  Digit4DisplayEquivalent = SegmentB + SegmentC + SegmentF + SegmentG ;
  Digit5DisplayEquivalent = SegmentA + SegmentC + SegmentD + SegmentF + SegmentG ;
  Digit6DisplayEquivalent = SegmentA + SegmentC + SegmentD + SegmentE + SegmentF + SegmentG ;
  Digit7DisplayEquivalent = SegmentA + SegmentB + SegmentC ;
  Digit8DisplayEquivalent = SegmentA + SegmentB + SegmentC + SegmentD + SegmentE + SegmentF + SegmentG ;
  Digit9DisplayEquivalent = SegmentA + SegmentB + SegmentC + SegmentD + SegmentF + SegmentG ;
  DigitADisplayEquivalent = SegmentA + SegmentB + SegmentC + SegmentE + SegmentF + SegmentG ;
  DigitBDisplayEquivalent = SegmentC + SegmentD + SegmentE + SegmentF + SegmentG ;
  DigitCDisplayEquivalent = SegmentA + SegmentD + SegmentE + SegmentF ;
  DigitDDisplayEquivalent = SegmentB + SegmentC + SegmentD + SegmentE + SegmentG ;
  DigitEDisplayEquivalent = SegmentA + SegmentD + SegmentE + SegmentF + SegmentG ;
  DigitFDisplayEquivalent = SegmentA + SegmentE + SegmentF + SegmentG ;
  ErrorDisplayEquivalent  = SegmentD ;
Do wyświetlania są używane następujące znaki: spacja → żaden segment nie włączony → 0; '-' → włączony segment G; poszczególne cyfry dziesiętne i szesnastkowe. Jak zachodzi konieczność „zmiany fontu”, to należy zmodyfikować powyższe stałe.
Z analizy fragmentu dotyczącego formatu wyświetlania (ilustracja 3) i treści zawartej na nalepce na frontpanelu (ilustracja 4) wynika, że:
btr4_ilu03.PNG
btr4_ilu04.PNG

Kod: Zaznacz cały

  BinFormat               = $000 ;
  HexFormat               = $100 ;
  DecFormat               = $200 ;
  U2Format                = $300 ;
Kolejne implikacje sprzętowe mające znaczenie w programie generującym zawartość EPROM, to określenie szerokości szyny danych (ilustracja 5) w korelacji z nalepką (ilustracja 4), to:
btr4_ilu05.PNG

Kod: Zaznacz cały

  BusWidth_3bit           = $E000 ;
  BusWidth_4bit           = $6000 ;
  BusWidth_5bit           = $A000 ;
  BusWidth_6bit           = $2000 ;
  BusWidth_7bit           = $C000 ;
  BusWidth_8bit           = $4000 ;
Kolejne hardware'owe istotne informacje, to identyfikacja poszczególnych wyświetlanych cyfr. Z ilustracji 6 i ilustracji 7 wynika powiązanie cyfr z jej numerem.
btr4_ilu06.PNG
btr4_ilu07.PNG
Skrajnie lewa cyfra na wyświetlaczu jest identyfikowana przez '000' dla układu HC138.
Rozpatrując kolejny fragment (ilustracja 8), zostaje ustalona kolejność wybierania cyfr.
btr4_ilu08.PNG
Jak widać, nie jest to naturalne przyporządkowanie. W sumie nie ma to żadnego istotnego znaczenia. Takie rozwiązanie wynikało w optymalizacji ścieżek na PCB, bo w sensie obsługi wyświetlania nie ma żadnego istotnego znaczenia. By były wybierane na fizycznym wyświetlaczu kolejne cyfry, to układ HC138 musi dostać określone wartości kodu sterującego wejściami A, B i C (pin 1, 2 i 3). Cyfry na display'u są wybierane w następującej kolejności: D0 → D4 → D2 → D6 → D1 → D5 → D3 → D7. Wpływa to na wartości stałych:

Kod: Zaznacz cały

  Digit0Offset            = $0000 ;
  Digit1Offset            = $1000 ;
  Digit2Offset            = $0800 ;
  Digit3Offset            = $1800 ;
  Digit4Offset            = $0400 ;
  Digit5Offset            = $1400 ;
  Digit6Offset            = $0C00 ;
  Digit7Offset            = $1C00 ;
Teraz rozpatrzmy generowanie danych do pamięci EPROM:

Kod: Zaznacz cały

procedure CreateEPROMData ;
var
  BusData : byte ;
  DisplayData : string [ 8 ] ;

begin (* CreateEPROMData *)
  CurrentBusWidth := BusWidth_8bit ;
  for BusData := 0 to 255 do
  begin
    DisplayData := _8BinaryConversion ( BusData ) ;
    AddToEPROM ( DisplayData , BusData , BinFormat ) ;
    DisplayData := _8HexConversion ( BusData ) ;
    AddToEPROM ( DisplayData , BusData , HexFormat ) ;
    DisplayData := _8DecConversion ( BusData ) ;
    AddToEPROM ( DisplayData , BusData , DecFormat ) ;
    DisplayData := _8U2Conversion ( BusData ) ;
    AddToEPROM ( DisplayData , BusData , U2Format ) ;
  end (* for *) ;
(…)
end (*  CreateEPROMData *) ;
Jest założona pętla na wszystkie kombinacje szyny danych. Realizowana jest konwersja liczba z postaci binarnej na postać znakową (do DisplayData, do napisu o 8 znakach) w zapisie dwójkowym, szesnastkowym, dziesiętnym i dziesiętnym ze znakiem (U2). W każdym przypadku pakowana jest to pamięci EPROM postać po konwersji na znaki. W przypadku konwersji dwójkowej:

Kod: Zaznacz cały

function BinaryDigit ( Data : byte ) : char ;
begin (* BinaryDigit *)
  if Data <> 0 then
    BinaryDigit := '1'
  else
    BinaryDigit := '0' ;
end (* BinaryDigit *) ;


function _8BinaryConversion ( BusData : byte ) : string ;
var
  CnvString : string [ 8 ] ;
begin (* _8BinaryConversion *)
  CnvString := '' ;
  CnvString := CnvString + BinaryDigit ( BusData and $80 ) ;
  CnvString := CnvString + BinaryDigit ( BusData and $40 ) ;
  CnvString := CnvString + BinaryDigit ( BusData and $20 ) ;
  CnvString := CnvString + BinaryDigit ( BusData and $10 ) ;
  CnvString := CnvString + BinaryDigit ( BusData and $08 ) ;
  CnvString := CnvString + BinaryDigit ( BusData and $04 ) ;
  CnvString := CnvString + BinaryDigit ( BusData and $02 ) ;
  CnvString := CnvString + BinaryDigit ( BusData and $01 ) ;
  _8BinaryConversion := CnvString ;
end (* _8BinaryConversion *) ;
„Produkowany” jest łańcuch znaków w taki sposób, że najbardziej znacząca (do wyświetlenia) cyfra jest na mniejszym indeksie w tablicy.

Kod: Zaznacz cały

procedure AddToEPROM ( Data         : string ;
                       Addr         : word ;
                       FormatOffset : word ) ;
var
  EPROMAddress : longint ;
begin (* AddToEPROM *)
  EPROMAddress := Addr + FormatOffset + CurrentBusWidth ;
  PutEPROMByte ( EPROMAddress + Digit0Offset , EncodeTo7Seg ( Data [ 1 ] ) ) ;
  PutEPROMByte ( EPROMAddress + Digit1Offset , EncodeTo7Seg ( Data [ 2 ] ) ) ;
  PutEPROMByte ( EPROMAddress + Digit2Offset , EncodeTo7Seg ( Data [ 3 ] ) ) ;
  PutEPROMByte ( EPROMAddress + Digit3Offset , EncodeTo7Seg ( Data [ 4 ] ) ) ;
  PutEPROMByte ( EPROMAddress + Digit4Offset , EncodeTo7Seg ( Data [ 5 ] ) ) ;
  PutEPROMByte ( EPROMAddress + Digit5Offset , EncodeTo7Seg ( Data [ 6 ] ) ) ;
  PutEPROMByte ( EPROMAddress + Digit6Offset , EncodeTo7Seg ( Data [ 7 ] ) ) ;
  PutEPROMByte ( EPROMAddress + Digit7Offset , EncodeTo7Seg ( Data [ 8 ] ) ) ;
end (* AddToEPROM *) ;
I jest: Addr – reprezentuje przetwarzaną liczbę → stanowi 8 najmłodszych bitów szyny adresowej EPROM, FormatOffset stanowi przesunięcie w przestrzeni adresowej dla liczb wyświetlanych jako dwójkowe, hex, dec czy U2, dodane informacje określające szerokość szyny danych CurrentBusWidth. Suma arytmetyczna, ale stałe mają tak dobrane wartości, że złoży się to sumę logiczną (złożenie poszczególnych szczegółów na wynikową szynę adresową do EPROM). I zadany napis Data jest rozłożony po znaku do pamięci EPROM z uwzględnieniem przesunięć wynikających z działania układu HC138. Napis Data zawiera znaki ASCII, do EPROM potrzebne są kody sterujące wyświetlaczem 7-segmentowym. Następuje konwersja, rozwiązanie najprostsze z możliwych:

Kod: Zaznacz cały

function EncodeTo7Seg ( Data : char ) : byte ;
begin (* EncodeTo7Seg *)
  case Data of
    ' ' : EncodeTo7Seg := SpaceDisplayEquivalent ;
    '-' : EncodeTo7Seg := MinusDisplayEquivalent ;
    '0' : EncodeTo7Seg := Digit0DisplayEquivalent ;
    '1' : EncodeTo7Seg := Digit1DisplayEquivalent ;
    '2' : EncodeTo7Seg := Digit2DisplayEquivalent ;
    '3' : EncodeTo7Seg := Digit3DisplayEquivalent ;
    '4' : EncodeTo7Seg := Digit4DisplayEquivalent ;
    '5' : EncodeTo7Seg := Digit5DisplayEquivalent ;
    '6' : EncodeTo7Seg := Digit6DisplayEquivalent ;
    '7' : EncodeTo7Seg := Digit7DisplayEquivalent ;
    '8' : EncodeTo7Seg := Digit8DisplayEquivalent ;
    '9' : EncodeTo7Seg := Digit9DisplayEquivalent ;
    'A' : EncodeTo7Seg := DigitADisplayEquivalent ;
    'B' : EncodeTo7Seg := DigitBDisplayEquivalent ;
    'C' : EncodeTo7Seg := DigitCDisplayEquivalent ;
    'D' : EncodeTo7Seg := DigitDDisplayEquivalent ;
    'E' : EncodeTo7Seg := DigitEDisplayEquivalent ;
    'F' : EncodeTo7Seg := DigitFDisplayEquivalent ;
  else
    EncodeTo7Seg := ErrorDisplayEquivalent ;
  end (* case *) ;
end (* EncodeTo7Seg *) ;
I tak dla wszystkich kombinacji. Pewnego wyjaśnienia może wymagać format U2.
Najstarszy bit szyny danych (bit 8 dla szyny 8-bitowej; bit 7 dla szyny 7-bitowej, … bit 3 dla szyny 3-bitowej) jest bitem znaku: 0 → liczba jest dodatnia; 1 → liczba jest ujemna. By PC-et poprawnie przetworzył liczbę, to należy ją trochę „podrasować”. Pamiętając, że PC będzie przetwarzał liczbę 8-bitową, to konieczne jest pewne „podrasowanie”. Dla liczb dodatnich liczby krótsze niż 8-bitowe są uzupełniane zerem. Dla liczb ujemnych należy uzupełnić jedynką. Przykładowo w przypadku konwersji 5-bitowej if ( BusData and $10 ) <> 0 then wycina najbardziej znaczący bit szyny danych. Jeżeli jest on 0, to wszystkie uzupełnienia do 8 bitów wymagają zera. Jeżeli jest 1, należy uzupełnić jedynkami. Identycznie istotny bit należy powielić na pozostałe (integer w turbopascal ma 16-bitów).

Kod: Zaznacz cały

function _5U2Conversion ( BusData : byte ) : string ;
var
  CnvString : string [ 8 ] ;
  Number : array [ 0 .. 7 ] of char ;
  Loop : word ;
  U2Byte : integer ;
  Minus : boolean ;
begin (* _5U2Conversion *)
  if ( BusData and $10 ) <> 0 then
    BusData := BusData or $E0
  else
    BusData := BusData and $1F ;
  U2Byte := BusData ;
  if ( BusData and $80 ) <> 0 then
    U2Byte := U2Byte or $FF00 ;
  Minus := false ;
  if U2Byte < 0 then
  begin
    Minus := true ;
    U2Byte := - U2Byte ;
  end (* if *) ;
  for Loop := 0 to 7 do
    Number [ Loop ] := ' ' ;
  Loop := 0 ;
  repeat
    Number [ Loop ] := HexChar ( U2Byte mod 10 ) ;
    U2Byte := U2Byte div 10 ;
    Loop := Loop + 1 ;
  until U2Byte = 0 ;
  if Minus then
  begin
    if Number [ 1 ] = ' ' then
    begin
      Number [ 1 ] := '-'
    end (* if ... *)
    else
    begin
      if Number [ 2 ] = ' ' then
      begin
        Number [ 2 ] := '-'
      end (* if ... *)
      else
      begin
        if Number [ 3 ] = ' ' then
        begin
          Number [ 3 ] := '-'
        end (* if ... *)
        else
        begin
          if Number [ 4 ] = ' ' then
          begin
            Number [ 4 ] := '-'
          end (* if ... *)
          else
          begin
            Number [ 7 ] := '-'
          end (* if ... else *) ;
        end (* if ... else *) ;
      end (* if ... else *) ;
    end (* if ... else *) ;
  end (* if *) ;
  CnvString := Number [ 7 ] ;
  CnvString := CnvString + Number [ 6 ] ;
  CnvString := CnvString + Number [ 5 ] ;
  CnvString := CnvString + Number [ 4 ] ;
  CnvString := CnvString + Number [ 3 ] ;
  CnvString := CnvString + Number [ 2 ] ;
  CnvString := CnvString + Number [ 1 ] ;
  CnvString := CnvString + Number [ 0 ] ;
  _5U2Conversion := CnvString ;
end (* _5U2Conversion *) ;
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1259
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: 8-bitowy monitor szyny danych

Postautor: gaweł » środa 14 cze 2017, 20:34

Finał

Frontpanel zrobiłem w dwóch wersjach: z dziurkami na LED do podświetlenia wybranej konfiguracji oraz bez takich LED'ów. Ten egzemplarz zmontowany jest bez LED'ów. Wystawka fotek z montażu.
btr5_ilu01.jpg
btr5_ilu02.jpg
btr5_ilu03.jpg
btr5_ilu04.jpg
btr5_ilu05.jpg
btr5_ilu06.jpg
btr5_ilu07.jpg
btr5_ilu08.jpg
btr5_ilu09.jpg
btr5_ilu10.jpg
btr5_ilu11.jpg
btr5_ilu12.jpg
btr5_ilu13.jpg
btr5_ilu14.jpg
btr5_ilu15.jpg
btr5_ilu16.jpg
btr5_ilu17.jpg
btr5_ilu18.jpg
btr5_ilu19.jpg
btr5_ilu20.jpg
btr5_ilu21.jpg
btr5_ilu22.jpg
btr5_ilu23.jpg
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
tasza
Geek
Geek
Posty: 1082
Rejestracja: czwartek 12 sty 2017, 10:24
Kontaktowanie:

Re: 8-bitowy monitor szyny danych

Postautor: tasza » czwartek 15 cze 2017, 04:40

no proszę, i da się takie urządzonko sprawić bez pakownia tam mikrokontrolera? ano da się, ale super;
jak tak z zazdrością odrobinę patrzę na te detale mechaniczne, no bo w sumie co z tego, że jest płytka i reszta, jak to się wlecze po stole potem;
bardzo fajnie ci to wyszło, no... a tak zapytam, może sugestia drobna - na front, przed wyświetlaczem nie myślałeś o jakiejś maskownicy kolorowej? kawałek plexi czy akrylu, co by objął wymiarem tę wyświetlaczy i ostre krawędzie otworu pod nie na panelu?
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1259
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: 8-bitowy monitor szyny danych

Postautor: gaweł » czwartek 15 cze 2017, 11:26

tasza pisze:przed wyświetlaczem nie myślałeś o jakiejś maskownicy kolorowej? kawałek plexi czy akrylu, co by objął wymiarem tę wyświetlaczy i ostre krawędzie otworu pod nie na panelu?

Każdy pomysł jest godny uwagi i sprawdzenia. Mam konstrukcję z podobnym rozwiązaniem, więc ... następny DIY będzie o generatorze sinus/trójkąt?
Nawet zrobiłem sobie "przystawkę" do frezarki, by coś takiego zrobić.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1259
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: 8-bitowy monitor szyny danych

Postautor: gaweł » niedziela 18 cze 2017, 16:13

Antystatyczny pisze:Do schematu na ilustracji 4 wkradł się mały błąd.
Oprócz tego błędu, znalazłem kilka innych (są tak nieistotne, że nie mają istotnego znaczenia → dwa komponenty na schemacie miały inny symbol niż na PCB). Schematy wyżej zostały zaktualizowane.
Czasami tak się zdarza, że od konstrukcji sprzed kilku lat wpi...iło schemat natomiast zostało PCB (łącznie z listą połączeń). Mając jedynie wydruk 'wklepałem schemat ponownie i jak to bywa, były drobne różnice. Aby zweryfikować projekt, to ... napisałem program do porównywania list połączeń [listy połączeń były w standardzie TANGO]. Stara lista (zachowana) oraz nowa lista (wynikająca ze schematu) zostały porównane. Ponieważ nie ma gwarancji, że nazwy sieci będą te same (symbole elementów zostały zachowane), program musiał był 'troszkę inteligentny'.

Kod: Zaznacz cały

Lista komponentow dla : btra1.net

Element = U501 wartosc = LM2575S
Element = U305 wartosc = NE555
Element = U304 wartosc = 74HC138
Element = U303 wartosc = 74HC93
Element = U302 wartosc = ULN2803
Element = U301 wartosc = 27C512
Element = U202 wartosc = 74HC20
Element = U201 wartosc = 74HC20
Element = U101 wartosc = 74HC541
Element = SW202 wartosc = SR26NS1
Element = SW201 wartosc = SR26NS1
Element = R503 wartosc = 1K
Element = R502 wartosc = 3K
Element = R501 wartosc = 1K
Element = R328 wartosc = 220
Element = R327 wartosc = 220
Element = R326 wartosc = 220
Element = R325 wartosc = 220
Element = R324 wartosc = 220
Element = R323 wartosc = 220
Element = R322 wartosc = 220
Element = R321 wartosc = 220
Element = R320 wartosc = 2K7
Element = R319 wartosc = 3K9
Element = R318 wartosc = 10K
Element = R317 wartosc = 10K
Element = R316 wartosc = 10K
Element = R315 wartosc = 10K
Element = R314 wartosc = 10K
Element = R313 wartosc = 10K
Element = R312 wartosc = 10K
Element = R311 wartosc = 10K
Element = R309 wartosc = 10K
Element = R308 wartosc = 4K7
Element = R307 wartosc = 4K7
Element = R306 wartosc = 4K7
Element = R305 wartosc = 4K7
Element = R304 wartosc = 4K7
Element = R303 wartosc = 4K7
Element = R302 wartosc = 4K7
Element = R301 wartosc = 4K7
Element = R226 wartosc = 10K
Element = R225 wartosc = 10K
Element = R224 wartosc = 10K
Element = R223 wartosc = 10K
Element = R222 wartosc = 10K
Element = R221 wartosc = 10K
Element = R216 wartosc = 470
Element = R215 wartosc = 470
Element = R214 wartosc = 470
Element = R213 wartosc = 470
Element = R212 wartosc = 470
Element = R211 wartosc = 470
Element = R206 wartosc = 10K
Element = R205 wartosc = 10K
Element = R204 wartosc = 470
Element = R203 wartosc = 470
Element = R202 wartosc = 470
Element = R201 wartosc = 470
Element = R108 wartosc = 10K
Element = R107 wartosc = 10K
Element = R106 wartosc = 10K
Element = R105 wartosc = 10K
Element = R104 wartosc = 10K
Element = R103 wartosc = 10K
Element = R102 wartosc = 10K
Element = R101 wartosc = 10K
Element = Q308 wartosc = BC857
Element = Q307 wartosc = BC857
Element = Q306 wartosc = BC857
Element = Q305 wartosc = BC857
Element = Q304 wartosc = BC857
Element = Q303 wartosc = BC857
Element = Q302 wartosc = BC857
Element = Q301 wartosc = BC857
Element = P504 wartosc = H1
Element = P503 wartosc = H1
Element = P502 wartosc = H2
Element = P501 wartosc = DCIN
Element = P402 wartosc = H17X2
Element = P401 wartosc = H17X2
Element = P202 wartosc = H5X2
Element = P201 wartosc = H5X2
Element = P101 wartosc = DB9
Element = L501 wartosc = 150U
Element = L408 wartosc = KW1
Element = L407 wartosc = KW1
Element = L406 wartosc = KW1
Element = L405 wartosc = KW1
Element = L404 wartosc = KW1
Element = L403 wartosc = KW1
Element = L402 wartosc = KW1
Element = L401 wartosc = KW1
Element = D503 wartosc = SS14
Element = D502 wartosc = LG
Element = D501 wartosc = 1A
Element = D216 wartosc = LY
Element = D215 wartosc = LY
Element = D214 wartosc = LY
Element = D213 wartosc = LY
Element = D212 wartosc = LY
Element = D211 wartosc = LY
Element = D204 wartosc = LY
Element = D203 wartosc = LY
Element = D202 wartosc = LY
Element = D201 wartosc = LY
Element = CB303 wartosc = 100N
Element = CB302 wartosc = 100N
Element = CB301 wartosc = 100N
Element = CB202 wartosc = 100N
Element = CB201 wartosc = 100N
Element = CB101 wartosc = 100N
Element = C504 wartosc = 100N
Element = C503 wartosc = 220U
Element = C502 wartosc = 100N
Element = C501 wartosc = 470U
Element = C302 wartosc = 100N
Element = C301 wartosc = 10N

Lista komponentow dla : btra2.net

Element = U302 wartosc = ULN2803
Element = D503 wartosc = SS14
Element = SW201 wartosc = SR26NS1
Element = SW202 wartosc = SR26NS1
Element = U305 wartosc = NE555
Element = D216 wartosc = LY
Element = D215 wartosc = LY
Element = D214 wartosc = LY
Element = D213 wartosc = LY
Element = D212 wartosc = LY
Element = D211 wartosc = LY
Element = D204 wartosc = LY
Element = D203 wartosc = LY
Element = D202 wartosc = LY
Element = D201 wartosc = LY
Element = U501 wartosc = LM2575
Element = D502 wartosc = LG
Element = L408 wartosc = KW1
Element = L407 wartosc = KW1
Element = L406 wartosc = KW1
Element = L405 wartosc = KW1
Element = L404 wartosc = KW1
Element = L403 wartosc = KW1
Element = L402 wartosc = KW1
Element = L401 wartosc = KW1
Element = P202 wartosc = H5X2
Element = P201 wartosc = H5X2
Element = P502 wartosc = H2
Element = P402 wartosc = H17X2
Element = P401 wartosc = H17X2
Element = P504 wartosc = GND
Element = P503 wartosc = GND
Element = P501 wartosc = DCIN
Element = P101 wartosc = DB9
Element = Q308 wartosc = BC857
Element = Q307 wartosc = BC857
Element = Q306 wartosc = BC857
Element = Q305 wartosc = BC857
Element = Q304 wartosc = BC857
Element = Q303 wartosc = BC857
Element = Q302 wartosc = BC857
Element = Q301 wartosc = BC857
Element = U303 wartosc = 74HC93
Element = U101 wartosc = 74HC541
Element = U202 wartosc = 74HC20
Element = U201 wartosc = 74HC20
Element = U304 wartosc = 74HC138
Element = R308 wartosc = 4K7
Element = R307 wartosc = 4K7
Element = R306 wartosc = 4K7
Element = R305 wartosc = 4K7
Element = R304 wartosc = 4K7
Element = R303 wartosc = 4K7
Element = R302 wartosc = 4K7
Element = R301 wartosc = 4K7
Element = C501 wartosc = 470UF
Element = R216 wartosc = 470
Element = R215 wartosc = 470
Element = R214 wartosc = 470
Element = R213 wartosc = 470
Element = R212 wartosc = 470
Element = R211 wartosc = 470
Element = R204 wartosc = 470
Element = R203 wartosc = 470
Element = R202 wartosc = 470
Element = R201 wartosc = 470
Element = R319 wartosc = 3K9
Element = R502 wartosc = 3K
Element = R320 wartosc = 2K7
Element = U301 wartosc = 27C512
Element = C503 wartosc = 220UF
Element = R328 wartosc = 220
Element = R327 wartosc = 220
Element = R326 wartosc = 220
Element = R325 wartosc = 220
Element = R324 wartosc = 220
Element = R323 wartosc = 220
Element = R322 wartosc = 220
Element = R321 wartosc = 220
Element = R503 wartosc = 1K
Element = R501 wartosc = 1K
Element = D501 wartosc = 1A
Element = L501 wartosc = 150UH
Element = C301 wartosc = 10NF
Element = R318 wartosc = 10K
Element = R317 wartosc = 10K
Element = R316 wartosc = 10K
Element = R315 wartosc = 10K
Element = R314 wartosc = 10K
Element = R313 wartosc = 10K
Element = R312 wartosc = 10K
Element = R311 wartosc = 10K
Element = R309 wartosc = 10K
Element = R226 wartosc = 10K
Element = R225 wartosc = 10K
Element = R224 wartosc = 10K
Element = R223 wartosc = 10K
Element = R222 wartosc = 10K
Element = R221 wartosc = 10K
Element = R206 wartosc = 10K
Element = R205 wartosc = 10K
Element = R108 wartosc = 10K
Element = R107 wartosc = 10K
Element = R106 wartosc = 10K
Element = R105 wartosc = 10K
Element = R104 wartosc = 10K
Element = R103 wartosc = 10K
Element = R102 wartosc = 10K
Element = R101 wartosc = 10K
Element = C504 wartosc = 100NF
Element = C502 wartosc = 100NF
Element = C302 wartosc = 100NF
Element = CB303 wartosc = 100NF
Element = CB302 wartosc = 100NF
Element = CB301 wartosc = 100NF
Element = CB202 wartosc = 100NF
Element = CB201 wartosc = 100NF
Element = CB101 wartosc = 100NF

Braki elementow na liscie: btra2.net


Braki elementow na liscie: btra1.net


Roznice w wartosciach elemntow

(....)

Braki asocjacji w pliku: btra1.net


Braki asocjacji w pliku: btra2.net


Braki polaczen, jest w pliku: btra1.net nie ma w pliku: btra2.net

Polaczenie GND pin U501,0

Braki polaczen, jest w pliku: btra2.net nie ma w pliku: btra1.net


Listy połączeń różnią się jednym połączeniem (na PCB radiator stabilizatora [U501, pin 0] jest połączony z masą, na schemacie takiego połączenia nie ma). Teraz jest gwarancja, że schemat jest odpowiadający PCB.

Załącznik: program w turbopascal (gdyby kogoś przypiliło można użyć)
NETCMP.ZIP
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1259
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: 8-bitowy monitor szyny danych

Postautor: gaweł » wtorek 12 wrz 2017, 13:40

gaweł pisze:
tasza pisze:przed wyświetlaczem nie myślałeś o jakiejś maskownicy kolorowej? kawałek plexi czy akrylu, co by objął wymiarem tę wyświetlaczy i ostre krawędzie otworu pod nie na panelu?

Każdy pomysł jest godny uwagi i sprawdzenia. Mam konstrukcję z podobnym rozwiązaniem, więc ... następny DIY będzie o generatorze sinus/trójkąt?
Nawet zrobiłem sobie "przystawkę" do frezarki, by coś takiego zrobić.

Moje rozwiązanie na okienka w obudowach. Uznałem, że nadaje się to na oddzielny wątek Jak zrobić okienko do obudowy

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse


Wróć do „DIY”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości