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ć. 


Na górze umieszczony jest także zatrzask skręcany śrubą do szybkiego montażu.


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  

schemat układu DM7447AN

Poglądowy rysunek przebiegu ścieżek na płycie wyświetlacza




płyta główna urządzenia 





poglądowy rysunek ścieżek na płycie głównej




Na tym rysunku na czerwono zaznaczyłem wspólne ścieżki podłączone do masy (w przypadku braku wciśniętego przycisku), a na zielono ścieżki sygnałowe idące indywidualnie od każdego przycisku. Schemat podłączenia przycisków przedstawia się następująco:

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

Popularne posty z tego bloga

Naprawa Yamaha stagepass 300 - cinch złamany w gnieździe

Układy scalone w module Siemens LOGO! DM8 230R