Turulo USB09
-
Upload
adrianabenavides -
Category
Documents
-
view
88 -
download
0
Transcript of Turulo USB09
Turulo USB09_LabVIEW 8.6
Publicado por adrianjpc Etiquetas: microcontroladores
En este proyecto se presenta la comunicación USB de tipo Bulk Transfer utilizando labVIEW 8.6 y la tarjeta de adquisición Turulo USB09. La comunicación se realiza a través de una librería picusb.vi . El puente que establece la comunicación entre el Microcontrolador y la PC se realiza mediante las librerías USB del software CCS C Compiler y el driver de la tarjeta de adquisicion para Microsoft Windows XP y Windows 7.
La pequeña práctica se basara el control de encendido de leds y relevadores de la tarjeta Turulo, dichas salidas son del puerto D (PORTD), estas salidas se manipularan utilizando botones en labVIEW a traves de la libreria picusb.vi. También al mismo tiempo se adquiere una señal analógica del puerto AN4 de la tarjeta Turulo, los datos capturados se enviaran a labview y seran graficados.
A continuación seguimos todos los pasos para echar andar nuestro proyecto utilizando labview.
1.-Tener la Turulo USB09.
para aquellos que no cuentan con esta tarjeta pueden realizar la practica desarrollando este pequeño
circuito.
Circuito electronico
En la siguiente figura se muestra el diagrama de como funciona los reguladores de voltaje, los hay
interno y externos. Nosotros utilizaremos el regulador interno, para ello conectamos el capacitor en la
entrada Vusb .
El regulador interno usb lo habilitamos con el siguiente codigo en CCS:
#fuse VREGEN
Configuración de Oscilador
Otro aspecto muy importante es la configuración de oscilador en los PIC's de la familia 18Fxx5x que
son los que soportan el USB 2.0( datasheet 18F2455-2550-4455-4550 ).
La configuracion del oscilador
nos indica que se debe obtener una entrada de 4Mhz independientemente de cualquier crystal que se
este utilizando.
El módulo USB Clock Source tiene a su entrada un PLL Prescaler, o sea un divisor de frecuencia. En
cada una de sus salidas vamos a tener FOSC dividida por 1, 2, 3, 4, 5, 6, 10 ó 12. Y mediante PLLDIV
que no es mas que un Multiplexor vamos a seleccionar la que deseamos usar.
Así si nuestro cristal es de 20 Mhz y en PLLDIV colocamos un 100 estaremos dividiendo por 5 el valor
de FOSC con lo que tendremos 4 Mhz a la salida del MUX. Si por el contrario el cristal es de 4 Mhz y en
PLLDIV colocamos un 000 entonces dividiremos por 1 FOSC con lo que tendremos también 4 Mhz a la
salida del MUX.
Esta salida del MUX es lo que utilizamos para inyectársela al PLL de 96 Mhz. Si le metemos 4 Mhz él
genera 96 Mhz. Es esta capacidad de pasar de 4 Mhz a 96 Mhz la que nos da la posibilidad de usar un
montón de cristales distintos.
Pero 96 Mhz es el doble de lo que nos hace falta para el USB que son 48 Mhz. Asi que inmediatamente
después tenemos que tener, y tenemos, un divisor por 2 que es el segundo camino por el que
llegamos a USBDIV y en este caso le pondremos un 1 para usar la señal proveniente del PLL
Observemos que además de inyectar la señal oscilante en USBDIV también se conecta la señal del PLL
a 96 Mhz en un Postscaler, otro divisor, en este caso por 2, 3, 4 ó 6 y cuyas señales van al CPUDIV.
O sea que podemos generar una señal de reloj para nuestro PIC, no para el USB sino para la velocidad
de ejecución de nuestro programa tomándola del PLL y que puede ser de 16 Mhz, 24 Mhz, 32 Mhz ó 48
Mhz.
Pero además la señal original llegaba en paralelo al Oscilator Postcaler, otro divisor más, que de forma
directa, sin pasar por el módulo PLL nos divide la frecuencia original del cristal por 1, 2, 3 ó 4 y que
también va a parar al CPUDIV pero desde otro origen. Con este módulo podemos obtener otra gama
de frecuencias distinta para hacer correr el programa.
Cual de ambos CPUDIV vamos a utilizar lo seleccionamos con el switch FOSC3:FOSC0 que es de
donde sacaremos la definitiva frecuencia de ejecución de programas.
Por último también tenemos disponible una entrada proveniente del Primary Clock y que dividida por
4 llega también a FSEN y podemos utilizarla en lugar de la que le llega desde el canal directo/PLL.
Como puedes ver es toda una maravilla cómo esta montado este tema de los osciladores, sobre todo
por lo que respecta a las inmensas capacidades que tiene para hacer correr nuestro PIC a decenas de
velocidades distintas siendo capaz, al mismo tiempo de tener disponibles los 48 Mhz imprescindibles
para el USB 2.0.
Por lo tanto nuestro circuito o configuración quedaria de la siguiente manera:
Realizado en CCS C :
#fuses
HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPU
DIV1,VREGEN
2-Firmware Turulo USB09 realizado en CCS C Compiler.
El firmware es un pequeño código de bajo nivel que se realiza para poder controlar entradas y salidas
dependiendo de las necesidades del usuario. Además este pequeño código tendrá el objetivo de poder
entenderse con la computadora o PC, realizando así la función de avisarte en el momento que ha sido
conectado y detectado por la PC. En ese momento el firmware estará en espera de cualquier dato que
se esté enviando por la PC atreves de cualquier software que se esté utilizando, en nuestro caso
utilizaremos LabVIEW 8.6. Acontinuación se muestra en un pequeño diagrama a bloques de lo que
hace el firmware.
Descarga el firmware (PicUSB)
Despues de haberlo descargado pasamos a compilarlo y observaremos que genera 4 warning, no se
espanten esto es normal.
Personalizando nuestro dispositivo o los descriptores
La personalizacion del dispositivo se lleva acabo dentro del descriptor PicUSB.h
//device descriptor
char const USB_DEVICE_DESC[] ={
USB_DESC_DEVICE_LEN, //the length of this report
0x01, //constant DEVICE (0x01)
0x10,0x01, //usb version in bcd
0x00, //class code (if 0, interface defines class. FF is vendor defined)
0x00, //subclass code
0x00, //protocol code
USB_MAX_EP0_PACKET_LENGTH, //max packet size for endpoint 0. (SLOW SPEED SPECIFIES 8)
0xD8,0x04, //vendor id (0x04D8 is Microchip)
0x10,0x00, //product id (modificable)
0x01,0x00, //device release number
0x01, //index of string description of manufacturer. therefore we point to string_1 array (see
below)
0x02, //index of string descriptor of the product
0x00, //index of string descriptor of serial number
USB_NUM_CONFIGURATIONS //number of possible configurations
};
...
... Hacer notar que la numeración hexadecimal de la descripción del VID / PID va al revés, es decir,
el primero número hex. será el último y viceversa.
...
...
char const USB_STRING_DESC[]={
//string 0
4, //length of string index
USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
0x09,0x04, //Microsoft Defined for US-English
//string 1 --> la compañia del producto ???
8, //length of string index
USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
'J',0,
'A',0,
'P',0,
'C',0,
//string 2 --> nombre del dispositivo
24, //length of string index
USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
'J',0,
'A',0,
'P',0,
'C',0,
' ',0,
'P',0,
'i',0,
'c',0,
'U',0,
'S',0,
'B',0
}; Al conectarse el ordenador estaria reconociendo nuestro dispositivo con el nombre con que se
configuro o se personalizo. Apareceria de la siguiente manera:
Para que nuestro dispositivo se comunique con el ordenador lo primero que tenemos que hacer es
configurar nuestro driver. Para ello abrimos el archivo mchpusb.inf y comenzamos a editarlo a nuestro
gusto.
Descarga el drivers(PicUSB-Driver)
[Version]
Signature="$WINDOWS NT$"
Class=%ClassName%
ClassGuid={4D36E911-E325-11CE-BFC1-08002BE10318}
Provider=%MFGNAME%
DriverVer=03/04/2009,1.1.0.0
CatalogFile=picusb.cat
[DestinationDirs]
DefaultDestDir = 12
PicUSB.ClassCopyFiles = 11
;---------------------------------------------------------------
; Class installation sections
;---------------------------------------------------------------
[ClassInstall32]
AddReg=PicUSB.ClassReg
CopyFiles=PicUSB.ClassCopyFiles
[PicUSB.ClassReg]
HKR,,,0,%ClassName%
HKR,,Class,,%ClassDesc%
HKR,,Icon,,11
HKR,,Installer32,,"mchpusb.dll,PicUSBClassInstaller"
[PicUSB.ClassCopyFiles]
mchpusb.dll
;---------------------------------------------------------------
; Device Install Section
;---------------------------------------------------------------
[Manufacturer]
%MFGNAME%=Standard
[Standard]
%DESCRIPTION%=DriverInstall, USB\VID_04D8&PID_0010 (modificable)
[SourceDisksNames]
1 = %INSTDISK%,,,""
[SourceDisksFiles]
mchpusb.sys = 1,,
wdmstub.sys = 1,,
mchpusb.dll = 1,,
;---------------------------------------------------------------
; Windows 2000/XP Sections
;---------------------------------------------------------------
[DriverInstall.NT]
CopyFiles=DriverCopyFiles
[DriverCopyFiles]
mchpusb.sys
[DriverInstall.NT.Services]
AddService = PicUSB, 2, DriverService
[DriverService]
DisplayName = %SVCDESC%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\mchpusb.sys
LoadOrderGroup = Extended Base
;---------------------------------------------------------------
; Windows 98/Me Sections
;---------------------------------------------------------------
[DriverInstall]
AddReg=DriverAddReg
CopyFiles=DriverCopyFiles,StubCopyFiles
DriverVer=09/26/2009,1.0.0.0
[DriverAddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,"wdmstub.sys,mchpusb.sys"
[StubCopyFiles]
wdmstub.sys
;---------------------------------------------------------------
;String Definitions (modificable)
;---------------------------------------------------------------
[Strings]
MFGNAME="JAPC PicUSB"
INSTDISK="PicUSB Device Driver Disc"
DESCRIPTION="PicUSB-LabVIEW"
SVCDESC="PicUSB Device Driver"
ClassName="TARJETA DE ADQUISICION"
ClassDesc="PicUSB Sample Device"
Tanto como VID y PID deven tener el mismo numero hexadecimal que el firmware (Descriptores) del
dispositivo para que entre la PC y el Dispositivo se establesca la comunicacion.
Cuando conectemos por primera vez nuestro dipositivo nos preguntara sobre el driver espesifico del
dispositivo, le damos la ruta en donde se encuentra nuestro drivers previamente personalisado.
Le damos finalizar y nos vamos administrador de dispositivo para si nuestro dispositivo quedo bien
configurado por el ordenador. Aparecera con el nombre Tarjeta de adquisción (PicUSB-LabVIEW).
Le damos doble clic para ver la informacion del dispositivo, y saber si fue configurado con exito.
Observamos en el cuadro de texto que nos indica que Este dispositivo esta funcionando
correctamente. Ahora es momento de enviar y recibir informacion del dipositivo PicUSB desde la
plataforma LabVIEW.
3. Envió y Recepción de datos desde LabVIEW
La programación en labVIEW (PicUSB-LabVIEW) se realizo a través de un subvi (picusb) que realize
para poder manipular facilmente el dispositivo usb. El subvi creado se muestra en la siguiente figura,
donde muestra la configuracion que se tiene que realizar.
Descarga el subvi ( picusb)
Para tener agregado este modulo(SubVI) a labVIEW, debe copiarse a la siguente direccion
C:\Archivos de programa\National Instruments\LabVIEW 8.6\user.lib\picusb
Cuando hayamos realizado esto, nuestro modulo aparecerá agregado en labview.
El subi creado tienes las siguientes entradas:
Vid_Pid: Es el nombre del vendedor y producto con el que fue configurado nuestro dispositivo, en
nuestro caso: "vid_0X04d8&pid_0010"
N.bytes a escribir: Nos indica el numero de bytes o el tamño del dato que vamos a transferir.
Dato a Enviar: Indica el dato que se va a enviar.
Retardo de entrada y salida: Nos indica a cada cuanto tiempo haremos la capturar de datos. El
tiempo tiene que indicarse en milisegundos.
N.bytes a Recibir: Aqui indicaremos el tamaño de datos que estamos enviando del dispositivo usb
(microcontrolador o PicUSB).
Dato Recibido: En esta parte es donde capturaremos los datos que se estan enviando del dispocitivo
y lo visualisamos en un grafica si estamos enviando datos de temperatura o el termometro que tiene
labview, esto depende de lo que se este controlando.
En la siguiente figura se muestra un ejemplo como utilize esta pequeña libreria o subvi que diseñe, en
una programacion estructura de labview o diagrama a bloque .
La programacion virtual (Panel Frontal) del proyecto se observa en la siguiente figura:
En la figura, los botones que se muestran son para encender y apagar los leds que se mostro en el
diagrama de circuito del dispositivo o tambien nos puede servir para accionar valvulas, motores o
cualquier carga. y la grafica para ver como va cambiando una señal analogica con respecto al tiempo.
Esta señal puede derivar de cualquier sensor analogico.
Descargar el proyecto completo (Picusb-LabVIEW)
El proyecto completo lo podemos observar detalladamente en el video que publique en youtube.
Con esto se presento una metodología que permite la comunicación entre un microcontrolador
PIC18F4550 y LabVIEW para tareas de adquisición de datos. Los resultados obtenidos demuestran que
la metodología implementada funciona perfectamente, se logra trasferir datos de alta velocidad. Con
esta técnica se pretende que estudiante e investigadores puedan construir una tarjeta de adquisición
de datos y que pueda implementarse para tareas de simulación, supervisión y control.
DAQ Turulo USB09 con Windows 7 de 32 y 64bits
Publicado por adrianjpc
"Al conectar por primera la Turulo USB09 con windows seven, te aparecera un mensaje de
instalacion empieza a buscarlo dentro de la base de datos de drivers, y como es una aplicación echa
por nosotros jamás la encontrara y nunca funcionara, por lo que sugiero seguir estos pasos".
Al momento de conectar dispositivo usb en windows7 32&64bits nos aparecera un mensaje "
instalando drivers".
En este caso el LED de mi tarjeta de adquisición se pone en color ROJO debido a que no ha sido
sincronizado con la computadora con win7.
Despues de un tiempo nos aparce la siguiente imagen.
En donde nos informa, que no pudo ser instalado el driver o controlador del dispositivo.. despues que
nos aparesca esto, no se espanten!!!, ya que windows 7 no lo encontro dentro de su base de datos.
Por lo que se deve agregar personalmente, esto es; ir Administrador de Dispositivo, presionamos
click derecho y le damos actualizar software de controlador.
Cuando le hayamos dado eso, nos aparecerá la siguiente ventana..
Damos click en Buscar el software de controlador en el equipo... Buscamos la direccion en donde
se encuentra los drivers para windows7 32&64. Descargalo aqui.
Empezamos a instalarlo.....
Despues de esto nos aparece una advertencia!! en donde nos informa que windows no pudo verificar
la edición del drivers.. y luego nos aparece dos opciones: 1- no instalar el controlador 2- instalar este
drivers de todas formas... elejimos la opción 2.
Terminado la instalación de nuestra tarjeta de adquisición que yo la he bautizado con el nombre uADQ.
El color del LED pasa a color Azul indicando que se logro conectar con la computadora.
Nos vamos en Administrador de Dispositivo y verificamos si nuestra tarjeta de adquisición se
sincronizo con exito!.
Eso es todoo!! tenemos corriendo nuestra uADQ en Windows 7 32&64
Turulo USB09
Publicado por adrianjpc
La primera tarjeta Turulo USB09 con conexión USB Full Speed, orientada a sistema de control
avanzado.
Introducción
La tarjeta de adquisición de datos Turulo USB09, está diseñada utilizando el microprocesador
PIC18F4550 de microchip, para adquirir datos por el puerto USB del computador, esto permite hacerla
esencial y practica para las nuevas generaciones de computadoras, con son las laptop. La tarjeta de
adquisición puede ser utilizada por diferentes software en la rama de la electrónica y computación,
como Visual C++, labVIEW y Matlab.
Información General
La Turulo USB09 dispone de 8 puertos E/S, 4 salidas utilizando relevadores para control de sistema de
carga (Electrobalbulas, Motores AC,etc) , 6 Entrada Analógicas de 10 bits, 2 salidas de modulación de
ancho de pulso (PWM), Conexión USB y una entrada de alimentación externa de 9V. La Turulo USB09
cuenta con una librería en LabVIEW llamado USB09 para poder manipular la tarjeta de adquisición de
datos, al antojo del usuario.
Especificaciones
1. Microcontrolador PIC18f4550
2. Voltaje de funcionamiento (nivel lógico) 5 V /100mA
3. Entrada de voltaje (recomendado) 7-12 V
4. De voltaje de entrada (los límites) 06/20 V
5. Digital I / O Pins 3( 2 de las cuales proporcionar una salida PWM)
6. Pines de entrada analógica 4 (AN4,AN5,AN6,AN7)
7. Pines de entrada digitales 8(B3,B2,B1,B0,A0,A1,A2,A3)
8. Pines de salidas digitales 4(D0,D1,D2,D3)
9. Pines de control de carga 4(D4,D5,D6,D7)
10. Selector de voltaje (1.USB , 2 J. Power )
11. Botones Botloader (Reset, B4)
12. DC Corriente de pines I / O 40 mA
13. Frecuencia máxima de reloj 40Mhz. Hasta 10 MIPS.
14. Hasta 3968 bytes de RAM y 1KBytes de EEPROM
15. Velocidad del Reloj 20 MHz
16. Dimensiones 5cm x 14cm
Energía
la Turulo USB09 puede ser alimentado a través de la conexión USB con 5V/100mA o por una
alimentación externa regulada a 5V/500mA, la fuente de alimentación se selecciona a través del
switch selector de voltaje. En el conector Jack Power no debes utilizar más de 12V, el regulador de
voltaje se puede sobrecalentar y dañar la placa. El rango recomendado es de 7 a 12 voltios. En cuanto
a las entradas y salidas digitales, necesitan de una alimentación externa de 5 o 9V dependiendo de la
alimentación del circuito que se tenga que controlar,esto se realiza con el objetivo de no dañar la
tarjeta en caso de cortos. si el circuito a controlar es muy sencillo se puede utilizar la salida de
alimentación que tiene la tarjeta.
Correccion del error de lectura no constante by HERRERA
Publicado por adrianjpc
Gracias al amigo SUPER_HERRERA se logro corregir el error de lectura que tenia todos
los compañeros de este blog.. Espero y les sea de mucha ayuda.
Comparte el codigo con nosotros:
#include 18F4550.h
#DEVICE ADC=8
#fuses
HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#define USB_HID_DEVICE FALSE //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for IN
bulk/interrupt transfers
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for OUT
bulk/interrupt transfers
#define USB_EP1_TX_SIZE 1 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE 3 //size to allocate for the rx endpoint 1 buffer
#include //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include //Configuración del USB y los descriptores para este dispositivo
#include //handles usb setup tokens and get descriptor reports
#define LOADER_END 0x7FF
#define LOADER_SIZE 0x6FF
#build(reset=LOADER_END+1, interrupt=LOADER_END+9)
#org 0, LOADER_END {} // nothing will replace the bootloader memory space
// END OF bootloader definition
//Asignacion de variables
#define LEDV PIN_D0
#define LEDR PIN_D1
#define LED_ON output_high
#define LED_OFF output_low
#define modo recibe[0]
#define param recibe[1]
#define Temperatura envia[0]
void main(void)
{
int8 recibe[2];
int8 adc[1];
set_tris_d(0x00); //Configuracion para el puerto D como salida
output_d(0x00); //Limpiamos el puerto D
setup_adc_ports(AN0|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2);
set_adc_channel(0);
delay_us(10);
LED_ON(LEDV); //Apagamos el led Rojo
usb_init(); //inicializamos el USB
usb_task(); //habilita periferico usb e interrupciones
usb_wait_for_enumeration(); //esperamos hasta que el PicUSB sea configurado por
el host
delay_ms(50);
LED_OFF(LEDV); //encendemos led verde
while (TRUE)
{
if(usb_enumerated()) //Si el PicUSB está configurado
{
salto:
if (usb_kbhit(1)) //Si el endpoint de salida contiene datos del host
{
usb_get_packet(1, recibe, 2); //Cachamos el paquete de tamaño 2bytes del EP1 y
almacenamos en recibe
if (modo==1)//modo salida digital d1,d2,d3,d4,d5,d6,d7,d8
{
output_d(param); //El dato param recibido lo mandamos al puerto o registro d
}
else if(modo==2)//modo analogico temperatura
{
adc[0] = read_adc();
delay_us(10);
if(usb_put_packet(1,adc,1,USB_DTS_TOGGLE)); //enviamos el paquete de tamaño
1byte del EP1 al PC
{ output_toggle(PIN_D0); }
delay_ms(32);
goto salto;
}