Náhrada rotačního enkóderu joystickem

 

Potřeboval jsem v generátoru nahradit poškozený rotační enkóder joystickem,
který při krátkých výchylkách vlevo a vpravo bude přidávat (ubírat) jedničku.
Při delším vychýlení joysticku (nad jednu sekundu) se spustí pomalý autorepeat.
A při vychýlení delším než 7 sekund se autorepeat zrychlí asi na dvojnásobek.

Výhoda proti původnímu enkóderu je, že se generují přesné obdélníky bez zákmitů.
Podle mého názoru je jednoduché naklonění joysticku i příjemnější na ovládání, než zběsilé točení o desítky otáček původním ovladačem.
Hlavní důvod ale byl, že se mi nepodařilo sehnat takový enkóder, který by na pootočení o jeden zub vygeneroval jen jednu hranu ve výsledném signálu. Všechny dostupné enkódery generovaly na jedno cvaknutí celé dva fázově posunuté obdélníky, a to způsobovalo, že generátor přičítal a odečítal číslo 4 na pootočení o jeden zub.

Ze začátku jsem se chvíli zabýval myšlenkou, že bych k takovému enkóderu přidělal děličky frekvence 4 (binární čítače), ale nakonec jsem použil ATtiny 13.
Jako plošný spoj, na kterém všechno drží, jsem použil přechodku SMD/DIL 14.
Přiřazení pinů mezi joystickem a ATtiny13 jsem optimalizoval tak, aby bylo třeba co nejméně vnitřních propojek.
Nakonec stačil jen jeden drát mezi GND joysticku a GND ATtiny.

Protože mi zbývalo dost paměti, doplnil jsem ještě uspávání procesoru, která uspoří několik mA odběru při neaktivitě joysticku.
Poslední přidanou funkcí bylo softwarové odpojování výstupů ATtiny (přepnutí na INPUT s vysokou impedancí) při stisku tlačítka na joysticku.

Programování je možné i s připojeným joystickem (musí být ale ve středové poloze).
Pro nahrání programu jsem použil provizorně připájený 6-žilový kablík k ISP programátoru, který jsem po nahrání programu odpojil.

Připojení k ovládanému zařízení je pomocí 4 vodičů (+5V, GND, OUT_A, OUT_B).
Pokud by bylo nutné zachovat i původní rotační enkóder, připojí se jeho střed na pin PB1 ATtiny13.
Přepínání mezi původním enkóderem a joystickem se provádí stiskem tlačítka u joysticku.

I když to není úplně nutné, dal jsem na napájení poblíž ATtiny kondenzátor 100n.

Původně bylo v plánu spínání výstupů přes N-FET tranzistory, ale nakonec jsem výstupy ATtiny nechal připojené napřímo do původních připojovacích bodů rotačního enkóderu. Kdyby bylo třeba oddělit napěťové úrovně pomocí tranzistorů, stačí v programu odkomentovat řádku, která zinvertuje výstupní logiku:

      //#define NFET
      

Pro signalizaci je možné připojit na výstupy "A", "B" a "PB1" přes odpory LED proti GND Vcc.
(LED zapojovat raději proti Vcc, aby netahaly výstupy při vysoké impedanci do stavu LOW.)


Program pro ATtiny13

Zdroják joy_encod.ino
Přeložený HEX soubor joy_encod.hex

 


Propojení joysticku a ATtiny.


Pin "VRy" na joysticku se odpojí.
Programovací ISP piny jsou zobrazeny modře, po naprogramování se odpojí.




Připojení ovladače do zařízení společně s původním ovladačem






Přepínání výstupních pinů podle zvoleného ovladače


Při ovládání joystickem se signály generují na ATtiny a původní rotační ovladač má odpojený střední vývod.
Při ovládání rotačním ovladačem jsou výstupy ATtiny odpojené a střední vývod rotačního enkóderu se přizemní.




Ukázka činnosti na YouTube:


https://youtu.be/VJsel3IevRk

úvodní strana webu AstroMiK.org

poslední úprava stránky 11.7.2026