UNIVERSIDAD MODELOESCUELA DE INGENIERÍA MAESTRÍA EN MECATRÓNICA Integración de PIC18F2455 de Microchip™ con LabVIEW™ 8.2 de National Instruments™ con MPUSBAPI.DLL PRESENTAN: ING. JULIO ALEJANDRO LUGO JIMÉNEZ PARA LA MATERIA: SENSORES Y ACTUADORES PROFESOR: MC. PEDRO NAJERA GARCIA MÉRIDA, YUCATÁN A 28 DE JUNIO DE 2008 ING. GABRIEL JESÚS POOL BALAM y un conocimiento amplio sobre el software de desarrollo. la miniaturización de componentes electrónicos. Por otro lado. un software que administre los datos en la PC para el monitoreo local y remoto. RESUMEN El diseño de un sistema de monitoreo de variables como presión. Por lo que. velocidad. tales como lenguajes de alto nivel para compilar el programa y programadores económicos para descargar el programa en el chip.).. Debido a éstas herramientas. graficar. Dichos microcontroladores. de tal manera. No ha sido la excepción con el microcontrolador. Existe una gran variedad de tarjetas y su costo varía de acuerdo a sus capacidades. Esto se puede lograr con el desarrollo de un software como Visual Basic.2 de National Instruments™ 2 / 15 . ó cualquier otro paquete de preferencia gráfico para hacer más fácil la interfaz de usuario. que casi no fallan. Algunos fabricantes tal como Microchip. Algunos fabricantes ofrecen soluciones a medias: poderoso hardware con un software pobre que no cumple con nuestro requerimiento ó hardware básico al que se requieren agregar módulos adicionales para adaptarlo a nuestra necesidad y con software muy completo. guardar datos en disco. etc. la disminución de su consumo de corriente y el tamaño de los semiconductores. etc. ya que éste se ha desarrollado notablemente. inteligentes y eficientes. orientada a la interacción y trabajo exclusivo con productos del fabricante. Desafortunadamente. ya no basta con tener un chip inteligente que funcione de manera autónoma. requieren de muy poco componentes de soporte externo para implementarse y sus tecnologías se han perfeccionado. etc. control de decisiones. circuitos de apoyo adicionales (ADC. puertos. INTRODUCCIÓN Hoy en día. memoria. graficar. guardar datos en disco. El software fue evolucionando al grado de que Integración de PIC18Fxx5x de Microchip™ con LabVIEW™ 8. En éste desarrollo se fusiona lo mejor de ambos mundos: Un microcontrolador con puerto USB de Microchip y un software de desarrollo LabVIEW de Nacional Instruments. control de decisiones. ahora se requiere que trabajen en conjunto con la PC para el monitoreo local y remoto (internet o intranet). éste chip se ha vuelto muy popular al grado que se proponen como materias a cursar en las escuelas. se preocupan en desarrollar las herramientas para su programación. Conforme el software se fue volviendo popular muchos fabricantes de hardware desarrollaron tarjetas compatibles con éste software. permite la construcción de circuitos más complejos. sin contar la gran cantidad de tiempo a invertir en la implementación de la solución más apropiada. Visual C. National Instruments desarrolló un paquete para la implementación de una interfaz con conectividad a sus tarjetas de adquisición (que vende por separado). el tiempo para aprender y dominar estos paquetes es muy largo. C++. etc. y/o acción de control sobre el mundo físico requiere tradicionalmente de una tarjeta de adquisición de datos que por lo general es limitada en hardware. al punto de hacer más grande sus capacidades de comunicación. temperatura. oscilador interno. incluyendo otro hub. Es usado en escáner ó cámaras. su complejidad para implementarlo es enorme. La velocidad de transferencia depende de la velocidad del HUB que se esté utilizando. Sólo puede haber un Host en el bus que maneja a todos los componentes conectados como se indica en la figura 1. ANTECEDENTES 1. 4 Cable USB La arquitectura USB comprende cuatro tipos básicos de transferencia de datos: • Control Transfers: Es usado para configurar un dispositivo al momento de que se conecta. Los datos entregados pueden perderse. 12Mb/s full‐speed y 1. Ver figura 3. • Interrupt Data Transfers: Used for timely but reliable delivery of data. La ráfaga de datos es secuencial. Fig. se puede conectar casi con cualquier dispositivo. LA ARQUITECTURA DEL PUERTO USB A pesar de que el puerto USB nos ofrece más ventajas que sus predecesores.2 de National Instruments™ 3 / 15 . el ancho de banda puede variar. 2 HUB USB Fig.5Mb/s en Low‐speed. Fig. Sus terminales son del tipo diferencial y consta de 4 hilos. 1 Topología del BUS El hub es un elemento plug and play en la estructura USB (Figura 2) y es un concentrador al cual. y su manejo es muy fácil e incluye una ayuda en línea. 3 Múltiple velocidad en un BUS El cable que típicamente es usado no es largo. • Bulk Data Transfers: Entrega el dato por volumen. se le pueden agregar más dispositivos USB. debido a la velocidad de transferencia y tiene la estructura mostrada en la figura 4. for example. Las velocidades típicas son: 480Mb /s en high speed. Fig. characters or coordinates with human‐ Integración de PIC18Fxx5x de Microchip™ con LabVIEW™ 8. ya que su funcionamiento está basado en protocolos de software. Flujo de comunicación USB 2. no requiere driver.sys.2 de National Instruments™ 4 / 15 . es suficiente que se pueda administrar como un “device”. Para un funcionamiento correcto. • Isochronous Data Transfers: Occupy a prenegotiated amount of USB bandwidth with a prenegotiated delivery latency. es una entrada de cadena de caracteres que da como resultado el número de dispositivos Integración de PIC18Fxx5x de Microchip™ con LabVIEW™ 8. 3. requiere driver. entre otros. Este es el modo que usa WinUSB (para windows vista) y el mpusbapi (windows 2000 y posterior). nombre y serie del producto que se conecta para que el host identifique al driver y pueda instalarlo con el fin de que el dispositivo pueda formar las “pipes” ó túneles para su comunicación con el host (ver figura 5). Fig 5. VID&PID. LA MPUSBAPI. 2. ya que se requiere de una gran capacidad de manejo de datos para administrar a cada componente del BUS. perceptible echo or feedback response characteristics. (Also called streaming real time transfers). usar (endpoints). se necesita el driver mchpusb. USB Communication Device Class (CDC): Velocidad Media. Dentro de los protocolos hay que especificar el tipo de transferencia de datos a Revisando ejemplos. Microchip ha creado un archivo dll en el que proporciona las funciones de acceso al puerto USB con un microcontrolador de la familia PIC18Fxx5x. y la ayuda que trae incluida sobre el manejo de la dll se verifica que el modo de abrir la pipe es el siguiente: Primero se identifica si hay un dispositivo con el nombre VID&PID conectado a la PC con la instrucción: (*MPUSBGetDeviceCount)(PCHAR pVID_PID ) La variable pVID&PID. USB Custom Driver: Velocidad Alta. Este driver sirve tanto para Visual Basic como para Visual C. Aunque el PIC no puede funcionar como host. Estos protocolos se le llaman descriptores y sirve para informarle al host todo lo necesario para que pueda administrarlo. Recordemos que los PICs de la serie 18Fxx5x tienen tres modos de funcionamiento: 1. USB Human Interface Device (HID): Velocidad Baja. para esto se requiere “memorizarle” los protocolos necesarios para enlazarse al host. Crea un Puerto Serie Virtual. requiere driver.DLL DE MICROCHIP Para una mayor facilidad de desarrollo de aplicaciones basadas en el bus USB. el string de entrada es: “vid_0x04d8&pid_0x000b”. Ejemplo: Si un dispositivo tiene un VID=0x04d8 y un PID=0x000b. VID 0x04d8. PID 0x0003 y el dispositivo que nos interesa tiene VID=0x04d8 y PID=0x0002 el MPUSBGetDeviceCount devolverá un ‘1’.2 de National Instruments™ 5 / 15 . Normalmente. pEP: Input: String con el número del Endpoint que se va a abrir. PID 0x0002 Dispositivo tipo 2. ésto permite que MPUSBRead. Donde xxxx es el valor del VID y el yyyy el del PID. Nota: el valor del time‐out no tiene sentido en una pipe síncrona. instance: Input: Un número de dispositivo para abrir. El número devuelto por el MPUSBGetDeviceCount tiene que ser igual o menor que el número de todos los dispositivos actualmente conectados y usando el driver genérico. El formato es “\\MCHP_EPz” o “\MCHP_EPz” dependiendo del lenguaje de programación. // Input <Future Use> Esta instrucción devuelve el acceso al pipe del Endpoint con el VID_PID asignado. Ejemplo: “\\MCHP_EP1” o “\MCHP_EP1” Este argumento puede ser NULL (nulo) para crear lazos con Endpoints de funciones no específicas. Nota: Para utilizar MPUSBReadInt(). se utiliza primero la llamada de MPUSBGetDeviceCount para saber cuantos dispositivos hay. hay que dejar de hacer las llamadas porque no puede haber más dispositivos con el mismo VID_PID. La pipe de datos abierta con “_ASYNC” debe almacenar datos con el intervalo especificado en el Endpoint descriptor con un máximo de 100 recepciones. Cualquier otro dato recibido después de llenar el buffer del driver se ignora. Las funciones específicas que utilizan éste parámetro son: MPUSBRead. // Input DWORD dwReserved). los dos en hexadecimal. Se tiene que contar el número de llamadas exitosas. Cuando este número sea igual al número devuelto por MPUSBGetDeviceCount. Esta opción sólo está disponible para un Endpoint interrupción IN. el formato de pEP tiene que ser “\\MCHP_EPz_ASYNC”. VID 0x04d8. MPUSBWrite y MPUSBReadInt tengan un valor de time‐out. VID 0x04d8. MPUSBReadInt. La aplicación del usuario tiene que llamar MPUSBReadInt() a menudo sin superar el máximo de 100. // Input PCHAR pEP. MPUSBWrite. Ejemplo: Si hay tres dispositivos con los siguientes PID_VID conectados: Dispositivo tipo 0. dwDir: Especifica la dirección del Endpoint: Integración de PIC18Fxx5x de Microchip™ con LabVIEW™ 8. Donde z es el número del Endpoint en decimal. Seguidamente con la instrucción (*MPUSBOpen) (DWORD instance. pVID_PID: Input: String que contiene el PID&VID del dispositivo objetivo. // Input PCHAR pVID_PID. conectados al Host. Es importante entender que el driver lo comparten distintos dispositivos. que tienen asignado el mismo pVID&PID. Al llamar la función tiene que haber un mecanismo que intente llamar MPUSOpen() desde 0 hasta MAX_NUM_MPUSB_DEV. El formato es “vid_xxxx&pid_yyyy”. // Input DWORD dwDir. Todas las pipes se abren con el atributo FILE_FLAG_OVERLAPPED contenida en la DLL. PID 0x0001 Dispositivo tipo 1. “handle” es el número de pipe que nos arrojó la instrucción anterior con dwDir=1. 0) Como tercer procedimiento. dwLen: Input: Especifica el número de bytes que se espera leer de la pipe. La función vuelve si transcurre el intervalo aunque no se complete la operación. Datos. // Input // Input // Input // Output // Input DWORD dwMilliseconds). En conclusión. handle: Input: Identifica la pipe del Endpoint que se va a leer. out_pipe. con dwDir=1 se abre la pipe para leer y con dwDir=0 se abre la pipe para escribir al PIC. VarPtr(s(0)). En conclusión. vid_pid. dwDir. pLenght: Output: Puntero al número de bytes leídos. // Input // Output // Input // Output // Input generalmente se declara al inicio del programa en el PIC. PDWORD pLength. DWORD dwLen. se lee el dato aplicando el número de pipe asignado por medio de la instrucción: (*MPUSBRead) (HANDLE handle. Si dwMilliseconds=0. PVOID pData. MP_READ: para MPUSBRead y MPUSBReadInt MP_Write: para MPUSBWrite Se abre un pipe a la vez (hay que usar dos veces ésta instrucción). DWORD dwMilliseconds). La pipe unida tiene que crearse con el atributo de acceso MP_READ. MPUSBRead pone este valor a cero antes de cualquier lectura o de chequear un error. dwMilliseconds: Input: Especifica el intervalo de time‐out en milisegundos.2 de National Instruments™ 6 / 15 . El formato típico de la instrucción es: MPUSBOpen(0. PDWORD pLength. DWORD dwLen. La pipe unida tiene que crearse con el atributo de acceso MP_WRITE. Si dwMilliseconds es infinito. DatosDeseados. El formato típico de la instrucción es: MPUSBRead(myInPipe. el intervalo de time‐out nunca termina. la función comprueba los datos de la pipe y vuelve inmediatamente. donde N es el número de bytes que maneja el “device” en el arreglo que envía a la PC. handle: Input: Identifica la pipe del Endpoint que se va a escribir. pData: Output: Puntero al buffer que recibe el dato leído de la pipe. El formato del dato es un arreglo de N bytes. “handle” es el Integración de PIC18Fxx5x de Microchip™ con LabVIEW™ 8. 1000) Para enviar los datos al PIC se hace de la misma manera con la instrucción: (*MPUSBWrite) (HANDLE handle. PVOID pData. el resultado que nos arroja ésta instrucción es el número de pipe que nos asigna el sistema operativo. dwReserved: No asignado por el momento. el valor por omisión es cero. PDATA. éstas son: MPUSBGETDLLVERSION(VOID) Lee el nivel de revisión del MPUSAPI.2 de National Instruments™ 7 / 15 . La pipe unida tiene que crearse con el atributo de acceso MP_READ. MPUSBRead pone este valor a cero antes de cualquier lectura o de chequear un error.dll. Esta función devuelve la versión del código de la dll en formato hexadecimal de 32bits. el intervalo de time‐out nunca termina. Integración de PIC18Fxx5x de Microchip™ con LabVIEW™ 8. la función comprueba los datos de la pipe y vuelve inmediatamente. Para cerrarlos basta ejecutar la instrucción: (*MPUSBClose)(HANDLE handle). Si dwMilliseconds=0. el intervalo de time‐out nunca termina. Si dwMilliseconds es infinito. VarPtr(bytes). número de pipe que nos arrojó la instrucción anterior con dwDir=0. DWLEN. bytes. pLenght: Output: Puntero al número de bytes leídos. se requiere cerrar las pipes. DWMILLISECONDS) handle: Input: Identifica la pipe del Endpoint que se va a leer. no realiza nada con el puerto USB. generalmente se declara al inicio del programa en el PIC. dwMilliseconds: Input: Especifica el intervalo de time‐out en milisegundos. donde N es el número de bytes que maneja el “device” en el arreglo que recibe de la PC. pLenght: Output: Puntero que proporciona el número de bytes que se escriben al llamar esta función. El formato del dato es un arreglo de N bytes. pero es necesario conocerlos. El formato típico de la instrucción es: MPUSBClose (myOutPipe) Existen otras dos instrucciones que no se implementaron en éste desarrollo. El formato típico de la instrucción es: MPUSBWrite(myOutPipe. VarPtr(SendData(0)). MPUSBWrite pone este valor a cero antes de cualquier lectura o de chequear un error. La función vuelve si transcurre el intervalo aunque no se complete la operación. pData: Output: Puntero al buffer que recibe el dato leído de la pipe. pData: Input: Puntero al buffer que contiene los datos que se van a escribir en la pipe. de donde handle: Input: Identifica la pipe del Endpoint que se va a cerrar. dwLen: Input: Especifica el número de bytes que hay que leer de la pipe. Si dwMilliseconds=0. La función vuelve si transcurre el intervalo aunque no se complete la operación. Si dwMilliseconds es infinito. 1000) Por ultimo. ya no es posible leer / escribir de nuevo. porque después de usarlos caducan. dwMilliseconds: Input: Especifica el intervalo de time‐out en milisegundos. PLENGTH. la función comprueba los datos de la pipe y vuelve inmediatamente. dwLen: Input: Especifica el número de bytes que se van a escribir en la pipe. El formato típico de la instrucción es: MPUSBGetDLLVersion() MPUSBREADINT(HANDLE. Esta dll se llama de acuerdo a la convención del lenguaje C. Enlace a la PC mediante USB. Para lograr el enlace a USB se utilizaron las funciones USB. Tipo Función ¿Aplicable time‐out? Interrupt IN‐MPUSRead. VarPtr(bytes). dejando la elección al programador. MPUS_FAIL=0 MPUSB_SUCCESS=1 MP_WRITE=0 MP_READ=1 MAX_NUM_MPUSB_DEV=127 vid_pid= “vid_04d8&pid_0011” En Visual Basic: out_pipe= “\MCHP_EPx” in_pipe= “\MCHP_EPy” En C y Delphi: out_pipe= “\\MCHP_EPx” in_pipe= “\\MCHP_EPy” Siendo x e y números del Endpoint por los que se van a realizar las transmisiones. Pruebas finales y correcciones. OBJETIVO El objetivo principal del presente trabajo es integrar el software de LabVIEW con el PIC18F2455 de Microchip con el fin de diseñar una tarjeta de adquisición de datos ajustada a la necesidad personalizada de cada desarrollo. bytes. 1000) TIPOS DE TRANSFERENCIAS SOPORTADO POR ESTAS INSTRUCCIONES En este apartado se recomienda que función utilizar dependiendo del tipo de transferencia. en la PC se descarga el driver que nos proporciona Microchip en su págína web. se comentan las pequeñas variaciones que existen al declarar estas variables en los distintos lenguajes. MPUSReadInt ‐si Interrupt OUT‐MPUSBWrite si Bulk IN MPUSBRead si Bulk OUT MPUSWrite si Isochronous IN‐MPUSBRead no Isochronous OUT‐MPUSBWrite no Interrupt: tipo interrupción Isochronous: tipo síncrono Nota: “Input” y “output” se refiere a los parámetros designados en las llamadas a estas funciones. VarPtr(SendData(0)). También. NO funciona si es llamada con el formato de STDLIB. se estableció la cantidad de datos a 64 bytes (8 bits por byte) de envío y recepción hacia la PC. OBJETIVOS PARTICULARES 1.2 de National Instruments™ 8 / 15 . dichas funciones están preparadas para que el microcontrolador sea reconocido como un dispositivo personalizado usando los descriptores que incluye el mismo lenguaje. 3. Todas son optativas. incorporadas en el lenguaje C del programa CCS para PICS. que son lo opuesto a los sentidos comunes desde la perspectiva de una aplicación haciendo llamadas. 1. DECLARACIÓN DE CONSTANTES Y VARIABLES Aquí aparecen las constantes y variables que el fabricante recomienda usar. Enlace de LabVIEW al PIC. ENLACE A LA PC MEDIANTE USB. Si tiene dudas sobre la descarga consulte el Integración de PIC18Fxx5x de Microchip™ con LabVIEW™ 8. El formato típico de la instrucción es: MPUSBReadInt(myOutPipe. 2. etc. display genéricos de dos líneas y gráficos. En propiedades del dispositivo instalado se puede observar el número PID&VID que se configuró en el PIC tal como se muestra en la figura 7. usb. el mismo compilador trae en la ayuda un diagrama esquemático para conectar al PIC dispositivos adicionales como teclado. Una vez configurado el hardware. modificando los descriptores para que se puedan hacer Fig. apartado 3. en cuanto le solicite los driver. Se sugiere que al descomprimir el archivo del driver se instale en C:\Archivos de Programa\ para que el driver quede en: C:\Archivos de Programa\ Microchip Solutions\USB Tools\MCHPUSB Custom Driver\MCHPUSB Driver\Release ya que al ejecutar la aplicación del LabVIEW se tomará como referencia ésa dirección. Pruebas finales y correcciones en éste documento. sólo proporcione la dirección donde fue descomprimido el driver. Si todo es correcto debemos de observar en el administrador de dispositivos un nuevo hardware que se agregó tal como se muestra en la figura 6. 7 En propiedades del PIC instalado en la PC se observa el número de PID&VID Integración de PIC18Fxx5x de Microchip™ con LabVIEW™ 8. para esto no olvide sustituir en el descriptor las 3 líneas que se comentan en el código del programa que se anexa al final de éste documento. el puerto serie.2 de National Instruments™ 9 / 15 . se programó el PIC. Por parte del Hardware. I2C. 6 Instalación del PIC en la PC Fig. Instale el hardware a la PC de manera similar al que se instala un dispositivo USB que adquiere en el mercado: conecte al dispositivo a la PC. 2 de National Instruments™ 10 / 15 . Manipular directamente la dll con la instrucción “Call Library Function Node” Los tres métodos nos ofrecen ventajas de acuerdo al nivel de lenguaje de programación que se tenga. Siguiendo los pasos descritos en la sección de antecedentes de éste documento. Todo esto basándose en ejemplos que el compilador trae incluidos en la carpeta de “examples”. Para poder iniciar el enlace con el PIC es necesario que se haya concluido satisfactoriamente la instalación del paquete de drivers de Microchip. habilitar un indicador. Para la implementación de los métodos anteriores el LabVIEW 8. etc. escoja la opción blank VI y en la barra de menús déle un click al menú de window Show block diagram.. Para iniciar con la implementación del código. el VID&PID. con el fin de visualizar la ocurrencia de los eventos. En los tres casos se manipula la misma librería. aún no es suficiente la información. se puede mostrar mensajes. ENLACE DEL LABVIEW AL PIC PARA EL CONTROL Y MONITOREO. la cual permite saber al instante qué es lo que se requiere para la interconexión de los módulos. guardarlos en un archivo.2 ofrece una ayuda en línea. No olvide sustituir en el descriptor usb_desc_scope. Sólo basta investigar un poco en la red para ver los resultados (Consulte la bibliografía de éste documento). las instrucciones que se requieren implementar tienen la siguiente secuencia y formato en LabVIEW son: Integración de PIC18Fxx5x de Microchip™ con LabVIEW™ 8. porque la dificultad está en identificar el tipo de variable que acepta cada software de desarrollo y que también sea aceptada por la DLL. Sin embargo. mover un detector de nivel. Elaborar un programa en C y cargarlo en la instrucción “Code Interface Node” c. 2.h las 3 líneas que se comentan en el código del programa. Cabe aclarar que los diseños en USB con PIC día a día se van incrementando. Por lo que de nuevo se sugiere consultar las notas de aplicaciones de Microchip y ejemplos publicados en la web (con cualquier software de desarrollo). En el mismo paquete que se descarga de la red obtenemos instrucciones y ejemplos en C++ que muestran como manipular el driver y los parámetros requeridos para aplicarlo. graficar los datos obtenidos. En este desarrollo se utilizó el tercer método parar manipular la librería de una manera directa y sin intermediarios. transacciones de 64 bytes. El código del programa del PIC se encuentra al final del documento con sus respectivos comentarios. primero inicie el programa de LabVIEW. Para hacer la conexión con LabVIEW simplemente se “tradujeron” las instrucciones al lenguaje gráfico y se acondicionaron las variables para que la DLL pueda reconocerlo. Entre las ventajas que nos ofrece el labVIEW podemos mencionar: el ambiente gráfico muy amigable. Por parte de LabVIEW es necesario conocer qué función es más fácil de implementar: Existen tres métodos: a. Hacer un ejecutable y llamarlo con la función “system exec vi” b. Conociendo esto pasos. Función Call Library Function Node vista en el block diagram Fig.dll tenemos que declararla como string. según las instrucciones de uso del mpusbapi. Data type: Use el que trae de manera predeterminada. Formato: long _MPUSBGetDeviceCount(CStr vid_pid) De donde: vid_pid = vid_04d8&pid_000b Para iniciar la programación en LabVIEW se requiere estar en la ventana del block diagram de LabVIEW presione el botón derecho del mouse y en el menú que sale a continuación presione los siguientes submenús connectivity libraries & executables y déle un click a Call Library Function Node y se mostrará un pequeño bloque como se muestra en la figura 8. presione el botón Integración de PIC18Fxx5x de Microchip™ con LabVIEW™ 8. Déle doble clic en la parte amarilla y saldrá un menú de configuración como se muestra en la figura 9. y la misma función proporciona una salida en formato numérico. 9. Presione la carpeta y proporcione la dirección donde se instaló la dll de Microchip (Si Ud lo instaló en la dirección sugerida anteriormente queda en “C:\Archivos de programa\Microchip Solutions\USB Tools\MCHPUSB Custom Driver\Mpusbapi\Dll\Borland_C” e inmediatamente cargará la dll. Fig. en éste caso el PID&VID que se quiere llamar es vid_04d8&pid_000b. Al presionar la flecha de menú en el campo de Function Name (que apunta hacia abajo) podrá observar TODAS las funciones que la dll admite. Configuración de parámetros de la Función Call Library Function Node. En los campos que aparecerán a continuación llénelos como sigue: Name: use el que trae de manera predeterminada ó un nombre que pueda identificar fácilmente a la variable type: Presione la flecha de opciones y seleccione numeric.2 de National Instruments™ 11 / 15 . a. Recuerde que se va a implementar la primera instrucción MPUSBGetDeviceCount el cual nos proporciona como resultado el número de dispositivos conectados a la PC con el PID&VID que se va a llamar. Identificar el número de dispositivos conectados con el PID&VID y ubicar el que corresponde al hardware de su desarrollo. 8. seguidamente presione la pestaña “parameters” en la parte superior de la ventana y aparecerá otro menú como se muestra en la figura 11. en la misma ventana de la figura 9 presione la flecha de menú en el campo Function Name (que apunta hacia abajo) y escoja la función MPUSBGetDeviceCount como se muestra en la figura 10. solamente tiene que anexar las variables y acondicionar el tipo de entrada. que traen una leyenda Long al inicio.dll Integración de PIC18Fxx5x de Microchip™ con LabVIEW™ 8. se requiere configurar de igual manera que la instrucción que se acaba de explicar. String Format: se sugiere dejar la que trae de manera predeterminada (C string Pointer).dll Fig. Ahora cree una constante. presione el menú del campo Function Name y seleccione la función a utilizar (MPUSBWrite. escriba vid_04d8&pid_000b en su interior y conecte al pin marcado PID&VID del bloque que acaba de configurar y el resultado que nos proporcione ésta función ya está lista para usarse!!! Los demás parámetros se configuran de manera similar a lo descrito anteriormente es importante llegar hasta el paso (f).2 de National Instruments™ 12 / 15 . presione el botón OK y la función ya está configurada. 10. Minimun size: se sugiere dejar la que trae de manera predeterminada (en blanco). 10 Configurando la función de salida de MPUSBGetDeviceCount de mpusbapi. Configurando la función MPUSBGetDeviceCount de mpusbapi. marcado como + y se agregará otra variable a configurar como sigue: Name: Ponga el nombre que Ud desee en el campo Name (se sugiere un nombre que pueda identificar fácilmente a la variable) type: string. Fig. MPUSBRead ó MPUSBClose) presione la pestaña de parámeters y deje el parámetro Function Name con los valores que trae de manera predeterminada y sólo agregue los demás parámetros que necesita la dll de manera similar a lo descrito anteriormente y quedará implementada su función. para los que traen la leyenda Void al inicio se configura de la siguiente manera: Llame a la Función Call Library Function Node y escríbale la dirección de la dll. 11 Agregando parámetros de la función MPUSBGetDeviceCount de mpusbapi.dll Fig. sólo hay que tener en cuenta lo siguiente: Para la función MPUSBOpen. CStr VID_PID. long dwDir. Formato: long _MPUSBOpen(long instance. long dwMilliseconds) De donde: Integración de PIC18Fxx5x de Microchip™ con LabVIEW™ 8. Dimensions: 1. dwDir = 1. vid_pid = “vid_04d8&pid_000b”. Abra la pipe para leer (si no desea leer puede omitir éste paso). long dwlen. es el dato que se envía y/o recibe del PIC (fig. Long del tipo numérica. dwReserved = 0. d. vid_pid = “vid_04d8&pid_000b”. b. Los marcados con * son del tipo variable numérica con Data type: unsigned 32 bits integer y Pass: seleccionado a Pointer to value. IMPORTANTE: Para marcados como: los parámetros Cstr son variables del tipo String. 13 Configuración del arreglo de 1X64 bytes de 8 bits que se envia/recibe del PIC desde LabVIEW De donde: instance = 0. Y los marcados con unsigned char * son arreglos de 1X64 bytes de 8 bits (vector) y configurados con Type: Array. CStr EP. Abra la pipe para escribir (si no desea escribir puede omitir éste paso).2 de National Instruments™ 13 / 15 . long *length. Formato: long _MPUSBOpen(long instance. unsigned char *data. Data Type: unsigned 8 bits integer. 12 Funciones de mpusbapi. 13). Lea los datos de la pipe (solamente si la pipe está abierta) Formato: void _MPUSBRead(long Handle. Array Format: Array Data Pointer. c. dwDir = 0. CStr VID_PID. long dwReserved) De donde: instance = 0.dll declaradas como Void Fig. long dwReserved) Fig. Minimun size: seleccione la variable asignada a la longitud del arreglo a enviar / recibir. EP = “\MCHP_EP1”. EP = “\MCHP_EP1”. dwReserved = 0. long dwDir. CStr EP. Asegúrese que la dll quede instalado en: C:\Archivos de programa \Microchip Solutions\USB Tools\MCHPUSB Custom Driver\Mpusbapi\Dll 3.2 de National Instruments™ 14 / 15 .com Una vez enlazado con el PIC. data = es la información que envía el PIC en un vector de 64 bytes.vi >> puede solicitarlo a los siguientes correos electrónicos: gpoolb@hotmail. long dwMilliseconds) De donde: Handle = Número obtenido como resultado de la instrucción MPUSBOpen con dwDir = 1. éstos caducan. Escriba los datos de la pipe (solamente si la pipe está abierta) Formato:: void _MPUSBWrite(long Handle.com. También es muy importante habilitar el fusible VREGEN para que Vusb sea activado. e. una vez con dwDir=1 para abrir la pipe para leer y con dwDir=0 para abrir la pipe para escribir al PIC. De donde: Handle = Número obtenido como resultado de la instrucción MPUSBOpen con dwDir = 0 Y para la última “pipe”. f.1uF como se indica en el diagrama. length = 64. Recordemos que si se abren 2 pipes. Pruebas finales y correcciones. ya que se tiene el completo control del software del PIC (por parte del Compilador C) y en la PC (por parte del LabVIEW). dwMiliseconds = 200. Para el enlace con la PC por USB es muy importante conectar el capacitor (C4) de 0. Formato: void _MPUSBClose(long Handle). data = es la información que se envía al PIC en un vector de 64 bytes. length = 64. si se omite generará un error al momento del enlace. Formato: void _MPUSBClose(long Handle). dwlen = 64. No olvide seguir la secuencia de apertura y cierre de la “pipe” con una “structura” del tipo “Flat sequence” para su ejecución en secuencia. dwlen = 64. Handle corresponde al Número que se obtiene como resultado de la instrucción MPUSBOpen con dwDir = 0. el resultado que nos arroja ésta instrucción es el número de pipe que nos asigna el sistema operativo. Es importante considerar la función del PLL del PIC ya que de acuerdo al valor de la frecuencia del cristal depende el valor de la Integración de PIC18Fxx5x de Microchip™ con LabVIEW™ 8. long dwlen. ya que. Cierre la(s) pipe(s) abierta(s). unsigned char *data. dwMiliseconds = 200. ambas hay que cerrarlas. De donde: Handle = Número que porporciona como resultado de la instrucción MPUSBOpen con dwDir = 1 Recuerde que se debe abrir una “pipe” a la vez (hay que usar dos veces ésta instrucción). lugojim@gmail. ya que una vez usados. long *length. los datos pueden fluir las veces que sea necesario de un sentido a otro y manipularlos como se desee. El código implementado en labVIEW <<DAQ. php ?topic=13418.1 Integración de PIC18Fxx5x de Microchip™ con LabVIEW™ 8. Por lo que respecta al descriptor del USB.com.1 %20Installer.zip Asegúrese que el archivo sea el que tiene por nombre MCHPFSUSB Framework v2. al darle click lleva directamente al driver.microchip.microchip. es importante considerar el valor del VID & PID.garcia‐ cuervo.0. no funcionará.hobbypic.iespana.com/index. multiplicación de la frecuencia del reloj para generar los 48Mhz necesarios para el USB. En la dirección web que se menciona en la bibliografía se descarga el driver. el cual.google.com/stellent/idcplg?I dcService=SS_GET_PAGE&nodeId=2651&par am=en534494 Descarga directa : http://ww1. generalmente el acceso a la página queda en los primeros resultados de la búsqueda.com/ http://www.HTM" Ahí se proporciona información sobre la compatibilidad en sistemas operativos y ejemplos desarrollados. es importante verificar que el driver de Microchip quede en C:\Archivos de Programa\ del disco duro ya que se tomará como referencia para el llamado de la dll y que el archivo que se descargó sea el que está llamado Microchip MCHPFSUSB v2. en caso de haber caducado busque en la sección Design Aplication Design Center Wired Conectivity USB Software/Tools MCHPFSUSB Framework v2.ar/foros/index.2 de National Instruments™ 15 / 15 . Se recomienda verificar el archivo que nos proporciona Microchip en el driver. La DLL que proporciona Microchip se puede descargar desde su sitio web.do=Bookmark http://picmania.php Driver de microchip: http://www.1 ó simplemente teclee “usb software/tools” en la ventanita de búsqueda y déle un clic en el botón “site search”.es/programacion/datos /MPUSBApi.pdf www. el driver que proporciona Microchip no lo reconocerá y en consecuencia. Para esto no olvide sustituir en el descriptor las 3 líneas que se comentan en el código del programa que se anexa en éste documento.todopic.1 Installer (la última versión). Asegurese de obtener la versión más actual. http://www. en la siguiente dirección: "C:\ ARCHIVOS DE PROGRAMA\MICROCHIP SOLUTIONS\USB TOOLS\MCHPUSB CUSTOM DRIVER\MCHPUSB DRIVER\MCHPUSB DRIVER RELEASE NOTES.com/downloads/en/D eviceDoc/Microchip%20MCHPFSUSB%20v2.usb. ya que si no es configurado correctamente. BIBLIOGRAFÍA http://www. En el mismo paquete incluye ejemplos que incluyen el programa fuente para la compresión de su uso.mx búsqueda “PIC USB”. En caso de que el LabVIEW genere error al ejecutar el programa.com.org/developers/docs/ http://slalen. h> //#device ADC=10 //Descomente ésta opción en caso de usar el ADC a 10bits #fuses HSPLL.c //// //// //// //// Este ejemplo muestra como desarrollar un sencillo dispositivo //// //// USB con el PIC18F2550 (para la serie 18Fxx5x) //// //// los drivers que se requiere para éste dispositivo son los que //// //// proporciona Microchip en su pagina web.C. //// //// //// //// Al aplicar energia al PIC se enciende el LED en RB6 y hasta //// //// que el dispositivo halla sido configurado por la PC via puerto //// //// USB se encende el Led en RB7. saldrá el asistente //// //// para la instalación del driver.NODEBUG. Julio Lugo para proyecto de //// //// materia Sensores y Actuadores impartida por el profesor //// //// M. xmit=PIN_C6.NOPROTECT. Gabriel Pool y Ing.h for more information // ///////////////////////////////////////////////////////////////////////////// #define USB_HID_DEVICE directivas HID #define USB_EP1_TX_ENABLE bulk/interrupt transfers #define USB_EP1_RX_ENABLE bulk/interrupt transfers #define USB_EP1_TX_SIZE endpoint 1 buffer FALSE USB_ENABLE_BULK USB_ENABLE_BULK 64 Página 1 //deshabilitamos el uso de las //turn on EP1(EndPoint1) for IN //turn on EP1(EndPoint1) for OUT //size to allocate for the tx . rcv=PIN_C7) ///////////////////////////////////////////////////////////////////////////// // // CCS Library dynamic defines.DAQ Código de programa ///////////////////////////////////////////////////////////////////////// //// DAQ. Se instala el driver //// //// que nos proporciona Microchip.VREGEN.PLL3.com //// //// //// ///////////////////////////////////////////////////////////////////////// #include <18F2455.MCLR.CPUDIV1.com //// //// y lugojim@gmail. México) en Junio 2008 //// //// Este programa es de uso libre siempre y cuando que contenga //// //// esta leyenda y nos agradaría recibir las mejoras que Ud //// //// amablemente nos envie a estos correos: [email protected] #use delay(clock=48000000) #use rs232(baud=9600.227 //// //// Este programa fue desarrollado para estimular el uso del //// //// puerto USB y desarrollar tarjetas de adquisición económicas //// //// por Ing.USBDIV. For dynamic configuration of the CCS Library // for your application several defines need to be made. y se basan en protocolo //// //// USB_ENABLE_BULK su XTAL es de 12Mhz. Pedro Nájera //// //// (Universidad Modelo en Mérida. Yucatán.NOWDT. See the comments // at usb. //// //// Sólo si la PC le envia un dato al PIC éste enviará el dato del //// //// puerto A //// //// //// ///////////////////////////////////////////////////////////////////////// //// //// //// Realizado con el compilador CCS PCWH 3. //// //// //// //// //// //// Cuando el dispositivo sea conectado al PC. El PIC muestra el dato que le //// //// envia la PC en el vector [0] e inmediatamente el PIC le //// //// responde con el valor del puerto A almacenado en el vector [1].NOLVP. EL DISPOSITIVO NO SERA RECONOCIDO POR EL DRIVER.0x04.DAQ #define USB_EP1_RX_SIZE endpoint 1 buffer 64 //size to allocate for the rx ///////////////////////////////////////////////////////////////////////////// // // If you are using a USB connection sense pin. // (connection sense should look like this: // 100k // VBUS-----+----/\/\/\/\/\----. define it here.0x00.(I/O PIN ON PIC) // | // +----/\/\/\/\/\-----GND // 100k // (where VBUS is pin1 of the USB connector) // ///////////////////////////////////////////////////////////////////////////// //#define USB_CON_SENSE_PIN PIN_B2 //CCS 18F4550 development kit has optional conection sense pin ///////////////////////////////////////////////////////////////////////////// // // Include the CCS USB Libraries. 0x0B.h lo siguiente: 0xD8.c> descriptor reports //Microchip PIC18Fxx5x Hardware layer for CCS's //descriptors del Pic USB //handles usb setup tokens and get ///////////////////////////////////////////////////////////////////////////// /* IMPORTANTE: No olvidar sustituir en la sección start device descriptors (aprox en la linea 132) al descriptor ubicado en C:\Archivos de programa\PICC\Drivers\usb_desc_scope. 0x01. comment out this line.h> PIC USB driver #include <usb_desc_scope. See the comments at the top of these // files for more information // ///////////////////////////////////////////////////////////////////////////// #include <pic18_usb. Without connection // sense you will not know if the device gets disconnected.h> #include <usb.******** */ ///////////////////////////////////////////////////////////////////////////// #define #define #define #define LEDV LEDR LED_ON LED_OFF PIN_B6 PIN_B7 output_high output_low // Registro de control de E/S del // Registro de control de E/S del // // // // Página 2 Registro Registro Registro Registro del puerto del puerto de control del modulo A B del ADC comparador #BYTE TRISA puerto A #BYTE TRISB puerto B #BYTE PORTA #BYTE PORTB #BYTE ADCON1 #BYTE CMCON = 0x0F92 = 0x0F93 = 0x0F80 = 0x0F81 = 0x0FC1 = 0x0FB4 .0x00. //vendor id (0x04D8 is Microchip) //product id //device release number **********DE LO CONTRARIO. If you are // not using connection sense. USB_DTS_TOGGLE). LED_ON(LEDR). entradas TRISB = 0x00. establecer contacto con la PC TRISA = 0x0FF. entradas digitales CMCON = 0x07. salidas ADCON1 = 0x0F. // cojemos el paquete de tamaño 8bytes del EP1 y almacenamos en dato portb = dato[0]. 64. sea configurado por el host LED_OFF(LEDV).DAQ int8 dato[64]. //y enviamos el mismo paquete de tamaño 64bytes del EP1 al PC } } } } //encendemos led en RB6 para // inicializamos el USB // habilita periferico usb e // esperamos hasta que el PicUSB // encendemos led en RB7 al // Se declara el puerto A como // Se declara el puerto B como // Se configura al ADC para // Se configuran los comparadores // si el Pic está configurado via Página 3 . // Se muestra al byte completo en el puerto B dato[1] = porta. // Se lee el puerto A y se almacena en el vector usb_put_packet(1. dato. interrupciones usb_wait_for_enumeration(). 64). usb_init(). para entradas digitales while (TRUE) { if(usb_enumerated()) USB { if (usb_kbhit(1)) // si el endpoint de salida contiene datos del host { usb_get_packet(1. usb_task(). dato. void main(void) { LED_ON(LEDV). indicar presencia de energia LED_OFF(LEDR). July 07.1uF 1 2 3 4 10 B 19 8 9 USB RA0 RA1 RA2 RA3 RA4 J3 POWER SUPPLY +5V 4 3 2 1 C2 2200uF C1 1000uF +12V C7 22pF C8 22pF S1 SW S1 SW S1 SW S1 SW S1 SW S1 SW ENTRADAS A Diseñado por: Ing. Gabriel Pool.com y Julio Lugo.1uF R4 150 R5 150 R4 150 R5 150 R4 150 R5 150 R4 150 R5 150 D2 D3 D4 D5 D6 D7 D8 D RA0 RA1 RA2 RA3 RA4 RA5 +5V C 2 3 4 5 6 7 R6 10K R7 100 11 1 +5V S1 SW RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 21 22 23 24 25 26 27 28 RA0 RA1 RA2 RA3 RA4/T0CKI/C1OUT/RCV RC6/TX/CK RA5/SS RC7/RX/DT/SDO RC0/T1OSO/T13CKI MCLR/VPP/RE3 RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7 OSC1/CLKI U2 PIC18F2455 RC2 RC1 VDD RB0 RB1 RB2 RB3 RB4 RB5 RB6 17 18 13 12 J1 RB7 C J4 1 2 3 4 5 ICSP OSC2/CLKO/RA6 RC4/D-/VM RC5/D+/VP VUSB GND GND 15 16 14 C4 0. [email protected] 4 3 2 1 SALIDAS D +5V +5V D1 R1 10K R2 10K R1 10K R2 10K R2 10K R2 10K 20 C5 0. [email protected] Size A Date: 5 4 3 RA5 X1 12 MHz B A Document Number DAQ Monday. 2008 2 Rev 01 Sheet 1 1 of 1 .com Title Integración de PIC18F2455 con LabVIEW 8.
Report "Integración de PIC18F2455 con LabVIEW 8.2 con mpusbapi"