Autor Tema: Proyecto con PIC18F y USB, mejor VB o VC++???  (Leído 18674 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado raus

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 121
Proyecto con PIC18F y USB, mejor VB o VC++???
« en: 12 de Septiembre de 2006, 11:31:20 »
Buenas!!

Antes de nada, no sé si este es el foro correcto para publicar este mensaje, asi que, si algun administrador lo ve y piensa que no lo es, por favor sentiros totalmente libres de moverlo a donde corresponda.

Estoy iniciando un nuevo proyecto basado en la familia PIC18F. Se trata de un juego de leds y botones. El objetivo es que al pulsar los botones, el PIC envie por USB esa información a una aplicación en el PC que, dependiendo del botón pulsado, envíe una determinada pulsación de teclas a una ventana donde se está ejecutando un simulador de vuelo. Al mismo tiempo, este simulador dispone de una serie de variables que son accesibles a través de un archivo (flightdata.h). Este archivo tiene que ser leido por la aplicación constantemente y, cuando se produce un cambio en alguna de las variables, ha de enviarlo por USB a la tarjeta donde está el PIC, para que este encienda o apague el led correspondiente.

Mi problema es con la aplicación de PC. Sé algo de C/C++, pero nunca he utilizado VisualBasic o Visual C++. ¿Cual de estos dos lenguajes me convendría más?¿Cómo puedo leer este archivo (flightdata.h) y pasar sus valores a variables?¿Existe algun codigo que me permita la comunicacion PIC/PC facilmente?

Por favor, si alguien tiene alguna idea al respecto, alguna parte de un código fuente que me pueda ser util, o cualquier sugerencia, contestarme. Me gustaría leer todas las opiniones posibles antes de meterme al lio y ver que existia una forma más sencilla :) Y si conoceis algun buen tutorial para torpes sobre VC++ o VB (el que me recomendéis), pues será bienvenido. Al fin y al cabo, esto es para aprender, asi que no os corteis en decirme "estas haciendo una tonteria, mejor deberias hacerlo asi o asa"

Muchas gracias


PD: si créeis que es mejor usar un puerto serie, también decirmelo, porque intento hacerlo con USB dado que todos los ordenadores tienen (incluso portatiles), pero si es demasiado lio, pues no pasa nada por usar un puerto serie.

PD2: aqui va la estructura del archivo flightdata.h:

Código: [Seleccionar]
#ifndef _FLIGHT_DATA_H
#define _FLIGHT_DATA_H

#define FLIGHT_DATA_VERSION 111

//To retain compatibility with previous versions, in case this definitions
//change, always increase version number and add new fields to the end of
//the existing structure.

class FlightData
{
   public:
      enum LightBits
      {
         MasterCaution = 0x1,

         // Brow Lights
         TF        = 0x2,
         OBS       = 0x4,
         ALT       = 0x8,
         ENG_FIRE  = 0x20,
CONFIG    = 0x40,
         HYD       = 0x80,
         OIL       = 0x100,
         DUAL      = 0x200,
         CAN       = 0x400,
         T_L_CFG   = 0x800,

         // AOA Indexers
         AOAAbove  = 0x1000,
         AOAOn     = 0x2000,
         AOABelow  = 0x4000,

         // Refuel/NWS
         RefuelRDY = 0x8000,
         RefuelAR  = 0x10000,
         RefuelDSC = 0x20000,

         // Caution Lights
         FltControlSys = 0x40000,
         LEFlaps       = 0x80000,
         EngineFault   = 0x100000,
         Overheat      = 0x200000,
         FuelLow       = 0x400000,
         Avionics      = 0x800000,
         RadarAlt      = 0x1000000,
         IFF           = 0x2000000,
         ECM           = 0x4000000,
         Hook          = 0x8000000,
         NWSFail       = 0x10000000,
         CabinPress    = 0x20000000
      };

  enum LightBits2
      {
         // Threat Warning Prime
HandOff      =       0x1,
         Launch       =       0x2,
         PriMode      =       0x4,
         Naval        =       0x8,
         Unk          =      0x10,
         TgtSep       =      0x20,

         // Aux Threat Warning
         AuxSrch      =    0x1000,
         AuxAct       =    0x2000,
         AuxLow       =    0x4000,
         AuxPwr       =    0x8000,

         // ECM
EcmPwr       =   0x10000,
         EcmFail      =   0x20000,

         // Caution Lights
         FwdFuelLow   =   0x40000,
         AftFuelLow   =   0x80000,

//Engine lights
EPUOn   =   0x100000,
JFSOn   =   0x200000,
SEC   =   0x400000,

OXY_LOW   =   0x800000,
PROBEHEAT   =   0x1000000,
SEAT_ARM   =   0x2000000,
BUC   =   0x4000000,
FUEL_OIL_HOT =   0x8000000,
ANTI_SKID   =   0x10000000,
TFR_ENGAGED  =   0x20000000,
GEARHANDLE   =   0x40000000,
  };

  enum LightBits3
  {
  FlcsPmg = 0x1,
  MainGen = 0x2,
  StbyGen = 0x4,
  EpuGen = 0x8,
  EpuPmg = 0x10,
  ToFlcs = 0x20,
  FlcsRly = 0x40,
  BatFail = 0x80,
  Hydrazine = 0x100,
  Air = 0x200,
  Elec_Fault = 0x400,
  Lef_Fault = 0x800,
  OnGround = 0x1000,
  };

  enum HsiBits
  {
ToTrue        = 0x01, // HSI_FLAG_TO_TRUE
    IlsWarning    = 0x02, // HSI_FLAG_ILS_WARN
    CourseWarning = 0x04, // HSI_FLAG_CRS_WARN
    Init          = 0x08, // HSI_FLAG_INIT
    TotalFlags    = 0x10, // HSI_FLAG_TOTAL_FLAGS ???
ADI_OFF   = 0x20, // ADI OFF Flag
ADI_AUX   = 0x40, // ADI AUX Flag
ADI_GS   = 0x80, // ADI GS FLAG
ADI_LOC   = 0x100, // ADI LOC FLAG
HSI_OFF   = 0x200, // HSI OFF Flag
BUP_ADI_OFF   = 0x400, // Backup ADI Off Flag
VVI   = 0x800, // VVI OFF Flag
AOA   = 0x1000, // AOA OFF Flag
AVTR   = 0x2000, // AVTR Light
  };



      // These are outputs from the sim
      float x;            // Ownship North (Ft)
      float y;            // Ownship East (Ft)
      float z;            // Ownship Down (Ft)
      float xDot;         // Ownship North Rate (ft/sec)
      float yDot;         // Ownship East Rate (ft/sec)
      float zDot;         // Ownship Down Rate (ft/sec)
      float alpha;        // Ownship AOA (Degrees)
      float beta;         // Ownship Beta (Degrees)
      float gamma;        // Ownship Gamma (Radians)
      float pitch;        // Ownship Pitch (Radians)
      float roll;         // Ownship Pitch (Radians)
      float yaw;          // Ownship Pitch (Radians)
      float mach;         // Ownship Mach number
      float kias;         // Ownship Indicated Airspeed (Knots)
      float vt;           // Ownship True Airspeed (Ft/Sec)
      float gs;           // Ownship Normal Gs
      float windOffset;   // Wind delta to FPM (Radians)
      float nozzlePos;    // Ownship engine nozzle percent open (0-100)
      float internalFuel; // Ownship internal fuel (Lbs)
      float externalFuel; // Ownship external fuel (Lbs)
      float fuelFlow;     // Ownship fuel flow (Lbs/Hour)
      float rpm;          // Ownship engine rpm (Percent 0-103)
      float ftit;         // Ownship Forward Turbine Inlet Temp (Degrees C)
      float gearPos;      // Ownship Gear position 0 = up, 1 = down;
      float speedBrake;   // Ownship speed brake position 0 = closed, 1 = 60 Degrees open
      float epuFuel;      // Ownship EPU fuel (Percent 0-100)
      float oilPressure;  // Ownship Oil Pressure (Percent 0-100)
      int   lightBits;    // Cockpit Indicator Lights, one bit per bulb. See enum

      // These are inputs. Use them carefully
      float headPitch;    // Head pitch offset from design eye (radians)
      float headRoll;     // Head roll offset from design eye (radians)
      float headYaw;      // Head yaw offset from design eye (radians)
//Moved to the bottom to retain compatibility with previous version
//   float headX;        // Head X offset from design eye (feet)
//   float headY;        // Head Y offset from design eye (feet)
//   float headZ;        // Head Z offset from design eye (feet)

      // new lights
  int   lightBits2;         // Cockpit Indicator Lights, one bit per bulb. See enum
  int   lightBits3;         // Cockpit Indicator Lights, one bit per bulb. See enum

  // chaff/flare
      float ChaffCount;         // Number of Chaff left
  float FlareCount;         // Number of Flare left

  // landing gear
  float NoseGearPos;        // Position of the nose landinggear
  float LeftGearPos;        // Position of the left landinggear
  float RightGearPos;       // Position of the right landinggear

  // ADI values
  float AdiIlsHorPos;       // Position of horizontal ILS bar
  float AdiIlsVerPos;       // Position of vertical ILS bar

  // HSI states
  int courseState;          // HSI_STA_CRS_STATE
  int headingState;         // HSI_STA_HDG_STATE
  int totalStates;          // HSI_STA_TOTAL_STATES ???

  // HSI values
  float courseDeviation; // HSI_VAL_CRS_DEVIATION
  float desiredCourse; // HSI_VAL_DESIRED_CRS
  float distanceToBeacon;   // HSI_VAL_DISTANCE_TO_BEACON
  float bearingToBeacon; // HSI_VAL_BEARING_TO_BEACON
  float currentHeading; // HSI_VAL_CURRENT_HEADING
  float desiredHeading; // HSI_VAL_DESIRED_HEADING
  float deviationLimit; // HSI_VAL_DEV_LIMIT
  float halfDeviationLimit; // HSI_VAL_HALF_DEV_LIMIT
  float localizerCourse; // HSI_VAL_LOCALIZER_CRS
  float airbaseX; // HSI_VAL_AIRBASE_X
  float airbaseY; // HSI_VAL_AIRBASE_Y
  float totalValues; // HSI_VAL_TOTAL_VALUES  ???

  float TrimPitch; // Value of trim in pitch axis, -0.5 to +0.5
  float TrimRoll; // Value of trim in roll axis, -0.5 to +0.5
  float TrimYaw; // Value of trim in yaw axis, -0.5 to +0.5

  // HSI flags
  int hsiBits;              // HSI flags

  //DED Lines
  char DEDLines[5][26]; //25 usable chars
  char Invert[5][26]; //25 usable chars

  //PFL Lines
  char PFLLines[5][26]; //25 usable chars
  char PFLInvert[5][26]; //25 usable chars

  //TacanChannel
  int UFCTChan, AUXTChan;

      // RWR
  int           RwrObjectCount;
  int           RWRsymbol[40];
  float         bearing[40];
      unsigned long missileActivity[40];
  unsigned long missileLaunch[40];
      unsigned long selected[40];
      float         lethality[40];
  unsigned long newDetection[40];

  //fuel values
  float fwd, aft, total;

      void SetLightBit (int newBit) {lightBits |= newBit;};
      void ClearLightBit (int newBit) {lightBits &= ~newBit;};
      int  IsSet (int newBit) {return ((lightBits & newBit) ? TRUE : FALSE);};

      void SetLightBit2 (int newBit) {lightBits2 |= newBit;};
      void ClearLightBit2 (int newBit) {lightBits2 &= ~newBit;};
      int  IsSet2 (int newBit) {return ((lightBits2 & newBit) ? TRUE : FALSE);};

  void SetLightBit3 (int newBit) {lightBits3 |= newBit;};
      void ClearLightBit3 (int newBit) {lightBits3 &= ~newBit;};
      int  IsSet3 (int newBit) {return ((lightBits3 & newBit) ? TRUE : FALSE);};

      void SetHsiBit (int newBit) {hsiBits |= newBit;};
      void ClearHsiBit (int newBit) {hsiBits &= ~newBit;};
      int  IsSetHsi (int newBit) {return ((hsiBits & newBit) ? TRUE : FALSE);};

  int VersionNum; //Version of Memarea

// Added in version 111
      // These are inputs. Use them carefully
  float headX;        // Head X offset from design eye (feet)
  float headY;        // Head Y offset from design eye (feet)
  float headZ;        // Head Z offset from design eye (feet)

  int MainPower;

};

extern FlightData cockpitFlightData;
#endif
Visita mi blog sobre tecnología y marketing:
http://franciscobenito.es

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Proyecto con PIC18F y USB, mejor VB o VC++???
« Respuesta #1 en: 12 de Septiembre de 2006, 11:36:36 »
raus, tal vez no has paseado mucho por el foro pero aquí hay proyectos completos y funcionales usando USB, eso sí, con código en PC en Delphi.  Si usas VC++ podrás migrarlo sin mayor inconveniente ya que no hay misterios.

Te paso un link donde se habló del tema y donde además hay otros links al tema que te interesa.

http://www.todopic.com.ar/foros/index.php?topic=13827.msg81711#msg81711

Saludos

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Proyecto con PIC18F y USB, mejor VB o VC++???
« Respuesta #2 en: 12 de Septiembre de 2006, 11:41:15 »
Hola:

mira aqui:

http://www.todopic.com.ar/foros/index.php?topic=2260.0

es un proyecto con pic utilizando CCS y C#, te puede se muy util.
« Última modificación: 12 de Septiembre de 2006, 11:42:51 por LordLafebre »

Desconectado Dancrazy

  • PIC16
  • ***
  • Mensajes: 134
Re: Proyecto con PIC18F y USB, mejor VB o VC++???
« Respuesta #3 en: 12 de Septiembre de 2006, 15:23:20 »
Que tal!

Bueno, este es una opinion muy personal...

Visual C 6.0 es horrible, terrible. Yo, pobre niño inocente dije: "yo maneje Basic y con eso le entré a Visual Basic de una, entonces, como tambien programe en C, debo saber Visual C"

craso error, es sumamente complicado hacer una MSI o por lo menos un programa en ventanas en visual C. cuando al final logre cargar las librerias que requeria usar en Visual basic, hice mi programa MSI con una facilidad increible, sin haber usado nunca visual basic mas que en aplicaciones "Hola mundo". En cambio, en VC te genera un pocoton de codigo extraño y te pone unas marcas "TODO" --->sólo aqui puedes meter codigo...

tenia que aprender que eran Clases, Subclases, herencia, polimorfismo y muchos conceptos raros para mi...
me imagino que para comunicarse por medio de USB debe ser asi de complejo... y si el usb ya es medio complejo...
necesitas la libreria que da microchip en tal caso, la mpusbapi.dll

Ahora, no se como es visual C#...

Pero mi consejo es, si puedes usa Visual Basic...
 :-/
:-)
« Última modificación: 12 de Septiembre de 2006, 15:26:52 por Dancrazy »
Daniel 
Caracas, Venezuela 

-----------------

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Re: Proyecto con PIC18F y USB, mejor VB o VC++???
« Respuesta #4 en: 12 de Septiembre de 2006, 16:07:17 »
Ahora mismo en este foro puedes encontrar ejemplos para USB con el compilador de CCS para el PIC y en VB, VC++, VC#, y Delphi. Personalmente (y para gusto colores!) me quedo con el VC#, Hoy por hoy es el mas potente y es relativamente sencillo de empezar a programar, si tuviera que ordenarlos por dificultad, creciente, de programación: VB y Delphi, VC# y VC++. Diego (RedPIC) tiene un muy buen ejemplo sobre Delphi y yo publiqué uno en VC#, respecto a los de VB y VC++ si no los encuentras y te interesas por esos lenguajes dimelo q te busco los links.

Saludos!

Desconectado raus

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 121
Re: Proyecto con PIC18F y USB, mejor VB o VC++???
« Respuesta #5 en: 12 de Septiembre de 2006, 16:53:02 »
Vaya! Muchas gracias por las respuestas.

Respecto a VC#, la verdad es que no lo mencionaba porque no se muy bien de que va la historia. Yo aprendi en los tiempos remotos del colegio con Basic (gwbasic, jejeje)y ya en la carrera (Ingeniería Industrial, especialidad electrónica) me enseñaron programación orientada a objetos con C++, asi que lo de las clases, herencias, polimorfismo... está dominado (bueno, si no está dominado, aun tengo los apuntes a mano para resolver las dudas jeje). Pero C# no tengo ni idea de cual es la diferencia.

Si podeis enlazarme el ejemplo de VC# y algo de VB os lo agradeceria horrores. Si entiendo bien el VC# creo que me quedaré con el, ya que esta aplicación le sería de utilidad a mucha gente y, una vez desarrollada, encontraria bastante ayuda para ir modificandola. Si no lo entiendo, pues me quedaria con VB, que tambien hay mucha gente que lo domina y, aunque yo no sea uno de ellos, dicen que es bastante facil de aprender :)

Nada más, muchas gracias por vuestra ayuda y espero poder publicar por aqui mi proyecto finalizado y el paso a paso
Visita mi blog sobre tecnología y marketing:
http://franciscobenito.es


Desconectado LABmouse

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Proyecto con PIC18F y USB, mejor VB o VC++???
« Respuesta #7 en: 28 de Diciembre de 2006, 16:23:28 »
Es posible correr el USB del  PIC18F4550 con un cristal de 10MHz.

Estoy intentando con el programa de prueba
Visual Basic: (por Ernesto Mozota)
http://www.hobbypic.com/temp/PicUSB_VB.rar

Y es que no me funciona :(.

Ya cambie la frecuencia del cristal, que seria 40MHz con el PLL. pero no me corre se que hay que hacer otra cosa, o definitivamente no se puede con 10MHz. :?

Desconectado LABmouse

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Proyecto con PIC18F y USB, mejor VB o VC++???
« Respuesta #8 en: 28 de Diciembre de 2006, 16:41:15 »
Sale lo siguiente


Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 912
    • Mexchip
Re: Proyecto con PIC18F y USB, mejor VB o VC++???
« Respuesta #9 en: 29 de Diciembre de 2006, 15:00:00 »
me quedo con el VC#, Hoy por hoy es el mas potente y es relativamente sencillo de empezar a programar, si tuviera que ordenarlos por dificultad, creciente, de programación: VB y Delphi, VC# y VC++
C++ es el lenguaje más potente de todos ellos, pero no el más fácil. VB está muy bien puesto que no es difícil aprender a manejarlo.

Saludos,
JJ (Geo).
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado ma4826

  • PIC16
  • ***
  • Mensajes: 130
Re: Proyecto con PIC18F y USB, mejor VB o VC++???
« Respuesta #10 en: 29 de Diciembre de 2006, 21:15:25 »
Hola PICMouse,

Creo que no es posible usar un cristal de 10MHz, en la tabla 2-3 del datasheet dice que los valores validos son 4, 8, 12, 16, 20, 24, 40 y 48 MHz.

Saludos.
万人の友は誰の友でもない。

Desconectado 5GTT

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 915
Re: Proyecto con PIC18F y USB, mejor VB o VC++???
« Respuesta #11 en: 02 de Enero de 2007, 00:57:06 »
Respecto a todos los que temen a Visual C++, decirles que busquen informacion de las mfc (microsoft foundation classes), con ellas haces una aplicacion de ventanas en 15 segundos, luego que funcionen los botones no es mas dificil que con cualquier otro lenguaje. A mi personalmente es el que mas me ha gustado de los pocos lenguajes que he probado. Tambien es que empece con el por obligacion, no pude elegir xD pero al final me ha acabado gustando.

Respecto al proyecto de J1M, yo lo migre a VC++ si lo quieres, hice una clase que utiliza la libreria de microchip y que me vale para todo proyecto que hago con USB, no he vuelto a escribir una sola linea de codigo sobre USB nunca mas, salvo enviarpaquete() y recibirpaquete().

Saludos.

Tutoriales y proyectos de electrónica

Desconectado LABmouse

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Proyecto con PIC18F y USB, mejor VB o VC++???
« Respuesta #12 en: 09 de Enero de 2007, 12:29:09 »
Gracias ma4826. Ese dato no lo sabia.  :-)

Desconectado deox

  • PIC10
  • *
  • Mensajes: 16
Re: Proyecto con PIC18F y USB, mejor VB o VC++???
« Respuesta #13 en: 16 de Marzo de 2007, 02:57:45 »
Hay algo muy molesto en todo esto del usb, digamos que uno quiere implementar su propio driver, no una clase HID, entonces hay que usar la DLL que MCHIP te da, asi cerrada sin posibilidades de cambiar o utilizar el DDK de XP sin saber por donde empezar.
La verdad que en el 90% de los proyectos veo que se usa el driver HID, cosa que es poco practica, teclados y josticks ya hay muchos, creo que la mayoria de nosotros tiene en mente cosas mas interesantes.
Dado que todas las rutinas de bajo nivel estan adentro de la DLL creo que conviene usar visual basic, pero como ya es obsoleto hay que usar .net con los malditos marshallers y esas cosas de interop para que el managed code de .net pueda hablar con la DLL echa en C o dios sabe que pero seguro que hay que lidiar con muchas idas y vueltas.
Un compilador que siempre me gusto es el LCC-WIN32 y el PELLEC, ambos son compiladores C.
Las MFC tienen una gran desventaja, MS no le va a dar mucho soporte de aca en mas, sobre todo en windows Vista donde la framework opera en managed code, MFC ya es parte del pasado, ademas hay que cargar con la DLL a todos lados y en el mejor de los casos compilar estaticamente y hacer un exe de 5 megas con 300 dependencias.
Osea en pocas palabras conviene usar C# o .NET no por que sea mejor sino por que en windows vista y en el futuro de windows, VC y VB no existen mas...
Por otro lado la opcion de linux con GCC y LIBUSB es simple y prolija, LIBUSB es compatible entre windows y unix, una buena opcion para los que quieren sacar mas jugo.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Proyecto con PIC18F y USB, mejor VB o VC++???
« Respuesta #14 en: 16 de Marzo de 2007, 12:51:22 »
Gracias deox por tu post.

No has hecho más que alimentar más mi idea de que Microsoft hace cosas para que uno deba rehacer todo cada vez! Con cada nuevo windows uno da 3 pasos para atras, y se encuentra desnudo en medio de un desierto...

En fin, me dan más ganas de usar linux !
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything