matlab y puerto usb ayuda

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.
 
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
 
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
 
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!.
 
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.

... 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.
 
Última edición:
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 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.
 
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.
 
Última edición:
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
 
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
 
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
 
Última edición:
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
 
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
 
Última edición:
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?
 
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.
 
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
 
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?
 
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
 
Atrás
Arriba