Załóżmy że mamy urządzenie zamknięte w pudełku (P) zasilane napięciem 5V. Nieważne do czego służy urządzenie, ważne że możemy uruchomić pewną funkcję wciskając przycisk. Przycisk jest wyprowadzony na zewnątrz urządzania i mamy na wierzchu kabelki. Jedno wyprowadzenie przycisku jest podpięte do masy a drugie do układu w środku urządzenia. Załóżmy, że tym układem jest mikrokontroler atmega. Czyli mamy sytuację jak na rysunku poniżej.
Obrazki wstawiamy tak topic44.htmlTeraz załóżmy że projektujemy nasze własne urządzenie (NU) oparte na uC atmega, ale chcemy aby to urządzenie wykorzystało ten sam przycisk. Podłączenie będzie wyglądać jak poniżej. Tzn. przecinamy połączenie pomiędzy przyciskiem a P i wstawiamy w środek nasze urządzenie.
Obrazki wstawiamy tak topic44.htmlTeraz jeśli naciśniemy przycisk to NU odbierze sygnał i są możliwe dwie sytuacje.
1) NU obsłuży naciśnięcie przysku
2) NU nie będzie umieć obsłużyć tej sytuacji i "przekaże" sygnał naciśnięcia przycisku do P tak aby P mogło odpowiednio zareagować
Pytanie brzmi: jak zrealizować symulację wciśnięcia przycisku przez uC?
Przycisk działa tak (w pierwszym przypadku)
- Gdy przycisk nie jest wciśnięty to noga mikrokontrolera nie jest nigdzie podłączona (jest podłączona wewnętrznie do + wymuszając stan wysoki).
- Gdy przycisk jest wciśnięty to noga mikrokontrolera jest podpięta do masy
Po dłuższej chwili namysłu i poszukiwań w internecie wpadłem na taki pomysł. Może zamiast definiować pin NU jako wyjście i nim sterować zróbmy coś na pierwszy rzut oka dziwnego. Ustawmy na stałe PORT na stan niski i sterujmy DDR.
Mamy wtedy dwie sytuacje:
PORT = 0, DDR = 1 - wyjście ze stanem niski (czyli przycisk wciśnięty)
PORT = 0, DDR = 0 - wejście bez pull-up (Hi-Z) - czyli jakby symulujemy odseparowanie od linii i tym samym drugi układ (P) widzi to jako przycisk nie wcisnięty
Wydaje mi się że to powinno zadziałać, ale nie testowałem tego pomysłu. Prosiłbym o potwierdzenie czy to jest dobre rozwiązanie.
Nie testowałem tego ponieważ tak naprawdę problem jest odrobinę inny i przechodzimy teraz do sedna. Pudełko P jest zasilane 12V...
Ostateczne pytanie jest więc takie: Jaki układ powinien być pomiędzy moją atmegą a pudełkiem P żeby zasymulować wciśnięcie przycisku wiedząc jednocześnie że na linii do której był wcześniej podpięty przycisk jest 12v? Coś mi mówi że pewnie jest potrzebny tranzystor..., ale moja wiedza elektroniczna jest zbyt mała żeby opracować rozwiązanie. Prośba o pomoc.
Na koniec uzasadnienie skąd w ogóle takie pytanie.
Pracowałem kiedyś nad komputerkiem samochodowym. Urządzenie w stosunku do uniwersalnych urządzeń tego typu które można kupić ma dwie unikalne cechy. Po pierwsze łączy się ze sterownikiem silnika po protokole diagnostycznym KW1281 i wyciąga dane o różnych parametrach pracy silnika. Po drugie wyświetla informacje na fabrycznym wyświetlaczu wbudowanym w licznik samochodu który oryginalnie służy do wyświetlania komunikatów z radia. Podsłuchałem za pomocą analizatora stanów logicznych jak przesyłane są informacje i metodą reverse engineringu doszedłem jak są zbudowane obydwa protokoły. Zaimplementowałem komunikację w języku C i wgrałem do Atmegi. Niestety projekt zatrzymał się na prototypie złożonym na płytce stykowej i nigdy nie wdrożyłem go produkcyjnie do auta. Chciałem aby sterowanie urządzeniem odbyło się za pomocą przycisków w manetce które służą do sterowania fabrycznym komputerkiem, ale też żeby przekazać informacje o wciśnięciu przycisku do fabrycznego komputerka gdyby była taka potrzeba.
Dzięki za wszystkie podpowiedzi i pozdrawiam serdecznie
