logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

dekoder kolejności wciśnięcia przycisku - jak zrobić?

malcziki 02 Sty 2007 17:28 2136 9
REKLAMA
  • #1 3397058
    malcziki
    Poziom 12  
    Posty: 87
    Ocena: 10
    witam
    zwracam sie do Forumowiczów z prośbą o pomoc w zaprojektowaniu dekodera kolejności wciśnięcia przycisków. chodzi mi dokładniej o układ przeznaczony do zabawy dla dzieci w grupie przedszkolnej, w którym będzie 10 przycisków i tymi przyciskami dzieci będą zgłaszały chęć udzielenia odpowiedzi na zadane pytanie. układ taki powinien mieć możliwość wyświetlania numeru przycisku na wyświetlaczu 7seg, oraz zapamiętywania 2-3 zgłoszeń jeśli wciśnięcie drugiego przycisku nastąpi przed skasowaniem poprzedniego zgłoszenia. podejrzewam ze układ taki mógłby byc oparty o dekoder "1 z 10" na kod binarny i dalej na kod wyświetlacza 7seg. niestety jestem zielony w sprawach projektowania układów i dlatego zwracam się do fachowców :)
    prosze o pomoc, jakikolwiek link do strony zawierającej podobny układ (lub choć nazwę takiego układu - nawet nie wiem jak go poprawnie nazwać i poszukać w guglach) lub konkretny schemat. z góry dziekuję za wszelkie podpowiedzi i pozdrawiam
    malcziki
  • REKLAMA
  • #2 3397564
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #3 3398849
    prokopcio
    Poziom 29  
    Posty: 2027
    Pomógł: 39
    Ocena: 143
    chyba najłatwiej/najszybciej i najtaniej będzie wykorzystać jakiś taniutki mikroprocesor.
  • #4 3399445
    _jta_
    Specjalista elektronik
    Posty: 48957
    Pomógł: 3205
    Ocena: 4224
    Generator z kilkadziesiąt kHz + licznik (można zrobić na CD4060, bo to generator + licznik w jednym),
    demultiplekser podłączony wejściami adresowymi do wyjść licznika, wejściami danych do przycisków,
    jak na wyjściu pojawi się sygnał, to ma być zapamiętany, i spowodować zatrzymanie generatora
    i wyświetlenie stanu licznika - to będzie numer przycisku, który pierwszy został wciśnięty
    (z dokładnością do okresu liczenia, ale to będzie ułamek milisekundy).
  • #5 3400569
    malcziki
    Poziom 12  
    Posty: 87
    Ocena: 10
    witam
    pomysł przedmówcy _jta_ narazie chyba najbardziej mi odpowiada. miałbym jeszcze tylko pytanko o podpowiedź jak to tego układu domontować jakiś rejestr lub pamięc która pozwoliłaby na zapamiętanie sytuacji gdyby ktoś nacisnął drugi przycisk zanim pierwsze zgłoszenie zostałoby skasowane przez opiekuna. z góry dziekuje za kolejne porady :)
    malcziki
  • #6 3401498
    _jta_
    Specjalista elektronik
    Posty: 48957
    Pomógł: 3205
    Ocena: 4224
    A do ilu przycisków chciałbyś zapamiętywać? Czy jeśli drugi zostanie wciśnięty w czasie, gdy pierwszy
    nadal jest wciśnięty, to czy ma to być zapamiętane? Czy może wystarczy, że po puszczeniu pierwszego
    wykryje się, że jest wciśnięty drugi, i wtedy się to zapisze? Jeśli by się chciało pozwolić na wciśnięcie
    kilku po kolei, i zapisać kolejność wciśnięć, to trzeba by sprawdzać, czy już jest gdziekolwiek zapisany...
    I jak wtedy ma wyglądać kasowanie - odczytujemy jeden numer, wypadałoby ten jeden skasować,
    i wtedy mieć możliwość przeczytania następnego... albo trzeba mieć kilka cyfr wyświetlacza.
  • REKLAMA
  • #7 3404477
    malcziki
    Poziom 12  
    Posty: 87
    Ocena: 10
    witam
    z tym zapamiętywaniem to chodziło by mi o takie rozwiązanie żeby było tak:
    - dziecko 1 zgłasza się do odpowiedzi i odpowiada
    - w tym czasie inne dziecko może zgłosić swoją chęć odpowiadania (czyli dziecko 1 już puściło guzik)
    - po zakończeniu odpowiedzi przez dziecko 1 opiekun kasuje wskazanie zgłoszenia pierwszego
    - na wyświetlaczu pojawia się numer kolejnego zapamiętanego zgłoszenia i odpowiada kolejne dziecko, po czym następuje kasacja zgłoszenia
    mniej więcej tak by to miało wyglądać. przycisków byłoby potrzebne 10 plus jeden dla opiekuna, którym będą kasowane zgłoszenia, zapamiętane mogą być 2-3 zgłoszenia, nie ma potrzeby więcej, wyświetlanie na wyświetlaczu 7seg wskazania 0 do 9 (gdzie 0 to 10) lub na dwóch 7seg z pełnym wskazaniem 1 do 10. ale samo wyświetlanie to powiedzmy że wiem jak zrobić więc tu będę w razie potrzeby dopiero później szukał pomocy :)
    pozdrawiam i dziękuje za zainteresowanie tematem
  • #8 3406237
    _jta_
    Specjalista elektronik
    Posty: 48957
    Pomógł: 3205
    Ocena: 4224
    Przychodzi mi do głowy, że do czegoś takiego warto by zrobić rejestr, w którym dane krążą w kółko, i to dość szybko.
    To pozwala oszczędzić na połączeniach do ich adresowaniu - zamiast zmieniać adresy i przekierowywać dane czekamy
    z dostępem na moment, gdy są w miejscu, do którego jest połączenie, i wtedy je czytamy i ewentualnie zmieniamy.

    Każda pozycja zajmowałaby 5 bitów (albo można 4 - jeśli jakaś wartość, np. 1111 oznaczałaby "puste"); jakiś licznik liczy
    kiedy jest cyfra "pierwsza na liście" - a może przeznaczyć na pozycję jeszcze jeden bit, i ustawiać go dla tej "pierwszej"?

    Jeśli trzeba coś do tego wpisać, to czekamy na znak "pierwsza", potem na brak znaku "zajęte" i tam wpisujemy.
    I jak jest znak "pierwsza", to wyświetlamy (oczywiście można zrobić parę cyfr wyświetlacza, i pokazać 2 czy 3).

    Jak trzeba usunąć: na sygnał "pierwsza" zerujemy aktualne dane, i ustawiamy ten sygnał na następnych. Tylko...
    w takim układzie łatwo o zgubienie sygnału "pierwsza", lub jego powielenie - lepiej użyć licznika, może takiego,
    co daje na wyjściach przesuwającą się jedynkę - to gwarantuje, że żadnej takiej katastrofy nie będzie.
  • REKLAMA
  • #9 3411966
    malcziki
    Poziom 12  
    Posty: 87
    Ocena: 10
    witam
    jak już mówiłem nei jestem zbyt biegły w tych sprawach a Twoje wyjaśnienia nie za bardzo do mnie trafiają :) można prosić jakoś bardziej "po naszemu" w języku ludzi niezbyt związanych ze sprawami technicznymi? :)
    z góry wielkie podziekowania za wszelką okazaną pomoc :)
    pozdrawiam
  • #10 3414509
    _jta_
    Specjalista elektronik
    Posty: 48957
    Pomógł: 3205
    Ocena: 4224
    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.
    Załączniki:
    • dekoder kolejności wciśnięcia przycisku - jak zrobić? fifo-na-dao.gif (5.32 KB) Musisz być zalogowany, aby pobrać ten załącznik.

Podsumowanie tematu

✨ Dyskusja dotyczy zaprojektowania dekodera kolejności wciśnięcia przycisków dla grupy przedszkolnej, gdzie 10 przycisków służy do zgłaszania chęci odpowiedzi, a układ wyświetla numer pierwszego wciśniętego przycisku na wyświetlaczu 7-segmentowym. Wymagane jest zapamiętywanie 2-3 kolejnych zgłoszeń, które pojawią się przed skasowaniem poprzednich przez opiekuna. Proponowane rozwiązania obejmują wykorzystanie mikroprocesora do sterowania, generatora i licznika (np. układ CD4060) do wykrywania pierwszego wciśnięcia oraz demultipleksera do adresowania przycisków. Dyskutowano także o implementacji rejestru przesuwnego lub pamięci cyklicznej do przechowywania kolejności zgłoszeń oraz o mechanizmach zapobiegania powtórnym zgłoszeniom tego samego przycisku. Wskazano na potrzebę prostego interfejsu kasowania zgłoszeń i wyświetlania kolejnych numerów. Autor prosił o uproszczenie wyjaśnień technicznych, co wskazuje na potrzebę jasnych, przystępnych schematów i opisów.
Wygenerowane przez model językowy.
REKLAMA