Uruchomienie litery z tablicy dworcowej, część II

Zastanawiałem się długo, czy do wykorzystanej liczby pinów bardziej pasuje protokół SPI czy I²C, ale żeby uzyskać więcej odpowiedzi musiałem skorzystać z bardziej zaawansowanego sprzętu niż multimetr za 20zł z giełdy elektronicznej. Na szczęście nie blefowałem na dworcu w Bydgoszczy – faktycznie posiadam dostęp do jednego z lepiej wyposażonych laboratoriów w mieście i następnego dnia z kolegą z pracy zamiast zabawkowego zasilacza podłączyliśmy profesjonalny laboratoryjny, a multimetr zastąpił potężny oscyloskop Tektroniksa. Kiedy już udało się nam go uruchomić (niestety na co dzień nie korzystam z takich zabawek), naciśnięcie jednego guzika udzieliło wszystkich odpowiedzi na temat sygnału generowanego przez sterownik. Na wyświetlaczu widniał delikatnie poszarpany wykres fali prostokątnej, a wyliczona przez oscyloskop częstotliwość wynosiła 980Hz.

980Hz. To mało. Na tyle mało, że było do zmierzenia kartą muzyczną w komputerze. I jest to sporo mniej niż najniższa częstotliwość dla I²C (100kHz). Nie znałem i nie poznałem żadnego protokołu, który bazowałby na tej częstotliwości. Czyżby coś własnościowego? Nie miałem pojęcia co to może być. Aby pomóc sobie w rozwiązaniu zagadki, przyjrzałem się dokładnie płytkom od Pana Mariana – zawierały oddzielne, wymienne kości pamięci z programami. Z nich, mając odpowiedni sprzęt, można już zgrać program. Tak starego sprzętu niestety w laboratorium nie miałem, ale czego nie ma firma – mają koledzy i na następny dzień zaplanowałem zrzut programu z użyciem niegdyś standardowego, ale archaicznego dzisiaj, programatora Willem.

Będąc już w domu, postanowiłem kontynuować próby – potrzebowałem jakoś wygenerować przebieg prostokątny 980Hz i przypomniałem sobie o od dawna leżącej w mojej szafie płytce rozwojowej Freescale FRDM. Trochę czytania dokumentacji, instalowania środowiska programistycznego i użerania się z narzędziami mającymi ułatwić, a tak naprawdę utrudniającymi tworzenie oprogramowania i jest. Mam. Program który na wybranym pinie płytki generuje falę prostokątną o częstotliwości 980Hz. Podłączenie nie było łatwe, bo nie miałem jeszcze żadnych narzędzi pomocniczych w rodzaju płytek stykowch – skręcałem więc druciki i wciskałem je w dziurki na płytce rozwojowej z pomocą pociętej zapałki. Po kilkukrotnym upewnieniu się, że niczego nie poplątałem i nie wysadzę litery w powietrze, włączyłem zasilanie, ustawiając uprzednio ręcznie literę na pozycję ‘A’.

Obraca się. Kolejne znaki przeskakują, a ja czekam w napięciu. Już mija ‘N’. Czy uda się za pierwszą próbą nawiązać nić porozumienia z nieznanym programem w module, czy konieczne będzie żmudne analizowanie programu ze sterownika? Przelatują już polskie znaki, będące jednymi z ostatnich. Ł. Ń. Ó. Ś. Ź. Ż. Kropka. Myślnik. Ukośnik. To już zaraz! Małe n. Spacja. Dalej spacja. To złudzenie, wywołane podekscytowaniem, czy naprawdę stoi? Stoi! Wydałem z siebie głośny okrzyk radości i sprawdziłem ponownie zachowanie modułu, wyłączając i włączając zasilanie – znów nastąpił poprawny reset. Tak samo jak za każdą kolejną próbą. Kolejny sukces zaliczony, w bardzo krótkim czasie! Teraz zostało jednak dużo trudniejsze zadanie – zmusić moduł do obrócenia się na żądaną pozycję…

Uruchomienie litery z tablicy dworcowej, część I

Moduł tablicy który wziąłem ze sobą posiada dwudziestopinowe złącze. Do czego służy aż tyle pinów? Nie wiadomo i nie ma szybkiej drogi do zdobycia tych informacji – jeżeli nawet ktoś uruchomił te moduły przede mną, to nie udostępnił żadnych wskazówek w internecie. KZŁ Bydgoszcz też, rzecz jasna, nie opublikowało nigdzie protokołu sterowania. Pomyślałem o wystosowaniu zapytania do tej firmy – ale stwierdziłem, że zrobię to dopiero wtedy, kiedy uznam że nie uda mi się rozpracować sterowania samodzielnie.

Z takim nastawieniem usiadłem do pracy. Pierwszych osiem pinów nie sprawiło mi żadnych problemów – bardzo dobrze widać grube ścieżki na płytce łączące dwie pary pinów i prowadzące do odseparowanego od reszty układu zasilania silnika na 220V i pozostałe dwie pary które rozdzielają piny zasilające i nie są do niczego podłączone. Z pomocą multimetru ustawionego w tryb testowania ciągłości obwodu z łatwością zlokalizowałem 5 pinów połączonych z masą. Zostało już tylko 7. Dwa kolejne okazały się być zwarte ze sobą i prowadzić do małego układu scalonego, zaraz przy samym gnieździe. Wyszukanie jego numeru w sieci potwierdziło moje przypuszczenia – był to stabilizator napięcia, a badane piny przyjmowały dodatni biegun zasilania układu.

Zostało już tylko pięć pinów. Wszystkie prowadziły do serca modułu – mikrokontrolera. Według znalezionej przeze mnie dokumentacji, nie da się zrzucić z niego raz zapisanego programu. Pocieszające jest to, że musi być on bardzo prosty z racji małej dostępnej pamięci. Jedyne co mogłem zrobić, to opisać piny wyprowadzeniami mikrokontrolera do jakich były podłączone. W ten sposób uzyskałem nazwy A1, A6 i B0, odpowiadające portom µC o tych nazwach i mogące być właściwie czymkolwiek oraz RST i INT. RST to wyprowadzenie resetujące układ, więc do tego najprawdopodobniej służy pin, INT natomiast to sterownik przerwań – wyprowadzenie go na zewnątrz delikatnie zasugerowało mi, że na tym pinie może być prowadzona linia zegara taktującego transmisję danych do modułu. Nie musiało tak jednak wcale być, dokumentacja stwierdzała jasno, że w rolę kontrolera przerwań można wcielić dowolne złącze portu A, w tym 1 i 6, które również były dostępne wprost z gniazda modułu.

Tyle statycznej analizy wystarczyło. Wybrałem się do sklepu elektronicznego gdzie zakupiłem pasujące złącze, krótki odcinek taśmy pasującej do niego, wtyczkę do gniazdka i kabel do niej. W domu połączyłem to wszystko w całość, wyprowadzając napięcie z gniazdka sieciowego na odpowiednie złącza gniazda w module, zasilanie stałonapięciowe podłączyłem do zasilacza ustawionego na 9V, wartość leżącą w bezpiecznym przedziale stabilizatora. Włożyłem dwie wtyczki do wyłączonego przedłużacza i kilkukrotnie sprawdziłem poprawność połączeń. Będąc bardzo niepewnym tego, co miało nastąpić, ostrożnie wcisnąłem przełącznik na przedłużaczu.

W chwili kiedy lampka w przełączniku zapaliła się, sygnalizując obecność napięcia na gniazdach przedłużacza w pokoju rozległ się głośny dźwięk. Pierwszy sukces, moduł żyje! Obraca się! Pierwszy raz od chwili zerwania tablicy ze ściany tunelu, pracuje. Dźwięk opadających klapek zagłuszany jest przez chrobot hamulca na kołach zębatych. Coś cudownego. Ale zaraz, coś jest nie do końca tak, jak sobie wyobrażałem i czego w początkowej euforii nie zauważyłem – moduł kręci się bez przerwy, tak jakby oczekiwał na coś, czego nie dostaje. Samo zasilanie to za mało aby zatrzymał się na pustym polu. Wyłączyłem zasilanie i przystąpiłem do dalszych prac.

Jedną z płytek otrzymanych od Pana Mariana zidentyfikowałem jako bezpośredni kontroler modułów z tablicy – tylko jedna posiadała dwa dwudziestopinowe złącza (każdy z dwóch rzędów modułów miał oddzielną taśmę i w związku z tym, złącze). Uruchomiłem ją z pomocą tego samego zasilacza którego użyłem do ożywienia modułu i sprawdziłem stany pinów. Kilka miało stan niski (0V), kilka wysoki (5V), natomiast przy pinie oznaczonym przeze mnie jako INT zobaczyłem wskazanie w okolicach 2,5V. To jeszcze bardziej potwierdziło moje przypuszczenia – mój tani multimetr nie posiadał pomiaru TrueRMS, więc jeśli wartość zmieniała się w czasie – uśredniał ją. Takie wskazanie z pewnością oznaczało że coś się tam zmienia i sugerowało że faktycznie jest tam linia zegarowa. Spróbowałem oczywiście ustawić resztę pinów na takie stany jakie zmierzyłem (za wyjątkiem INT), nie przyniosło to jednak żadnych zmian – moduł wciąż kręcił się bez końca. Potrzebowałem zaprząc do pracy lepsze narzędzia…