domingo, 17 de julio de 2016

Slither - 2 - encoder con edu-ciaa-nxp

Viene de  Slither - 1 - Intro

Tengo tres maneras...


El encoder no sirve para "producción", en una hora seguramente quedará destruido, hay que construir algo más sólido.

Mientras lo voy a usar pues es apropiado para el prototipo

La página del vendedor dice que 00 ->01 ->11 -> 10, pero la realidad es que a la vista prenden ambos y apagan ambos.



[1] dice "VERY SLOWLY rotate" y ahí se puede ver que si ocurre esa secuencia, ok, podemos seguir.

El problema que se me plantéa ahora es usar lo que ya sé en la edu-ciaa-nxp pero adaptando 5v a 3.3v o tener que aprender sobre un arduino. La ventaja del segundo camino es que el ejemplar final va a ser sobre arduino o atmega o attiny, pero el objetivo de este ejercicio es aprender y no necesariamente por el camino más corto.

El camino de edu-ciaa-nxp

Yo, electrónica 0.1, vivo en el stackoverflow del hardware, copio y pego, no entiendo casi nada.

Tengo dos cajitas con transistores. Una no sé que son y la otra 2n2222, busqué "2n2222 5v 3.3v" y hallé vía imágenes el circuito que necesitaba. Lo probé primero con una fuente de 5v y dos pilas AA, ok, le doy 5v por un lado sale 3.x por el otro.

Sería completamente irresponsable de mi parte compartir lo que hice pues no calculé las resistencia, nada, copié y medí con el tester.

Aún así, lo voy a poner, pero ya sabés:





El primer desafío fue como enterarme de si estaba siendo leido el encoder. El hecho de mostrar por el puerto serial afecta pues se pierden pasos.

Despues de varios intentos llegué a esta forma:

  • leer pines
  • resolver para que lado giró
  • reportar una vez cada tanto

de este modo, casi no se pierden pasos, solo al girarlo muy rápido que no me importa mucho. Además se parece mucho a lo que va a resultar: que no se va a reportar cada evento si no una acumulación de eventos en un período. Cuando no haya movimiento, nada se reportará. Cuando sea lento será un sólo evento. Cuando sea rápido, el resultado.

Pero el camino no está acolchado de pétalos de rosa. Aparecen movimientos en el sentido contrario espúreos.

Esta salida corresponde a  varios giros a la izquierda finalizando con uno a la derecha, con reportes cada un segundo aproximadamente:

left:    skip: 1 error:  right: 
left:    skip: 1 error:  right: 
left:    skip: 1 error:  right: 
left: 15 skip: 1 error:  right: 1
left: 9  skip: 1 error:  right: 1
left:    skip: 1 error:  right: 
left: 22 skip: 1 error:  right: 4
left:    skip: 1 error:  right: 
left:    skip: 1 error:  right: 
left: 59 skip: 1 error:  right: 5
left:    skip: 1 error:  right: 
left: 1  skip: 1 error:  right: 17


Este es el reporte con los estados actuales, futuros y la acción reportada de girar a velocidad intermedia, de una caso de los peores:

state: 1 nextState: 3 L  
state: 3 nextState: 2 L  
state: 2 nextState: 3 R  
state: 3 nextState: 2 L  
state: 2 nextState: 0 L  
state: 0 nextState: 1 L  
state: 1 nextState: 3 L  
state: 3 nextState: 2 L 

state: 2 nextState: 3 R  
state: 3 nextState: 2 L  
state: 2 nextState: 0 L  
state: 0 nextState: 2 R  
state: 2 nextState: 0 L  
state: 0 nextState: 1 L  
state: 1 nextState: 3 L  
state: 3 nextState: 1 R  


Siendo estas las transiciones:

         00 -> 10 -> 11 -> 01 -> 00 : Left

         00 -> 01 -> 11 -> 10 -> 00 : Right


Las transiciones parecen estar bien, el sampleo supongo que tambien, los eventos del encoder son unos pocos en 500000. Adivino que hay rebotes. Dado que lo estoy girando con la mano, suena razonable, más que no tengo un, no sé como se llama... ¿dial? ¿perilla?

El código está en [2] y debe ser copiado en un clone de [3] dentro de examples o donde más te guste, ajustando correctamente el Makefile.mine. Tambien debe estar la sapi_bm en modules.


¡¡¡¡Perdón por la globales!!!! Como dijo Trinity rescatando a Neo de las manos del Merovingo, I don't have time for this shit.

El próximo paso será, con la comunicación usb funcionando, acumular y reportar los movimientos como un desplazamiento en alguno de los ejes. Despues, el movimiento circular.

Sigue en Slither - 3 - usb mouse con edu-ciaa-nxp




[1] http://henrysbench.capnfatz.com/henrys-bench/arduino-sensors-and-input/keyes-ky-040-arduino-rotary-encoder-user-manual/

[2] https://github.com/cpantel/ciaa/tree/master/slither.io/encoder

[3] https://github.com/ciaa/Firmware/tree/release/1.0.x

No hay comentarios:

Publicar un comentario