# matlab y puerto usb ayuda



## dan9126 (May 16, 2011)

buenas compañeros del foro la presente es para que me faciliten informacion sobre la comunicacion de matlab con un pic mediante el puerto usb...
cualquier informacion me sera de gran utilidad;  segun lo que lei utilizan un comando mex que 
me permite utilizar librerias creadas en c en matlab no se si eso me pueda servir .

agradezco su pronta respuesta buen dia.


----------



## dan9126 (May 16, 2011)

aunque no me facilitaron informacion de todas formas  gracias a las personas que intentaron colaborarme ya tengo un adelanto en cuanto la comunicaion usb y matlab cualquiera que necesite ayuda yo le puedo colaborar de cierta forma en dicha comunicacion


----------



## josb86 (May 20, 2011)

yo tengo un ejemplo que voy a tratar de subir el problema es que la parte de recepción no me funciona solo puedo enviar de la pc al pic


----------



## jcristhian_1 (May 21, 2011)

Hola hace  tiempo use estos archivos:


El programa en matalb el codigo C y la simulacion en proteus:
clon_en_Matlab_del_programa_de_Rafique
http://www.4shared.com/get/AmnyGeda/clon_en_Matlab_del_programa_de.html

tambien esta Read_Adc
http://www.4shared.com/file/GgTNZAoL/Read_Adc.html

El driver que hay que instalar es:
PicUSB_Device_Driver_instalar_nuevo_driver.
http://www.4shared.com/get/loJzv4Q9/PicUSB_Device_Driver_instalar_.html

Aca hay otro ejemplo pero el software PC esta hecho en C#

http://www.4shared.com/file/JOTbm8u7/USB_PIC_CCS_C.html


----------



## josb86 (May 21, 2011)

hay algo que no entiendo


[aa,bb,data_in,dd] = calllib('libreria', 'MPUSBRead',my_in_pipe, data_in, uint8(32), uint8(32), uint8(10)); % Se recibe el dato que envia el PIC


que es exactamente lo que significan esas lineas?

que es aa , bb y dd?

de que deende el valor que va dentro de los parentesis de unit8 he visto que an algunas partes colocan 64, me imagino que debe concordar con lo que se envia por el pic, no!.


----------



## jcristhian_1 (May 21, 2011)

Hola no recuerdo exactamente que hacen "aa"  "bb" "dd", para mas informacion bajate este archivo, es de Gabriel Pool que trato este mismo tema hace tiempo.

http://dc360.4shared.com/download/6...riginal_307.rar?tsid=20110521-174553-d45d3713


En general lo que hace esta linea es llamar a una funcion contenida en la DLL mpusbapi de microchip
esta funcion es la MPUsbRead, y lo que hace es almacenar la data entrante en el vector data_in
es por eso que lo declaras de esta forma:
data_in = eye(1,32,'uint8');
el 32 corresponde con el numero de datos que se espera recibir, y tienes razon debe coincidir con lo que se envia del PIC.
[aa,bb,data_in,dd] = calllib('libreria', 'MPUSBRead',my_in_pipe, data_in, uint8(32), uint8(32), uint8(10)); % 

Debes declarar la libreria y llamar a las funciones tal como en el ejemplo, en este momento no tengo a la mano matlab para recordar un poco ese ejemplo pero puedes insertar este codigo en tu programa para que te de informacion sobre las funciones contenidas en la dll:
%libfunctions('libreria', '-full')  % Muestra en la línea de comandos las
                                    % funciones de la librería
%libfunctionsview libreria          % Muestra en un cuadro lo mismo que la
                                    % instrucción anterior
esto tambien se explica en los programas de ejemplo de Gabriel Pool
Si te fijas el programa: clon_en_Matlab_del_programa_de_Rafique hace lo mismo en Matlab que el USB_PIC_CCS_C en cC#, espero te sirva, saludos.



josb86 dijo:


> ... parentesis de unit8 he visto que an algunas partes colocan 64..



Es uint8 y por eso el vector data_in tambien es del mismo tipo y quiere decir entero sin signo de 8 bits igual que lo que viene del PIC y del mismo tamaño en este caso 32.


----------



## murphy9 (May 23, 2011)

Hola a todos, disculpen que los moleste, estuve probando los ejemplos que subiste jcristhian_1, tanto en proteus como armándolo en una placa, y en ambos casos, no pude comunicarme, resulta que la pc no reconoce al dispositivo. Mi problema está en el tipo de transmisión, ya que probé ejemplos de comunicación HID y funcionan perfectamente. Realmente no se que puede estar sucediendo, ya instale los drivers que proporciona microchip, y aun así no consigo comunicarme. Si alguien puede darme una ayuda, se los agradeceré mucho. Saludos


----------



## josb86 (May 23, 2011)

murphy9 dijo:


> Hola a todos, disculpen que los moleste, estuve probando los ejemplos que subiste jcristhian_1, tanto en proteus como armándolo en una placa, y en ambos casos, no pude comunicarme, resulta que la pc no reconoce al dispositivo. Mi problema está en el tipo de transmisión, ya que probé ejemplos de comunicación HID y funcionan perfectamente. Realmente no se que puede estar sucediendo, ya instale los drivers que proporciona microchip, y aun así no consigo comunicarme. Si alguien puede darme una ayuda, se los agradeceré mucho. Saludos



hola mira en estos días voy a subir uno que me ha funcionado a mi. me imagino y estas utilizando matlab y el pic 18f4550 no?
antes del viernes lo subo.


----------



## jcristhian_1 (May 23, 2011)

Hola dime concretemente cual no te ha funcionado? y si te sale algun mensaje de error de programacion o algo la version de matlab yo utilize 2009, no se a partir de que version funcionara pero en la 7.0 no se permitia declarar la dll, asi que si estas usando esa version o una anterior no funcionara, con respecto a la simulacion debes entrar a inicio/programas/proteus/virtual usb/install usb drivers si hay problemas  con este driver desinstalalo inicio/programas/proteus/virtual usb/uninstall usb drivers y lo vuelves a instalar.

Para descartar problemas ejecuta el ultimo ejemplo que esta en c# en la carpeta "exe and hex"
contiene un archivo ejecutable, correlo y corre la simulacion, si la simulacion no corre revisa los mensajes de error y nos cuentas, en condiciones normales debe pedirte que instales el driver del dispositivo.


----------



## murphy9 (May 23, 2011)

Hola, también estoy usando la versión 2009 de matlab. Sin embargo mi inconveniente está en que la pc no reconoce al pic, probé el ultimo ejemplo que mencionas, y ocurre lo mismo, instalé los drivers (lo hice en la carpeta que aparecía por defecto, creaba una nueva carpeta en el disco c) y la computadora sigue sin reconocer el pic. Creo que el problema está al declarar los VID y PID, ya que como mencioné antes realizando ensayos en HID no tuve inconvenientes. Por casualidad ustedes modificaron algún archivo antes de programar el pic o les anduvo sin inconvenientes?. Gracias por su respuesta


----------



## jcristhian_1 (May 23, 2011)

primero veamos en simulacion,
corriste la simulacion....te pidio que instalaras el driver respectivo??, si te salio mensaje de error cuentame.


----------



## murphy9 (May 23, 2011)

Si te refieres al driver de proteus para simular el usb, no me apareció, porque ya lo tenia instalado y funcionando, lo que si me pidió y no recuerdo si fue cuando lo conecté el pic en la simulación de proteus o cuando conecté la plaqueta, fue el ayudante de windows (al no poder reconocer el dispositivo) que me pidió que descargue los drivers desde la pagina de microchip


----------



## jcristhian_1 (May 23, 2011)

El driver que debes instalar es este
http://www.4shared.com/get/loJzv4Q9/...instalar_.html
o si estas usando el ejemplo en C# descomprime el archivo y entra aqui
.....\USB_PIC_CCS_C#\GUI_Source\PicUSB_Device_Driver
Cuando te pida el driver entras aqui, y si te vuelve a pedir otro archivo lo ubicas aqui tambien.
A veces da problema con el Archivo "coff" que es el archivo que correra el pic si te da problemas "jalas"  este archivo ....\USB_PIC_CCS_C#\PIC_Source/USB_PIC18_V786.hex
Que es el mismo programa pero compilado a hex
no es necesario recurrir a la pagina de microchip para bajar ningun driver


----------



## murphy9 (May 23, 2011)

Mira, tenias razón, hice lo que me indicaste y me anduvo perfectamente la simulación, te agradezco mucho. Ahora intentaré implementarlo en la placa, el tema es que tengo el 18f2550, asi que debo modificar un poco el código y ver que pasa. Espero no tener inconvenientes, cualquier cosa seguro me estarás viendo por aquí. Nuevamente te agradezco mucho tu ayuda


----------



## jcristhian_1 (May 23, 2011)

Que bien que anduvo ya nos contaras de tus avances, yo tambien  quiero retomar esto de la comunicación USB Matlab sobre todo para la adqusición de datos Análogicos ya que una vez estos datos en Matlab las posibilidades son muchas como por ejemplo usar la "System Identification Toolbox" para modelar sistemas,  saludos


----------



## murphy9 (May 23, 2011)

Hola nuevamente, te comento, la simulación me anda muy bien, sin embargo al conectar la placa, la pc sigue sin reconocer el dispositivo, voy al administrador de dispositivo y aparece algo así como error código 10, crees que se trate de driver desactualizado? al conectar el usb de la placa y del proteus al mismo tiempo, en el administrador aparecen los mismos símbolos, solo que el correspondiente a la placa aparece con un pequeño triangulo amarillo abajo. Estoy usando windows seven de 32 bits. Tienes idea que puede estar ocurriendo?


----------



## jcristhian_1 (May 23, 2011)

mmm.. .. la verdad nunca use windows seven en mis pruebas  y no se si tendra problemas con los drivers, en todo caso trata de desinstalar el driver que instalaste en la simulacion, y otros drivers que hayas instalado para estas pruebas, con el objetivo de que lo vuelva a reconocer.


----------



## dan9126 (May 24, 2011)

gracias a todos por sus ayuda a pesar de que ya llevaba adelantado la comunicacion me ha servido mucho los aportes que han hecho buen dias y de nuevo muchas gracias


----------



## josb86 (May 25, 2011)

buenas como estan miren tengo un pequeño problemita con algo en matlab hice un pequeño programa en gui es como un control remoto para un robot 


y coloque el siguiente codigo:

function figure1_KeyPressFcn(hObject, eventdata, handles)
% hObject    handle to figure1 (see GCBO)
% eventdata  structure with the following fields (see FIGURE)
%   Key: name of the key that was pressed, in lower case
%   Character: character interpretation of the key(s) that was pressed
%   Modifier: name(s) of the modifier key(s) (i.e., control, shift) pressed
% handles    structure with handles and user data (see GUIDATA)


%pause(10);

a=double(get(gcbf,'Currentcharacter')); 
set(handles.text1,'String',a);
int32 suma;


if a==30
        global conectado my_out_pipe my_in_pipe data_in data_out

        int16 data;


        if conectado == 1

            data_out(1) = 0;    
            data_out(2) = 1;  

            calllib('libreria', 'MPUSBWrite',my_out_pipe, data_out, uint8(64), uint8(64), uint8(200)); % Se envia el dato al PIC
            suma =+1;
            set(handles.text2,'String',suma);

        end
end

if a==28
        global conectado my_out_pipe my_in_pipe data_in data_out 

        int16 data;

        if conectado == 1

            data_out(1) = 0;    
            data_out(2) = 2;  

            calllib('libreria', 'MPUSBWrite',my_out_pipe, data_out, uint8(64), uint8(64), uint8(200)); % Se envia el dato al PIC

        end
end

if a==29
        global conectado my_out_pipe my_in_pipe data_in data_out 

        int16 data;

        if conectado == 1

            data_out(1) = 0;    
            data_out(2) = 3;  

            calllib('libreria', 'MPUSBWrite',my_out_pipe, data_out, uint8(64), uint8(64), uint8(200)); % Se envia el dato al PIC

        end
end

if a==31
        global conectado my_out_pipe my_in_pipe data_in data_out 

        int16 data;

        if conectado == 1

            data_out(1) = 0;    
            data_out(2) = 1;  

            calllib('libreria', 'MPUSBWrite',my_out_pipe, data_out, uint8(64), uint8(64), uint8(200)); % Se envia el dato al PIC

        end
end

Osea que cuando presiono alguna de las teclas de dirección el manda una señal al pic.
Cuando dejo presionada algunas de las teclas de dirección el carro se mueve perfectamente, pero si dejo de presionarla la idea es que el carro deje de moverse inmediatamente, pero no es asi por el contrario el programa sigue enviando la trama de la tecla por unos segundos mas. alguien me puede ayudar?


----------



## murphy9 (May 25, 2011)

Muchas gracias por tu ayuda jcristhian_1, te comento que al final pude solucionar mi problema cambiando el  capacitor de 470nF que tenia conectado en la pata VUSB por un electrolítico de 47uF. Ahora la pc lo enumera sin ningún inconveniente


----------



## murphy9 (May 26, 2011)

Hola, lamento volver a molestarlos, en esta ocasión, quería ver si a alguno de ustedes les ha ocurrido como a mi que les funciona perfectamente la simulación del programa read adc, pero a la hora de conectar la plaqueta no les ocurre lo mismo. Adjunto con este mensaje tanto el circuito a simular como el programa en matlab y en el pic. Lo que noto en mi circuito real, es que una vez enumerado el pic, al apretar el botón en matlab me muestra un gráfico de la conversión, pero al volver a presionarlo, es como si desapareciera la comunicación y solo se grafica una linea de ceros en matlab, por su parte en el pic, nunca mas vuelve a entrar al bucle:

         if (usb_kbhit(1))                      // si el endpoint de salida contiene datos del host
         {
           output_toggle (control); //controlo que entro en este bucle (cambio estado de pin_c7 )
           usb_get_packet(1, datain, 1);  //read new packet
         }
ya que el pin_c7 nunca vuelve a cambiar de estado. Si alguien de ustedes puede guiarme en que puede estar distinto entre la placa y la simulación, le estaré muy agradecido


----------



## jcristhian_1 (May 26, 2011)

Hola murphy9, una pregunta el problema que tienes ocurre unicamente con el archivo read Adc?, has probado los demas sin problemas?


----------



## murphy9 (May 27, 2011)

Hola jcristhian_1, para serte sincero, probé el programa read adc y también el Replica Matlab del programa de rafique, y al igual que el anterior funciona bien en la simulación, pero no en la placa, tienes alguna idea de que puede estar pasando?.


----------



## jcristhian_1 (May 27, 2011)

Me parece que hay que agregar un delay despues de la enumeracion del dispositivo, prueba el USB PIC CCS C# con el archivo exe hecho en c# ya que todos los demas ejemplos en Matlab estan basados en este, si este no da problemas entonces es un error de programacion, lo mas probable es que sea en Matlab.


----------



## murphy9 (May 27, 2011)

También lo probé, y al igual que los otros funciona perfecto en la simulacion y no hace nada al conectar la placa. Tu dices que ponga un delay justo después de la instrucción que espera por la enumeración? de cuanto tiempo recomiendas?. Por otro lado los inconvenientes siempre se presentan en la comunicación bulk. Es posible que el capacitor de 47uF que puse en la placa sea lo que produce el problema?. Recuerdo que ensayando con HID si ponía uno menor a 470nF no funcionaba, y al ensayar estos ejemplos, el de 470nF no permitía que enumere


----------



## jcristhian_1 (May 27, 2011)

murphy9 esta bien filtrado el voltaje de alimentacion incluyendo condensadores?, el capacitor de 470nf suele funcionar bien no creo que ese haya sido el problema inicial, tratare de prestarle a un amigo su placa con 18f4550 ya que el Pic18f4550 que tenia lo preste y ..... bueno, el fin de semana te aviso si tengo tiempo.

Pd alguien mas que haya probado la comunicacion bulk que aporte mas alcances con respecto al software y al hardware comente.


----------



## murphy9 (Jun 4, 2011)

Hola a todos nuevamente, les comento que finalmente pude hacer funcionar la comunicación, lo único que hice fue probar la placa en windows xp, y todo funcionó correctamente, al parecer era solo problema de seven, yo tengo el ultimate de 32 bits, no se como funcionará en las otras versiones. A alguien le ocurrió algo similar? pudo solucionarlo?. Nuevamente jcristhian_1 agradezco mucho tu ayuda, me salvaste en mas de una ocasión


----------



## jcristhian_1 (Jun 5, 2011)

Hola murphy9 de nada, estamos para ayudar y ser ayudados, con respecto a windows seven esta semana, he visto a un profesor poner a funcionar una placa con pic18f4550 con comunicacion bulk en windows seven,  pero no se exactamente como lo hizo ni los archivos o drivers que usa, ya que inicialemente la instalacion de driver le marco error, solo es cuestion de averiguar porque me consta que si funciona.

Al conectar tu dispositivo verifica si el driver fue correctamente instalado.


----------



## murphy9 (Jun 13, 2011)

Hola a todos nuevamente, solo escribo para comentarles, que después de mucho probar, instalar y reinstalar drivers, por fin conseguí que funcione la placa en mi windows seven. Solo quería comentarles eso y agradecerles nuevamente a todos ustedes la ayuda que me brindaron


----------



## mikele (Jun 28, 2011)

jcristhian_1 dijo:


> Hola hace  tiempo use estos archivos:
> 
> 
> El programa en matalb el codigo C y la simulacion en proteus:
> ...



hola que tal , el enlace del programa y simulacion en la que tu citas no se puede descargar, tal ves podrias ponerlo en el foro por favor seria de mucha ayuda....... gracias



murphy9 dijo:


> Hola a todos nuevamente, solo escribo para comentarles, que después de mucho probar, instalar y reinstalar drivers, por fin conseguí que funcione la placa en mi windows seven. Solo quería comentarles eso y agradecerles nuevamente a todos ustedes la ayuda que me brindaron


hola que tal quisiera saber si por fa me podrois ayudar con el programa y simulacion de la comunicacion usb en matlab citado en este tema, ya que el link de descagar esta fuera de uso, seria de mucha ayuda, gracias....


----------



## murphy9 (Jun 28, 2011)

Hola mikele, en este mensaje adjunto los ejemplos que hace un tiempo subió jcristhian_1, espero te sean de utilidad


----------

