PicUSB-Matlab con comunicacion Bulk Transfers USB

Hola tharsis...

Entiendo que no tienes el Hardware con el PIC listo y sólo ejecutaste el archivo de MATLAB, el cual debe de correr sin generar errores. Mi duda es: Las librerias _mpusbapi.h y mpusbapi.dll ... ¿las tienes en la misma carpeta donde ejecutas el archivo de MATLAB? ... el archivo publicado en MATLAB ya fué actualizado el 10 Jul y fueron anexadas más detalles sobre la implementación, sugiero que descargues de nuevo. Espero tus comentarios.
 
Thank you for your reply. Yes, the files mpusbapi.dll and mpusbapi.h are in the same folder than the .m file. The warning messages doesn't come from your matlab script because these warnings appears in the very first command :

[notfound, warnings] = loadlibrary('mpusbapi', '_mpusbapi.h')


It's probably coming from the matlab C compiler. Maybe you're using a different compiler (like Borland) which recognize these variable types.

Anyway, I tried to run your matlab code (the latest version) with a quick made board (I have not implemented your firmware on the PIC). The USB communication seems to work fine even with these warnings since I received data from the PIC. I will keep working on it and I'll let you know if I better understand this "problem". In the meanwhile, if you have some ideas, please let me know...

Thank you again
 
Hola de nuevo tharsis, Una duda ... ¿Qué versión de MATLAB estás utilizando? ... ¿me podrías dar más detalles sobre el error (el número de línea y la instrucción que genera el error)? ... si es posible copia y pega el error que sale en la línea de comandos de MATLAB. Espero tus comentarios.
 
Hi,

I'm using Matlab R2008b (7.7.0). The warnings (not errors, only warnings) are coming from the line 22 and I've got this message :

Warning: Warnings messages were produced while parsing. Check the functions you
intend to use for correctness. Warning text can be viewed using:
[notfound,warnings]=loadlibrary(...)
> In loadlibrary at 381
In usb at 22


Then I run this command to get the warnings:

[notfound, warnings]=loadlibrary('mpusbapi','_mpusbapi.h')


I attached a .txt file containing the warnings.
I Hope it can help...
 

Adjuntos

  • warnings_202.txt
    3.8 KB · Visitas: 87
Hola amigos: lei este post que me ayudo a enlazar matlab con el pic 18f4550, por ello aqui el cod que uso
Código:
%////////////////////////////////////////////////////////////////////////%
%/// CONEXION USB MATLAB MEDIANTE LA LIBRERIA MPUSBAPI,DLL            ///%
%/// SOFTWARE QUE NOS PERMITE RECIBIR DATOS DESDE EL ADC DEL PIC      ///%
%/// 18F4550 Y ANALIZAR LA ONDAS FOTOPLETISMOGRAFICAS                 ///%
%///                CUSCO-PERU-2009                                   ///%
%////////////////////////////////////////////////////////////////////////%
%NOMBRAMOS A NUESTRO PROYECTO Conex_USB_1
function Conex_USB_1
%INCIALIZAMOS Y ESCONDEMOS EL GUI CREADO
f = figure('Visible','off','Position',[310,50,450,285]);

%DEFINIMOS CONTROLES ABRIR-CERRAR PUERTO
        %ABRIMOS CONEXION
         hAbrirConex = uicontrol('Style','pushbutton',...
             'String','Abrir','Enable','off','Position',[15,220,70,25],...
             'Callback',{@AbrirConexButton_Callback});
        %CERRAMOS CONEXION
         hCerrarConex = uicontrol('Style','pushbutton',...
             'String','Cerrar','Enable','off','Position',[15,150,70,25],...
             'Callback',{@CerrarConexButton_Callback});
        %CERRAMOS LIBRERIA PARA EVITAR ERRORES
         hCerrarLib = uicontrol('Style','pushbutton',...
             'String','Cerrar Lib','Enable','off','Position',[15,90,70,25],...
             'Callback',{@CerrarLibButton_Callback});
        %RECIBIMOS DATOS DEL ADC
         hRecibeADCRojoAC = uicontrol('Style','pushbutton',...
             'String','ADC ROJO AC','Enable','off','Position',[150,220,100,25],...
             'Callback',{@RecibeADCRojoACButton_Callback});
         hProcesaRojoAC = uicontrol('Style','pushbutton',...
             'String','PROCESAR ROJO AC','Enable','off','Position',[150,180,100,25],...
             'Callback',{@ProcesaRojoACButton_Callback});
         %CREAMOS EL OBJETO TIMER
         t = timer('TimerFcn',@Timer, 'Period', 10.0);
         %ALINEAMOS LOS BOTONES        
         align([hAbrirConex,hCerrarConex],'Center','None');
         ah = axes('Parent',f,'Position',[.15 .15 .7 .7]);
         %HACEMOS EL GUI VISIBLE
         set(f,'Visible','on')
 
         %CAMBIAMOS LA NORMALIZACXION DE LOS COMPONENTES
         set([f,hAbrirConex,hCerrarConex],'Units','normalized');
 
 %//////////////////////////////////////////////////////////////////////%
 %///    CARGAMOS LA LIBRERIA MPUSBAPI                               ///%
 %//////////////////////////////////////////////////////////////////////%
 
 %CARGAMOS LA LIBRERIA MPUSBAPI
 loadlibrary mpusbapi _mpusbapi.h alias libreria 
 libisloaded libreria
 
 %DECLARANDO VECTORES DE DATOS
 data_in = eye(1,64,'uint8');       % El que se recibe del PIC
 data_out = eye(1,3,'uint8');      % El que se envia al PIC

 %DECALARANDO VID-PID DEL PIC18F4550
 vid_pid_norm = libpointer('int8Ptr',[uint8('vid_04d8&pid_0052') 0]); 
 out_pipe = libpointer('int8Ptr',[uint8('\MCHP_EP1') 0]); 
 in_pipe = libpointer('int8Ptr',[uint8('\MCHP_EP1') 0]);
 
 %REALIZAMOS  CONTEO DE DISPOSITIVOS
 calllib('libreria','MPUSBGetDLLVersion');
 [conectado] = calllib('libreria','MPUSBGetDeviceCount',vid_pid_norm);

 %PREGUNTAMOS SI LA CONEX SE REALIZO
 %SI ES ASI HABILITAMOS EL BOTON ABRIR CONEX 
    if conectado == 1
        set(hAbrirConex,'Enable','on');
    end
    
%/////////////////////////////////////////////////////////////////////////%
%///                    FUNCIONES DE LOS BOTONES                       ///%
%/////////////////////////////////////////////////////////////////////////%
%CREAMOS FUNCIONES PARA CONTORLAR EL ENVIO Y RECEPCION DE DATOS
 function AbrirConexButton_Callback(source,eventdata)
     set(hCerrarConex,'Enable','on');
     set(hAbrirConex,'Enable','off');
     set(hRecibeADCRojoAC,'Enable','on');
     % ABRIMOS EL PIPE DE CONEXION
     [my_out_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, out_pipe, uint8(0), uint8 (0)); 
     % SE ENVIA DATO AL PIC
     calllib('libreria', 'MPUSBWrite',my_out_pipe, data_out, uint8(64), uint8(64), uint8(10)); 
 end

%FUNCION CERRAR LOS PIPES DDE COMUNICACION
 function CerrarConexButton_Callback(source,eventdata)
     set(hAbrirConex,'Enable','off');
     set(hCerrarConex,'Enable','off');
     set(hCerrarLib,'Enable','on');
     [my_out_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, out_pipe, uint8(0), uint8 (0)); % Se abre el tunel de envio
     calllib('libreria', 'MPUSBClose', my_out_pipe); % Se cierra el tunel de envio
    %calllib('libreria', 'MPUSBClose', my_in_pipe); % Se cierra el tunel de envio
     libisloaded libreria
 end

%CERRAMOS LAS LIBRERIAS _mpusbapi.h y mpusbapi.dll PARA EVITAR ERRORES
 function CerrarLibButton_Callback(source,eventdata)
     set(hAbrirConex,'Enable','off');
     set(hCerrarConex,'Enable','off');
     unloadlibrary libreria
     libisloaded libreria
 end

%RECIBIMOS DATOS DEL ADC ROJO
 function RecibeADCRojoACButton_Callback(source,eventdata)
     set(hAbrirConex,'Enable','off');
     set(hCerrarConex,'Enable','on');
     set(hProcesaRojoAC,'Enable','on');
     set(hCerrarLib,'Enable','on');
      % ABRIMOS EL PIPE DE CONEXION
     [my_out_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (2), vid_pid_norm, out_pipe, uint8(0), uint8 (0)); 
     % ENVIAMOS PETICON AL PIC
     calllib('libreria', 'MPUSBWrite',my_out_pipe, data_out, uint8(64), uint8(64), uint8(10)); 
%     for n=0:10
     %DAMOS LA ORDEN PARA QUE EL PIC ENVIE DATOS HACIA LA PC
     [my_in_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, in_pipe, uint8 (1), uint8 (0));
     %RECIBIMOS DATOS PROVENEINTES DEL PIC
     [aa,bb,data_in,dd] = calllib('libreria', 'MPUSBRead',my_in_pipe, data_in, uint8(11), uint8(11), uint8(0));
     data_in(1);
     data_in(2);
     data_in(3);
     data_in(4);
     data_in(5);
     data_in(6);
     data_in(7);
     data_in(8);
     data_in(9);
     data_in(10);
 %    end
 end
%PROCESAMOS DATOS DEL ADC ROJO
 function ProcesaRojoACButton_Callback(source,eventdata)
     Buff_Aux=cell(10,1);
     Buff_Aux{1}=data_in(1)+data_in(2);
     %plot(Buff_Aux)
%     start(t);
    find_system('Name','Prueba1');
    open_system('Prueba1');
    set_param('Prueba1', 'Solver', 'ode3');
    set_param('Prueba1/Constant','Value',Buff_Aux(1));
 end
%TIMER EMPIEZA A REAIZAR TAREA ASIGNADA
 function Timer(source,eventdata)
     %Buff_Aux=cell(10,1);
     %Buff_Aux{1}=data_in(1)+data_in(2);
     %plot(Buff_Aux)
     
     Dato=0:pi/100:2*pi;
     y=sin(Dato);
     plot(Dato,y)
 end
end
Aunque falta mucho para terminar el proy que realizo, estoy investigando como graficar en tiempo real con el matlab , los datos prov del adc del pic18f4550, si alguine tiene una idea le agradecere mucho el interes, saludos a todos. PD: El prog lo realize en GUIDE(progamacion grafica) :cool:
 
hola a todos, sigo probando pero me da el siguiente error al cargar la libreria en Matlab:

Warning: Warnings messages were produced while parsing. Check the functions you
intend to use for correctness. Warning text can be viewed using:
[notfound,warnings]=loadlibrary(...)
> In loadlibrary at 374
In usb at 22

conectado =

0

>>


Gracias...me estoy volviendo medio locooooooo
 
hola washi_w_z_r,

ayer estuve indagando y di con mi problema...fue un despiste con el vendor (VID) en Matlab. Puse el mio que es 0x0011 y solucione el problema.

Por cierto yo estoy haciendo algo parecido a lo que haces tu, pero para un ECG y un acelerometro de tre ejes. Si quieres podemos compartir impresiones. De hecho estoy estudiando tu codigo pq creo que es bastante interesante.

Muchas gracias!
 
hola jagarciauceda, enhorabuena que resolviste tu problema, mira ya consegui hacer esto con el pic:

- Enviar una orden para q se apague y prendan los leds
- Enviar una orden para q el pic me devuelva valores guardados en un arreglo SPO10{12 26 35 4}(este arreglo ta en en pic).
- Implemente un timer para poder graficar los datos que provienen del pic.

Lo mas interesante es lo siguiente:
Cuando pido datos del arreglo al picç, este me envia dato_in(1)=12 y dato_in(2)=26 , entonces intente visualizar en el graficador que hice y bueno los grafica :eek:

Ahhh por ello intente que me envie datos provenientes del pic( ADC) pero me envia dato_in(1)=1, dato_in(2)=0, ? , implemente un boton para q cuando presione dicho boton me devuelva el valor del ADC y lo grafique pero me envia lo mismo...

Aqui te dejo el cod que desarrolle:


Código:
%////////////////////////////////////////////////////////////////////////%
%/// CONEXION USB MATLAB MEDIANTE LA LIBRERIA MPUSBAPI,DLL            ///%
%/// SOFTWARE QUE NOS PERMITE RECIBIR DATOS DESDE EL ADC DEL PIC      ///%
%/// 18F4550 Y ANALIZAR LA ONDAS FOTOPLETISMOGRAFICAS                 ///%
%///                CUSCO-PERU-2009                                   ///%
%////////////////////////////////////////////////////////////////////////%
%NOMBRAMOS A NUESTRO PROYECTO Conex_USB_1
function Conex_USB_1
hAxesRaw = [];
hAxesRojoAC = [];

%DEFINIMOS VARIABLE ADQUISICION_DATO
%Adquisicion_Dato = false;
%hProcesaRojoAC = [];
hRecibeADCRojoAC = [];
Buff_Aux= [1 1 1 ];

%% INCIALIZAMOS Y ESCONDEMOS EL GUI CREADO
f = figure('Visible','off','Position',[310,50,550,485]);%6,'Color',[0 0 0.15]);
%IMPORTAMOS IMAGEN
[x,map]=imread('escudo.jpg','jpg');
%Representamos imagen en figura, con su mapa de colores
image(x),colormap(map),axis off,hold on

%% DEFINIMOS CONTROLES ABRIR-CERRAR PUERTO
        %CREAMOS BARRA DE MENUS
        mAbrir = uimenu(f,'Label','Conex USB');
        Abrir = uimenu(mAbrir,'Label','Abrir',...
            'Callback',{@AbrirMenu_Callback});
        mAnalizar = uimenu(f,'Label','ANALIZAR');
        RojoAC = uimenu(mAnalizar,'Label','ROJO AC',...
            'Callback',{@RojoACMenu_Callback});
        InfrAC = uimenu(mAnalizar,'Label','INFR AC',...
            'Callback',{@InfrACMenu_Callback});
        RojoDC = uimenu(mAnalizar,'Label','ROJO DC',...
            'Callback',{@RojoDCMenu_Callback});
        InfrDC = uimenu(mAnalizar,'Label','INFR DC',...
            'Callback',{@InfrDCMenu_Callback});
        LuzDC = uimenu(mAnalizar,'Label','LUZ DC',...
            'Callback',{@LuzDCMenu_Callback});
        mSPO2 = uimenu(f,'Label','SPO2');
        SPO2 = uimenu(mSPO2,'Label','Abrir',...
            'Callback',{@SPO2Menu_Callback});
        %CREAMOS UN PANEL PARA CONEX USB
        pConexion = uipanel('BorderType','etchedin',...
                    'Parent',f,'Title','CONEX USB',...
                    'Position',[.05 .65 .2 .3]);
        pRojoAC = uipanel('BorderType','etchedin',...
                    'Parent',f,'Title','ROJO AC',...
                    'Position',[.05 .42 .2 .2]); 
        pInfrAC = uipanel('BorderType','etchedin',...
                    'Parent',f,'Title','INFR AC',...
                    'Position',[.05 .42 .2 .2]);
        pRojoDC = uipanel('BorderType','etchedin',...
                    'Parent',f,'Title','ROJO DC',...
                    'Position',[.05 .42 .2 .2]);
        pInfrDC = uipanel('BorderType','etchedin',...
                    'Parent',f,'Title','INFR DC',...
                    'Position',[.05 .42 .2 .2]);
        pLuz = uipanel('BorderType','etchedin',...
                    'Parent',f,'Title','LUZ DC',...
                    'Position',[.05 .42 .2 .2]);
        pSPO2 = uipanel('BorderType','etchedin',...
            'Parent',f,'Title','SPO2',...
            'Position',[.05 .42 .2 .2]);
        %BOTONES : ABRIR CERRAR CONEXION , ENCEDER APAGAR LEDS
         hAbrirConex = uicontrol('Parent',pConexion,'Style','pushbutton',...
             'String','Abrir','Enable','off','Position',[1,90,70,25],...
             'Callback',{@AbrirConexButton_Callback});
         hCerrarConex = uicontrol('Parent',pConexion,'Style','pushbutton',...
             'String','Cerrar','Enable','off','Position',[15,60,70,25],...
             'Callback',{@CerrarConexButton_Callback});
         hLEDV = uicontrol('Parent',pConexion,'Style','pushbutton',...
             'String','LEDV','Enable','off','Position',[15,35,70,25],...
             'Callback',{@LEDVButton_Callback});
         hLEDR = uicontrol('Parent',pConexion,'Style','pushbutton',...
             'String','LEDR','Enable','off','Position',[15,10,70,25],...
             'Callback',{@LEDRButton_Callback});
        %CERRAMOS LIBRERIA PARA EVITAR ERRORES
         hCerrarLib = uicontrol('Style','pushbutton',...
             'String','Cerrar Lib','Enable','on','Position',[315,5,70,55],...
             'Callback',{@CerrarLibButton_Callback});
        %CREAMOS BOTONES PARA RECIBIR Y PROCESAR DATOS PIC_ADC
         hRecibeADCRojoAC = uicontrol('Parent',pRojoAC,'Style','pushbutton',...
             'String','ADC ROJO AC','Position',[1,50,100,25],...
             'Callback',{@RecibeADCRojoACButton_Callback});
         hProcesaRojoAC = uicontrol('Parent',pRojoAC,'Style','pushbutton',...
             'String','Procesa Dato','Enable','off','Position',[1,20,100,25],...
             'Callback',{@ProcesaRojoACButton_Callback});
         %CREAMOS BOTONES INICIO Y PARADA DE GRAFICOS
         hIniciaPloter_RojoAC = uicontrol('Style','pushbutton',...
             'String','INICIO','ForegroundColor',[0,1,0],...
             'Enable','on','FontWeight','bold',...
             'Position',[250,380,100,25],...
             'Callback',{@IniciaPloter_Callback});
         hPausaPloter = uicontrol('Style','pushbutton',...
             'String','PAUSA','ForegroundColor',[1,0,0],...
             'Enable','on','FontWeight','bold',...
             'Position',[250,350,100,25],...
             'Callback',{@PausaPloter_Callback});
         %CREAMOS EL OBJETO TIMER
         timerObj = timer('Period',0.05,'ExecutionMode','fixedSpacing','timerFcn',@DatosUSB);
         timer_RojoAC = timer('Period',0.5,'ExecutionMode','fixedSpacing','timerFcn',@Datos_RojoAC);
         %ALINEAMOS LOS BOTONES        
         align([hAbrirConex,hCerrarConex,hLEDR,hLEDV],'Center','None');
         %HACEMOS EL GUI VISIBLE
         set(f,'Visible','on');
         set([hRecibeADCRojoAC,hProcesaRojoAC],'FontWeight','bold');
         %CREAMOS EJES DE COORD
         hAxesRaw  = axes('visible','off','position', [0.13  0.1  0.775 0.31]);
                      title('PRUEBA');
         hAxesRojoAC  = axes('visible','off','position', [0.13  0.1  0.775 0.31]);
                      title('ROJO AC');
         %CAMBIAMOS LA NORMALIZACXION DE LOS COMPONENTES
         set([f,hAbrirConex,hCerrarConex,hRecibeADCRojoAC,hProcesaRojoAC, hPausaPloter,hIniciaPloter_RojoAC],'Units','normalized');
         set(f,'MenuBar','none');
         set([pConexion,pRojoAC,pInfrAC,pRojoDC,pInfrDC,pLuz,pSPO2],'visible','off');
         set([Abrir,RojoAC,InfrAC,RojoDC,InfrDC,LuzDC,SPO2],'ForegroundColor',[0 0 1] );

%% CARGAMOS LA LIBRERIA MPUSBAPI
 
 %CARGAMOS LA LIBRERIA MPUSBAPI
 loadlibrary mpusbapi _mpusbapi.h alias libreria 
 libisloaded libreria
 
 %DECLARANDO VECTORES DE DATOS
 data_in = eye(1,10,'uint8');       % El que se recibe del PIC
 data_out = eye(1,3,'uint8');      % El que se envia al PIC

 %DECALARANDO VID-PID DEL PIC18F4550
 vid_pid_norm = libpointer('int8Ptr',[uint8('vid_04d8&pid_0052') 0]); 
 out_pipe = libpointer('int8Ptr',[uint8('\MCHP_EP1') 0]); 
 in_pipe = libpointer('int8Ptr',[uint8('\MCHP_EP1') 0]);
 
 %REALIZAMOS  CONTEO DE DISPOSITIVOS
 calllib('libreria','MPUSBGetDLLVersion');
 [conectado] = calllib('libreria','MPUSBGetDeviceCount',vid_pid_norm);

 %PREGUNTAMOS SI LA CONEX SE REALIZO
 %SI ES ASI HABILITAMOS EL BOTON ABRIR CONEX 
    if conectado == 1
        set(hAbrirConex,'Enable','on');
    end
 %% FUNCIONES DE BARRA DE MENU
 function AbrirMenu_Callback(source,eventdata)
     set([pRojoAC,pInfrAC,pRojoDC,pInfrDC,pLuz,pSPO2],'visible','off')
     set(pConexion,'visible','on')
 end
 function RojoACMenu_Callback(source,eventdata)
     set([pRojoAC,pInfrAC,pRojoDC,pInfrDC,pLuz,pSPO2],'visible','off')
     set([pRojoAC,pConexion],'visible','on')
 end
 function InfrACMenu_Callback(source,eventdata)
     set([pRojoAC,pInfrAC,pRojoDC,pInfrDC,pLuz,pSPO2],'visible','off')
     set([pInfrAC,pConexion],'visible','on') 
 end
 function RojoDCMenu_Callback(source,eventdata)
     set([pRojoAC,pInfrAC,pRojoDC,pInfrDC,pLuz,pSPO2],'visible','off')
     set([pRojoDC,pConexion],'visible','on') 
 end
 function InfrDCMenu_Callback(source,eventdata)
     set([pRojoAC,pInfrAC,pRojoDC,pInfrDC,pLuz,pSPO2],'visible','off')
     set([pInfrDC,pConexion],'visible','on')
 end
 function LuzDCMenu_Callback(source,eventdata)
     set([pRojoAC,pInfrAC,pRojoDC,pInfrDC,pLuz,pSPO2],'visible','off')
     set([pLuz,pConexion],'visible','on')
 end
 function SPO2Menu_Callback(source,eventdata)
     set([pConexion,pRojoAC,pInfrAC,pRojoDC,pInfrDC,pLuz,pSPO2],'visible','off')
     set([pSPO2,pConexion],'visible','on')
 end
 %%    FUNCION ABRIR CONEXION PUERTO USB
 function AbrirConexButton_Callback(source,eventdata)
     set(hCerrarConex,'Enable','on');
     set(hAbrirConex,'Enable','off');
     set(hLEDV,'Enable','on');
     set(hLEDR,'Enable','on');
     set(hRecibeADCRojoAC,'Enable','on');
     % ABRIMOS EL PIPE DE CONEXION
     [my_out_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, out_pipe, uint8(0), uint8 (0)); 
     % SE ENVIA DATO AL PIC
     calllib('libreria', 'MPUSBWrite',my_out_pipe, data_out, uint8(64), uint8(64), uint8(10)); 
     [my_out_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, out_pipe, uint8(0), uint8 (0)); % Se abre el tunel de envio
     calllib('libreria', 'MPUSBClose', my_out_pipe); % Se cierra el tunel de envio
         
 end
%% FUNCION ENCIENDE APAGA LEDS
function LEDRButton_Callback(source,eventdata)
     set(hAbrirConex,'Enable','off');
     set(hRecibeADCRojoAC,'Enable','on');
     % ABRIMOS EL PIPE DE CONEXION
     [my_out_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, out_pipe, uint8(0), uint8 (0)); 
     data_out(2)=1
     % SE ENVIA DATO AL PIC
     calllib('libreria', 'MPUSBWrite',my_out_pipe, data_out, uint8(64), uint8(64), uint8(10)); 
     [my_out_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, out_pipe, uint8(0), uint8 (0)); % Se abre el tunel de envio
     calllib('libreria', 'MPUSBClose', my_out_pipe); % Se cierra el tunel de envio
end
function LEDVButton_Callback(source,eventdata)
     set(hAbrirConex,'Enable','off');
     set(hRecibeADCRojoAC,'Enable','on');
     % ABRIMOS EL PIPE DE CONEXION
     [my_out_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, out_pipe, uint8(0), uint8 (0)); 
      data_out(2)=2;
     % SE ENVIA DATO AL PIC
     calllib('libreria', 'MPUSBWrite',my_out_pipe, data_out, uint8(64), uint8(64), uint8(10)); 
 end
%% FUNCION CERRAR PIPES DE COMUNICACION
 function CerrarConexButton_Callback(source,eventdata)
     set(hAbrirConex,'Enable','off');
     set(hCerrarConex,'Enable','off');
     set(hCerrarLib,'Enable','on');
     [my_out_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, out_pipe, uint8(0), uint8 (0)); % Se abre el tunel de envio
     calllib('libreria', 'MPUSBClose', my_out_pipe); % Se cierra el tunel de envio
    %calllib('libreria', 'MPUSBClose', my_in_pipe); % Se cierra el tunel de envio
     libisloaded libreria
 end

%% CERRAMOS LIBRERIAS _mpusbapi.h y mpusbapi.dll PARA EVITAR ERRORES
 function CerrarLibButton_Callback(source,eventdata)
     set(hAbrirConex,'Enable','off');
     set(hCerrarConex,'Enable','off');
     unloadlibrary libreria
     libisloaded libreria
      stop(timerObj)
      close(f);
 end
%% RECIBIMOS DATOS DEL ADC_ROJO
 function RecibeADCRojoACButton_Callback(source,eventdata)
     % ABRIMOS EL PIPE DE CONEXION
     %[my_out_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (1), vid_pid_norm, out_pipe, uint8(0), uint8 (0)); 
     % ENVIAMOS PETICON AL PIC
    % calllib('libreria', 'MPUSBWrite',my_out_pipe, data_out, uint8(64), uint8(64), uint8(10)); 
%     for n=0:10
     %DAMOS LA ORDEN PARA QUE EL PIC ENVIE DATOS HACIA LA PC
   %  [my_in_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, in_pipe, uint8 (1), uint8 (0));
     %RECIBIMOS DATOS PROVENEINTES DEL PIC
  %   [aa,bb,data_in,dd] = calllib('libreria', 'MPUSBRead',my_in_pipe, data_in, uint8(11), uint8(11), uint8(0));
%     data_in(1)
 %    data_in(2)
     start(timer_RojoAC);
     %data_in(2)     %data_in(3)     %data_in(4)
     %data_in(5)     %data_in(6)     %data_in(7)     %data_in(8)
     %data_in(9)     %data_in(10)                  
end
%% TIMER EMPIEZA A REALIZAR TAREA ASIGNADA
    function DatosUSB(hObject, eventdata)
       Xdato = linspace(0,1,256);
       Ydato = sin(30*2*pi*Xdato) + randn(size(Xdato))*0.2;
       Xunits='Segundos';
       Yunits='Voltios';
       if ishandle(hAxesRaw)
           axes(hAxesRaw);
           plot(Xdato,Ydato);
           xlabel(Xunits);
           ylabel(Yunits);
       end
    end
%% TIMER ROJOAC
    function Datos_RojoAC(source, eventdata)
       %ABRIMOS EL PIPE DE CONEXION
       [my_out_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (2), vid_pid_norm, out_pipe, uint8(0), uint8 (0)); 
       % ENVIAMOS PETICON AL PIC
       calllib('libreria', 'MPUSBWrite',my_out_pipe, data_out, uint8(64), uint8(64), uint8(1)); 
       %DAMOS LA ORDEN PARA QUE EL PIC ENVIE DATOS HACIA LA PC
       [my_in_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, in_pipe, uint8 (1), uint8 (0));
       %RECIBIMOS DATOS PROVENEINTES DEL PIC
       [aa,bb,data_in,dd] = calllib('libreria', 'MPUSBRead',my_in_pipe, data_in, uint8(2), uint8(2), uint8(0))
       data_in(1)
       data_in(2)
       %Buff_Aux(1) = data_in(1) ;       %valor asignado a
       Xdato = linspace(0,10,1024);
       Ydato = data_in(1)/100 + data_in(2)/100
       Xunits='Segundos';
       Yunits='Voltios';
       if ishandle(hAxesRojoAC)
           axes(hAxesRojoAC);
           plot(Xdato,Ydato);
           xlabel(Xunits);
           ylabel(Yunits);
       end
    end
%% PROCESAMOS DATOS DEL ADC ROJO
 function IniciaPloter_Callback(source,eventdata)
        %Buff_Aux=rand(1,1e5);    %creamos un arreglo de 1x1e5 de tamaño   
        %tic;
        % ABRIMOS EL PIPE DE CONEXION
        %[my_out_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (3), vid_pid_norm, out_pipe, uint8(0), uint8 (0)); 
        % ENVIAMOS PETICON AL PIC
        %calllib('libreria', 'MPUSBWrite',my_out_pipe, data_out, uint8(64), uint8(64), uint8(10)); 
        %DAMOS LA ORDEN PARA QUE EL PIC ENVIE DATOS HACIA LA PC
        %[my_in_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, in_pipe, uint8 (1), uint8 (0));
        %RECIBIMOS DATOS PROVENEINTES DEL PIC
        %[aa,bb,data_in,dd] = calllib('libreria', 'MPUSBRead',my_in_pipe, data_in, uint8(11), uint8(11), uint8(0));
        %a = data_in(1);   
        %a = randn(1,1e5);
        %Generates a random signal to display
       
        %Buff_Aux(1:1) = data_in(1) + data_in(2);       %valor asignado a 1x1 del arreglo
        %fs = 200 ;               %samplificadorng frequency
        %timeBase = 4;           %tiempo en sec
        %hF = figure;             %creamos eje de coord
        %hAx = gca;               %
        %maxA = 40;  minA = 0;    %definimos maximo y minimo en el eje y
        %nSamples = round(fs*timeBase); %asegura que el producto se un entero
        %ind = 1;                  %creamos un index 
        %hLine = plot(hAx,(1:nSamples)/fs,Buff_Aux(1:1,ind));  %parametros para el eje x
        %xlabel('[sec]');   %damos nombre al eje x
        %ylim([minA maxA]);  %limitamos el eje y
        %tic;    %empezamos a medir el tiempo
        %añadimos "ishandle" para cerrar el ploteador
        %while ishandle(hLine)
           %set(hLine,'ydata',Buff_Aux(ind,1:1)) %empezamos a graficar
          % drawnow                              %actualizamos el grafico
          % t=toc;                               %terminamos de medir el tiempo
           %ind = round(t*fs);
         %  ind = max(1,1);                       %nos quedamos en el index 1:1
        %end
        %------------------------------------------------------------------
       % if Adquisicion_Dato
        %    if strcmp(timerObj.Running,'on')
         %       stop(timerObj);
          %  end
            %Adquisicion_Dato = false;
           % set(hObject,'string','Start Adq');
       % end 
       % Adquisicion_Dato = true;
        %set(hObject,'string','Stop Adq');
        if strcmp(timerObj.Running, 'off')
            start(timerObj);
        end
 end
%% FUNCION PAUSA
 function PausaPloter_Callback(source,eventdata)
        stop(timerObj);
        stop(timer_RojoAC);
        %Adquisicion_Dato = false;
end
end

Tambien estoy intentando conectar dos pic18f4550, en c# es mas facil , al parecer tendre que crear otro panel para este pic pero como intercambio datos uhmm interesante...
Bueno espero que el cod que puse te de mas ideas y si resuelves el envio de datos pasa la voz ...
 
Me parece excelente tu aporte Gpoolb, ya lo he probado y modificado y adaptado a mi hardware y todo perfecto.
El problema lo tengo en la interfaz gráfica con matlab, el proyecto que estoy realizando necesito tener una buena interfaz gráfica con leds, displays 7 segmentos...
¿Como lo puedo realizar con gui de matlab? Ya he imprimido y visto diferentes tutoriales y videotutoriales, pero no he encontrado nada para hacer un simple led.
Gracias y necesito ayuda rápida, el tren se me escapa!!
 
Última edición:
Yo tengo una pregunta, que espero me puedan contestar, de antemano muchas gracias.
Voy a trabajar con el PIC 18F14K50 al parecer este pic solo se puede programar con MPLAB, según lo que veo la instalación del driver que utilizan lo hacen con el archivo que viene en CC, esta basado, ahora la pregunta es yo puedo utilizar el programa de ejemplo de USB Device - MCHPUSB - Generic Driver - C18 - Low Pin Count Development Kit que proporciona microchip para mplab con el mismo archivo .m modificando algunas cosas de acuerdo a lo que requiera, es que no he encontrado prácticamente nada de información para este microcontrolador si alguien me pudiera accesorar un poco se lo agradeceré mucho. básicamente solo necesito transmitir texto del micro a la pc y excibirlo y viceversa excibiendo el texto que llega al micro en un lcd, de antemano muchas gracias, y cualquier tip o consejo será bien recibido.
 
Hola a todos; probé el codigo de gpoolb y efectivamente funciona. Ahora bien, yo solo quiero enviar datos del adc a matlab, pero no he podido realizar dicha función. Si alguien me puede ayudar se los agradecería bastante.

Saludos...
 
Saludos, a todos, les cuento que probe los archivos de @gpoolb posteados en la primera pagina de este hilo, la pruebas las estoy realizando en matlab 7.8.0 R2009a, con un micrcotrontrolador 18F4550, al principio no me corria, el programa del micro compilaba bien pero aparecia un error en matlab supuestamente relacionado con cargar la libreria dll de michochip, analizando el codigo de matlab encontre que para el ejemplo 1 en la linea 46
el vid & pid estaba declarado asi:

vid_pid_norm = libpointer([/SIZE]'int8Ptr'[/size][/SIZE][/SIZE],[uint8('vid_04d8&pid_000b') 0]);

no se porque este maltab no funciona asi lo que hice fue cambiar el b en exadecimal por 0011 asi:


vid_pid_norm = libpointer('int8Ptr',[uint8('vid_04d8&pid_0011') 0]);

y corrio muy bien, la velocidad es muy buena.
en el segundo ejemplo ocurre lo mismo, este codigo esta en la linea 81,
Para la persona que pide como enviar datos del conversor analogo digital
en segundo ejemplo de @gpoolb se muestra como, funciona muy bien, lo probe enviando datos de voltaje de un potenciomentro y funciona excelente el rango esta a 16 bits de 0 a 65k.
si alguien necesita el codigo modificado para el 18F4550 aca estan, tambien coloco archivos de la tarjeta que diseñe para trabajar con usb y el 18F4550.

Ver el archivo adjunto Ej2_USB_Bulk_Matlab_2009.rar
Ver el archivo adjunto Tarjeta_USB_4550.rar

IMAGEN TARJETA USB CON 18F4550



 
Hi,

I'm using Matlab R2008b (7.7.0). The warnings (not errors, only warnings) are coming from the line 22 and I've got this message :

Warning: Warnings messages were produced while parsing. Check the functions you
intend to use for correctness. Warning text can be viewed using:
[notfound,warnings]=loadlibrary(...)
> In loadlibrary at 381
In usb at 22


Then I run this command to get the warnings:

[notfound, warnings]=loadlibrary('mpusbapi','_mpusbapi.h')


I attached a .txt file containing the warnings.
I Hope it can help...

Hola tengo exactamente el mismo problema con exactamente los mismo warnings, la dll , .h .m estan en la misma carpeta.
Al correr el .m tira esos warnings, pero anda todo 10 puntos,:aplauso:. pero al compilarlo con el deploytool (con Microsoft Visual C++ 6.0 in C:\Archivos de programa\Microsoft Visual Studio ) no anda ni en chiste, se compila todo ok. Pero al correr el ejecutable en la carpeta donde estan las librerias no anda, hasta donde segui en el ejecutable el problema lo hace la carga de la libreria, estimo que es por todos los warnings.

alguna idea???????
Gracias
 
Saludos, alguien ha podido graficar señales enviadas por el micro en matlab especificamente la señal vs TIEMPO, por ahora lo que he podido hacer es recibir señales y graficarlas con plot, tengo dos tipos de señales en mi proyecto, de las cuales puedo seleccionar cual graficar y son:- Señal analogica, valor del conversor AD del PIC- Señal Digital proveniente de un sensor de temperatura ds1820en cuanto a los valores se hace bien la adquisicion pero al graficar en matlab y sumando tiempos, el matlab se demora mucho en llenar el grafico. por ejemplo, tengo:- Para leer el sensor de temperatura me demoro 12ms- En la comunicacion usb en Tx y Rx tengo configuradas las funciones en matlab con un tiempo de 1ms cada una total(2ms en Tx y Rx).- En matlab tengo un pause despues de cada plot de 50ms (pause(0.05))- Y estoy graficando en un plot vectores con tamaño 300 valores (1-300)Se supone que 12ms + 2ms + 50ms = 64msAhora 64ms * 300 = 19200ms = 19.2 seg que se supone que demoraria en llenar el grafico desde 1 a 300 pero en realidad demora unos 50 segundos.No se si implementando un timer en matlab se pueda graficar mejor, bueno cualuquier ayuda o consejo se los agradeceria.
 
Intente graficar con el simulink lo leido del adc lo consegui hasta cierto punto, atravez de s-functions el problema q en cada muestreo debe cargar la libreria abrir tuneles enviar dato, etc lo cual provoca q la transmision sea lenta lo ideal seria q cargue las librerias y habra tuneles al inicio digamos en t=0 y viceversa en t=final, quizas con esto podriamos sacarle mejor el jugo a los pic's con la ayuda del matlab. Si tienen alguna idea de como lograrlo :confused:
avisan please!
Saludos.
 

Adjuntos

  • PRUEBA_S-function.rar
    7.5 KB · Visitas: 232
Última edición:

Grafica señal vs tiempo
Intente graficar con el simulink lo leido del adc lo consegui hasta cierto punto, atravez de s-functions el problema q en cada muestreo debe cargar la libreria abrir tuneles enviar dato, etc lo cual provoca q la transmision sea lenta lo ideal seria q cargue las librerias y habra tuneles al inicio digamos en t=0 y viceversa en t=final, quizas con esto podriamos sacarle mejor el jugo a los pic's con la ayuda del matlab. Si tienen alguna idea de como lograrlo
avisan please!
Saludos.


Hola cehio_Lo creo que tu problema pasa por implementar una variable que haga de flag o indicador,cuando no se ha efectuado aun la declaración y la carga de la librería flag=0
cuando ya se cargo la libreria y se abrieron los tuneles flag =1, eso lo metes en un bloque if -else teniendo a flag como condicion, saludos. Aqui hay lgo de eso:
http://200.13.98.241/~javier/lab_control/labcontrolP07/sfunction.pdf
 
Última edición:
buenas estoy algo perdido con esto del usb en matlab y utilizo matlab por que es el gui que mas manejo, bueno mi pregunta es esta y espero una respuesta sencilla si se puede ;), lo unico que quiero es que cuando pulse un pushbutton me envie el programa de matlab por ejemplo un numero 2 o una letra al pic listo algo sencillo como para poder render un led en el pic.

function pushbutton1_Callback(hObject, eventdata, handles)
 
buenos dias estoy haciendo un proyecto para la universidad, basado en la adc. Yo ya tengo el programa en lenguaje c, lo cual yo puedo simular desde proteus, y me corre perfectamente. Pero a la hora de quemar el pic y conectarlo al pc realmente, no pasa nada, que podra estar fallando??
 
buenos dias estoy haciendo un proyecto para la universidad, basado en la adc. Yo ya tengo el programa en lenguaje c, lo cual yo puedo simular desde proteus, y me corre perfectamente. Pero a la hora de quemar el pic y conectarlo al pc realmente, no pasa nada, que podra estar fallando??

puede que no tengas configurado bien el pll en el pic puede que no hayas colocado el vid del micro igual al del programa puede que tengas un capacitor en el Vusb que no sea el corrector...
 
Atrás
Arriba