Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Symulator bramek logicznych

kolgreen 08 Jun 2015 09:48 9120 17
  • Symulator bramek logicznych Symulator bramek logicznych

    Chciałbym zaprezentować forumowiczom symulator sieci bramek logicznych, który pełni funkcję dydaktyczną.
    Układ szerzej opisałem na stronie dostępnej pod tym linkiem.
    Urządzenie zostało zbudowane na bazie mało atrakcyjnego jak na obecne czasy mikrokontrolera PIC16f84A. Akurat posiadałem kilka scalaków z tej serii i postanowiłem je spożytkować.

    Prezentacja symulowanego obwodu.
    Na tablicy z nadrukowanym schematem symulowanego obwodu są zapalane lub gaszone kontrolki LED sygnalizujące stan wysoki (logiczne 1) albo stan niski (logiczne 0) na wejściach i wyjściach bramek.

    Działanie układu
    Układ realizuje funkcję logiczną (A&&B)||¬C.

    Zgodnie z powyższymi założeniami na trzy symulowane wejścia układu podawane są kolejno wszystkie możliwe kombinacje stanów.

    Symulator bramek logicznych

    Dzieje się to w sposób rotacyjny.

    PCB
    Patrząc na PCB można by powiedzieć, że elementy zostały ułożone w trochę rozrzutny sposób, jednak związane jest to z ułożeniem LED.

    Symulator bramek logicznych

    Wokół LED w pierwszej fazie został narysowany markerem symulowany układ. Jednak ze względów estetycznych zamieniłem go na kartonik z wydrukowanym obwodem.

    Symulator bramek logicznych

    Kod programu mikrokontrolera

    Pojedyncze piny mikrokontrolera do których podłączono LED zostały nazwane zgodnie z nazwami LED z projektu PCB. Umożliwia to ich łatwiejszą identyfikację w kodzie.

    Code: c
    Log in, to see the code


    Funkcja wyłączająca wszystkie LED została nazwana clear_led.

    Code: c
    Log in, to see the code


    Funkcja testująca poprawne działanie wszystkich LED nosi nazwę test_led. Zapala ona wszystkie LED na 0,9s a następnie je wyłącza.

    Code: c
    Log in, to see the code


    Włączenie lub wyłączenie LED (oznaczające stan logiczny) na wejściu bądź wyjściu bramki realizuje funkcja gate_pin_state. Przyjmuje ona jako parametr nazwę LED oraz stan jaki ma zostać wyświetlony (1 bądź 0).

    Code: c
    Log in, to see the code



    Działanie bramki AND realizuje funkcja and_gate. Jako parametry przyjmuje stany na obu wejściach bramki, funkcja zwraca wynik logicznej funkcji mnożenia.

    Code: c
    Log in, to see the code



    Działanie bramki NOT realizuje funkcja not_gate. Jako parametr przyjmuje stan na wejściu bramki, zwraca wynik logicznej funkcji negacji.

    Code: c
    Log in, to see the code



    Działanie bramki OR realizuje funkcja or_gate. Jako parametr przyjmuje stany na obu wejściach bramki, zwraca wynik logicznej funkcji suma.

    Code: c
    Log in, to see the code


    Funkcja main() po podłączeniu zasilania do układu odczekuje 0,9 sekundy i wywołuje funkcję testującą LED. Po teście następuje oczekiwanie przez 0,9 sekundy.

    Code: c
    Log in, to see the code


    Następnie wewnątrz funkcji main zadeklarowano trzy zmienne z tablicami zawierającymi wszystkie możliwe kombinacje stanów, które mogą zostać podane na wejście symulowanego układu.

    Code: c
    Log in, to see the code


    Następnie mikrokontroler wykonuje program w niekończącej się pętli while.
    Pobiera on kolejno osiem stanów z tablic a[], b[] i c[] wartości wejściowe dla poszczególnych bramek; AND i NOT, zapisując wyniki operacji na tych bramkach w zmiennej an i no, by następnie przekazać je na wejście bramki OR. Po ukończeniu prezentacji ośmiu możliwych stanów wejściowych i dokonaniu symulacji, układ rozpoczyna ponownie pobieranie od początku danych z tablic stanów.

    Code: c
    Log in, to see the code

    Cool! Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    kolgreen
    Level 15  
    Offline 
    kolgreen wrote 264 posts with rating 226, helped 11 times. Been with us since 2007 year.
  • #3
    kolgreen
    Level 15  
    Radzio M. wrote:
    Co to ma wspólnego z symulatorem skoro realizujesz tylko 1 funkcję?


    Coś tam z symulatorem chyba jednak można wspólnego znaleźć ;).
    Symulowane jest działanie obwodu (opisanego ową funkcją) ze zmiennymi parametrami wejściowymi.
    Ot, taka zabawka przybliżająca młodzieży działanie bramek :D.
    A słowo "symulator" użyte zostało głównie dlatego iż układ nie działa na scalakach serii np. 74xx, tylko symuluje stany logiczne za pomocą uC.
  • #4
    Zuliczek
    Level 17  
    Co do projektu:
    Strasznie duży kawał laminatu poszedł, wykonując w SMD można by było się bardziej skompresować.
    Tą karteczkę nie lepiej by było wydrukować i nakleić na laminat przed lutowaniem diod?
    Strasznie ograniczony ten "symulator", a mnoże lepiej, "wizualizer" bo tylko prezentuje, a nie pozwala zadać ręcznie danych ;)

    Dygresja:
    To czy nie lepiej by było, w celach "edukacyjnych" wykonać tego układu faktycznie na bramkach z serii 74, dorzucić jeden 4-bitowy (lub skorzystać z 4-rech ostatnich) licznik i generator na 555?

    Taki pomysł:
    Wykonać dość rozwlekłą matrycę diod SMD, wybieranie ustawień z wykorzystaniem "DIP-switch-ów" i wymienne "maski" foliowo-papierowe z układem wykorzystującym bramki logiczne.
    Wówczas można by zrobić bardziej wszechstronne urządzenie.
    Dodając na jedną krawędź przyciski można by pozwolić użytkownikowi na zadawanie sygnałów wejściowych.

    Ot Taki mały off topic ;)
  • #5
    kolgreen
    Level 15  
    Zuliczek wrote:
    Strasznie ograniczony ten "symulator", a mnoże lepiej, "wizualizer" bo tylko prezentuje, a nie pozwala zadać ręcznie danych ;)


    Racja, chyba lepiej nazwać go "wizualizerem", choć trochę koślawo to brzmi.


    Zuliczek wrote:

    Strasznie duży kawał laminatu poszedł, wykonując w SMD można by było się bardziej skompresować.
    Tą karteczkę nie lepiej by było wydrukować i nakleić na laminat przed lutowaniem diod?


    W końcowej wersji dałem nadruk. Tylko jak w SMD podświetlić schemat.


    Zuliczek wrote:

    Dygresja:
    To czy nie lepiej by było, w celach "edukacyjnych" wykonać tego układu faktycznie na bramkach z serii 74, dorzucić jeden 4-bitowy (lub skorzystać z 4-rech ostatnich) licznik i generator na 555?


    Hmm, trochę to niepotrzebnie komplikuje układ. W tej chwili mamy jeden scalak,
    w rozwiązaniu które proponujesz jest tych scalaków kilka. Generalnie chodziło
    o to, by zaprezentować jak to z tymi stanami na bramkach jest...
    W elektronikę mało kto by zaglądał.

    Zuliczek wrote:

    Taki pomysł:
    Wykonać dość rozwlekłą matrycę diod SMD, wybieranie ustawień z wykorzystaniem "DIP-switch-ów" i wymienne "maski" foliowo-papierowe z układem wykorzystującym bramki logiczne.
    Wówczas można by zrobić bardziej wszechstronne urządzenie.
    Dodając na jedną krawędź przyciski można by pozwolić użytkownikowi na zadawanie sygnałów wejściowych.
    Ot Taki mały off topic ;)


    Dzięki za dobry pomysł, może w przyszłości coś takiego zrobię.
    Interakcję z użytkownikiem ograniczył fakt, że układ działa w gablotce za szybą.
  • #6
    Zuliczek
    Level 17  
    kolgreen wrote:
    Zuliczek napisał:

    Strasznie duży kawał laminatu poszedł, wykonując w SMD można by było się bardziej skompresować.
    Tą karteczkę nie lepiej by było wydrukować i nakleić na laminat przed lutowaniem diod?


    W końcowej wersji dałem nadruk. Tylko jak w SMD podświetlić schemat.


    Odpowiadam: w kartonie wyciąć otwory na elementy ( diody i rezystory) i na niego nakleić wydruk ;-)
  • #7
    darekRD
    Level 14  
    Wygląda to na klasyczny przerost formy nad treścią. Po zastosowaniu PICa w urządzeniu dydaktycznym spodziewałbym się jakiegoś przełącznika symulowanych bramek (różne rodzaje + ew. jakieś liczniki). Nie wiem czy autor konsultował to z pedagogami, ale w tej postaci to większa wartość dydaktyczną miałoby to, gdyby uczeń sam mógł ustalać stany wejść przełącznikami, może nawet łączyć wejścia- wyjścia bramek. Tyle, że do tego wystarczy kilka przełączników i... bramek :)
  • #8
    horik
    Level 13  
    Przepraszam, że będzie raczej negatywnie, ale...
    Gdyby Autor dał tu kilka TTLi albo CMOSów z bramkami (groszowe sprawy), każdą wyprowadził (wejścia, wyjście, wejście strobujące) na gniazdka bananowe, by można je było łączyć w dowolny układ, do gniazd pododawał LEDy (mogą być separowane tranzystorkami, ale nie muszą, zwłaszcza te nowoczesne, jasne, działające od 1mA), dodał na wejściu "dla bajeru" 555 + licznik dziesiętny (np. 7490) do zadawania wektorów wejściowych, gdzie jego wyjścia można dopinać do owych gniazd, to....

    ...razem wyszłoby 5 scalaków (1x555, 1xlicznik, 3 razy bramki: NAND, NOT, NOR czy inne) a możliwości byłyby sto razy większe jak układu z .... mikrokontrolerem. Skąd to wiem? Bo zrobiłem lata temu coś takiego dla syna mojego kolegi, nazywając to szumnie "dla szpanu" "kombinacyjny układ funkcjonalny". Bawił się tym sporo czasu, a przy tym wiele nauczył. Koszty wyszły śmieszne, więcej dałem za gniazda bananowe i wtyczki, niż za "śmieciowe" TTLe i jakieś "no-name" LEDy. Zasilanie było z jednej baterii 4.5V.

    Nawet, jeśli układ działa za szybką i interakcja nie jest potrzebna, to można by było pokusić się o dodanie jakiegoś generatorka na wejściu + rejestr lub licznik i sterować tym, niech chociaż miga. Tu jedynka, tam zero, tu zero tam jedynka. Tylko powoli, powiedzmy 0,2Hz, żeby można było "ogarnąć" co się dzieje.
  • #9
    Atreyu
    Level 22  
    Znak czasów: kiedyś za pomocą bramek budowało się procesory, dziś za pomocą procesorów buduje się bramki :)
  • #10
    Zuliczek
    Level 17  
    Nie wspominając ile jest bramek, liczników/timerów, rejestrów wszelakich, pamięci banków i innych układów w strukturze procesora które realizują rozmaite zadania :D Nawet teraz kiedy udają parę bramek ;-)
  • #11
    elektronik11
    Level 12  
    Po szybkim przejrzeniu projektu sądzę że dało by się to zrobić łatwiej, szybciej i taniej z dokładnie 6 tranzystorów npn (2x nand+1x negator,1x negator, 1x nor+ 1x negator).
  • #12
    markoz7874
    Level 31  
    W sytuacji kiedy dużo więcej i bardziej skomplikowanych układów można zasymilować na komputerze, robienie "symulatora" jednej funkcji logicznej na mikroprocesorze wydaje mi się zupełnie pozbawione sensu. Kolejny projekt z cyklu "kawał dobrej nikomu niepotrzebnej roboty"
  • #13
    kolgreen
    Level 15  
    Dziękuję za komentarze,
    ale mam wrażenie, że Panowie jednak nie przeczytali....

    Projekt jest umieszczony w gablotce, za szkłem i nie ma możliwości by "pobawić się" układem.
    Ot, takie uatrakcyjnienie szkolnego korytarza.

    Dodano po 26 [minuty]:

    Atreyu wrote:
    Znak czasów: kiedyś za pomocą bramek budowało się procesory, dziś za pomocą procesorów buduje się bramki :)


    Prawda, prawda. Takie FPGA niejednemu elektronikowi "starej daty" spędzają sen z powiek :D

    Dodano po 1 [minuty]:

    markoz7874 wrote:
    W sytuacji kiedy dużo więcej i bardziej skomplikowanych układów można zasymilować na komputerze, robienie "symulatora" jednej funkcji logicznej na mikroprocesorze wydaje mi się zupełnie pozbawione sensu. Kolejny projekt z cyklu "kawał dobrej nikomu niepotrzebnej roboty"


    Żona uczy przedmiotu w ramach którego omawiane jest działanie bramek. Pomyślałem, że zrobię jej taki oto mały prezent.

    Dodano po 5 [minuty]:

    horik wrote:
    Przepraszam, że będzie raczej negatywnie, ale...
    Gdyby Autor dał tu kilka TTLi albo CMOSów z bramkami (groszowe sprawy), każdą wyprowadził (wejścia, wyjście, wejście strobujące) na gniazdka bananowe, by można je było łączyć w dowolny układ, do gniazd pododawał LEDy (...)


    Owszem, owszem. Z tym, że założenia projektu były jednak zupełnie inne.

    horik wrote:

    ...razem wyszłoby 5 scalaków (1x555, 1xlicznik, 3 razy bramki: NAND, NOT, NOR czy inne) a możliwości byłyby sto razy większe jak układu z .... mikrokontrolerem. Skąd to wiem? Bo zrobiłem lata temu coś takiego dla syna mojego kolegi, nazywając to szumnie "dla szpanu" "kombinacyjny układ funkcjonalny". Bawił się tym sporo czasu, a przy tym wiele nauczył. (...)


    Oh, kiedyś młodzież sama robiła takie układy. W obecnych czasach strach im gotowe układy do ręki dać...

    Dodano po 1 [minuty]:

    elektronik11 wrote:
    Po szybkim przejrzeniu projektu sądzę że dało by się to zrobić łatwiej, szybciej i taniej z dokładnie 6 tranzystorów npn (2x nand+1x negator,1x negator, 1x nor+ 1x negator).


    Zgoda, jednak w gablocie by tego układu umieścić już się nie dało.
    Jednak podsunął mi kolega ciekawy pomysł na nowy projekt, dziękuję ;)
  • #14
    markoz7874
    Level 31  
    kolgreen wrote:

    Żona uczy przedmiotu w ramach którego omawiane jest działanie bramek. Pomyślałem, że zrobię jej taki oto mały prezent.

    Wszytko pięknie, tylko skoro to ma być "uatrakcyjnienie szkolnego korytarza", to rysunek powinien zostać wykonany starannie - najlepiej wydrukowany na drukarce laserowej.
    Jeżeli projekt odsłania części elektroniczne, to powinny być one układami zawierającymi bramki ze schematu.
    OK, niech będzie nawet ten procesor, ale w takim przypadku powinno się go ukryć.
    W obecnej sytuacji wygląda to śmiesznie - w celu realizacji prostej funkcji logicznej użyto układu, który zawiera w sobie tysiące takich bramek.
  • #15
    horik
    Level 13  
    A tak przy okazji - ładne kółeczka pod diody można wyciąć dziurkaczem do papieru, a konkretnie jedną jego połówką. Będzie wyglądało lepiej niż "przedziabana przez papier dioda"
  • #16
    sstasinek
    Level 12  
    "Dałoby sie zrobił łatwiej szybciej bla bla bla bla"

    Dajcie spokój, czas już wnuczki bawić. Aż mnie skreca jak coś takiego czytam.
    W celu realizacji wykorzystano scalaka zamiast kilku scalaków w tym licznika i generatora a ma ogromne pole do popisu w ulepszaniu projektu. To nie jest pomoc dydaktyczna na pracownie, tam wystarczy płytka z funktorem i gniazdami banankowymi.

    Dla mnie "jedyna" wada to zbyt ubogi zestaw bramek bo tylko podstawowe (brak nand, nor, exor), brak elementów takich jak przerzutniki(asynchroniczne i synchroniczne) + multiplexery. Niezbyt estetyczne wykonanie ale ma ono swój plus - nie potrzebuje obudowy. Wystarczy na dystansach dodać plecki pod lut w formie kanapki a miedzy warstwy dać gabke np. taka jak a służy do amortyzacji elektroniki w pudełkach i wuala...

    Gdyby dać kaskadowo jak to zrobil autor:
    7 diod dla bramek, 6 dla RS, 10-14 dla przerzutników i 8 dla mux(z zaznaczeniem kierunku), 4 dla tabelki stanów bramek razem 6 sekcji po 8 w sumie 40-48 diod i jeszcze jest zapas dla rozszerzania projektu(16 diod) np. uniwersalny sumator 4 bitowy z przeniesieniem a jeszcze zostanie 2 zapasie :) Owszem jasnośc mlecznych spadnie ale jeśli by dać diody superjasne bedzie w sam raz. Ponadto myśle że diody wejść i wyjść, a w przypadku przerzutników synchronicznych sygnał zegarowy powiny być zaznaczone przy użyciu innego koloru np. źółta lub czerwona lub dwukolorowa dla RS(stan "zabroniony") i muxa(i/o)

    Do rozszerzenia wystarczy ten sam uC z ulepszonym programem, driver ULN2003 + rejestr przesuwny (multiplexowanie), można by projekt podzielić na moduły i tylko na jednym umieścić scalaki na pozostałych diody i ścieżki. Aby skomunikować moduły potrzebne raptem kilka przewodów aby zmienić system wyświetlania(szybkość zmian, reakcje na ewentualne przyciski) wystarczy zmiana programu. Wartość = 10zł za scalaki + 10 do 20zł za diody (48x20-50gr). Obudowa w stylu kanapkowym wyjdzie taniej dla ochrony przed kurzem można by zadrukować papier fotograficzny bo jest odporny na wode(wydruki z epsona takie mam) lub pokryć lakierem bezbarwnym.

    Polecam jednak stworzenie projektu obudowy np. w demówce CorelDRAW i przekazanie do studia reklamowego ktore wykonuje szyldy reklamowe z plexy. Dajesz laminat | papier | plexa i jest ślicznie jak z fabryki odporne na brudne paluchy lub kurz. W dodatku nie tak drogo jak myślisz. Zlecalem im zrobienie obudów do generatora labolatoryjnego, cała gablotka zmieści sie w budżecie 100zł. Wymagane zero manualnych umiejetności, mocowanie ścianek przy wykorzystaniu katowników metalowych do kupienia w każdym sklepie "żelaznym" oczywiście trzeba przewidzieć otwory do wybranego, dopasować do grubości plexy(np. 3mm'owej). Przewidzieć dłuższe śruby dla ostatniej ścianki albo śruby z płaskim łbem przykleić do nich distalem od środka.

    Równie dobrze można zobrazować funktory na kartce papieru tego sie powinniście czepić.
  • #17
    PPK
    Level 27  
    Ha ! Moja praca dyplomowa z 1974r. Tyle tylko, że tamto było na tranzystorach, przełącznikach i lampkach. O TTL-u wiedziałem, że ......... jest w sprzedaży w USA.
  • #18
    kolgreen
    Level 15  
    kolgreen wrote:
    Symulator bramek logicznych Symulator bramek logicznych

    Chciałbym zaprezentować forumowiczom symulator sieci bramek logicznych, który pełni funkcję dydaktyczną.
    Układ szerzej opisałem na stronie dostępnej pod tym linkiem.
    Urządzenie zostało zbudowane na bazie mało atrakcyjnego jak na obecne czasy mikrokontrolera PIC16f84A. Akurat posiadałem kilka scalaków z tej serii i postanowiłem je spożytkować.

    Prezentacja symulowanego obwodu.
    Na tablicy z nadrukowanym schematem symulowanego obwodu są zapalane lub gaszone kontrolki LED sygnalizujące stan wysoki (logiczne 1) albo stan niski (logiczne 0) na wejściach i wyjściach bramek.

    Działanie układu
    Układ realizuje funkcję logiczną (A&&B)||¬C.

    Zgodnie z powyższymi założeniami na trzy symulowane wejścia układu podawane są kolejno wszystkie możliwe kombinacje stanów.

    Symulator bramek logicznych

    Dzieje się to w sposób rotacyjny.

    PCB
    Patrząc na PCB można by powiedzieć, że elementy zostały ułożone w trochę rozrzutny sposób, jednak związane jest to z ułożeniem LED.

    Symulator bramek logicznych

    Wokół LED w pierwszej fazie został narysowany markerem symulowany układ. Jednak ze względów estetycznych zamieniłem go na kartonik z wydrukowanym obwodem.

    Symulator bramek logicznych

    Kod programu mikrokontrolera

    Pojedyncze piny mikrokontrolera do których podłączono LED zostały nazwane zgodnie z nazwami LED z projektu PCB. Umożliwia to ich łatwiejszą identyfikację w kodzie.

    Code: c
    Log in, to see the code


    Funkcja wyłączająca wszystkie LED została nazwana clear_led.

    Code: c
    Log in, to see the code


    Funkcja testująca poprawne działanie wszystkich LED nosi nazwę test_led. Zapala ona wszystkie LED na 0,9s a następnie je wyłącza.

    Code: c
    Log in, to see the code


    Włączenie lub wyłączenie LED (oznaczające stan logiczny) na wejściu bądź wyjściu bramki realizuje funkcja gate_pin_state. Przyjmuje ona jako parametr nazwę LED oraz stan jaki ma zostać wyświetlony (1 bądź 0).

    Code: c
    Log in, to see the code



    Działanie bramki AND realizuje funkcja and_gate. Jako parametry przyjmuje stany na obu wejściach bramki, funkcja zwraca wynik logicznej funkcji mnożenia.

    Code: c
    Log in, to see the code



    Działanie bramki NOT realizuje funkcja not_gate. Jako parametr przyjmuje stan na wejściu bramki, zwraca wynik logicznej funkcji negacji.

    Code: c
    Log in, to see the code



    Działanie bramki OR realizuje funkcja or_gate. Jako parametr przyjmuje stany na obu wejściach bramki, zwraca wynik logicznej funkcji suma.

    Code: c
    Log in, to see the code


    Funkcja main() po podłączeniu zasilania do układu odczekuje 0,9 sekundy i wywołuje funkcję testującą LED. Po teście następuje oczekiwanie przez 0,9 sekundy.

    Code: c
    Log in, to see the code


    Następnie wewnątrz funkcji main zadeklarowano trzy zmienne z tablicami zawierającymi wszystkie możliwe kombinacje stanów, które mogą zostać podane na wejście symulowanego układu.

    Code: c
    Log in, to see the code


    Następnie mikrokontroler wykonuje program w niekończącej się pętli while.
    Pobiera on kolejno osiem stanów z tablic a[], b[] i c[] wartości wejściowe dla poszczególnych bramek; AND i NOT, zapisując wyniki operacji na tych bramkach w zmiennej an i no, by następnie przekazać je na wejście bramki OR. Po ukończeniu prezentacji ośmiu możliwych stanów wejściowych i dokonaniu symulacji, układ rozpoczyna ponownie pobieranie od początku danych z tablic stanów.

    Code: c
    Log in, to see the code