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

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: MatLab y USB
« Respuesta #30 en: 24 de Septiembre de 2009, 23:06:25 »
O si el cristal que estas usando es de 4MHz, entonces cambia a PLL1
El papel lo aguanta todo

Desconectado fidodido18

  • PIC18
  • ****
  • Mensajes: 312
Re: MatLab y USB
« Respuesta #31 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.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: MatLab y USB
« Respuesta #32 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.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: MatLab y USB
« Respuesta #33 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
El papel lo aguanta todo

Desconectado cerebro

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

Desconectado Quelo

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

Desconectado cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: MatLab y USB
« Respuesta #36 en: 26 de Septiembre de 2009, 12:37:55 »
 :shock: yo estoy utilizando la versión 7 (R14),.... muchas gracias buen dato  ;-)
LAS MALVINAS SON ARGENTINAS!

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: MatLab y USB
« Respuesta #37 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


La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: MatLab y USB
« Respuesta #38 en: 26 de Septiembre de 2009, 13:16:55 »
Ah!!!!

Muy buen dato, casi siempre digo driver.

Saludos
El papel lo aguanta todo

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: MatLab y USB
« Respuesta #39 en: 26 de Septiembre de 2009, 18:06:52 »
Ah OK Pedro, gracias por la corrección.

Desconectado yabo2005

  • PIC10
  • *
  • Mensajes: 2
Re: MatLab y USB
« Respuesta #40 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);
 
   
}
//******************************************************************************





Desconectado fidodido18

  • PIC18
  • ****
  • Mensajes: 312
Re: MatLab y USB
« Respuesta #41 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!

Desconectado georgegeorge

  • PIC10
  • *
  • Mensajes: 2
Re: MatLab y USB
« Respuesta #42 en: 29 de Mayo de 2014, 12:48:47 »

les dejo un tutorial completo


Desconectado georgegeorge

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


 

anything