Zauważyła to firma ELM Electronics, udostępniając układ ELM402. Niestety jest on mało popularny w naszym kraju, a przez to drogi. Przedstawione w projekcie rozwiązanie oparte na popularnym i tanim mikrokontrolerze, oferuje większe możliwości i to za niewielką część ceny pierwowzoru.
Aby w pełni wykorzystać możliwości układu, zaprojektowano uniwersalną płytkę, w której można umieścić różne typy potencjometrów cyfrowych. W docelowym rozwiązaniu można użyć mikrokontrolera w obudowie SMD.
Jak to działa - dekoder enkodera impulsowego (elektroniczne pokrętło)?
Budowa układu, którego schemat pokazany jest na rysunku 1, jest banalnie prosta. Zasilanie zapewnia port USB. P3 to enkoder – elektroniczne pokrętło. Kondensatory C1 i C2 wraz z wewnętrznymi rezystorami podciągającymi tworzą filtr RC eliminujący zakłócenia, spowodowane drżeniem styków. W przerwaniu wywołanym przez jedno z wyprowadzeń enkodera sprawdzany jest stan drugiego wyprowadzenia.
Zależnie od tego, w jakim stanie logicznym jest linia B enkodera w chwili opadającego zbocza linii A, można sprawdzić kierunek obrotu ośki enkodera. Z rysunku 2 łatwo wywnioskować, że nie jest ważne, czy analizujemy zbocze narastające, czy opadające i którego wejścia – zawsze na podanej zasadzie można określić kierunek obracania ośki enkodera.
Mikrokontroler bada stan wyjść pokrętła – enkodera i wytwarza impulsy sterujące dla współpracującego potencjometru. Dostępne są różne scalone potencjometry elektroniczne różnych producentów, wymagające odmiennych impulsów sterujących. Niektóre mają wbudowaną pamięć EEPROM, gdzie można trwale zapisać „stan suwaka” potencjometru, czyli wartość nastawionej rezystancji lub współczynnik podziału dzielnika potencjometru. Inne scalone potencjometry nie mają pamięci i po wyłączeniu zasilania suwak zostaje ustawiony w położeniu „spoczynkowym”.
W omawianym układzie zmiana pozycji pokrętła enkodera P3 powoduje wygenerowanie odpowiedniego impulsu (zestawu impulsów) zmieniającego stan dołączonego scalonego elektronicznego potencjometru. W tym celu przewidziano trzy „wyjścia impulsowe” oznaczone /CS (Chip Select), U/D (Up/Down) oraz DW. Zależnie od typu współpracującego układu potencjometru wytwarzana jest potrzebna sekwencja, zwykle na dwóch liniach. Rysunek 3 pokazuje przykładowe przebiegi zmieniające stan potencjometru MAX5128.
Po wykryciu ruchu pokrętła uruchomiany jest także timer odliczający czas: 10 sekund. Jeśli w tym czasie nie będzie zmiany położenia enkodera, wtedy pozycja „ślizgacza” zostanie zapamiętania w wewnętrznej pamięci potencjometru – rysunek 4 pokazuje sekwencję zapisu stanu kostki MAX5128.
Jeśli dołączony potencjometr nie ma pamięci EEPROM, informacja o pozycji jego suwaka zostanie zapisana w pamięci mikrokontrolera i odtworzona po jego zresetowaniu (ostatnie ustawienie potencjometru z pamięcią EEPROM jest odtwarzane przez niego po włączeniu zasilania).
Ponieważ po resecie mikrokontrolera nie jest znane położenie „ośki” potencjometru (potencjometry po włączeniu zasilania przyjmują 1/2 wartości rezystancji lub pozycję zero), program najpierw generuje 256 impulsów DOWN, po czym tyle impulsów UP, ile było zapamiętane w EEPROM. Dla niektórych potencjometrów liczba impulsów DOWN może być mniejsza (128, 100 lub 64). Aktualne oprogramowanie obsługuje tryby pracy (potencjometry) opisane w tabeli 1.
Działanie w dwóch ostatnich wymienionych w tabeli trybach emulacji EML402 pokazane są na rysunku 5. W górnej części rysunku kursorami zaznaczono impulsy, które mają czas trwania 3ms (2,963ms).
Timer odliczający timeout 10 sekund jest obsługiwany w przerwaniach. Pomiędzy przerwaniami mikrokontroler jest wprowadzany w tryb obniżonego poboru mocy. Tu widać zaletę obsługi enkodera w przerwaniu INT. Dzięki niemu mikrokontroler jest wybudzany z przerwania i program główny nie ma problemu z obsługą potencjometru. Można by jeszcze bardziej oszczędzać energię.
Należałoby po odliczaniu timeout ustawić przerwania INT wyzwalane poziomem i wyłączyć WDG. W przerwaniu INT ustawić ponownie IRQ od zbocza, natomiast w programie głównym, po wybudzeniu, włączyć WDG. Aby głębokie uśpienie działało, przerwanie musiałoby być doprowadzone do linii INT0 (PB2), bo tylko ona w tym procesorze AVR może generować IRQ wyzwalane poziomem. Przerwanie takie musi być typu SIGNAL, a nie INTERRUPT, bo nastąpi przepełnienie stosu. W przerwaniu należy przestawić je z wyzwalania poziomem na wyzwalanie zboczem opadającym.
Montaż i uruchomienie - dekoder enkodera impulsowego
Układ można zmontować na płytce drukowanej, pokazanej na rysunku 6. Montaż jest standardowy i nie wymaga omawiania. Pomocą może być fotografia tytułowa oraz druga fotografia w artykule. Urządzenia nie trzeba uruchamiać, trzeba tylko wgrać odpowiednią wersję oprogramowania. Ustawienie bitów konfiguracyjnych jest standardowe (zegar 1MHz). Można ewentualnie zaznaczyć WDGON.
Kody źródłowe i wynikowe znajdują się w Elportalu w materiałach dodatkowych.