Pewien problem, który zaczynam dostrzegać: co będzie, jeśli jeden przycisk zostanie wciśnięty kilka razy?
Albo dwa będą wciskane na zmianę - jeśli już zrobimy tak, że powtórzenie tego samego nie działa drugi raz?
Choćby przez to, że komuś drgnie ręka, jak dwie osoby w pośpiechu spróbują nacisnąć przyciski, bo akurat
pytanie "podejdzie", wiele osób będzie umiało odpowiedzieć, i wcisną 1,2,1... osoba z przyciskiem 1 zgłosi
się dwukrotnie, nie pozwalając się zgłosić innej osobie, która swój przycisk wciśnie pół sekundy później.
Trzeba albo zrobić układ tak, by zakazywał "powtórek", albo kolejkę tak krótką, by nie było na nie miejsca,
albo pogodzić się z tym, że takie powtórki będą. Widzę dwa sposoby zrobienia zakazu powtórek - jeden to taki,
że kiedy mamy sygnał, że ktoś nacisnął przycisk, przeglądać całą kolejkę i sprawdzać, czy już w niej nie ma;
drugi - do każdego przycisku podłączamy układ, który zapamiętuje, że został on wciśnięty, i przekazuje to dalej,
ale tylko po pierwszym wciśnięciu - żeby zadziałał znowu, musi zostać wyzerowany - oznaczałoby to, że osoba, która
raz wciśnie przycisk i otrzyma prawo głosu, nie będzie mogła zgłosić się drugi raz do tego samego pytania (po
zakończeniu wypowiedzi w sprawie jednego pytania prowadzący resetowałby te układy od przycisków); taki
układ można zrobić na przerzutniku RS + przerzutniku D wyzwalanym zboczem - np. z układu 7474 - RS zapamiętuje
naciśnięcie i daje zbocze dla D, ale tylko raz, bo potem już jest przestawiony na stan "przycisk wciśnięty".
Wciąż się zastanawiam, jak prosto zrobić kolejkę danych - właśnie mi przyszedł do głowy taki pomysł, żeby
użyć rejestru przesuwającego dwukierunkowo (właśnie sobie przypomniałem, że coś takiego było w postaci
układu scalonego TTL), najlepiej chyba by pasował 74194, tylko czy to jest w jakimś sklepie w okolicy?
Da się również użyć 7495, ale jest dużo mniej wygodny, przynajmniej do tego układu.
Koncepcja wyglądałaby tak: mamy kilka rejestrów na dane, działających w ten sposób, że w zależności od
sygnału zezwalającego na wpisywanie pamiętają one wpisany stan, lub przyjmują nowy; są one połączone tak,
że pierwszy dostaje numer wciśniętego przycisku, drugi to, co jest w pierwszym, trzeci to co w drugim, itd.
Steruje się nimi przy użyciu rejestru przesuwającego, który początkowo pozwala wpisywać do wszystkich rejestrów
danych; po sygnale, że wciśnięto przycisk, rejestr się przesuwa i ostatni rejestr danych przełącza się na funkcję
pamiętania - nowe dane mogą dochodzić tylko do przedostatniego. Kolejne wciśnięcia przycisków spowodują, że
kolejne rejestry danych przełączą się na pamiętanie. Do tego miejsca to jest proste... ale dalej jest gorzej.
Problem jest kiedy chcemy usunąć daną, która "zawędrowała" najdalej (czyli tę, która weszła pierwsza) - do tego
trzeba będzie przesunąć rejestr w przeciwną stronę - dlatego jest on dwukierunkowy - ale co gorsza trzeba również
przesunąć dane - to się daje prosto zrobić tylko z rejestrami danych, które zmieniają zawartość na zboczu sygnału
zegarowego - wystarczy wszędzie dać sygnał zegarowy, i każda dana "przeskoczy" na następną pozycję. Jeśli
mamy takie rejestry danych, to komplikuje się wpisywanie, które było takie proste - trzeba tym rejestrom, które
nie mają pamiętać, podawać sygnał zegarowy cały czas, aż dane dotrą do ostatniego z tych rejestrów. I dopiero
wtedy można przesunąć rejestr, żeby odtąd zabraniać zmieniania nowo wpisanej danej.
Za to zaletą takiej wersji jest to, że do wyjść rejestrów danych można podłączyć parę dekoderów i wyświetlaczy,
w najprostszy sposób, i cała kolejka będzie pokazywana - nie będzie komplikacji z konstruowaniem wyświetlania.
Do rejestrów danych można użyć układów 74175 (cztery bity w jednym, czyli do 16-tu przycisków; więcej mają 74174
- po 6 bitów, więc do 64-ch przycisków), do 4-ch sztuk (bo rejestr przesuwny jest 4-bitowy).
A swoją drogą są jakieś układy scalone do robienia kolejek, tylko chyba w żadnym sklepie w Polsce ich nie ma.
Wymyśliłem jak w prosty sposób skonstruować kolejkę FIFO z elementarnych układów - potrzebne są do tego
przerzutniki D wyzwalane zboczem (o jeden więcej, niż ilość danych), bramka AND i bramka OR. Na rysunku są dwie
linie danych: górna przenosi informację, że są dane, dolna same dane (oczywiście tych dolnych ma być więcej, jak
chcemy zapisywać numer od 1 do 10, to potrzeba 4-ch tych "dolnych" danych - można użyć układy 74174, będzie ich
6 - czyli 5 na informację, można by zapisywać w tym liczbę do 31, jak klasa nie będzie duża, to wystarczy...
Kolejka składa się z wielu takich układów jak na rysunku, połączonych ze sobą. Ostatnie wyjście "górne dane" jest
połączone z wejściem ZAJĘTE - ten sygnał nie pozwala wpisać danych tam, gdzie już jakieś są. Jeśli któraś pozycja
kolejki nie jest zajęta, to na niej i na lewo od niej nie ma sygnału ZAJĘTE, i sygnał zegara powoduje tam przesuwanie
danych - aż wszystkie dane znajdą się z prawej strony, bez żadnych dziur. Po skasowaniu danych w ostatniej pozycji
nie ma nigdzie sygnału ZAJĘTE, i przy najbliższym sygnale zegara cała kolejka się przesuwa.