TODOPIC

Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: ALE1973 en 29 de Junio de 2010, 15:04:57

Título: Joystick 8 ejes 32 botones
Publicado por: ALE1973 en 29 de Junio de 2010, 15:04:57
Buenas, para una adaptacion de una consola de un simulador de vuelo (jeppesen), estuve viendo la forma de cambiar la interface serie por una usb, lo mejor que encontre hasta ahora y que esta andando es ir reemplazando las partes por (Mando de gases y palanca), por un joystick, asi que use una arme una placa para 8 ejes y 24 botones, el firmware sirve hasta 32 botones, es mas facilmente se puede llegar a 64 botones, pero como flight simulator permite utilizar varios joysticks para pilotear un avion, me decidi por dividir el problema.
De esto salio es primer joystick, mas adelante necesito otro para manejar unos encoders, para toda la parte de instrumentos de navegacion, pero por ahora les dejo esto que espero les sirva.
En los archivos van las placas y el firmware, la resolucion de los ejes es de 10 bits.

Que lo disfruten.

Saludos.
Alejandro.



PD: si alguien se hace millonario con esto, no se olviden de mi...  :mrgreen: :mrgreen: :mrgreen:
Título: Re: Joystick 8 ejes 32 botones
Publicado por: willynovi en 29 de Junio de 2010, 15:55:59
Citar
PD: si alguien se hace millonario con esto, no se olviden de mi...   
como si eso fuera posible, es mas dificil sacarle unos pesos a un simmer que a mi  :D

Yo tambien hice un joystick pero para simus de carreras de coches, volante, acelerador, freno, embrague y botones.

El tema de la limitación de los 32 botones es algo de windows, si quieres hacerte una placa con mas botones puedes usar un soft que mapea botones a teclas, uno que yo conozco es el SV MAPPER.

Lo que si puedes hacer es agregarle un Hat Switch para el control de miras y esas cosas creo que se usa en los simu de vuelo, yo no tengo mucha idea de eso porque no los uso.

Lo de los encoder hice algo, pero para encoders comerciales no anda porque se pierde pasos, tiene que ser un movimiento mas bien lento, lo tengo hecho por polling, sino habria que hacerlo por interrupciones.

Y uno de los ejes, el que uso como direcciónlo estoy haciendo por encoder y asi logro una resolucion de hasta 16bits, que la verdad no se pa que tanto :mrgreen:

En lo que ando ahora es con lo del FFB, pero de a poco voy a vanzando.

Bueno cualquier cosilla que necesites pregunta que por ahi te puedo dar una mano, aunque parece que la tienes clara.

Luego en casa me bajo los archivos y veo que tal esta la info.

Saludos, Willy
Título: Re: Joystick 8 ejes 32 botones
Publicado por: willynovi en 29 de Junio de 2010, 15:59:01
si andas con los simus de vuelo, imagino que conoces esta página :shock:

http://www.opencockpits.com/
Título: Re: Joystick 8 ejes 32 botones
Publicado por: ALE1973 en 29 de Junio de 2010, 16:04:17
Gracias willynovi, si la conozco, aunque la que me fascina es esta: http://home.exetel.com.au/flightsim/ ojala llegaria a algo asi, todo por CAN, exelente, ademas Scott responde los mails sin problemas, la que tu pasas es exelente, pero ya da todo solucionado, y a mi me gusta renegar para hacerlo.

Lo que comentas del hat, es algo que voy a implementar luego, los encoders son unicamente para baja velocidad y solo tienen la funcion de modificar seteos de radios, etc, asi que si salta de vez en cuando un paso no interesa, o por lo menos a mi... jejeje.

Con esta placa hice pruebas con un encoder, pero como multiplexo las entradas puede que por eso no funcione correctamente, no hice muchas pruebas, pero es lo que sigue.

Saludos y gracias por la info.

Alejandro.

PD, creo que vi tu proyecto de joystick en algun foro de simuladores de coches
Título: Re: Joystick 8 ejes 32 botones
Publicado por: willynovi en 29 de Junio de 2010, 18:20:10
PD, creo que vi tu proyecto de joystick en algun foro de simuladores de coches

sisi, por ahi lo viste, es que estamos en todo lados  :mrgreen:
Título: Re: Joystick 8 ejes 32 botones
Publicado por: Nocturno en 29 de Junio de 2010, 18:48:46
Muy bueno tu proyecto. Gracias por compartirlo
Título: Re: Joystick 8 ejes 32 botones
Publicado por: Leon Pic en 29 de Junio de 2010, 18:49:42
¿Con qué programa está echo la placa ALE?
Yo también soy apasionado de los aviones y la simulación. De echo vuelo en línea, en modo multijugador, en flightsimulatorarg.com.ar

Me encantaría armarme un simulador como el de opencockpit, pero no tengo el dinero ni el lugar físico.
Título: Re: Joystick 8 ejes 32 botones
Publicado por: ALE1973 en 29 de Junio de 2010, 19:39:11
Muy bueno tu proyecto. Gracias por compartirlo

Gracias.
¿Con qué programa está echo la placa ALE?
Yo también soy apasionado de los aviones y la simulación. De echo vuelo en línea, en modo multijugador, en flightsimulatorarg.com.ar

Me encantaría armarme un simulador como el de opencockpit, pero no tengo el dinero ni el lugar físico.

La placa esta hecha en el eagle, no recuerdo que version, el programa del pic en CCS, yo tambien soy apasionado de los aviones, es mas estoy destinando ahorros para el curso de PPA, la consola es justamente de la escuela que estan re-abriendo en mi ciudad (Reconquista-Santa Fe), asi que colaboro en readaptarle el simulador, en cuanto tenga la siguiente placa con los encoders te la paso asi te armas uno, cualquier cosa me preguntas...

Saludos.
Alejandro
Título: Re: Joystick 8 ejes 32 botones
Publicado por: Leon Pic en 29 de Junio de 2010, 22:00:15
Excelente  :-/ :-/
Título: Re: Joystick 8 ejes 32 botones
Publicado por: picNIC en 30 de Junio de 2010, 11:23:24
Hola ale1973 gracias por compartir.. :-/ :-/

Estoy empezando a hacerme un joystick para auto, estoy empezando con el mundo hid...

¿la resolucion de los ejes no es de 8 bit?
porque en el USB_CLASS_SPECIFIC_DESC dice   0x26, 0xff, 0x03,              //     LOGICAL_MAXIMUM (255).

¿cual es la resolucion minima y maxima que soporta el formato hid para los ejes?
¿y hasta cuantos ejes se pueden hacer?

Saludos
Título: Re: Joystick 8 ejes 32 botones
Publicado por: ALE1973 en 30 de Junio de 2010, 11:35:23
PicNic:

La resolucion es de 10 bits 0xff, 0x03, osea 3ff = 1023, la acotacion despues de // es de cuando probe con 8 bits, despues solo cambie la constante.

Yo mas de 8 ejes no pude hacer, no intente demasiado tampoco, pero como el flightsimulator me permite usar varios joysticks, no me preocupe demasiado...


Saludos.
Alejandro.
Título: Re: Joystick 8 ejes 32 botones
Publicado por: picNIC en 30 de Junio de 2010, 12:16:39
AAA... me deje llevar por la acotacion :oops: :oops: no vi los números..
Título: Re: Joystick 8 ejes 32 botones
Publicado por: willynovi en 30 de Junio de 2010, 13:03:27
leyendo un poco por arriba la documentacion de microsoft, http://www.microsoft.com/whdc/archive/hidgame.mspx pareciera que puesdes tener hasta 11 ejes, pero en distintos USAGE PAGE.

Lo que tambien me ayudo fue leer la documentación oficial de USB.org http://www.usb.org/developers/hidpage#Class_Definitions

Tambien tienes una herramienta muy util, el HID Descriptor Tool http://www.usb.org/developers/hidpage#HID Descriptor Tool

Por el tema de la resolución es hasta 16bits lo maximo, y minimo pues un bit pero ya dejaria de ser un eje :mrgreen:
Título: Re: Joystick 8 ejes 32 botones
Publicado por: ALE1973 en 30 de Junio de 2010, 14:47:16
Gracias Willi, la herramienta con la que hice primeramente eso fue con la que mencionas, no sabia lo de la cantidad de ejes, asi que tendre que probar...los otros documentos tambien creo que los baje, pero no me hice tiempo de leerlos.. jeje..

Saludos y gracias por la info.

Alejandro.
Título: Re: Joystick 8 ejes 32 botones
Publicado por: fer650 en 17 de Agosto de 2010, 10:34:59
Hola ALE1973, yo me hice una placa con el pic18f2550 en la que tengo incluido dos potes para el eje X e Y en el AN0 y AN1 y un par de pulsadores.
En un principio la hice porque conseguí el pic y nunca había trabajado con el puerto USB.
El problema era que algo programo en CCS, pero no mucho y vi que el tema del USB tiene sus vueltas no es como el RS232.
Entonces empecé a buscar algún programa hecho que me sirva para probar mi plaquetita.
Fue cuando vi tu proyecto de 8 ejes y 24 botones.
Programé el pic pero estuve dos días para darme cuenta que tenía cruzados el D+ y D-.
Funcionó y lo probé en mi PC con un jueguito de coches y no podía creer que funcionara.
El tema fue cuando lo probé con el GRID y no me lo detectó porque no lo tiene en su base de datos.
Pregunta: ¿Se puede hacer que lo detecte como un volante Logitech G25 o algo parecido?
y otra locura ¿puedo recibir en el pic info sobre el Force Feedback como para algún día darle movimiento a una butaca?
Desde ya muchas gracias!!!!

Fernando
Título: Re: Joystick 8 ejes 32 botones
Publicado por: wolfman77 en 17 de Agosto de 2010, 15:56:44
Buenisimo!, esto me viene de 10 para jugar :P

A lo que dice Willy al comienzo, tambien podes probar con el Joy2Key, yo lo usaba cuando arme mi maquina arcade (recreativa) usando el LPT1.

Saludos! :D
Título: Re: Joystick 8 ejes 32 botones
Publicado por: ALE1973 en 17 de Agosto de 2010, 18:31:03
fer650, no lo va a detectar como un logitech, ya que en el programa esta explicito el fabricante y el modelo, y no es de un logitech, pero si tu juego acepta joystick, deberia andar, respecto al forcefeedback, no se como envia windows los datos, seria cuestion de investigar un poco, yo particularmente nunca lo he hecho.
No conozco el grid, pero no toma el dispositivo de juegos de windows?.

saludos.
Título: Re: Joystick 8 ejes 32 botones
Publicado por: ALE1973 en 01 de Septiembre de 2010, 09:15:51
Bueno.. siguiendo con las investigaciones para el simulador, me puse a probar con un programa que habia hecho para manejar servos con el pic, solo que ahora lo adapte para recibir datos a través de USB, esta en modo BULK, gracias a J1M y sus ejemplos, despues que funciono, me puse a extraer datos del Flight simulator, como para ver si anda y el resultado es el siguiente.


Esta prueba es con 1 servo, teoricamente el programa es para 16 servos, en este micro 18F2550 corre para 8 por falta de pines, pero las pruebas en proteus dicen que 16 andan bien.

Mas adelante con esto afinado, paso mas informacion.

Gracias
Saludos.
Alejandro.
 
Título: Re: Joystick 8 ejes 32 botones
Publicado por: Nocturno en 01 de Septiembre de 2010, 11:26:24
Muy chulo, y seguiré de cerca tus progresos. Pero el horizonte artificial está al revés, ¿no?
Título: Re: Joystick 8 ejes 32 botones
Publicado por: ALE1973 en 01 de Septiembre de 2010, 14:38:09
Gracias Manolo, si esta al revés, cuestión de escalas en el pic o el programa que extrae los datos del FSX.

Saludos.
Alejandro.
Título: Re: Joystick 8 ejes 32 botones
Publicado por: ALE1973 en 09 de Septiembre de 2010, 10:14:33
Buenas, les dejo una nueva prueba de este horizonte, ya con el prototipo de acrilico cortado en laser, si miran, los servos hacen una falla, esta se debe (creo), a que la posicion de los mismos esta muy cercana, estoy tratando de solucionar ese tema, despues les paso mas avances.
[/youtube]

Saludos.
Alejandro
Título: Re: Joystick 8 ejes 32 botones
Publicado por: ALE1973 en 10 de Septiembre de 2010, 08:21:58
Bueno, despues de lidiar un rato con el codigo, se soluciono el problema de los sobresaltos, les dejo una muestra de como funciona ahora...

[/youtube]

Saludos.
Título: Re: Joystick 8 ejes 32 botones
Publicado por: Nocturno en 10 de Septiembre de 2010, 08:54:40
Ahora sí va fino fino. ¡Cómo te diviertes!
Título: Re: Joystick 8 ejes 32 botones
Publicado por: ALE1973 en 10 de Septiembre de 2010, 09:20:58
Gracias Manolo, la verdad que si. Va muy bien, y me divierto, voy a seguir con los otros instrumentos, a ver como va.

Saludos.
Alejandro.
Título: Re: Joystick 8 ejes 32 botones
Publicado por: mincho en 13 de Octubre de 2010, 03:06:22
Gracias ale1973, me cae como anillo al dedo para algunos emuladores...


un saludo...
Título: Re: Joystick 8 ejes 32 botones
Publicado por: ALE1973 en 13 de Octubre de 2010, 07:32:36
Gracias Mincho, adelante, espero te sirva, mas tarde subo una version nueva con un par de correcciones que le hice al programa.

Saludos.
Alejandro.
Título: Re: Joystick 8 ejes 32 botones
Publicado por: chichepic en 13 de Octubre de 2010, 13:10:41
Muy buen trabajo!!! Felicitaciones !    :-/ :-/ :-/
Podrias subir nuevamente el esquematico? no tengo Eagle (voy a tratar de bajarlo)
A la espera de la nueva version.
Saludos!
Título: Re: Joystick 8 ejes 32 botones
Publicado por: kapotik en 13 de Enero de 2011, 21:46:46
Hola, como estan, quisiera armar este proyecto, pero antes tengo un par de dudas.
Como se conectan los botones?
Necesita drives?
Que serian los ejes?, es lo mismo que los ejes x o y que se usan en una palanca de recreativa, que usa microswich?

Gracias y disculpen mi ignorancia
Título: Re: Joystick 8 ejes 32 botones
Publicado por: ALE1973 en 14 de Enero de 2011, 09:17:28
Muy buen trabajo!!! Felicitaciones !    :-/ :-/ :-/
Podrias subir nuevamente el esquematico? no tengo Eagle (voy a tratar de bajarlo)
A la espera de la nueva version.
Saludos!

Perdón por la demora, pero la vez que entro en el foro me da que no hay ningún tema nuevo, ahora subo la nueva versión de la placa.

kapokit: los botones se conectan como normal abierto, o sea cuando lo presiones se cierra, los sueldas directamente a la placa, los ejes es exactamente lo que dices, solo que al tener mas de 2 ejes windows los nombra con x,y,rx,ry,slide y ruder si no me equivoco, supuestamente los puedes asignar a distintas funciones en los juegos/aplicaciones que los uses.

Saludos.
Alejandro.
Título: Re: Joystick 8 ejes 32 botones
Publicado por: Tavo947 en 20 de Septiembre de 2011, 12:16:44
Hola Alejandro, soy nuevo por aca y con la electronica tambien, Te queria preguntar donde compras y como los componentes (pic, etc) Creo que lei por ahi que sos de el norte de santa fe, yo soy de Pres, Roque Saenz Peña (chaco) y aca no se consigue nada salvo alguna resistencia o algun led jajajaja. Tengo ganas de Armar TU joystick para jugar il2 pero tengo algunas dudas. Desde ya gracias!!!!!!
Título: Re: Joystick 8 ejes 32 botones
Publicado por: ALE1973 en 20 de Septiembre de 2011, 16:40:24
Tavo, generalmente los compro en Buenos Aires cuando traigo para otros proyectos agrego algo para esto, por ahi en Quain en resistencia los consigues, yo creo que si, si no los consigues, me avisas y cuando pido algo te traigo para vos, no hay drama.

Cualquier cosas avisame nomas.

Saludos.
Alejandro.

PD: si queres tengo varias placas ya hechas sin componentes, asi no renegas.
Título: Re: Joystick 8 ejes 32 botones
Publicado por: Tavo947 en 22 de Septiembre de 2011, 10:37:19
Genial ale!!! Gracias por tu propuesta! habia pensado mandar el pcb a hacer en salta en un pibe de mendoza que sale en mercadolibre porque soy muy nuevito en esto (de soldar un par de resistencias, diodos y leds no paso todavia jajajajaja) Cambiando de tema, mirando en mercadilibre vi que se consigue un pic18f4550 que es de la misma flia que el 18f2550 pero que es de 40 pines y en formato DIP .

1)Seria posible sacarle mas ejes a este microcontrolador? cuantos?

2)todos los ejes de tu diseño original son de 10 bit?

3)Seria posible mantener la cantidad de ejes y botones aumentando la resolucion?

4)si fuera posible la pregunta 3, afectaria en algo a la performance del joy?

No es obligatorio responder pero me harias un gran favor.

Si queres para no ensuciar tu post con mis preguntas de Noob la segimos por mensaje privado.

Saludos!!!!!


Edit: Llame a quain radio y solo tienen hasta la linea pic16f, pic18f nada, hoy va un amigo a reisitencia asique los llame para ver que me podia traer de lo que necesita tu joy y solo conseguiria los diodos  :5]
Título: Re: Joystick 8 ejes 32 botones
Publicado por: eduardo2707 en 26 de Noviembre de 2011, 20:04:29
lo mejor que encontre hasta ahora y que esta andando es ir reemplazando las partes por (Mando de gases y palanca), por un joystick, asi que use una arme una placa para 8 ejes y 24 botones, el firmware sirve hasta 32 botones, es mas facilmente se puede llegar a 64 botones,
Que lo disfruten.


Hola alejandro muy bueno tu proyecto y quisiera realizarlo para volar en el il2 tambien...mi pregunta es como debo cambiar la configuracion del HID  descriptor  para agregarle 8 o mas hat switch, lo eh intentado pero luego la computadora ya no lo reconoce...Solo lo eh simulador en Proteus 7.7...
Tengo otras preguntas que quisiera que ma ayudes...yo utilizo otra funcion para leer un teclado 4x8  pero no se como adaptarla para poder enviar el dato por USB...Pero bueno eso despues...


Este es el codigo que tu usaas para 8 ejes y 32 botones

Código: [Seleccionar]
const char USB_CLASS_SPECIFIC_DESC[] = {
    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
    0x09, 0x04,                    // USAGE (Joystick)
    0xa1, 0x01,                    // COLLECTION (Application)
    0x05, 0x01,                    //   USAGE_PAGE (Generic Desktop)
    0x09, 0x01,                    //   USAGE (Pointer)
    0xa1, 0x00,                    //   COLLECTION (Physical)
    0x09, 0x30,                    //     USAGE (X)
    0x09, 0x31,                    //     USAGE (Y)
    0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x03,              //     LOGICAL_MAXIMUM (255)
    0x75, 0x10,                    //     REPORT_SIZE (16)
    0x95, 0x02,                    //     REPORT_COUNT (2)
    0x81, 0x02,                    //     INPUT (Data,Var,Abs)
    0xc0,                          //     END_COLLECTION
    0x05, 0x02,                    //   USAGE_PAGE (Simulation Controls)
    0x09, 0x01,                    //   USAGE (Flight Simulation Device)
    0xa1, 0x00,                    //   COLLECTION (Physical)
    0x09, 0xbb,                    //     USAGE (Throttle)
    0x09, 0xba,                    //     USAGE (Rudder)
    0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x03,              //     LOGICAL_MAXIMUM (255)
    0x75, 0x10,                    //     REPORT_SIZE (16)
    0x95, 0x02,                    //     REPORT_COUNT (2)
    0x81, 0x02,                    //     INPUT (Data,Var,Abs)
    0xc0,                          //     END_COLLECTION
    0x05, 0x01,                    //   USAGE_PAGE (Generic Desktop)
    0x09, 0x01,                    //   USAGE (Pointer)
    0xa1, 0x00,                    //   COLLECTION (Physical)
    0x09, 0x33,                    //     USAGE (Rx)
    0x09, 0x34,                    //     USAGE (Ry)
    0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x03,              //     LOGICAL_MAXIMUM (255)
    0x75, 0x10,                    //     REPORT_SIZE (16)
    0x95, 0x02,                    //     REPORT_COUNT (2)
    0x81, 0x02,                    //     INPUT (Data,Var,Abs)
    0xc0,                          //     END_COLLECTION
    0x05, 0x01,                    //   USAGE_PAGE (Generic Desktop)
    0x09, 0x01,                    //   USAGE (Pointer)
    0xa1, 0x00,                    //   COLLECTION (Physical)
    0x09, 0x36,                    //     USAGE (Slider)
    0x09, 0x37,                    //     USAGE (Dial)
    0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x03,              //     LOGICAL_MAXIMUM (255)
    0x75, 0x10,                    //     REPORT_SIZE (16)
    0x95, 0x02,                    //     REPORT_COUNT (2)
    0x81, 0x02,                    //     INPUT (Data,Var,Abs)
    0xc0,                          //     END_COLLECTION
    0x05, 0x09,                    //   USAGE_PAGE (Button)
    0x19, 0x01,                    //   USAGE_MINIMUM (Button 1)
    0x29, 0x20,                    //   USAGE_MAXIMUM (Button 32)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
    0x75, 0x01,                    //   REPORT_SIZE (1)
    0x95, 0x20,                    //   REPORT_COUNT (32)
    0x55, 0x00,                    //   UNIT_EXPONENT (0)
    0x65, 0x00,                    //   UNIT (None)
    0x81, 0x02,                    //   INPUT (Data,Var,Abs)
    0xc0                           // END_COLLECTION
 

El codigo que le agrego para 8 hat switch al final y luego ya no me reconoce el dispositivo

Código: [Seleccionar]

   0x09, 0x39,                    //   USAGE (Hat Switch)
    0xa1, 0x00,                    //   COLLECTION (Physical)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x25, 0x07,                    //   LOGICAL_MAXIMUM (1)
   0x35, 0x00,                  //   Phy Min (0)
   0x46, 0x3B, 0x01,            //   Phy Max (315)
    0x65, 0x12,                    //   UNIT (SI Rote:Angular Pos)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x95, 0x01,                    //   REPORT_COUNT (1)
    0x81, 0x02,                    //   INPUT (Data,Var,Abs)
    0xc0                           // END_COLLECTION
   };

 


Bueno muchas gracias  espero me puedas ayudar
Título: Re: Joystick 8 ejes 32 botones
Publicado por: ALE1973 en 27 de Noviembre de 2011, 12:01:14
hola, para agregar el hat, tambien tienes que modificar la cantidad de datos que vas a enviar, en ello no tiene que haber error, si no, el sistema no reconoce el dispositivo, te dejo una pagina donde implementa el hat y explica tambien como armar el descriptor de modo que no de error...

http://helmpcb.com/electronics/usb-joystick

en esta pagina esta explicado como armar el descriptor, cualquier cosa me consultas, estoy complicado por estos dias, pero en lo que pueda colaboro.

Saludos.
Alejandro.
Título: Re: Joystick 8 ejes 32 botones
Publicado por: eduardo2707 en 27 de Noviembre de 2011, 22:48:35
Hola ok gracias lo revisare...

He modificado mi programa ..me eh basado en tu codigo y de otros  pero con tu mismo descriptor..
Estoy usando el pic18f4550 eh controlado 8 ejes y 24 botones,  pero mi programa esta hecho para  32 botones ...
Pues tu utilizas txusb[18]  para  enviar el byte de los botones del 17 al 24....  y envias

usb_put_packet(  1,txusb, 20, USB_DTS_TOGGLE);

yo leo otro byte para botones del 25 al 32  y se lo asigno a txusb[19]  y envio igual con

usb_put_packet(  1,txusb, 20, USB_DTS_TOGGLE);

Bueno reconoce el joystick pero no reconoce esos ultimos 8 botones...acaso tu descriptor stabas limitado para 24 botones?
Otra cosa..lei que windows solo reconoce 32 botones ...so le agrego los 8 hat switch ...tendria q ser 24 botones + 8 hat?  o puede ser 32 botones + 8 hat.....

Bueno muchas gracias por responder...mi codigo no te lo envio aun ....1ro leere el link q me pasaste
Título: Re: Joystick 8 ejes 32 botones
Publicado por: eduardo2707 en 28 de Noviembre de 2011, 04:38:18
Listo termine... con esa informacion ya logre agregar los hat switch, estoy ancioso  por probarlo en la practica...hasta ahora solo lo eh simulado en proteus 7.7 , pero tengo el problema que cuando lo cargo aveces agarra y aveces no...no se si sera falla de simulacion o de verdad hay algo malo en mi programa....

Respecto a q no enviaba el dato txusb[19] era algo muy tonto ..el problema era que no habia colocado bien el label en el proteus y no le llegaba los pulsos a la ultima fila para poder leerla....
Tambien agregue 1 byte mas para poder enviar los datos del hat   quedando txusb[21]

En el programa controlo 8 ejes  32 botones y 8 hat switch, aqui subo el programa para el que le pueda servir de ayuda, y si tienen algun consejo que me puedan dar,en hora buena antes de disenar la placa.


PD: Alejando que mas podria agregarle al joystick? aun me queda el puerto_B disponible

Título: Re: Joystick 8 ejes 32 botones
Publicado por: ALE1973 en 29 de Noviembre de 2011, 16:36:18
Hola, me alegro que funcione todo, la verdad que no se que mas agregarle... lo que mas te va a limitar, es casualmente.... windows... jejeje, yo llevaría todo a un micro mas chico y mas barato como el 18f14k50, que es mucho mas barato que los 2550 y el 4550, y si realmente te faltan mas botones o ejes agregaría mas joysticks nada mas.

Estoy trabajando en un 18f14k50 para mover 16 servos asi manejar los instrumentos, pero esta en etapa de simulación solamente.

Saludos.

Alejandro.
Título: Re: Joystick 8 ejes 32 botones
Publicado por: kapotik en 22 de Febrero de 2012, 21:59:46
Hola, viendo el video del horizonte me pregunto si sera posible aplicarlo a un juego de auto, donde la idea seria que al acelerar se moviera dos servos, el contavueltas y el velocimetro.?

Saludos
Título: Re: Joystick 8 ejes 32 botones
Publicado por: ltcelik en 22 de Febrero de 2015, 16:07:23
Magnifique!  ((:-))
Título: Re:Joystick 8 ejes 32 botones
Publicado por: Fuegomp3 en 03 de Agosto de 2016, 07:44:04
Buenas, para una adaptacion de una consola de un simulador de vuelo (jeppesen), estuve viendo la forma de cambiar la interface serie por una usb, lo mejor que encontre hasta ahora y que esta andando es ir reemplazando las partes por (Mando de gases y palanca), por un joystick, asi que use una arme una placa para 8 ejes y 24 botones, el firmware sirve hasta 32 botones, es mas facilmente se puede llegar a 64 botones, pero como flight simulator permite utilizar varios joysticks para pilotear un avion, me decidi por dividir el problema.
De esto salio es primer joystick, mas adelante necesito otro para manejar unos encoders, para toda la parte de instrumentos de navegacion, pero por ahora les dejo esto que espero les sirva.
En los archivos van las placas y el firmware, la resolucion de los ejes es de 10 bits.

Que lo disfruten.

Saludos.
Alejandro.



PD: si alguien se hace millonario con esto, no se olviden de mi...  :mrgreen: :mrgreen: :mrgreen:

Hola Ale, primero quiero agradecerte por el trabajo y por compartirlo. Descargue los archivos, y leyendo el codigo fuente, (aclaro que no tengo idea de programacion) veo que es para 8 ejes, 8 encoders y 8 botones? si eso es correcto, es muyyyy complicado hacer que sean los 24 botones?

Desde ya te agradezco la respuesta y vuelvo a agradecerte por el trabajo.

Saludos.
Título: Re:Joystick 8 ejes 32 botones
Publicado por: ALE1973 en 03 de Agosto de 2016, 14:51:02
Hola, los 8 encoders usarian 16 entradas digitales, con lo cual mas las 8 que habia te dan las 24, asi que lo unico que hay que cambiar
es la parte de la logica que hace la interpretacion de los 8 encoders.

Saludos.
Título: Re:Joystick 8 ejes 32 botones
Publicado por: Fuegomp3 en 03 de Agosto de 2016, 15:29:59
ok, suponiendo que yo se "algo" de esto :D son muchas variables a cambiar? ademas de eliminar las lineas de 6 encoders para dejar solo dos, tengo que agregar la lectura de los demas como botones y listo? o hay alguna instruccion en general que deba cambiar?
Título: Re:Joystick 8 ejes 32 botones
Publicado por: Fuegomp3 en 03 de Agosto de 2016, 18:31:59
A ver, modifique algo, si me mande una burrada, no me maten :D

Código: [Seleccionar]
/////////////////////////////////////////////////////////////////////////
////                                                                 ////
////  Joystick.c                                            ////
////  Joystick 8 ejes 24 botones                                   ////
////  Autor: Alejandro                                                     ////
////                                                                 ////
////  02/05/2010                                                    ////
////                                                                 ////
/////////////////////////////////////////////////////////////////////////

#include <18F2550.h>
#device ADC = 10
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#use fast_io(A)
#use fast_io(b)
#use fast_io(c)


#DEFINE USB_HID_DEVICE  TRUE

#define USB_EP1_TX_ENABLE  USB_ENABLE_INTERRUPT   //turn on EP1 for IN bulk/interrupt transfers
#define USB_EP1_TX_SIZE 20

#define USB_EP1_RX_ENABLE  USB_ENABLE_INTERRUPT   //turn on EP1 for IN bulk/interrupt transfers
#define USB_EP1_RX_SIZE 8

#include <pic18_usb.h>
#include <PPM_USB_HID.h>               //USB Configuration and Device descriptors for this UBS device
#include <usb.c>                                 //handles usb setup tokens and get descriptor reports

/////////////////////////////////////////////////////////////////////////////
//
// Defines y Zarandajas
//
/////////////////////////////////////////////////////////////////////////////
   int8 TxUSB[20];


#define LED_ON  output_high
#define LED_OFF output_low



/////////////////////////////////////////////////////////////////////////////
//
// RAM
//
/////////////////////////////////////////////////////////////////////////////

int8 connected;
int8 enumerated;
int8 rx_msg[USB_EP1_RX_SIZE];
int8 tx_msg[22]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};


char NextChar='0';
int1 fTX=0;
int1 fInicio=0;
int1 fLeer=0;

int8 i;
int8 rNroCanal=0;
int8 rTiempo=0;
int8 txlen=0;
int8 txpoint=0;

int8 rAntBot1a8=0;   //estado anterior de los botones
int8 FpBtn1a8=0;  //Flacos positivos
#bit fp1  =  FpBtn1a8.0
#bit fp2  =  FpBtn1a8.1
#bit fp3  =  FpBtn1a8.2
#bit fp4  =  FpBtn1a8.3


int8 rEncDir=0; //Deteccuion de la direccion de los encoders
#bit Dir1 = rEncDir.0
#bit Dir2 = rEncDir.1
#bit Dir3 = rEncDir.2
#bit Dir4 = rEncDir.3



int8  Eje0=0;
int16 Eje1=0;
int16 Eje2=0;
int16 Eje3=0;
int16 Eje4=0;
int16 Eje5=0;
int16 Eje6=0;
int16 Eje7=0;
int16 Eje8=0;
int8 Btn1a8=0;    //Encoders
int8 Btn9a16=0;   //Encoders
int8 Btn17a24=0;  //Ultimos 8 borones
int8 Btn24a32=0;
//Registros enviados por USB 24 Botones


#bit Btn1   =  btn1a8.0
#bit Btn2   =  btn1a8.1
#bit Btn3   =  btn1a8.2
#bit Btn4   =  btn1a8.3
/////////////////////////////////////////////////////////////////////////////
//
// usb_debug_task()
//
// When called periodically, displays debugging information over serial
// to display enumeration and connection states.  Also lights LED2 and LED3
// based upon enumeration and connection status.
//
/////////////////////////////////////////////////////////////////////////////

void usb_debug_task(void) {

   enumerated=usb_enumerated();

}





/////////////////////////////////////////////////////////////////////////////
//
// usb_rx_task()
//
// Listens to EP1 for any incoming packets.  The only report ID that is
// configurd to send us data is 2 (keyboard LED status, see above)
//
/////////////////////////////////////////////////////////////////////////////

void usb_rx_task(void){


}


#int_RTCC
void RTCC_isr() {
fleer=1;
}



#int_TIMER1   //Timer 1 overflow
void TIMER1_int(){

}


void main() {
   int8 Trim[2];
   int8 Buffer;

   set_tris_a(0b11101111);
   set_tris_b(0b11111111);
   set_tris_c(0b00110111);
   port_b_pullups(false);
   setup_adc_ports( AN0_TO_AN10 );
   setup_adc(ADC_CLOCK_INTERNAL );


 
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_128|RTCC_8_BIT);


   delay_ms(500);

   usb_init_cs();


   disable_interrupts(INT_TIMER1);
   disable_interrupts(int_tbe);
   enable_interrupts(INT_TIMER0);
   enable_interrupts(global);

   set_adc_channel(1);


while (TRUE)
   {
      int8 rTemp;
      int8 temp=0;
      int8 temp1=0;
     
      usb_task();
      usb_debug_task();
     
      if(fLeer){
               fLeer=0;
               set_adc_channel(0);  //PREPARO PARA PRIMER EJE
               //LEO DIGITALES
               output_low(pin_c7);
               output_low(pin_c6);
               output_high(pin_a4); //prepara para leer primeros  8 botones
               delay_us(5);
               temp= input_b();
               temp1=input_c();
               
               output_low(pin_a4);
               output_low(pin_c7);
               output_high(pin_c6); //prepara para leer segundos  8 botones
               
               //leo los 8 botones
               temp=temp & 0b11110001;
               temp1=(temp1 & 0b00000111)*2;
               Btn1a8 = temp | temp1;
               
/*               #asm comf rAntBot1a8   //Estado anterior de los botones
               #endasm
               FpBtn1a8 = rTemp & rAntBot1a8;   //Flancos positivos de los botones
               
               rAntBot1a8 = rTemp;   //igualo estado actual con anterior
               btn7=0;
               btn8=0;
               if(fp3 & bit_test(rtemp,2))btn7=1;
               if(fp3 & !bit_test(rtemp,2))btn8=1;
*/
               temp= input_b();
               temp1=input_c();
               output_low(pin_a4);
               output_low(pin_c6);
               output_high(pin_c7); //prepara para leer ultimos 8 botones
               
               //leo los otros 8 botones
               temp=temp & 0b11110001;
               temp1=(temp1 & 0b00000111)*2;
               Btn9a16 = temp | temp1;
/*
//Una vez obtenido el flanco y la direccion seteo los botones
               //Reseteo todos los botones del 1 al 16
               btn1a8=0;
               //Encoder 1
               if(fp1 & Dir1) Btn1=1;
               if(fp1 & !Dir1)Btn2=1;
               //Encoder 2
               if(fp2 & Dir2) Btn3=1;
               if(fp2 & !Dir2)Btn4=1;
*/               
 
               temp= input_b();
               temp1=input_c();
               temp=temp & 0b11110001;
               temp1=(temp1 & 0b00000111)*2;
               Btn1a8 = temp | temp1;
             
             
               temp= input_b();
               temp1=input_c();
               temp=temp & 0b11110001;
               temp1=(temp1 & 0b00000111)*2;
               Btn9a16 = temp | temp1;

               //leo ultimos ultimos 8 botones
               temp= input_b();
               temp1=input_c();
               temp=temp & 0b11110001;
               temp1=(temp1 & 0b00000111)*2;
               Btn17a24 = temp | temp1;
               
               //LEO ANALOGICAS
               Eje1=read_adc();
               set_adc_channel(1);  //PREPARO PARA EJE 2
               delay_us(10);
               Eje2=read_adc();
               set_adc_channel(2);  //PREPARO PARA EJE 3
               delay_us(10);
               Eje3=read_adc();
               set_adc_channel(3);  //PREPARO PARA EJE 4
               delay_us(10);
               Eje4=read_adc();
               set_adc_channel(4);  //PREPARO PARA EJE 5
               delay_us(10);
               Eje5=read_adc();
               set_adc_channel(9);  //PREPARO PARA EJE 6
               delay_us(10);
               Eje6=read_adc();
               set_adc_channel(8);  //PREPARO PARA EJE 7
               delay_us(10);
               Eje7=read_adc();
               set_adc_channel(10);  //PREPARO PARA EJE 8
               delay_us(10);
               Eje8=read_adc();
               fTx=1;
               
               }

      if(usb_enumerated())             //si esta configurado el Joysick
      {
               if (fTX){
                     txusb[0]=*(&eje0 + 1);
                     txusb[1]=*(&eje0 + 2);
                     txusb[2]=*(&eje0 + 3);
                     txusb[3]=*(&eje0 + 4);
                     txusb[4]=*(&eje0 + 5);
                     txusb[5]=*(&eje0 + 6);
                     txusb[6]=*(&eje0 + 7);
                     txusb[7]=*(&eje0 + 8);
                     txusb[8]=*(&eje0 + 9);
                     txusb[9]=*(&eje0 + 10);
                     txusb[10]=*(&eje0 + 11);
                     txusb[11]=*(&eje0 + 12);
                     txusb[12]=*(&eje0 + 13);
                     txusb[13]=*(&eje0 + 14);
                     txusb[14]=*(&eje0 + 15);
                     txusb[15]=*(&eje0 + 16);
                     txusb[16]=Btn1a8;
                     txusb[17]=Btn9a16;
                     txusb[18]=Btn17a24;
                     usb_put_packet(  1,  &eje0+1, 20, USB_DTS_TOGGLE);
                     fTX=0;
                     delay_ms(10);
               }
            }

     }
}


Título: Re:Joystick 8 ejes 32 botones
Publicado por: Banfield en 17 de Octubre de 2017, 12:11:40
Buenos días. Estoy haciendo unos comandos para un simulador de vuelo pero mis conocimientos de electrónica son muy básicos. He visto que en muchos países se venden unas placas que se conectan directo a la PC por USB y Windows 10 los reconoce como un joystick. Permiten la conexión de 8 ejes y 32 botones lo que me resultaría muy útil para mi proyecto para controlar 8 potenciómetros y 32 interruptores. Es posible conseguir en Argentina algo similar?. Muchas gracias.
Título: Re:Joystick 8 ejes 32 botones
Publicado por: willynovi en 20 de Noviembre de 2017, 09:56:18
No conozco que se venda en Argentina una placa, si hay otras en el exterior.
Yo hice una placa y está la info por la red para bajarla y armarla tu mismo, no son necesarios conocimientos avanzados de electrónica.

http://lmgtfy.com/?q=willynovi+controladora

En algún foro debe estar el enlace de descarga, el original es el de xtremeracers, pero debes registrarte para bajar.

Ahora no he encontrado un enlace que funcione, tendré que buscar los archivos originales para subirlos en algún gestor.

Prueba con este
http://www.filedropper.com/willynovicontroladorausb10bitsv13-2010-01

En windows 10 creo que está probada, debería funcionar.
Lo que no estoy seguro es el tema de tener mas de 6 ejes, en el tiempo que andaba con esto, windows solo permitía 6 ejes.
Título: Re:Joystick 8 ejes 32 botones
Publicado por: Banfield en 20 de Noviembre de 2017, 10:15:01
No conozco que se venda en Argentina una placa, si hay otras en el exterior.
Yo hice una placa y está la info por la red para bajarla y armarla tu mismo, no son necesarios conocimientos avanzados de electrónica.

http://lmgtfy.com/?q=willynovi+controladora

En algún foro debe estar el enlace de descarga, el original es el de xtremeracers, pero debes registrarte para bajar.

Ahora no he encontrado un enlace que funcione, tendré que buscar los archivos originales para subirlos en algún gestor.

Prueba con este
http://www.filedropper.com/willynovicontroladorausb10bitsv13-2010-01

En windows 10 creo que está probada, debería funcionar.
Lo que no estoy seguro es el tema de tener mas de 6 ejes, en el tiempo que andaba con esto, windows solo permitía 6 ejes.

Muchas gracias!. Estuve mirando y excede mis conocimientos de electrónica la construcción de la placa. Seguiré preguntando a ver si consigo algo ya terminado. Por casualidad, no construirías una para vendérmela, no?
Título: Re:Joystick 8 ejes 32 botones
Publicado por: willynovi en 21 de Noviembre de 2017, 00:05:21
Por casualidad, no construirías una para vendérmela, no?

 :oops: no he tenido buenas experiencias, así que no.

Título: Re:Joystick 8 ejes 32 botones
Publicado por: z10561 en 04 de Abril de 2019, 22:50:41
Tengo un problema, cargo el HEX que esta en los archivos rar y cuando conecto el pic al USB el Windows 10 no me reconoce como joystick. tengo que cargar algun driver para esto?