

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.

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.

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.

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
Funkcja wyłączająca wszystkie LED została nazwana clear_led.
Code: c
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
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
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
Działanie bramki NOT realizuje funkcja not_gate. Jako parametr przyjmuje stan na wejściu bramki, zwraca wynik logicznej funkcji negacji.
Code: c
Działanie bramki OR realizuje funkcja or_gate. Jako parametr przyjmuje stany na obu wejściach bramki, zwraca wynik logicznej funkcji suma.
Code: c
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
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
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
Cool? Ranking DIY