Hola Genaro
(Este mensaje solo puede entenderse combinandolo con los datos en el curso!)
Estas casi perfecto en tu entendimiento del controlador rotativo. Si miras el circuito que publique en el curso vras que el dispositivo no es mas que algo mecánico! Tienes razón cuando lo comparas con la radio, buscas el programa y pinchas para seleccionar el programa. Allí empieza la diferencia!
El dispositivo de lo puedes imaginar, y así lo muestra el esquema,, una caja con 3 interuptores. Lo que el esquema denomina C1 y C2 en nuestro dispositivo son D y E. Si pinchas el dispositivo, lo que haces es cerrar el interruptor cambiando el valor de la resistencia entre esos dos pines de infinito=abierto a 0=cerrado.
Con los pines A y B es un poquito mas complicado. Girando el dispositivo sentiras 16 puntos donde el torque cambia y esos 16 puntos son las 16 senalisaciones que el dispositivo te dara por un giro de 360 grados. El dispositivo se puede girar en ambas direcciones ilimitadamente.
En el curso también muestro el gráfico de la hoja de datos que indica con el texto inglés "Detent steady point 3 puntos en ese gráfico. Cada uno de esos punto equivale a uno de los 16 puntos que el dispositivo senaliza durante un giro. De izquierda a derecha demosle a esos 3 puntos el nombre de P1, P2 y P3.
Empesemos con el punto P1 en ese gráfico:
Recordemos que OFF equivale 0 y ON 1:
En P1 por lo tanto la senal A tiene el valor de 1 y B de 0
En P2 por lo tanto la senal A tiene el valor de 0 y B de 0
En P3 por lo tanto la senal A tiene el valor de 1 y B de 1
Aquí entra la función del pin COM!
En el esquema el Pin COM estaconectado directamente con GND, o sea tierra, o sea 0V.
Lo que el resto del circuito hace es lo mismo que hicimos con los LEDs, efectivamente la persona que hiso ese esquema ha puesto un LED en paralelo al dispositivo para visualizar cambios de estado en el dispositivo. Ves, y eso es uno de los objetivos del curso. Siempre volvemos a usar los mismos elementos básicos, por ejemplo el de como hacer que un LED este encendido o no! Quién dice que "tal pinches LEDs" no ha entendido lo fundamental que es el método que hace que un LED se encienda o no con la forma que trabaja la electrónica digital. El LED solo tiene la función permitirnos "ver" lo que pasa y no tener que usar cada vez un multimetro para comprobar que pasa!
Las resistencias R4, R6, R8 y R10, que en este circuito también tiene el valor de 10kOhmios, tienen la misma función que las resistencias del mismo valor en el módulo de microinterruptores en la tarjeta experimental. Su función es limitar la cantidad de corriente que fluye.
Las resistencias R3, R5, R7 y R9, que en este circuito también tiene el valor de 10kOhmios, tienen la misma función que las resistencias del mismo valor en el módulo de microinterruptores en la tarjeta experimental. Su función es la de conectar las salidas A y B con Vcc, o sea 5V o "1".
Miremos ahora los interruptores dibujados en el esquema como parte del controlador rotativo. Estos pines son usados de la misma forma como cuando en tus videos cambias la posición de un microinterruptor! Caramba! El controlador rotativo no es mas que un Genaro en miniatura que dentro del dispositivo va cambiando la posición de los microinterruptores cada vez que cambia de un Punto al próximo Punto.
Asumamos ahora que el controlador rotativo este en la posición P2. El microgenaro

en esta posición a puesto los 2 microinterruptores en tales posiciones, que los microinterruptores esten ambos cerrados connectando así las salidas A y B directamente con tierra o GND o 0V!
Giremos el controlador rotativo de la posición P2 a P3 en sentido del reloj. El microgenaro ahora cambia la posición de ambos microinterruptores de cerrado y abierto. Así las salidas A y B ya no estan conectadas con tierra. Que tenemos ahora?
Las salidas A y B estan conectadas a Vcc atraves de las resistencias R3 y R5, y esto "jala" la tensión de 0V a 5V! Es lo haces en la tarjeta experimental abriendo los microinterruptores!
Ahora imaginate en el esquema el conector SV1 estando conectado directamente a los pines del controlador! Entonces las salidas A y B estan conectadas a sendos pines del controlador y la tensión en los pines del controlador es de 5V, pues las resistencias R3 y R5 han jalado la tensión a 5V!
Ahora tu programa que habra asignado a variables que almacenan el valor de las salidas A y B los valores de "0", verá que estos valores han cambiado a "1. eso que le dice a tu programa?
Tu programa así sabe que el controlador a sido girado por una posición en dirección del reloj de la posición P2 a P3! Esa información la usas en tu programa para mover el cursor de la pantalla por un dígito hacia la derecha.
Miremos ahora lo que ocurre si movemos el controlador rotativo no en dirección del reloj de P2 a P3, sino de P2 a P1 encontra del reloj!
Los valores que aparecen en las salidas A y B del controlador rotativo ahora son los de P1, A=1 y B=0! Ahora tu programa sabe que el controlador rotativo ha sido girado hacia el otro lado y cambia la posición del cursor por una posición en la pantalla hacia la izquierda!
Puedes experimentar esto programando algo en la tarjeta experimental usando interruptores de los microinterruptores de tu tarjeta experimental. Ahora lo que haces es cambiar del microgenaro

en el controlador rotativo al Genaro humano!
En vez de usar el controlador rotativo operas los microinterruptores como lo has hecho para seleccionar el ritmo de blinqueo de los LEDs. Asumes la posición inicial P2, pones los microinterruptores en tal posición que refleje los valores de las salidas A y B del controlador rotativo. Ahora cambias la posición de los microinterruptores detal forma que reflejen los valores de los puntos P1 o P3 y haces que el controlador cambie de posición.
Un tercer microinterruptor lo usas como equivalente a pinchar el controlador rotativo. El interruptor no pinchado equivale a una posición del microinterruptor, pinchado la otra.
Lo que tu programa tiene que hacer diferente del programa de blinqueo es lo siguiente. Solo cuando pinchas el controlador rotativo, lo que en el experimento con la tarjeta experimental equivale a la posición "pinchado" del microinterruptor, tu programa lee los valores de los pines A y B y los pone en sendas variables. Ahora devuelves el microinterruptor pinchado a no pinchado. El programa por lo tanto ignora lo que pasa en los pines A y B. Ahora cambias de posición de los microinterruptores a los valores equivalentes a los puntos P1 o P3. Recién entonces vuelves a poner el microinterruptor en la posición pinchado y así tu programa graba los nuevos valores de A y B en las variables.
Ahora notas que tienes que haber copiado los viejos valores de A y B a sendas variables A_viejo y B viejo. Así ahora tu programa compara los valores A y B con los viejos valores y así sabes si el controlador rotativo ha sido movido en dirección del reloj o viceversa y así puede cambiar la posición del cursor a su nueva posición.
Si logras programar este programa usando los microinterruptores de la tarjeta experimental habras recorrido un gran trecho en el camino a crear un módulo de software para el control del controlador rotativo. Las ventajas de usar los microinterruptores de la tarjeta experimental y no desde un principio el controlador rotativo son 2!
Primero, haciendolo como describo tienes todo el tiempo del mundo para verificar que tu programa efectivamente hace lo que te esperas. Si el cursor cabia de posición como lo esperas, habras logrado el objetivo.
Poniendolo de forma negativa y probablemente reflejando el reto que encontraras durante esta tarea, así te será posible encontrar donde esta la causa del error, pues el cambio de un estado a otro es mínimo!
Segundo. Con el controlador rotativo tenemos 3 problemas, retos que resolver. Es muy importante para esto saber que básicamente tu programa esta funcionando correctamente como lo verificas con la primera parte de la tarea!
El reto mas serio es el del rebote". En el experimento inicial este problema no aparece, pero si usando el controlador rotativo. Cuando pinchamos un switch con el dedo, con los sentidos humanos tenemos la impresión que lo que hacemos es claro y limpio, cambiamos la posición de un interruptor de abierto a cerrado. Como el microcontrolador es millones de veces mas rapido que nosotros, este tiende a registar múltiples abrir y cerrar del microinterruptor en este proceso lo que en el caso de nosotros querer mover el cursor por una posición en la pantalla resulta en este moviendose por varias posiciones sin que podamos predecir si es de P2 a P1 o P3 y cuantas veces esto. El resultado es que el cursor se mueve de manera imprevisible. Esto en el controlador rotativo no solo ocurre con el interruptor de pinchar o no, sino también con los interruptores asignados a A y B.
Para la solucíón de este problema existen 2 caminos que yo recomendaría usar en paralelo.
La primera solución es usar una sentencia de BASCOM que en resultado lo que hace es ignorar cambios hasta que no halla pasado un cierto tiempo sin cambios. La longitud de este tiempo de espera tiene su repercusión en el número de cambios de posición por segundo que nuestro programa puede reconocer,o sea que tan rápido se puede girar el cotrolador rotativo sin que el programa falle de detectar cambios de posición. En el caso de mover el cursor o en el caso de sintonizar un canal en la radio esto no es crítico, pues estaremos girando el controlador rotativo hasta que el cursor este en la posición deseada. Pero el mismo sistema también se usa para determinar el rpm de un motor girando. Aquí es importante que no se pierda ninguna posición, para que el rpm sea el correcto. En el caso de los motores de paso, lo mismo, queremos que nuestro programa no se pierda ningun paso del motor de paso.
Como pueden ver el método que estamos aprendiendo no solo es útil para el controlador rotativo, sino que el mismo método lo volvemos a encontrar en muchísimos usos interesantes para nuestra afición!
Acabamos de hablar sobre el método de resolver el problema solo por software. Existe un segundo método y es de hardware.Lo que hcemos en conectar condensdores de 100uF, como los usamos entre tierra y Vcc en el microcontrolador! Ponemos en forma de puente un condensador entre GND y los pines A, B y D o E. GND lo tenemos conectado al pin COM del controlador rotativo! Lo que hace el condensador es absorber la energía de los múltiples abre y cierre cuando los interruptores mecánicos en nuestro controlador rotativo cambian de abierto a cerrado o viceversa, evitando así que la tensión en el pin de controlador registre cambios de tensión y así falsos switches de estos. Igual que en el microcontrolador, estos condensadores tienen que montarse lo mas cerca posible al controlador rotativo! El resultado de esto esel siguiente.
Cuando hemos logrado en un primer paso escribir nuestro programa usando los microinterruptores de la tarjeta experimental tal cual los conocemos de las tareas de blinqueo del LED, pasamos a usar este programa con el controlador rotativo anadiendole la sentencia de "debouncing". Allí se puede modificar la longitud del tiempo de espera hasta que nuestro programa funcione perfecto. Ahora con el circuito usando los condensadores se puede ir acortando el tiempo de espera para determinar en que punto el programa aún no muestra el perderse pasos al girar el controlador rotativo.
Bueno Genaro y algun otro forero que se anime, adelante, que os acompano. No voy a realizar el circuito yo mismo ni programar ahora,pues en la construcción de mi velero Carina mucho de los projectos empiezar a leagr al punto de combinarse a lograr nuevos resultados.