Anda di halaman 1dari 32

Turulo USB09_LabVIEW 8.

6
Publicado por adrianjpc Etiquetas: microcontroladores

En este proyecto se presenta la comunicacin USB de tipo Bulk Transfer utilizando labVIEW 8.6 y la
tarjeta de adquisicin Turulo USB09. La comunicacin se realiza a travs de una librera picusb.vi .
El puente que establece la comunicacin entre el Microcontrolador y la PC se realiza mediante las
libreras USB del software CCS C Compiler y el driver de la tarjeta de adquisicion para Microsoft
Windows XP y Windows 7.


La pequea prctica 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. Tambin al mismo tiempo se adquiere una seal analgica
del puerto AN4 de la tarjeta Turulo, los datos capturados se enviaran a labview y seran graficados.






A continuacin 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 pequeo
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


Configuracin de Oscilador
Otro aspecto muy importante es la configuracin 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 mdulo 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 tambin 4
Mhz a la salida del MUX.

Esta salida del MUX es lo que utilizamos para inyectrsela 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
montn 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
despus 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 seal proveniente del PLL

Observemos que adems de inyectar la seal oscilante en USBDIV tambin se conecta la seal del PLL
a 96 Mhz en un Postscaler, otro divisor, en este caso por 2, 3, 4 6 y cuyas seales van al CPUDIV.
O sea que podemos generar una seal de reloj para nuestro PIC, no para el USB sino para la velocidad
de ejecucin de nuestro programa tomndola del PLL y que puede ser de 16 Mhz, 24 Mhz, 32 Mhz
48 Mhz.

Pero adems la seal original llegaba en paralelo al Oscilator Postcaler, otro divisor ms, que de forma
directa, sin pasar por el mdulo PLL nos divide la frecuencia original del cristal por 1, 2, 3 4 y que
tambin va a parar al CPUDIV pero desde otro origen. Con este mdulo 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 ejecucin de programas.

Por ltimo tambin tenemos disponible una entrada proveniente del Primary Clock y que dividida por
4 llega tambin a FSEN y podemos utilizarla en lugar de la que le llega desde el canal directo/PLL.

Como puedes ver es toda una maravilla cmo 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 configuracin quedaria de la siguiente manera:

Realizado en CCS C :

#fuses
HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDI
V1,VREGEN
2-Firmware Turulo USB09 realizado en CCS C Compiler.
El firmware es un pequeo cdigo de bajo nivel que se realiza para poder controlar entradas y salidas
dependiendo de las necesidades del usuario. Adems este pequeo cdigo tendr el objetivo de poder
entenderse con la computadora o PC, realizando as la funcin 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. Acontinuacin se muestra en un pequeo 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 numeracin hexadecimal de la descripcin del VID / PID va al revs, es
decir, el primero nmero 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 compaia 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 adquiscin (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 Recepcin de datos desde LabVIEW

La programacin en labVIEW (PicUSB-LabVIEW) se realizo a travs 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 tamo 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 tamao 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 pequea libreria o subvi que disee, 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 seal analogica con respecto al tiempo.
Esta seal 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 metodologa que permite la comunicacin entre un microcontrolador
PIC18F4550 y LabVIEW para tareas de adquisicin de datos. Los resultados obtenidos demuestran que
la metodologa implementada funciona perfectamente, se logra trasferir datos de alta velocidad. Con
esta tcnica se pretende que estudiante e investigadores puedan construir una tarjeta de adquisicin
de datos y que pueda implementarse para tareas de simulacin, supervisin 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 aplicacin echa
por nosotros jams 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 adquisicin 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 edicin del drivers.. y luego nos aparece dos opciones: 1- no instalar el controlador 2- instalar este
drivers de todas formas... elejimos la opcin 2.


Terminado la instalacin de nuestra tarjeta de adquisicin 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 adquisicin 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 conexin USB Full Speed, orientada a sistema de control
avanzado.






Introduccin

La tarjeta de adquisicin de datos Turulo USB09, est diseada 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
adquisicin puede ser utilizada por diferentes software en la rama de la electrnica y computacin,
como Visual C++, labVIEW y Matlab.





Informacin 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 Analgicas de 10 bits, 2 salidas de modulacin de
ancho de pulso (PWM), Conexin USB y una entrada de alimentacin externa de 9V. La Turulo USB09
cuenta con una librera en LabVIEW llamado USB09 para poder manipular la tarjeta de adquisicin de
datos, al antojo del usuario.







Especificaciones
1. Microcontrolador PIC18f4550
2. Voltaje de funcionamiento (nivel lgico) 5 V /100mA
3. Entrada de voltaje (recomendado) 7-12 V
4. De voltaje de entrada (los lmites) 06/20 V
5. Digital I / O Pins 3( 2 de las cuales proporcionar una salida PWM)
6. Pines de entrada analgica 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 mxima 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


Energa

la Turulo USB09 puede ser alimentado a travs de la conexin USB con 5V/100mA o por una
alimentacin externa regulada a 5V/500mA, la fuente de alimentacin se selecciona a travs del
switch selector de voltaje. En el conector Jack Power no debes utilizar ms de 12V, el regulador de
voltaje se puede sobrecalentar y daar la placa. El rango recomendado es de 7 a 12 voltios. En cuanto
a las entradas y salidas digitales, necesitan de una alimentacin externa de 5 o 9V dependiendo de la
alimentacin del circuito que se tenga que controlar,esto se realiza con el objetivo de no daar la
tarjeta en caso de cortos. si el circuito a controlar es muy sencillo se puede utilizar la salida de
alimentacin 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 compaeros 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 //Configuracin 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 tamao 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
tamao 1byte del EP1 al PC
{ output_toggle(PIN_D0); }
delay_ms(32);
goto salto;
}

else if(modo==4)//Todo al mismo tiempo
{
adc[0] = read_adc();
delay_us(10);

usb_put_packet(1,adc,1,USB_DTS_TOGGLE);
output_d(param);
delay_ms(32);
}
else
goto salto;
}
}
}
}

Anda mungkin juga menyukai