Popularny post atlantis86 Napisano Maj 8, 2020 Popularny post Udostępnij Napisano Maj 8, 2020 Przed ponad rokiem opisywałem jeden ze swoich projektów, którego celem było stworzenie czegoś przypominającego Arduino za pomocą układów scalonych retro. Powstały wtedy dwie płytki - jedna główna, zawierająca większość logiki, druga będąca czymś w rodzaju shielda z wyświetlaczem hd44780 i kilkoma przyciskami. Układ w takiej formie był tylko ciekawostką, pozbawioną praktycznego zastosowania - jedyne co robił, to wyświetlał trochę tekstu i migał diodami. Jakiś czas temu powróciłem jednak do starego pomysłu i zacząłem projektować trzecią płytkę, która dodała bardziej konkretną funkcjonalność. Postanowiłem przenieść na tę niecodzienną platformę jeden z moich starych projektów, a mianowicie sieciowy licznik Geigera (i nie tylko) o nazwie EtherGeiger. Zrobienie licznika Giegera na współczesnym mikrokontrolerze nie jest taki trudne - wszystkie niezbędne podzespoły są już obecne w układzie. Wystarczy tylko dodać przetwornicę wytwarzającą wysokie napięcie dla rurki STS-5 oraz wzmacniacz operacyjny, kierujący odebrane impulsy na wejście licznika. W przypadku techniki retro nic nie jest takie proste. Procesor 6502 nie posiada żadnych zintegrowanych peryferiów - należy je dodać do projektu w formie osobnych układów scalonych, omijając przy tym paru pułapek. Najprościej było z interfejsem UART, który zrealizowałem na popularnym układzie MOS6551, używanym kiedyś powszechnie w komputerach ośmiobitowych. Port szeregowy obecnie wykorzystuję do debugowania, ale docelowo zostanie on wykorzystany do komunikacji poprzez magistralę RS485. Najważniejszy element - licznik - został zaimplementowany za pomocą układu Motorola MC6840. Pojedynczy scalak zawiera tak naprawdę trzy liczniki. Jeden z nich zlicza impulsy z licznika Geigera, drugi pełni funkcję podobną do arduinowej funkcji millis(), trzeci generuje przebiegi o częstotliwości akustycznej, które można wykorzystać do stworzenia prostej sygnalizacji dźwiękowej. W układzie umieszczony został również zegar czasu rzeczywistego z podtrzymywaniem bateryjnym, zrealizowany na układzie M6242, wykorzystywanym kiedyś w kartach rozszerzeń do Amigi. Ostatnim układem jest równoległy port wejścia/wyjścia 8255. Część jego pinów wyprowadziłem na złącze DIN, dzięki czemu w przyszłości będę mógł wygodnie podpiąć inne czujniki, np. temperatury. Pozostałe są dostępne przez dwurzędowe złącze goldpin na płytce. Dodatkowo układ został wyposażony w złącze karty CF. Jest to trochę eksperymentalna funkcja - jeśli wystarczy mi zasobów, spróbuję skompilować bibliotekę FatFS i dopisać kod logujący odczyty w pliku. Jeśli nie. będę musiał popracować nad bardziej oszczędnym systemem plików. Kod został napisany w C i skompilowany za pomocą CC65. Czy urządzenie tego rodzaju tworzy się prościej, niż za pomocą współczesnych platform? Zdecydowanie nie. Takie podejście ma co prawda swoje zalety - fajna jest np. możliwość podpięcia urządzeń do magistrali systemowej i odwoływanie się do nich przez adres w pamięci. Niemniej jest tutaj też całe mnóstwo pułapek, bo np. jakiś układ życzy sobie, aby pewne adresy odczytywać w określonej sekwencji, czego kompilator nie jest świadom i potem trzeba potem poprawiać po nim kod asemblerowy. Muszę jednak przyznać, że tworzenie takich konstrukcji jest całkiem niezłą frajdą, można się też dzięki temu dowiedzieć jak układy mikroprocesorowe działają na nieco niższym poziomie, np. co tak naprawdę dzieje się w momencie uruchomienia programu albo wywołania przerwania. Na poniższych zdjęciach jest widoczny cały układ, w tym także obok współczesnego "brata", zrealizowanego na mikrokontrolerze PIC32. 🙂 4 1 Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »