il russo l'ha fatto, il suo programma e' un capolavoro. Io mi sono limitato a capire alcune parti, non l'ho studiato tutto.
https://www.youtube.com/channel/UC4Mxjk ... GHw/videosUsa un atmega2560 (arduino mega), piu' periferiche e memoria del atmega328p (arduino uno) ma praticamente stessa capacita' di calcolo.
Lui ha messo anche un carro sul trasversale e puo' filettare completamente in automatico ma anche tornire conicita', sfere e mi pare qualcos'altro che non ricordo.
@Mimoletti: grazie mille della spiegazione, ora mi e' chiaro come hai fatto funzionare il timer.
Il mio sistema replica i tuoi menu' e il tuo concetto di play-pause-reverse (mi sono abituato a quello e lo trovo comodo e immediato).
Visto che ho un encoder da 2000ppr e McMax consiglia un encoder da (attorno) 300ppr x4, ho pensato che bastasse leggere un fronte solo, quindi genero 2000 interrupt a giro (a 120KHz sono, come dici tu, 8uS). Per discernere il senso di rotazione, nella routine di interrupt vado a leggere lo stato dell'altro canale dell'encoder. Visto che l'interrupt e' sul fronte di discesa del canale A, se il canale B e' alto girero' da una parte, se e' basso girero' dall'altra.
Avevo gia' provato a misurare quanto ci mette la mia routine di interrupt ma non mi ricordo. Adesso faccio una prova al volo.
Fatta prova, la routine di interrupt impiega 4uS.
C'e' ancora tanto spazio di miglioramento e ottimizzazione del codice...