TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado 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:
-
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
-
si andas con los simus de vuelo, imagino que conoces esta página :shock:
http://www.opencockpits.com/
-
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
-
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:
-
Muy bueno tu proyecto. Gracias por compartirlo
-
¿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.
-
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
-
Excelente :-/ :-/
-
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
-
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.
-
AAA... me deje llevar por la acotacion :oops: :oops: no vi los números..
-
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:
-
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.
-
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
-
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
-
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.
-
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.
-
Muy chulo, y seguiré de cerca tus progresos. Pero el horizonte artificial está al revés, ¿no?
-
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.
-
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
-
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.
-
Ahora sí va fino fino. ¡Cómo te diviertes!
-
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.
-
Gracias ale1973, me cae como anillo al dedo para algunos emuladores...
un saludo...
-
Gracias Mincho, adelante, espero te sirva, mas tarde subo una version nueva con un par de correcciones que le hice al programa.
Saludos.
Alejandro.
-
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!
-
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
-
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.
-
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!!!!!!
-
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.
-
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]
-
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
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
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
-
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.
-
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
-
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
-
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.
-
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
-
Magnifique! ((:-))
-
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.
-
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.
-
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?
-
A ver, modifique algo, si me mande una burrada, no me maten :D
/////////////////////////////////////////////////////////////////////////
//// ////
//// 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);
}
}
}
}
-
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.
-
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.
-
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?
-
Por casualidad, no construirías una para vendérmela, no?
:oops: no he tenido buenas experiencias, así que no.
-
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?