Kupiłem sobie do swojego projektu taki oto manipulator (używka za 50 zł, więcej bym nie dał).
- 1x 14106: 6 inwerterów
- 2x 14094: 8-bitowy rejestr przesuwny
- 2x 14021: "8-bit static shift register"
- 2x BA10339: 4 komparatory
Wygląda na to, że za wyjścia odpowiadają 14094, a za wejścia 14021. Nie wiem do czego są te komparatory (ale chyba mają związek z wejściami z czujek, generacja tonu dla buzzera też może jest tam robiona (?)).
Wejścia:
- przycisk "tamper"
- 4 zworki adresowe
- dwa wejścia z czujek (Z1 i Z2)
- 12 przycisków klawiatury
Czyli, jeśli klawiatura nie jest czytana jakoś inteligentniej, mamy 18 bitów. Jeśli jest inteligentniej (bo nie ma sensu przesyłać stanu wszystkich klawiszy), to minimalnie 11 (4 na kod przycisku) lub 10 (bo może tamper też jest uznawany za przycisk?).
Wyjścia:
- 15x LED
- buzzer
Czyli 16 bitów, składa się ładnie w 2x 14094.
Interfejs to:
- +12V
- CLK
- DATA
- Z1
- COM
- Z2
Na razie ustaliłem, że:
- COM to po prostu masa
- Z1 i Z2 to prawdopodobnie wejścia z dodatkowych czujek
- CLK i DATA mają pull-upy -- występuje na nich ok. 9 V, po zwarciu do masy płynie ok. 1 mA
- DATA ma tranzystor, który jest w stanie przywrzeć tę linię do masy
Więc stwierdziłem, że to po prostu magistrala elektrycznie podobna do I2C, czyli otwarty kolektor + pull-upy, CLK jednokierunkowy, DATA dwukierunkowa.
Zrobiłem interfejs, żeby podpiąć to do raspberry, i skrypt w Pythonie, który macha liniami.
Wyjścia ogarnąłem bardzo prosto -- DATA jest przepisywane na pierwszą diodę z narastającym zboczem zegara, i diody się przesuwają. 16 bitów (nie jestem tylko pewien buzzera, bo go na razie odpiąłem). Zmapowanie zajęło kilka minut.
Gorzej z odczytem. Wymyśliłem sobie, że pewnie skoro narastające zbocze powoduje przepisanie DATA do rejestru, to na opadającym klawiatura przepisuje swoje dane na linię DATA. Tylko że wydaje się, że tak nie jest.
Jeśli switch tamper (ten, który jest wciśnięty, gdy klawiatura jest przytwierdzona do ściany, i otwiera się, gdy się ją zdejmie) jest puszczony (klawiatura zdjęta ze ściany), to DATA jest zawsze wysoka (tzn. stan wysokiej impedancji).
Jeśli switch tamper jest wciśnięty (klawiatura wisi na ścianie), to na DATA przepisywany jest stan CLK (czyli jak wymuszę na CLK stan niski, to na DATA też pojawia się niski, w przeciwnym wypadku DATA jest w Hi-Z).
Wciskanie klawiszy nie powoduje żadnych zmian w odczytywanych danych (poprawność działania interfejsu potwierdziłem woltomierzem).
Zanim zacznę analizować układ połączeń (co nie będzie niemożliwe, ale też nie będzie takie proste -- sporo przelotek, itd.), to może ktoś ma sugestię, jak to cholerstwo spróbować ugryźć? :) Albo może ma przypadkiem taką centralkę i może podpiąć oscyloskop lub analizator stanów (tylko uwaga na wysokie napięcie)?