Autor Tema: MatLab y USB  (Leído 37604 veces)

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

Desconectado jfh900

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: MatLab y USB
« Respuesta #15 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
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: MatLab y USB
« Respuesta #16 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? :?  :)
« Última modificación: 01 de Noviembre de 2008, 18:59:57 por cerebro »
LAS MALVINAS SON ARGENTINAS!

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: MatLab y USB
« Respuesta #17 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).
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 jfh900

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: MatLab y USB
« Respuesta #18 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
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: MatLab y USB
« Respuesta #19 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.
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 cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: MatLab y USB
« Respuesta #20 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:

LAS MALVINAS SON ARGENTINAS!

Desconectado jfh900

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: MatLab y USB
« Respuesta #21 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
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: MatLab y USB
« Respuesta #22 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:
LAS MALVINAS SON ARGENTINAS!

Desconectado washi_w_z_r

  • PIC10
  • *
  • Mensajes: 20
Re: MatLab y USB
« Respuesta #23 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.


Desconectado Quelo

  • PIC10
  • *
  • Mensajes: 4
Re: MatLab y USB
« Respuesta #24 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

Desconectado cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: MatLab y USB
« Respuesta #25 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  ;-)
LAS MALVINAS SON ARGENTINAS!

Desconectado Quelo

  • PIC10
  • *
  • Mensajes: 4
Re: MatLab y USB
« Respuesta #26 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

Desconectado cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: MatLab y USB
« Respuesta #27 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  ;-)
LAS MALVINAS SON ARGENTINAS!

Desconectado Quelo

  • PIC10
  • *
  • Mensajes: 4
Re: MatLab y USB
« Respuesta #28 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

Desconectado cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: MatLab y USB
« Respuesta #29 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  ;-)
LAS MALVINAS SON ARGENTINAS!