Inżynieria wsteczna panelu przycisków ze śmietnika
Już od jakiegoś czasu po moim małym warsztacie z boku na bok przerzucałem małe urządzenie. O bardzo prostej konstrukcji i działaniu. Skąd dokładnie ono pochodzi nie mam pojęcia. Posiada mechaniczne przyciski, które wydają niesamowite kliknięcia oraz są bardzo przyjemne w naciskaniu. Postanowiłem że dziś spróbuję rozgryźć tę maszynę.
Jak widać na pierwszy rzut oka, konstrukcja jest solidna, elementy umieszczone są w sztywnej, metalowej obudowie. Jego budowa wskazuje także że jest to tylko moduł jakiegoś większego systemu, stworzony by dało się go wkładać i wyciągać.
Ale weźmy się do roboty, pierwszym moim instynktem było aby po prostu wcisnąć wszystkie przyciski i posprawdzać testem ciągłości wszystkie kombinacje. Co ciekawe zwarte były tylko dwa styki. (pod koniec wszystko będzie jasne) Jako że bardzo doświadczonym elektronikiem nie jestem, postanowiłem rozebrać urządzenie i wyśledzić poszczególne ścieżki na płytce --zamiast po prostu nie trzymać wszystkich przycisków wciśniętych-- .
Po otwarciu urządzenia moim oczom ukazał się ukryty wcześniej wyświetlacz siedmiosegmentowy, wyjaśniało by to ilość przewodów poprowadzonych do środka.
Wyświetlacz ten sterowany jest przez układ DM7447AN czyli stary i dobrze znany dekoder '47 który doczekał się nawet polskiej odmiany UCY7447. Jego obsługa jest bardzo prosta, dzięki czemu na płycie jest bardzo mało elementów. Każdy segment posiada swój rezystor, oraz linia zasilania, jak i trzy linie sygnałowe filtrowane są przez kondensatory podłączone do masy. Na odwrocie płyty znajdują się informacje: 451112360701 NSH TM894VO 9048
poglądowy rysunek ścieżek na płycie głównej
podczas pierwszych oględzin nie byłem w stanie zbadać złącza testerem ciągłości, ponieważ naciśnięcie przycisku, powoduje odcięcie od masy wszystkich następujących po nim. Ten sprytny zabieg zapobiega naciśnięciu kilku przycisków naraz oraz narzuca hierarchię (na moim rysunku są to kolejno przycisku 1 > 3 > 2 > 4 > 5).
Ostatnim krokiem było dopasować piny na płytce do styków na odwrocie modułu. Możemy przejść do projektów.
Podłączyłem przyciski pod mikrokontroler Arduino i jak na razie odczytuje wartości na pinach płytki
kod Arduino prezentuje się tak:
//define 7 segment display pins
#define pinA 2
#define pinB 3
#define pinC 4
//define button pins
#define btn1 5
#define btn2 6
#define btn3 7
#define btn4 8
#define btn5 9
int count = 0;
void setup() {
//define 7 segment display pins as outputs
pinMode(pinA, OUTPUT);
pinMode(pinB, OUTPUT);
pinMode(pinC, OUTPUT);
//define button pins as inputs
//note: remember to use INPUT_PULLUP, since button are shorting pin to ground
pinMode(btn1, INPUT_PULLUP);
pinMode(btn2, INPUT_PULLUP);
pinMode(btn3, INPUT_PULLUP);
pinMode(btn4, INPUT_PULLUP);
pinMode(btn5, INPUT_PULLUP);
Serial.begin(9600);
}
void updateDisplay(int number){
if((number % 2) > 0) { digitalWrite(pinA, HIGH); } else { digitalWrite(pinA, LOW); }
if((number % 4) > 1) { digitalWrite(pinB, HIGH); } else { digitalWrite(pinB, LOW); }
if((number % 8) > 3) { digitalWrite(pinC, HIGH); } else { digitalWrite(pinC, LOW); }
}
void loop() {
int buttons[] = {btn1, btn2, btn3, btn4, btn5};
for(int i = 0; i < 5; i++){
Serial.print(digitalRead(buttons[i]));
Serial.print(" ");
}
Serial.println();
delay(100);
}
aby sterować wyświetlaczem wystarczy w pętli programu dodać poniższy fragment kodu
Serial.println(count);
updateDisplay(count);
delay(1000);
count++;
if(count > 9){ count = 0; }
Niestety wyświetlacz siedniosegmentowy nie działa poprawnie, prawdopodobnie jest to spowodowane padniętym układem scalonym lub zimnym lutem. Układ dekodujący to drobny wydatek paru złotych i 15 minut roboty, kiedyś się tym zajmę.
Komentarze
Prześlij komentarz
śmiało kieruj tutaj wszystkie pytania. Zachowuj się kulturalnie i ludzko.