’Big Hex Machine’ - tak nazwano projekt zbudowany poprzez połączenie sił studentów i pracowników wydziału informatyki Uniwersystetu w Bristolu.
Jest to dużej wielkości komputer (ponad 8 metrów kwadratowych), zbudowany specjalnie do nauczania tego, jak działają komputery. Maszyna ta obsługuje instrukcje 16-bit, jest również w pełni programowalna (posiada kompilator o małej objętości, jednak z wielkimi możliwościami tworzenia aplikacji).
Jak mówią twórcy, ich założeniem było dokładne pokazanie, jak informacja w postaci kodu binarnego przechodzi od komponentu do komponentu w trakcie przetwarzania informacji. W tym celu użyto ponad 100 różnych części: 4-bitowe moduły ’hex’, procesor, własny ekran, porty wejścia i wyjścia (obsługują między innymi guziki), dodatkowo posiada kompletny zestaw narzędzi do pisania i kompilacji programów.
Maszyna sterowana jest poprzez Raspberry Pi - dla twórców był on idealnym wyborem, dzięki dużym możliwościom i niskiej cenie.
Twórcy na podstawie etapów budowy prototypu przedstawiają zasadę działania całego urządzenia. Jak wspominają, na początku ’Big Hex Machine’ był ich pierwszym 8-bitowym prototypem, bez innej możliwości włączania i wyłączania niż wyłączenia niż wyłączenie z sieci elektrycznej, to samo tyczyło się restartowania. Istniała możliwość ustawiania szybkości taktowania zegara procesora, jednakże wartością maksymalną był 1KHz, przy której nawet najprostsze programy wymagały czasu na załadowanie się do pamięci. Przy ładowaniu drugiego programu do pamięci potrzebna była druga płytka z modułami, lecz by się do niej dostać potrzebne było manualne przełączenie kabli komunikacyjnych do gniazd tej drugiej płytki. Samo ładowanie programu do pamięci również było kłopotliwe - do Raspberry Pi podpinana była płytka i2c, która korzystała ze skryptu napisanego w języku Python, który to z kolei przesyłał instrukcje programu do pamięci, skąd program mógł już być wykonywany.
Następnym krokiem było pokonanie kolejnej bariery - maszyna miała wykonywać jednocześnie dwie czynności:
* Czuwanie nad zegarem - zaczynanie i kończenie pracy urządzenia, również kontrola szybkości własnej pracy
* Kompilowanie i ładowanie różnorodnych programów do własnej pamięci bez żadnej zewnętrznej interwencji (np. wcześniejszego przełączania kabli pomiędzy płytkami)
W rozwiązaniu tych problemów pomocne okazało się stworzenie serwera NodeJS na Raspberry Pi oraz połączenie z nim płytki i2c poprzez GPIO.
Big Hex dzięki temu otrzymywał komendy do startu, wyłączenia się, resetowania oraz zmiany prędkości taktowania procesora. Odpowiednia adaptacja maszyny pozwoliła również twórcom na bezpośrednią injekcję instrukcji. W połączeniu z wbudowanym kompilatorem pozwoliło to
na automatyczne ładowanie kodu bez potrzeby dotykania żadnych kabli.
Następnym krokiem było ustawienie Raspberry Pi w roli bezprzewodowego hotspotu Wi-Fi, co pozwoliło na zlikwidowanie routera Wi-Fi na USB i innych kabli potrzebnych do połączenia ze sobą poszczególnych części maszyny.
W tym miejscu niemal wszystko było już gotowe - brakowało tylko przyjaznego interfejsu użytkownika. Udało się rozwiązać to za pomocą autorskiej aplikacji webowej, która korzystała z już wcześniej zaimplementowanego interfejsu REST, wystarczyło jedynie dodać HTML5, JQuery oraz bootstrap.
Ostatnim krokiem było odłączenie płytki i2c i podłączenie komputera bezpośrednio do pinów GPIO Raspberry Pi oraz modułów hex, dodatkowo zaistniała potrzeba izolacji kabli, by przez przypadek przepięcie lub inny wypadek losowy nie zniszczyły Raspberry. Po połączeniu Pi bezpośrenio do komputera, bez i2c okazało się, że cała maszyna jest w stanie pracować szybciej - protokół od i2c „zjada” dużą ilość taktów zegara.
Dodatkowym krokiem do przyspieszenia pracy było zbudowanie wrappera NodeJS / C++ GPIO. Wszystkie te operacje pozwoliły na uzyskanie prędkości procesora 80kHz, co pozwala na wykonywanie rozmaitych, ciekawych prac.
Źródła:
1. https://youtu.be/sQM2s8UJJQw
2. https://bighexmachine.github.io
Fajne? Ranking DIY
