TODOPIC

Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: jfh900 en 11 de Octubre de 2008, 10:03:02

Título: MatLab y USB
Publicado por: jfh900 en 11 de Octubre de 2008, 10:03:02
Necesito para un proyecto de investigación realizar la conexión entre MatLab en un portátil y un sistema de adquisición de datos mediante un PIC o dsPic, ¿Alguien a trabajado este punto y a conseguido la comunicación que no sea por emulación de un puerto serie RS232?.
Título: Re: MatLab y USB
Publicado por: Modulay en 11 de Octubre de 2008, 10:32:12
Creo que matlab implementa funcionalidad VISA, que es un estándar para sistemas de instrumentación.
Yo hice funcionar el usb del pic bajo VISA,pero en labview.
Título: Re: MatLab y USB
Publicado por: J1M en 26 de Octubre de 2008, 09:15:02
Jesús te dejo aquí este link, no lo he utilizado nunca pero creo que es lo que necesitas:

http://www.codeproject.com/KB/DLL/MatlabGenericDll.aspx?df=100&forumid=26247&exp=0&select=972623

un saludo!
Título: Re: MatLab y USB
Publicado por: Geo en 30 de Octubre de 2008, 14:09:55
Yo lo intenté con las funciones de MATLAB para cargar DLLs, sin embargo, no conseguí hacerlas funcionar :S.
Si alguien tiene éxito me gustaría lo comentara, y si no, este fin de semana me daré un tiempo para volver a intentar :).
Título: Re: MatLab y USB
Publicado por: jfh900 en 30 de Octubre de 2008, 14:47:07
¿que librería intentaste usar?

Un saludo
Título: Re: MatLab y USB
Publicado por: Geo en 30 de Octubre de 2008, 16:22:33
La DLL MCHPUSB de Microchip, la versión anterior (no la que incluye soporte para Windows Vista), la que está compilada con Borland C, y también una que encontré compilada con VC.
Título: Re: MatLab y USB
Publicado por: jfh900 en 31 de Octubre de 2008, 13:43:39
Alguien tiene los fuentes de la librería mpusbapi.dll, ya que no consigo que funcione adecuadamente en MatLab y necesito ver que ocurre en el interior de la librería.

Un saludp
Título: Re: MatLab y USB
Publicado por: J1M en 01 de Noviembre de 2008, 09:17:55
Están aquí Jesús:

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2651&param=en534494

un saludo!
Título: Re: MatLab y USB
Publicado por: jfh900 en 01 de Noviembre de 2008, 10:25:04
Gracias Jaime por la respuesta, cada día esta uno más cegato.

Un saludo
Título: Re: MatLab y USB
Publicado por: cerebro en 01 de Noviembre de 2008, 13:15:07
hola... 
Yo lo intenté con las funciones de MATLAB para cargar DLLs, sin embargo, no conseguí hacerlas funcionar :S.
Si alguien tiene éxito me gustaría lo comentara, y si no, este fin de semana me daré un tiempo para volver a intentar :).
yo he podido usar unas dll que habia creado por VC++ sin ningun problema con MatLab para comunicarme con otro programa, que paso con las mpusbapi.dll...?
ahora que me acuerdo MatLab trabaja con C, las mpusbapi hay que cargar de archivo cabecera el la _mpusbapi.h (la que contiene al principio de las funciones extern "C" __declspec(dllexport)
) que son las que permiten trabajar en c.
Saludos
Título: Re: MatLab y USB
Publicado por: jfh900 en 01 de Noviembre de 2008, 14:24:15
El fichero _mpusbapi.cpp con la versión 1.1.0.0 si he conseguido su fuente, pero el fichero de cabecera _mpusbapi.h no lo tengo.

Un saludo
Título: Re: MatLab y USB
Publicado por: cerebro en 01 de Noviembre de 2008, 14:54:37
aca esta... pero la version 1.00 hay que modificarlo  si es que cambiaron los parametros de las funciones o agregaron funciones en la nueva version...
 saludos  :)
Título: Re: MatLab y USB
Publicado por: PalitroqueZ en 01 de Noviembre de 2008, 14:56:39
Jesús, tienes que ver en el manual del Matlab cuál convención de llamada acepta, si es _cdecl ó _stdcall

(si es _stdcall, tendrás que recompilar la dll a esa convención)

Título: Re: MatLab y USB
Publicado por: PalitroqueZ en 01 de Noviembre de 2008, 15:01:03
Aquí hay una respuesta en concreto:

http://www.mathworks.com/support/solutions/data/1-6OQ8YF.html
Título: Re: MatLab y USB
Publicado por: cerebro en 01 de Noviembre de 2008, 15:11:52
yo a las funciones de mi libreria las declare como ejemplo una
Código: [Seleccionar]


BOOL WINAPI DllMain(HANDLE hModule,
                        DWORD  fdwReason,
                        LPVOID lpReserved ){

// Perform actions based on the reason for calling.
    switch( fdwReason )
    {
    case DLL_PROCESS_ATTACH: 
        // Initialize once for each new process.
        // Return FALSE to fail DLL load.         
        connection=new ModaCPP::Connection(true);
       
        break;

     case DLL_PROCESS_DETACH:       
        // Perform any necessary cleanup.
delete connection;
        break;   
    }

 
        return TRUE;
} // funcion main que tienen todas las dll o puede tener otro nombre...



// y asi declare las funciones

extern "C" __declspec(dllexport) void desconectar();




extern "C" __declspec(dllexport) void desconectar(){

connection->Disconnect();
   
}

asi como estan esta funcionando mi dll con matlab por supuesto que tiene otras funciones...
Título: Re: MatLab y USB
Publicado por: jfh900 en 01 de Noviembre de 2008, 15:25:31
Así es como las he declarado y funcionan las dos funciones que están en el fichero:

DWORD cdecl _MPUSBGetDLLVersion();
DWORD cdecl _MPUSBGetDeviceCount(char * pVID_PID);


Un saludo
Título: Re: MatLab y USB
Publicado por: cerebro en 01 de Noviembre de 2008, 17:40:31
parece que pali tenia razon....  era mas sencillo  y todo :o


te pregunto jesus, vos compilaste de nuevo la dll y con que programa lo hiciste? :?  :)
Título: Re: MatLab y USB
Publicado por: Geo en 03 de Noviembre de 2008, 02:54:29
Ah, tú creaste una DLL extra, eso hice yo también y pude con éxito. Nadamás que hice dos separadas: una para enviar (usb_send) y otra para recibir (usb_read), las compilé en VC++.
Sin embargo, cuando dije que no pude usar la biblioteca en MATLAB  yo me refería a cargar directamente  la mchpusb.dll (sin crear otra librería).
Título: Re: MatLab y USB
Publicado por: jfh900 en 03 de Noviembre de 2008, 18:45:21
Así es como las he declarado y funcionan las dos funciones que están en el fichero:

DWORD cdecl _MPUSBGetDLLVersion();
DWORD cdecl _MPUSBGetDeviceCount(char * pVID_PID);


Un saludo

Estas funciones (las de la cita) las he cargado en MatLab directamente desde la librería  mpusbapi.dll y han funcionado perfectamente. Me devuelve la versión y si conecto un dispositivo de microchip también me lo detecta.

Un saludo
Título: Re: MatLab y USB
Publicado por: Geo en 04 de Noviembre de 2008, 05:18:42
Entonces volveré a probar :), a ver si encuentro mis apuntes y veo qué hice mal, muchas gracias :D.
Título: Re: MatLab y USB
Publicado por: cerebro en 29 de Diciembre de 2008, 14:31:14
buenas, se me ocurrio trabajar directamente con la mpusbapi directamente desde MatLab, asi como a jesus me funcionan las mismas funciones  pero el problema esta al tratar de leer o escribir algo usando las funciones read o write, se me ocurre que no las estoy llamando como corresponde o que puede haber un conflicto en el tipo de variable ya que no ocurre ningun cambio(como que no se estableciera bien la comunicacion)...  les muestro el codigo (supuestamente se comunica usb con un 18f4550 y prende y apaga unos leds)

Código: [Seleccionar]
clear all;
close all;
clc;


% Matlab primero debe cargar las librerias donde estan programadas las
% funciones

loadlibrary('mpusbapi.dll','_mpusbapi.h');   % Carga de la libreria
 




libisloaded mpusbapi
libfunctions('mpusbapi', '-full')
pause;


vid_pid_norm_c='vid_04d8&pid_0011';
out_pipe_c=('\\MCHP_EP1');
in_pipe_c=('\\MCHP_EP1');

vid_pid_norm = libpointer('voidPtr',[uint32(vid_pid_norm_c) 0]);
out_pipe = libpointer('voidPtr',[uint32(out_pipe_c) 0]);
in_pipe = libpointer('voidPtr',[uint32(in_pipe_c) 0]);


% uint32 myOutPipe;
% uint32 myInPipe;

calllib('mpusbapi','MPUSBGetDLLVersion')
while(calllib('mpusbapi','MPUSBGetDeviceCount',vid_pid_norm)==0 )
[a,b]=calllib('mpusbapi','MPUSBGetDeviceCount',vid_pid_norm)
end

while(1)

send_buf=[1 1];
   
[myOutPipe,a,b]=calllib('mpusbapi','MPUSBOpen',0,vid_pid_norm,out_pipe, 0, 0)
[myInPipe,a,b]=calllib('mpusbapi','MPUSBOpen',0,vid_pid_norm,in_pipe, 1, 0);


bufer=libpointer('voidPtr');
int8 len;len =3
lent=libpointer('voidPtr',len);

calllib('mpusbapi','MPUSBWrite',myOutPipe, send_buf,len , lent, 0)

pause

send_buf=[1 2];

calllib('mpusbapi','MPUSBWrite',myOutPipe, send_buf, len, lent, 0)
%[uint32, voidPtr, voidPtr, voidPtr] MPUSBWrite(voidPtr, voidPtr, uint32, voidPtr, uint32)

pause


calllib('mpusbapi','MPUSBClose',myOutPipe);
calllib('mpusbapi','MPUSBClose',myInPipe);
end

me llama la atencion que send_buf tiene que ser un uint32 y no un puntero como esperaria....
Saludos  :mrgreen:

Título: Re: MatLab y USB
Publicado por: jfh900 en 29 de Diciembre de 2008, 18:50:37
Yo tengo solucionado el problema de la comunicación entre el USB y Matlab, el problema es que es parte de un proyecto de investigación y posiblemente publiquemos el código (estaría disponible para todo el mundo), en caso de no ser así pondré el código aquí.

Un saludo
Título: Re: MatLab y USB
Publicado por: cerebro en 31 de Diciembre de 2008, 01:46:17
hola jesus  :) estoy ansioso por ver como los has resuelto... yo estube revolviendo la ayuda de matlab y me encontre con la razon por la cual mi codigo no funciona  "The ability to use shared library functions that have function pointer inputs is not available in MATLAB. There is no way to write a MATLAB function that is compatible with a C function pointer."...
Tendre que correr para otro lado  :lol:
Título: Re: MatLab y USB
Publicado por: washi_w_z_r en 24 de Julio de 2009, 19:45:38
hola amigos : lei atentamente este tema, yo tambien estoy probanso la conex entre matlab y pic18f4550,  yo estube creando un GUI , pero lo mas importante esta en este cod que les dejo esta desarrollado en MATLAB r2008 y no he tenido problema en conectarme , inclusive recibe datos del pic  eh aqui mi prog:
Código: Matlab M
  1. %////////////////////////////////////////////////////////////////////////%
  2. %/// CONEXION USB MATLAB MEDIANTE LA LIBRERIA MPUSBAPI,DLL            ///%
  3. %/// SOFTWARE QUE NOS PERMITE RECIBIR DATOS DESDE EL ADC DEL PIC      ///%
  4. %/// 18F4550 Y ANALIZAR LA ONDAS FOTOPLETISMOGRAFICAS                 ///%
  5. %///                CUSCO-PERU-2009                                   ///%
  6. %////////////////////////////////////////////////////////////////////////%
  7. %NOMBRAMOS A NUESTRO PROYECTO Conex_USB_1
  8. function Conex_USB_1
  9. %INCIALIZAMOS Y ESCONDEMOS EL GUI CREADO
  10. f = figure('Visible','off','Position',[310,50,450,285]);
  11.  
  12. %DEFINIMOS CONTROLES ABRIR-CERRAR PUERTO
  13.         %ABRIMOS CONEXION
  14.          hAbrirConex = uicontrol('Style','pushbutton',...
  15.              'String','Abrir','Enable','off','Position',[15,220,70,25],...
  16.              'Callback',{@AbrirConexButton_Callback});
  17.         %CERRAMOS CONEXION
  18.          hCerrarConex = uicontrol('Style','pushbutton',...
  19.              'String','Cerrar','Enable','off','Position',[15,150,70,25],...
  20.              'Callback',{@CerrarConexButton_Callback});
  21.         %CERRAMOS LIBREIA PARA EVITAR ERRORES
  22.          hCerrarLib = uicontrol('Style','pushbutton',...
  23.              'String','Cerrar Lib','Enable','off','Position',[15,90,70,25],...
  24.              'Callback',{@CerrarLibButton_Callback});
  25.         %CERRAMOS LIBREIA PARA EVITAR ERRORES
  26.          hRecibeADCRojoAC = uicontrol('Style','pushbutton',...
  27.              'String','ADC ROJO AC','Enable','off','Position',[150,220,70,25],...
  28.              'Callback',{@RecibeADCRojoACButton_Callback});
  29.          %ALINEAMOS LOS BOTONES        
  30.          align([hAbrirConex,hCerrarConex],'Center','None');
  31.  
  32.          %HACEMOS EL GUI VISIBLE
  33.          set(f,'Visible','on')
  34.  
  35.          %CAMBIAMOS LA NORMALIZACXION DE LOS COMPONENTES
  36.          set([f,hAbrirConex,hCerrarConex],'Units','normalized');
  37.  
  38.  %//////////////////////////////////////////////////////////////////////%
  39.  %///    CARAGMOS LA LIBRERIA MPUSBAPI                               ///%
  40.  %//////////////////////////////////////////////////////////////////////%
  41.  
  42.  %CARGAMOS LA LIBRERIA MPUSBAPI
  43.  loadlibrary mpusbapi _mpusbapi.h alias libreria
  44.  libisloaded libreria
  45.  
  46.  %DECLARANDO VECTORES DE DATOS
  47.  data_in = eye(1,64,'uint8');       % El que se recibe del PIC
  48.  data_out = eye(1,3,'uint8');      % El que se envia al PIC
  49.  
  50.  %DECALARANDO VID-PID DEL PIC18F4550
  51.  vid_pid_norm = libpointer('int8Ptr',[uint8('vid_04d8&pid_0052') 0]);
  52.  out_pipe = libpointer('int8Ptr',[uint8('\MCHP_EP1') 0]);
  53.  in_pipe = libpointer('int8Ptr',[uint8('\MCHP_EP1') 0]);
  54.  
  55.  %REALIZAMOS  CONTEO DE DISPOSITIVOS
  56.  calllib('libreria','MPUSBGetDLLVersion');
  57.  [conectado] = calllib('libreria','MPUSBGetDeviceCount',vid_pid_norm)
  58.  
  59.  %PREGUNTAMOS SI LA CONEX SE REALIZO
  60.  %SI ES ASI HABILITAMOS EL BOTON ABRIR CONEX
  61.     if conectado == 1
  62.         set(hAbrirConex,'Enable','on');
  63.     end
  64.    
  65. %/////////////////////////////////////////////////////////////////////////%
  66. %///                    FUNCIONES DE LOS BOTONES                       ///%
  67. %/////////////////////////////////////////////////////////////////////////%
  68. %CREAMOS FUNCIONES PARA CONTORLAR EL ENVIO Y RECEPCION DE DATOS
  69.  function AbrirConexButton_Callback(source,eventdata)
  70.      set(hCerrarConex,'Enable','on');
  71.      set(hAbrirConex,'Enable','off');
  72.      set(hRecibeADCRojoAC,'Enable','on');
  73.      % ABRIMOS EL PIPE DE CONEXION
  74.      [my_out_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, out_pipe, uint8(0), uint8 (0));
  75.      % SE ENVIA DATO AL PIC
  76.      calllib('libreria', 'MPUSBWrite',my_out_pipe, data_out, uint8(64), uint8(64), uint8(10));
  77.  end
  78.  
  79. %FUNCION CERRAR LOS PIPES DDE COMUNICACION
  80.  function CerrarConexButton_Callback(source,eventdata)
  81.      set(hAbrirConex,'Enable','off');
  82.      set(hCerrarConex,'Enable','off');
  83.      set(hCerrarLib,'Enable','on');
  84.      [my_out_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, out_pipe, uint8(0), uint8 (0)); % Se abre el tunel de envio
  85.      calllib('libreria', 'MPUSBClose', my_out_pipe); % Se cierra el tunel de envio
  86.     %calllib('libreria', 'MPUSBClose', my_in_pipe); % Se cierra el tunel de envio
  87.      libisloaded libreria
  88.  end
  89.  
  90. %CERRAMOS LAS LIBRERIAS _mpusbapi.h y mpusbapi.dll PARA EVITAR ERRORES
  91.  function CerrarLibButton_Callback(source,eventdata)
  92.      set(hAbrirConex,'Enable','off');
  93.      set(hCerrarConex,'Enable','off');
  94.      unloadlibrary libreria
  95.      libisloaded libreria
  96.  end
  97.  
  98. %CERRAMOS LAS LIBRERIAS _mpusbapi.h y mpusbapi.dll PARA EVITAR ERRORES
  99.  function RecibeADCRojoACButton_Callback(source,eventdata)
  100.      set(hAbrirConex,'Enable','off');
  101.      set(hCerrarConex,'Enable','off');
  102.       % ABRIMOS EL PIPE DE CONEXION
  103.      [my_out_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (1), vid_pid_norm, out_pipe, uint8(0), uint8 (0));
  104.      % ENVIAMOS PETICON AL PIC
  105.      calllib('libreria', 'MPUSBWrite',my_out_pipe, data_out, uint8(64), uint8(64), uint8(10));
  106. %     for n=0:10
  107.      % RECIBIMOS DATOS DEL PIC
  108.      [my_in_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, in_pipe, uint8 (1), uint8 (0));
  109.      [aa,bb,data_in,dd] = calllib('libreria', 'MPUSBRead',my_in_pipe, data_in, uint8(10), uint8(10), uint8(0));
  110.      data_in(1)
  111.      data_in(2)
  112.      data_in(3)
  113.      data_in(4)
  114.      data_in(5)
  115.      data_in(5)
  116.      data_in(6)
  117.      data_in(7)
  118.  %    end
  119.  end
  120. end

Bueno aunque no esta terminado, les dara algunas luces ,si no encuentra la liberia mpusbapi ,no habilitara el boton "ABRIR" solo cuando encuentre la libreria podran usar el botob "ABRIR".
El prog envia una orden y apaga el led cuando aprieto el boton "ABRIR", asi mismo cuando aprieto el boton "RecibeADCRojoACButton" envia datos almacenados en el pic, ya que posteriormente habilitare el ADC para envio masivo de datos.

Saludos , y espero publicar muy pronto el prog completo.

Título: Re: MatLab y USB
Publicado por: Quelo en 23 de Septiembre de 2009, 14:35:44

Buenas a todos, yo estoy instentando desarrollar un sistema de control, para el cual necesito poder conectarme con un 18f4550 y el matlab. actualemente tengo el matlab R14 y las librerias de microchip no me funcionan (mpusbapi.dll y las cabeceras).
Puede ser que este problema sea porque la version del matlab que tengo no sirve (he leido que a la gente que le sirvio utilizo matlab r2008)??

desde ya gracias a todos de antemano.

Ezequiel
Título: Re: MatLab y USB
Publicado por: cerebro en 23 de Septiembre de 2009, 15:26:20
Si te sirve lo podes trabajar por usb CDC y te va a ser muchísimo más fácil. En el foro hay ejemplos de USB CDC  y no vas a tener problemas con Matlab para trabajarlo como serie.

Saludos  ;-)
Título: Re: MatLab y USB
Publicado por: Quelo en 23 de Septiembre de 2009, 18:32:54
Si te sirve lo podes trabajar por usb CDC y te va a ser muchísimo más fácil. En el foro hay ejemplos de USB CDC  y no vas a tener problemas con Matlab para trabajarlo como serie.

Saludos  ;-)

gracias por la respuesta, pero una duda que tengo.
como hago para que el matlab me reconozca a la conexion usb como serial??
yo con puerto seria haria obj=serial('com1') y empiezo a trabajar con el objeto, pero como reconozco al vid_pid con las instrucciones serie.

gracias de antemano

ezequiel
Título: Re: MatLab y USB
Publicado por: cerebro en 23 de Septiembre de 2009, 19:41:02
Matlab ni se entera que es USB  :lol:

fijate aca

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

 Cuando conectas el USB automaticamente se crea un puerto serie virtual y es el SO se encarga de eso. Cuando te funcione el USB CDC lo único que le tenes que indicar a MatLab es cual es el puerto virtual (justamente el 'com1' o el que sea) podes fijarte en el administrador de hardware.
 También si estas utilizando CCS podes mirar sus ejemplos.
 Te queda hacer las pruebas pero creeme que es más sencillo utilizar USB CDC y hasta incluso más veloz.   

Saludos  ;-)
Título: Re: MatLab y USB
Publicado por: Quelo en 24 de Septiembre de 2009, 11:37:28
Matlab ni se entera que es USB  :lol:

fijate aca

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

 Cuando conectas el USB automaticamente se crea un puerto serie virtual y es el SO se encarga de eso. Cuando te funcione el USB CDC lo único que le tenes que indicar a MatLab es cual es el puerto virtual (justamente el 'com1' o el que sea) podes fijarte en el administrador de hardware.
 También si estas utilizando CCS podes mirar sus ejemplos.
 Te queda hacer las pruebas pero creeme que es más sencillo utilizar USB CDC y hasta incluso más veloz.   

Saludos  ;-)

//codigo CCS

#include <18F4550.h>

 #fuses XTPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN
 #use delay(clock=48000000)
 
 #include <usb_cdc.h>
 
    set_tris_d(0x00);
    usb_cdc_init();
       
    usb_init();
 
   
    while(!usb_cdc_connected())
   {
   
       output_high(PIN_D2);
   }
 
    // Dispositivo reconocido
   // Ciclo principal
   
    while(TRUE)
   {
        output_high(PIN_D3);
       
   }
}

he copiado exactamente tu codigo, pero sin la parte del adc, y utilizo los pines d1, d2, d3 como puntos de testo. y el pin d2 nunca muestra actividad (tampoco el d3, si el d1). lo que concluyo es que no me conecta a la pc (el administrador de hardware tampoco me reconoce nada, me lo toma como usb device) y no entiendo porque.
uso pll5 porque tengo crsital de 20mhz

muchas gracias de antemano
Título: Re: MatLab y USB
Publicado por: cerebro en 24 de Septiembre de 2009, 15:46:16
bueno puede que el problema este en hardware tendrías que mostrarnos tu esquemático. pero antes de hacer eso en los FUSES si estas usando 20Mhz corresponde que utilices HSPLL en lugar de XTPLL.

Saludos  ;-)
Título: Re: MatLab y USB
Publicado por: MLO__ en 24 de Septiembre de 2009, 23:06:25
O si el cristal que estas usando es de 4MHz, entonces cambia a PLL1
Título: Re: MatLab y USB
Publicado por: fidodido18 en 25 de Septiembre de 2009, 01:24:42
yo he trabajado con matlab y el puerto serial y es muy facil! busca en la ayuda de matlab "serial port" y listo ahi aparece todo, tambien en youtube hay unos videos explicativos. El PIC simula un puerto COM y por lo tanto va creer que es un puerto tipo serial.

la verdad no es para nada complicado solo necesita algo de dedicacion, solo tengo una recomendacion si vas a graficar guarda lo que llega al PC en un bufer, luego realiza el ploteo y despues dale un pause para que grafique. IMPORTANTE si no le das un pause al final y estas en un ciclo infinito la PC no grafica sino cuando ocurre un error o paras el programa intencionalmente.
Título: Re: MatLab y USB
Publicado por: migsantiago en 25 de Septiembre de 2009, 13:05:29
Cuando yo trabajo el PIC en modo USB CDC y recién conecto el PIC a un puerto USB nuevo, Windows siempre me pide el driver para instalarlo. El ejemplo de CCS trae el driver para que Windows lo instale.

Me han dicho que el CDC normalmente no pide driver, pero en mi caso sí lo hace.
Título: Re: MatLab y USB
Publicado por: MLO__ en 25 de Septiembre de 2009, 14:53:20
Hola.

El que no pide driver es el USB clase HID (teclado o mouse), la clase CDC siempre va a pedir el driver, pues, cuando lo instalamos por primera vez

Saludos
Título: Re: MatLab y USB
Publicado por: cerebro en 25 de Septiembre de 2009, 14:57:36
Cuando yo trabajo el PIC en modo USB CDC y recién conecto el PIC a un puerto USB nuevo, Windows siempre me pide el driver para instalarlo. El ejemplo de CCS trae el driver para que Windows lo instale.

Me han dicho que el CDC normalmente no pide driver, pero en mi caso sí lo hace.
si a mi también siempre me ha pedido el driver pero suele reconocerlo como USB CDC y no como ? usb device. Creo que utilice uno de Microchip Solution o uno que venia en Proteus en un ejemplo  :?.  
Título: Re: MatLab y USB
Publicado por: Quelo en 26 de Septiembre de 2009, 12:08:49

Gente:

Acabo de descubrir que el Matlba 7 (R14) tiene problemas con las mpusbapi.dll, el matlab las cacha pero no puede ejecutarles.
Instale el matlab r2008a y salio funcionando todo con fritas.
Espero que les sirva.

saludos
Ezequiel
Título: Re: MatLab y USB
Publicado por: cerebro en 26 de Septiembre de 2009, 12:37:55
 :shock: yo estoy utilizando la versión 7 (R14),.... muchas gracias buen dato  ;-)
Título: Re: MatLab y USB
Publicado por: PalitroqueZ en 26 de Septiembre de 2009, 12:51:21
Cuando yo trabajo el PIC en modo USB CDC y recién conecto el PIC a un puerto USB nuevo, Windows siempre me pide el driver para instalarlo. El ejemplo de CCS trae el driver para que Windows lo instale.

Me han dicho que el CDC normalmente no pide driver, pero en mi caso sí lo hace.

una pequeña observación, la clase CDC no necesita de drivers en windows, el driver ya viene integrado (porque forma parte del sistema operativo), lo que se necesita es el archivo instalador .inf para que el windows pueda asociar el dispositivo a la clase correspondiente.

si miran dentro de mchpcdc.inf notaran que se hace mención de MsPorts.dll, esta dll se encuentra por defecto en system32

de hecho lo que se hace con mchpcdc.inf es asociar el dispositivo usb como una clase ports COM (en class port hay 3 tipos de puertos: COM, LPT y ECP)

http://msdn.microsoft.com/en-us/library/dd163213.aspx


Título: Re: MatLab y USB
Publicado por: MLO__ en 26 de Septiembre de 2009, 13:16:55
Ah!!!!

Muy buen dato, casi siempre digo driver.

Saludos
Título: Re: MatLab y USB
Publicado por: migsantiago en 26 de Septiembre de 2009, 18:06:52
Ah OK Pedro, gracias por la corrección.
Título: Re: MatLab y USB
Publicado por: yabo2005 en 24 de Junio de 2010, 13:22:58
Saludos a toda la comunidad, escribo por lo siguiente estoy estableciendo una comunicacion USB tipo CDC para emular un puerto COM virtual y poder hacer una comunicacion usb entre el pic 18F4550 y Matlab, hasta ahor puedo enviar y recibir datos sin problema, la cuestion es que cuando reinicio el PIC o lo saco para Reprogramarlo e intento nuevamente conectar el PIC me aparece el siguiente error en matlab:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
?? Error using ==> serial.fopen at 72
Port: COM7 is not available. Available ports: COM7.
Use INSTRFIND to determine if other instrument objects are connected to the requested
device.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Aparentemente matlab no cierra el puerto a pesar de que uso las intrucciones adecuadas que recomienda matlab para el uso del puerto serie
No se si tengo algun error en el codigo de matlab o del pic, Aca los subo ambos codigos.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Codigo Matlab
%Programa de prueba para enviar y recibir datos desde un puerto serial
%virtual, se usa conexion USB tipo CDC para emular un puerto serial virtual
%ABRIR el puerto COM&
clc;
clear all;
close all;

%% FUNCION PARA RECIBIR DATOS CONTINUAMENTE
out = 0;


disp('BEGIN')
clear SerPIC
instrumentObjects=instrfind  % don't pass it anything - find all of them.
%fclose(instrumentObjects);
delete(instrumentObjects);
SerPIC = serial('COM7');
set(SerPIC,'BaudRate',9600);
set(SerPIC,'DataBits',8);
set(SerPIC,'Parity','none');
set(SerPIC,'StopBits',1);
set(SerPIC,'FlowControl','none');

while out~= 15
%% Recibir Informacion por el puerto Serie
fopen(SerPIC);
out = fread(SerPIC,1,'uint8')
%CERRAR el puerto COM6 al finalizar
fclose(SerPIC);
delete(SerPIC);

clear SerPIC ;
disp('STOP');
end

%% Enviar informacion por el puerto
fopen(SerPIC); % Se abre el puerto serie virtual Com7
pause(0.2);
% En el microcontroaldor se recibe el numero en tipo char y luego lo
% convierte de codigo ASCII  a entero.
for i=1:15  % la variable i no puede sobrepasar 255 que es el numero maximo de digitos en el codigo ASCII
unicodestr = native2unicode(i); % Convierte el entreo i (0 a 255) a codigo ASCII
fprintf(SerPIC,'%c',unicodestr);% El codigo Asci se envia como char 
pause(0.2);
%fopen(SerPIC);
%data = uint8(fscanf(SerPIC,'%c',[1]))
out = fread(SerPIC,1,'uint8')
%out = fscan(SerPIC)
end
%CERRAR el puerto COM7 al finalizar
fclose(SerPIC);
delete(SerPIC)
clear SerPIC
disp('STOP')
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
////                                                                 ////
//// RR2_USB_Cdc_Monitor.c                            ////
//// CDC = Comunication Devide Class              ////
/////////////////////////////////////////////////////////////////////////

#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)


//#include ".\include\usb_cdc.h"
#include "usb_cdc.h"
#include "rr2_USB_Cdc_Monitor.h"


#define LEDV    PIN_E0   // asignacion pin al led verde que indica que el dispositivo ha sido detectado
#define LEDR    PIN_E1   //  // asignacion pin al led rojo que indica que el dispositivo no ha sido detectado
#define LED_ON  output_high  // definicion constante para el llamado de las funciones de prender y apagar los leds
#define LED_OFF output_low


//#rom int 0xf00000={1,2,3,4}

int8 cont_p=9, conteo=0,menu=0,num;
//int8 letra;
char letra;
char c,d;


void config_micro(void);
void leer(void);
int aschex2int(char d);

void main(void) {
   
   config_micro();   // configura parametros iniciales del microcontrolador
   LED_OFF(LEDV); // pilotos que indican la conexion                 
   LED_ON(LEDR);                       
   delay_ms(300);
   usb_cdc_init();  // se inicializa la conexion usb en modo CDC (puerto virtual com)
   usb_init();       // inicia la conexion usb

   
   
while (!usb_cdc_connected()) {}// si no esta conectado no hace nada
        while (true)
        {
        usb_task();
            if(usb_enumerated())
            {
             LED_OFF(LEDR);                    // si esta conectadose enciende led verde y  se apaga el led rojo
             LED_ON(LEDV);                    //                                       
                if (usb_cdc_kbhit())
                {
                    c = usb_cdc_getc();  // Recibe dato desde matlab
                    //num = aschex2int(c);
                    output_d(c);
                   
                }
               // c= (char)c;
               //  usb_cdc_putc(14);
              //***************************************************************************8
              if (input_state(pin_E2)==1)
                 {
                  conteo ++;
                   usb_cdc_putc(conteo); // envia el valor de conteo si presiona pulsador en RE2
                  delay_ms(100);
                 }

            }
              else{
                   LED_OFF(LEDV);                    // si esta desconectado se enciende led rojo y  se apaga el led verde
                   LED_ON(LEDR);                    //                                       
              }
        }

       
 
}

/******************************************************
*
*
*
*
******************************************************/
void config_micro(void){
   
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
     
   set_tris_a(0xff); //configuracion puertoa a de entrada
   set_tris_b(255); // puerto b congfigurado como de salida
   set_tris_d(0x00);// puerto d congfigurado como de salida
   set_tris_e(0x4); // puerto e congfigurado como de salida
   output_d(0);
   output_e(0);
 
   
}
//******************************************************************************




Título: Re: MatLab y USB
Publicado por: fidodido18 en 01 de Julio de 2010, 12:20:51
mira a ver si otro programa esta utilizando el puerto, puede ser el hiperterminal o el mismo proteus..

simula con la ayuda del virtual serial port, a veces manda errores pero es muy bueno!
Título: Re: MatLab y USB
Publicado por: georgegeorge en 29 de Mayo de 2014, 12:48:47

les dejo un tutorial completo

Título: Re: MatLab y USB
Publicado por: georgegeorge en 29 de Mayo de 2014, 12:51:11
Hola muchachos aqui les dejo un link de un tutorial completo sobre el tema


espero que les ayude mucho.....



que esten bien