TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: japifer_22 en 10 de Marzo de 2010, 16:56:39

Título: Hardware y sofware de un joystick
Publicado por: japifer_22 en 10 de Marzo de 2010, 16:56:39
hola a todos otra vez, esta vez acudo a ustedes por el siguiente tema; que es, como puedo hacer un joystick para la PC mediante USB. bueno mi idea es utilisar un PIC 16f876a para la parte de Hardware, ya que estoy intentando de hacer las partes de un coche, como el volante, palanca de cambio y la pedalera, que esta ultima cuenta con: freno, acelerador y embrague, y ademas que este vibre (volante).
en fin la pàrte de hardware no me complica tanto ya que tengo la idea de como hacerlo. aver comento un poco mi idea:
lo que es la pedalera, volante y embrague le voy a poner un potenciometro a cada uno, para saver en que pocision esta en cada momento, ademas que el volante tiene que tener 4 botones por lo minimo, ha! y me faltava el freno de mano que ese lo ago con un boton nomas.
ahora bien lo que me complica es como ago la comunicacion del pic con la PC, y que este me detecte los driver de mi joystick, osea como ago los driver + la comunicacion del joystick con la PC ??????
bueno espero que me den ideas de como hacer esto y sugerencias y ademas de las siempre bienvenidas criticas  :lol:
PD: si este tema no tiene relacion en esta parte del foro me mueven de chanel ?? plisss, y ademas espero no aver incomodado a nadie si este hilo no va a acá.
saludos! y que esten bien..


FUERZA CHILE...............................QUE SE PUEDE SALIR A DELANTE........ :oops:
Título: Re: Hardware y sofware de un joystick
Publicado por: MLO__ en 10 de Marzo de 2010, 19:46:35
Hola.

Pues mejor usa un 18F2550, que trae USB.
Título: Re: Hardware y sofware de un joystick
Publicado por: Menta en 10 de Marzo de 2010, 19:53:06
yo una vez había pensado hacer algo parecido, pero lo pense con PS2 el puerto del teclado directamente, la idea es hacer una harware intermedio entre el teclado y la pc, de modo que éste pueda emular el teclado y filtrar teclas o combinaciones de ellas, pues la mayoría de los juegos de pc te permiten configurar el teclado...
pero fue sola una idea alternativa y además porque no sé cómo hacerlo por usb, no sabría que comandos habría que mandar ni con qué driver comunicarme  :?
Título: Re: Hardware y sofware de un joystick
Publicado por: ema en 10 de Marzo de 2010, 20:17:09
Una vez hice algo parecido... y donde mejor funcionaba era en un simulador de vuelo para helicopteros con un PIC18F2550 y un sensor de aceleración MMA7260Q.

Saludos
Título: Re: Hardware y sofware de un joystick
Publicado por: Suky en 10 de Marzo de 2010, 20:58:00
Eso, mejor usar un 18F2550, con USB HID configurado para joystick, y agregar un acelerometro quedaría un chiche!  ;-)


Saludos!
Título: Re: Hardware y sofware de un joystick
Publicado por: japifer_22 en 11 de Marzo de 2010, 14:20:27
hola gracias por las sugerencias, pero estava pensando hi a la vez me acorde que tengo un manubrio en donde este solo trae la pedalera de acelerador y freno, pero como digo es un poco biejo lo saque del entretecho ^^. así que como este tiene los driver voy mejor a modificar este mismo para añadir las demas cosas como caja de cambio y embrague, y mas adelante un par de actuadores para que se mueva el asiento del piloto con grados de inclinacion, así dandole una mayor realidad al juego. bueno cualquier sujerencia o comentario es bienvenida !reitero.
aver si voy publicando los avance de este super joystick aqui mismo para que vallamos dicutiendo el asunto.
saludos!
Título: Re: Hardware y sofware de un joystick
Publicado por: MLO__ en 11 de Marzo de 2010, 15:42:05
Hola.

Pues si vas a usar el 18F2550, te podría servir el descriptor del Joystik:

(http://img379.imageshack.us/img379/7962/hidjoistyc.png)

Saludos
Título: Re: Hardware y sofware de un joystick
Publicado por: migsantiago en 11 de Marzo de 2010, 17:42:15
Aquí hay demos con firmware para joysticks USB.

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2018&mcparam=en544407
Título: Re: Hardware y sofware de un joystick
Publicado por: willynovi en 11 de Marzo de 2010, 22:57:34
hola japifer_22
mira che yo hice algo como lo que vos queres hacer, con un PIC18F2455 pero el 2550 anda igual, incluso el 4550 tb.
Si no queres complicaciones aca te paso el proyecto que yo hice, para una liga de simracing, tenes la placa, el esquematico y el .hex en varias veriones, y un PDF de guia para armartela.
Es una controladora con 6 ejes a 10 bits, 30 botones y un hat switch de 8 posiciones.

http://uploading.com/files/fed36b27/Willynovi_Controladora_USB_10bits_%255Bv1.3-2010-01%255D.rar/

De todas formas, quisas quieras hacer el trabajo desde cero, en ese caso avisa y te doy una mano.
Saludos
Título: Re: Hardware y sofware de un joystick
Publicado por: japifer_22 en 11 de Marzo de 2010, 23:52:15
hola otra vez, comento que ya empece a hacer el hadware, dando como primario la palanca de cambio, por que se me a ocurrido algo para ahorrarme problemas, bueno eso creo yo, y se los comentos. como bien mensione en algun momento, me acorde que tenia un manubrio, y pensando bien que este ya diene sus driver hechos y demaces, voy a trabajar en él. me explico mejor, como bien dije que este manubrio tiene la pedalera de acelerador y freno. le voy a agregar las cosas que faltan a este y por consecuensia es la palanca de cambio + el embrague. no obtante la palanca de cambio, mi manubrio la sustituye por 2 palanquitas que estan en el lado posterior del volante una para bajar marcha y la otra para subir marcha. ahora bien mi idea es como tengo 2 "botones" para lo que es los cambios, pretendo trabajar en hellos, me explayo un poco:
mi palanca de cambio que e echo y podran ver en las fotos, consta de 2 potenciometros, por el cual las posiciones de 1º asta 6º seran sensadas mediante un pic X y este tendra un sofware que marque tantos pulsos como en que posicion este la palanca de cambio, ejemplo si tengo la palanca de en 3º el pic manda 3 pulsos (o hace 3 veses contactos al botón) al boton de subir marcha, ahora bien el pic tiene que chequear si el cambio que sucede a continuacion es mayor o menor al cambio actual, dando asi, si es mayor le da las pulsaciones nesesarias para llegar al cambio nuevo, supongamos que es 5º, entonces el pic manda 2 pulsos al boton de subir marcha, ahora bien si ahora de 5º pasamos a 2da el pic tiene que presionar 3 veces el boton de bajar marcha. y por ultimo si la palanca esta en neutro el pic tiene que ver que boton tiene que apretar para dejar el "sistema" en neutro.

ademas por otro lado, lo que es el embrague tambien lo conecto al mismo pic X y solo pasara cambio si esta presionado el embrague, hi si este cambia sin presionar el embrague el pic presiona el boton de freno parando el "auto". por otro lado tambien el pic chequea que al presionar el freno tambien se tiene que presionar el embrague, si no tambien queta trabado el freno del auto.
bueno esa por el momento es mi idea espero sujerencias y mas ideas. pero primero vean las fotos que dejo para lo que es la palanca de cambio
Título: Re: Hardware y sofware de un joystick
Publicado por: willynovi en 12 de Marzo de 2010, 00:24:39
pero tu quieres conectar todo este simulador, volante, pedales y palanca a la PC por el USB o es algo que funciona aparte, me explico mejor, lo quieres para un juego que corre en la PC?
Si es asi, no te compliques mucho, con solo botones al jego luego le configuras que esos botones son cuando esta apretado lka marcha tal y listo.
Has mirado lo que yo hice, es justamente lo que andas buscando me parece.

Este es el volante que me hice yo
(http://s4.postimage.org/5M4M9.jpg)
Saludos
Título: Re: Hardware y sofware de un joystick
Publicado por: japifer_22 en 12 de Marzo de 2010, 12:34:10
hola willynovi, perdona pero no te entendi del todo lo que quisiste decir, pero una cosa me quedo clara y es que sí, si quiero conectarla al puerto USB de la PC para jugar juegos de carrera.
saludos!
Título: Re: Hardware y sofware de un joystick
Publicado por: Menta en 12 de Marzo de 2010, 14:33:32
Felicitaciones por esa ingeniosa palanca japifer, se vé muy bonita... crees que será suficientemente robusta para soportar los cambios rápidos y bruzcos ??? eso no se aprecia mucho en las fotos, pero bueno en todo caso se puede jugar con el largo de la palanca...

ademas por otro lado, lo que es el embrague tambien lo conecto al mismo pic X y solo pasara cambio si esta presionado el embrague, hi si este cambia sin presionar el embrague el pic presiona el boton de freno parando el "auto". por otro lado tambien el pic chequea que al presionar el freno tambien se tiene que presionar el embrague, si no tambien queta trabado el freno del auto.
bueno esa por el momento es mi idea espero sujerencias y mas ideas. pero primero vean las fotos que dejo para lo que es la palanca de cambio

lo de aplicar freno si se cambia sin el embrague me parece correcto... sólo hasta que se oprima efectivamente el embrague, ahi hay que cesar con el freno, sino te afectará mucho la jugabilidad.

Pero eso de que para frenar haya que apretar el embrague también me parece que no es necesario... al menos manejando no pasa nada si frenas sin el embrague ... a no ser que frenes mucho y la marcha te quede grande para la velocidad cuando sueltes el freno, entonces necesitarías hacer un revaje y allí sí apretar el embrague. Supongo que en los juegos es lo mismo a veces necesitas frenar sin desconectar la marcha... o estoy equivocado??? si es así manejo como el traste  :?
Título: Re: Hardware y sofware de un joystick
Publicado por: japifer_22 en 12 de Marzo de 2010, 18:31:50
hola menta pues es efectivo lo que mencionas, ademas con respecto a la palanca de cambio, como bien dices tu es solo un juego de distancia por llamarlo asi al largo del mismo. pero comento que ya estoy en marcha con esto y me esta saliendo algo. les pongo un video de mi avance con la caja de cambio para ver sus opiniones.

solo me queda sumar y restar los cambios para que en las salidas de los botones subir y bajar marcha de mi manubrio el pic los presiones correctamente, pense en poner 2 reles comandados con el pic para simular la activacion y desactivacion de los botones ya mencionados del manubrio. bueno eso por el momento.
a! y vean el video que dejo con la palanca de cambio.
saludos a todos!

aqui pueden bajar el video por megaupload

http://www.megaupload.com/?d=NTTBVS17
Título: Re: Hardware y sofware de un joystick
Publicado por: Menta en 12 de Marzo de 2010, 18:51:58
vi el video, avanzas rápido!!! la palanca tiene fricción o algún sistema para que quede en punto muerto... ví que en el último movimiento se te complicó moverla hacia la derecha, quizas pasa muy justa el caño de la palanca por la ranura... yo agrandaría un poquito ese camino o si no un poco de aceite  :mrgreen:

Fuera de chistes. Felicitaciones.
Título: Re: Hardware y sofware de un joystick
Publicado por: japifer_22 en 12 de Marzo de 2010, 19:57:09
hola menta, bueno con respecto al cambio esta bien solo que lo estava haciendo con la mano que no domino bien :shock:, solo eso, con respecto a que tenga un punto muerto cuando este enganchado el cambio todavia no lo ago. solo ahora me esta dando dolor de caveza el programa en la parte de detectar en que cambio esta y si es de decremento o aumento para pasarla a los reles correspondiente de aumento de marcha o viceverza.
una ayudita no m viene nada de mal por si les tinca ^^  :oops:. explico mejor mi problema.
quiero hacer que:

como bien e estado mencionando mi pic tiene 2 reles, uno de aumento de marcha y el otro de decrementode marcha, ahora bien para poder activar alguno de los 2 reles tengo que saver en que posicion esta el cambio. pero en este punto tengo que ver si estoy incrementando la marcha o la estoy bajando para asi poder hacer las sumas y restas correspondiente para que el rele asignado en ese instante se active tantas veces como resultado aya quedado. doy un ejemplo para expresarm mejor:

supon que estoy en neutro, ahora bien al pasar a primera se activa el rele de incrementar marcha 1 vez y si paso a segunda tambien se activa el rele de subir marcha 1 vez ya que como estaba en primera le falta 1 para la segunda. ahora bien si paso de primera a tercera el rele se presiona 2 veces, y asi susesivamente, pero si yo paso de tercera a primera el programa tiene que presionar el rele de decremento y no de incremento 2 veces para llegar a la primera y asi con todo los cambios. bueno espero algun ayudita.
saludos!
Título: Re: Hardware y sofware de un joystick
Publicado por: Menta en 12 de Marzo de 2010, 20:34:04
En el video identificas bien la posición de la palanca... supongo que le asignas números del 1 al 5 a las marchas y 0 para el neutro... bueno yo haría un bucle donde consulto por la posición de la palanca en forma constante, es decir un polling creo....

Me parece que tu problema está en que el juego, está pensado para marchas secuenciales donde por ejemplo pasas de 3 a 4, mientras que en tu palanca pasas de 3 a 0 y de 0 a 4 ...
por lo que lo mejor sería que estando en 3 y pasas a 0 no hacer nada hasta que se pase a otro número de marcha... el temá es que de esa manera no podrás poner nunca en neutro...  :(

Puede ser que el juego arranca en neutro y de ahí en más siempre tengas una marcha puesta a no ser que dejes en neutro unos 2 o 3 segundos que si estás haciendo un cambio es tiempo de sobra para terminarlo, mientras que si dejas en neutro todo ese tiempo se pone en neutro definitivamente...

Define primero esta cuestión y según esto vemos como hacemos el código...
Título: Re: Hardware y sofware de un joystick
Publicado por: japifer_22 en 12 de Marzo de 2010, 20:46:41
hola bueno eso que mencionas ya lo avia pensado y decidi lo siquiente: como todo juego de pc empieza en primera (creo) yo pongo en primera la la palanca antes que se tenga el control de los cambios en el juego, pero como bien dices tu ahy momentos que para pasar de 1 a 3 tengo que pasar por neutro este neutro no lo tomo en cuenta ya que pretendo que solo se active el neutro si solo a pasado mas de 1.5 a 2 segundos, ya que si estoy jugando y quiero pasar cambio yo creo que no me dmorare mas de ese tiempo en pasar el cambio y para poner neutro solo tengo que esperar en neutro 1.5 a 2 seg para que se active.
saludos!
Título: Re: Hardware y sofware de un joystick
Publicado por: japifer_22 en 12 de Marzo de 2010, 23:29:26
hola otra vez, bueno traigo buenas nuevas logre hacer lo que decia de poder pasar las marchas y que esta me entrege los pulsos que correspondan a cada boton de subir o bajar marcha les dejo un video para que lo vean ademas le dejo el codigo, tambien tiene la particularidad que el neutro se activa dejando la palanca en neutro por mas de 1.5 seg como bien dije en almun momento anterior.
bueno les comento en detalle lo que hace la palanca de cambio:
el manubrio que tengo tiene varios botones y yo le asigne 2 de ellos para subir y bajar cambios, ahora bien mi programa que tengo en el pic lo que hace es tomar los cambios de mi palanca de cambio y asignarlos a los 2 botones ya mensionados, chequeando que se a subido o bajado la marcha, esto lo señala mediante un par de rele que van a los botones del manubrio, asi pudiendo subir o bajar la marcha segun se decee, ademas para poder estar en neutro se tiene que dejar en esa posicion y se activa al traspasar 1.5seg, esto es devido por que la palanca al pasar por ejemplo de segunda a tercera va a pasar por el neutro y nosotros no queremos que se active.
bueno espero que les aya gustado mi solucion para dotar de una palanca de cambio un manubrio cualquiera. bueno ahora me queda hacer la parte del embrague................
saludos!
a! y vean el video asi queda masclaro creo yo.

http://www.megaupload.com/?d=5CX5WWP6

hi el codigo para esto es este:
Código: [Seleccionar]
float const resolucion= 5.0/1024.0;      // Conversión con 10 bits 
float rango1, rango2;
int16 V1,V2;//variables para las señales analogas
int cambios=0,estado=0,contador;

void main()
{
  lcd_init();         //inicializa, o activa lcd
  setup_port_A( ALL_ANALOG );
  setup_adc( ADC_CLOCK_INTERNAL );
 
while(TRUE){
//avilita la entrada analoga N0
   set_adc_channel( 0 );//numero del puerto analogo N0
   delay_us(20);
   V1 = read_adc();//guarda el dato optenido de la entrada analoga
//avilita la entrada analoga N1
   set_adc_channel( 1 );//numero del puerto analogo N1
   delay_us(20);
   V2 = read_adc();//guarda el dato optenido de la entrada analoga
   
   
rango1=V1 * resolucion;
rango2=V2 * resolucion;

// lcd_gotoxy( 1, 2);
// printf(lcd_putc,"R2 %1.2f R1 %1.2f", rango2, rango1 );

if((rango1>=2.50 && rango1<=2.96) && (rango2>=2.50 && rango2<=2.96)){
delay_ms(800);
contador++;
}else{
contador=0;
}

if(contador==3){
  cambios=0;
  lcd_gotoxy( 1, 1);
  printf(lcd_putc,"Neutro");
}
else if((rango1>=3.90 && rango1<=3.96) && (rango2>=4.60 && rango2<=4.70)){
  cambios=1;
  lcd_gotoxy( 1, 1);
  printf(lcd_putc,"Primera");
}
else if((rango1>=1.10 && rango1<=1.13) && (rango2>=1.10 && rango2<=1.13)){
  cambios=2;
  lcd_gotoxy( 1, 1);
  printf(lcd_putc,"Segunda");
}
else if((rango1>=4.68 && rango1<=4.72) && (rango2>=2.78 && rango2<=2.82)){
  cambios=3;
  lcd_gotoxy( 1, 1);
  printf(lcd_putc,"Tercera");
}
else if((rango1>=0.20 && rango1<=0.30) && (rango2>=2.78 && rango2<=2.82)){
  cambios=4;
  lcd_gotoxy( 1, 1);
  printf(lcd_putc,"Cuarta");
}
else if((rango1>=4.18 && rango1<=4.23) && (rango2>=0.87 && rango2<=0.92)){
  cambios=5;
  lcd_gotoxy( 1, 1);
  printf(lcd_putc,"Quinta");
}
else if((rango1>=0.80 && rango1<=0.90) && (rango2>=0.80 && rango2<=0.90)){
  cambios=6;
  lcd_gotoxy( 1, 1);
  printf(lcd_putc,"Secta");
}
if(estado<cambios){
estado++;
output_high(PIN_C0);
delay_ms(250);
output_low(PIN_C0);
delay_ms(250);
}
else if(cambios<estado){
estado--;
output_high(PIN_C1);
delay_ms(250);
output_low(PIN_C1);
delay_ms(250);
}
lcd_gotoxy( 1, 2);
printf(lcd_putc," %i",estado);
}}
Título: Re: Hardware y sofware de un joystick
Publicado por: willynovi en 13 de Marzo de 2010, 17:44:34
quizas no sea el lugar para estas cuestiones, pero seria importante que vieras que juego es el que quieres usar, mas alla de que todos simulan similares.Luego ves como se comporta con lo que quieres hacer.
Título: Re: Hardware y sofware de un joystick
Publicado por: Menta en 13 de Marzo de 2010, 19:26:29
que bien... veo muy bien el programa... me parece que lo has resuelto bien en forma simple y precisa y así si bajas 2 cambios te hace la secuencia en dos pasadas consecutivas, muy bien...
veo que tenés sexta (secta  :D) y no tenés reversa... cuando chocás y tenés que salir pa' atrá ???
Título: Re: Hardware y sofware de un joystick
Publicado por: japifer_22 en 14 de Marzo de 2010, 16:05:09
hola menta, gracias por lo del progama, y bueno la reversa la ago con el pedal de freno ya cuando el auto esta con una velocidad 0 al apretar el freno se activa como reversa de manera automatica. ahora estoy con el PCB, y la otra semana empieZo con la contruccion de la pedalera, ya que devido al terremoto en mi país no se encuentra casi nada avierto, con respecto a las tiendas y demaces.(lamentable por toda la gente que esta sufriendo en estos momentos por consecuencia del terremoto.........ARRIBA CHILE QUE CON UN POCO DE SUDOR Y SACRIFICIO SE PUEDE SALIR A DELANTE........ TE QUIERO CHILE)
saludos!
Título: Re: Hardware y sofware de un joystick
Publicado por: japifer_22 en 18 de Marzo de 2010, 16:03:29
hola otra vez, bueno tengo una duda y no quiero abrir otro hilo asi que la ago aca por que de = forma tiene relacion con este proyecto. bueno quiero saver como funcionan los drive con los juegos, osea como es la interaccion entre ellos si los drive son de un joystick por ejemplo. como el juego le hace relacion a cada tecla y a esta le asigna una funcion especifica en el juego, sinedo que el boton es del joystick y no del teclado ?????????????????????????????
Título: Re: Hardware y sofware de un joystick
Publicado por: AngelGris en 18 de Marzo de 2010, 17:53:17
hola otra vez, bueno tengo una duda y no quiero abrir otro hilo asi que la ago aca por que de = forma tiene relacion con este proyecto. bueno quiero saver como funcionan los drive con los juegos, osea como es la interaccion entre ellos si los drive son de un joystick por ejemplo. como el juego le hace relacion a cada tecla y a esta le asigna una funcion especifica en el juego, sinedo que el boton es del joystick y no del teclado ?????????????????????????????

Hay muchos juegos que tienen la opción de configurar los mandos, ya sea con el teclado o con joystick.
El Colin McRae te permitía configurar que botón asignabas a cada mando y también te permitía asignar de distintas manera los controles analógicos.