En el presente capitulo, se dar a conocer el procedimiento que se ha realizado, para cumplir con los objetivos especficos.
2.2 ESPECIFICACIN DEL SISTEMA
Para poder realizar un buen programa en el microcontrolador, tengo primero que especificar el sistema e identificar las etapas de funcionamiento que rodean al microcontrolador. A continuacin, expongo un primer bosquejo a lo que se desea llegar.
Figura 2.1. Diagrama de Bloques
Para la adquisicin de la seal de temperatura en el aceite mostrado en la fig. 2.1, se planea utilizar un LM35, ya que con este tipo de sensor he tenido experiencia en circuitos anteriores ya sea, en practicas o en proyectos de la Universidad. Pero no es una decisin definitiva porque el aceite a medir estar dentro de un recipiente cilndrico, por lo que seria una mejor opcin utilizar un sensor tipo varilla como por ejemplo una termocupla tipo J o tipo K.
A la temperatura del aceite al que se va a medir su viscosidad, se pretende mantener constante su temperatura, por medio de un segundo microcontrolador que realizara un control de ngulo de disparo (ver 2.2.1) a la niquelina como se indica en la figura 2.1, la cual proporcionara el calentamiento del mismo.
Y por ultimo se visualiza en una pantalla lquida, los datos censados, medidos, y un men principal para seleccionar el modo de funcionamiento, es decir a travs de la tarjeta de control o a travs de la PC por medio del bus USB, en donde se puede realizar las mismas funciones que se hacen de forma manual en la tarjeta de control.
2.2.1 ANGULO DE DISPARO
Para el Viscosmetro de Engler la niquelina trabajara a la mitad de su capacidad, ya que a su mximo rendimiento se obtienen temperaturas muy elevadas en muy poco tiempo, por lo que el sensor de temperatura NTC no responde con rapidez ante cambios de temperatura muy rpidos, como consecuencia se obtiene un mal control para mantener constante a cierta temperatura el aceite en prueba.
El Control de Angulo de Disparo tiene como misin de contrarrestar el rendimiento mximo de la Niquelina y consiste bsicamente en detectar cuando la corriente de la Niquelina pasa por cero, en la figura 2.2 se indica el circuito esquemtico para cumplir con esta condicin, y obtener las formas de ondas necesarias para el control como se indica a continuacin.
Figura 2.2. Angulo de Disparo.
En la figura 2.3 se muestra la forma de onda que sale desde el puente de Graetz, la misma que se repite cada 180 ya que es el resultado de una rectificacin de onda completa, sta nos sirve para poder dar pulsos y de esta manera sincronizar el proceso.
Figura 2.3. Rectificacin de onda completa.
Esta forma de onda ingresa a la base del transistor que se muestra en la figura 2.2 en el circuito detector del cruce por cero, y en el colector se obtiene la forma de onda que se indica en la figura 2.4.
Figura 2.4. Detector del cruce por cero.
La forma de onda de la figura 2.4 ingresa al pin RB0 del pic, el cual por medio de la interrupcin del RB0 por flanco de subida se sabe cuando la corriente en la carga esta cruzando por cero
INTCON=%10010000 'Habilita la interrupcin B0 OPTION_REG.6=1 'Habilito la interrupcin de RB0, por flanco de subida
Ya que en la figura 2.3 es una onda completa la misma que se repite cada 180 entonces el tiempo que demora la seal en cruzar por cero ser cada 8.333ms y como la Niquelina trabajara a la mitad de su capacidad entonces el control de Angulo de Disparo trabajara cada 4.16ms como se indica en la figura 2.5.
Figura 2.5. Disparo a 90
La onda de salida que se observa en la figura 2.5, es la que alimentara a la Niquelina obtenindose como resultado que sta trabaje al 50% de su capacidad mxima, y por consiguiente se consigue un buen control a la hora de querer mantener constante la temperatura en el aceite que este a prueba.
2.3 SOFTWARE DEL MICROCONTROLADOR
Una vez definido el sistema que se va a disear, tal como en la figura 2.1, entonces el siguiente paso es realizar el programa del microcontrolador, el cual se encargara de gobernar a todos los dispositivos que lo rodean, como es el caso de un motor de corriente continua, en el cual se acoplara a su eje unas paletas, las mismas que nos ayudaran a mantener homognea la temperatura en el recipiente en donde se encuentra el aceite a prueba, adems se tiene tambin la opcin de manejar un sistema de cuatro bombas en donde se encuentran diferentes tipos de aceites para realizar las pruebas correspondientes.
Como se menciono antes, para la adquisicin de la seal de temperatura en el aceite mostrado en la fig.2.1, he planeado utilizar un LM35, pero dado que el sensor que se utilice, debe de estar en contacto con el aceite, y el LM35 por su tamao no es fcil de aislar, se a optado por utilizar un Termistor NTC, mostrado en la figura 2.6, el cual tiene un coeficiente de temperatura negativo, por lo que su resistencia decrece a medida que se incrementa la temperatura.
Figura 2.6. Termistor NTC
Entonces el programa del microcontrolador principal es el siguiente:
'****************************************************************************** '* Name : VISCOSIMETRO DE ENGLER * '* Author : IVAN PARRA P. * '* Notice : Copyright (c) 2006 [select VIEW...EDITOR OPTIONS] * '* : All Rights Reserved * '* Date : 16/05/2006 * '* Version : 1.0 * '* Notes : Utilizo un LCD de 4 Lineas, y el Tiempo esta con * '* centecimas * '******************************************************************************* DEFINE OSC 48 DEFINE LOADER_USED 1
USBBufferSizeMax con 35 ' maximum buffer size USBBufferSizeTX con 35 ' input USBBufferSizeRX con 35 ' output
' the USB buffer... USBBuffer Var Byte[USBBufferSizeMax] USBBufferCount Var Byte
' ************************************************************ ' * main program loop - remember, you must keep the USB * ' * connection alive with a call to USBService every couple * ' * of milliseconds or so... * ' ************************************************************ usbinit ' initialise USB...
Hasta aqu es el cdigo generado por EasyHID, el cual me sirve para codificar los buffers de entrada y salida. A continuacin esta el cdigo en si del programa hecho para el pic 128f2550
'+-+-+-+-+-+-+-+-+-+-+-+-+- PROGRAMA +-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-
ADCON1=%00001110 ;El puerto A.0 es conversor, los dems Digitales 'ADCON1=%0000 ;Todas el PORTA es Analgico TRISA=%11000011 TRISB=%00000001 TRISC=%00101111
dato var BYTE error var byte calibrar var byte VALOR VAR BYTE TIEM VAR WORD conta VAR BYTE posicion var byte actualizado var bit
Th1 var byte Th2 var byte Th3 var byte Th4 var byte T1 var byte T2 var byte T3 var byte T4 var byte
T1a var byte T1b var byte T1c var byte T1d var byte
T2a var byte T2b var byte T2c var byte T2d var byte
T3a var byte T3b var byte T3c var byte T3d var byte
T4a var byte T4b var byte T4c var byte T4d var byte
tiem1 var word tiem2 var word tiem3 var word tiem4 var word
Deci1 var byte Deci2 var byte Deci3 var byte Deci4 var byte
TH VAR BYTE T VAR BYTE
x var byte y var byte z var byte
X1 VAR BYTE
B var byte C var word
U1 var BYTE D1 var BYTE C1 var BYTE M1 var BYTE L1 VAR BYTE
U2 var BYTE D2 var BYTE C2 var BYTE M2 var BYTE L2 VAR BYTE
U3 var BYTE D3 var BYTE C3 var BYTE M3 var BYTE L3 VAR BYTE
U4 var BYTE D4 var BYTE C4 var BYTE M4 var BYTE L4 VAR BYTE
N1 VAR WORD N2 VAR WORD N3 VAR WORD N4 VAR WORD
TX VAR WORD Agua var word
resp_a var word
Cmayor var WORD Cmenor VAR WORD Cdeci var WORD
USB VAR BYTE CAL VAR BYTE
usb_save var byte Motor_usb var byte
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' PITO VAR PORTA.1 LedNiq VAR PORTA.2 MEM_SCL VAR PORTA.3 MEM_SDA VAR PORTA.4 MOTOR VAR PORTA.5
DmuxA var PORTB.1 DmuxB VAR PORTC.6 DmuxC VAR PORTC.7
P1 VAR PORTC.0 'UP P2 VAR PORTC.1 'DOWN P3 VAR PORTC.2 'ENTER
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ;*************** Inicializacion LCD **************************************** define LCD_LINES 4 ;define el LCD de 2 lneas define LCD_DREG PORTB ;define pines del LCD D4 a D7 DEFINE LCD_DBIT 4 ;empezando desde elpuerto D4 hasta el D7 DEFINE LCD_RSREG PORTB ;defino el PIN para<conectaaar el RS MI PROTO DEFINE LCD_RSBIT 3 ;en el B3 DEFINE LCD_EREG PORTB ;defino el pin para conectar el bit Enable DEFINE LCD_EBIT 2 ;en el B2 ;------------------------------------------------------------------------------- EEPROM 0,[0] ;memoria 0 con el valor inicial 0 , sirve para ;indicar que nunca ha corrido este programa READ 0,actualizado ;carga el valor de la memoria EEPROM direccin 0
IF actualizado =0 THEN conta=0 :write 0,1 :write 1,conta READ 1,conta ;------------------------------------------------------------------------------- ON INTERRUPT GOTO PARO 'En caso de aber interrupcion ir a PARO INTCON=%10010000 'Abilita la interrupcion B0 INTCON2.6=0 'Habilito la interrupcin de RB0, por flanco de bajada [ No hay el PORTC.3 en el 18F4550 - 18F2550] ;------------------------------------------------------------------------------- main: tiem=0 T=0 T1=0 T2=0 T3=0 T4=0 y=0 B=0 X1=0 USB=0 CAL=0 Motor_usb=0
HIGH DmuxA HIGH DmuxB HIGH DmuxC
high LedNiq LOW PITO LOW MOTOR
lcdout $FE,1 LCDOUT $FE,$C0,"VISCOSIMETRO UPS" gosub puntos '********************** MODO DE FUNSIIONAMIENTO ******************************** MENU: enable lcdout $FE,1,"***** MENU *****" LCDOUT $FE,$C0,"NORMAL ----->P1" LCDOUT $FE,$90,"COMUNIC PC ->P2" LCDOUT $FE,$D0,"SELEC.BOMBA->P3" MENU_: IF P1==0 THEN GOSUB REBOTE :goto NORMAL if P2==0 then GOSUB REBOTE :goto INTERFAZ_USB IF P3==0 THEN gosub REBOTE :GOTO SELEC_BOMBA GOTO MENU_ '******************************** NORMAL *************************************** NORMAL: lcdout $FE,1,"**** NORMAL ****" lcdout $FE,$C0,"AJ USTAR SISTEMA" LCDOUT $FE,$90,"ACTIVAR CONTROL" LCDOUT $FE,$D0,"SIS->P1 CONT->P3" NORMAL_: IF P1==0 THEN GOSUB REBOTE :goto AJ USTAR_SISTEMA IF P2==0 THEN GOSUB REBOTE :goto MENU if p3==0 then GOSUB REBOTE :goto ACTIVAR_CONTROL GOTO NORMAL_ '*************************** AJ USTAR SISTEMA *********************************** AJ USTAR_SISTEMA: lcdout $FE,1,"**AJ US SISTEMA**" LCDOUT $FE,$C0,"TEMPERATURA->P1" LCDOUT $FE,$90,"MEMORIA----->P2" LCDOUT $FE,$D0,"VISCOSIDAD-->P3" AJ USTAR_SISTEMA_: IF P1==0 THEN GOSUB REBOTE :goto MOD_TEMPERATURA if P2==0 then GOSUB REBOTE :goto MOD_MEMORIA IF P3==0 THEN GOSUB REBOTE :goto CALCULA GOTO AJ USTAR_SISTEMA_ '*************************** MOD TEMPERATURA *********************************** MOD_TEMPERATURA: lcdout $FE,1,"ING. TEMPERATURA" LCDOUT $FE,$C0,"ERR. TEMPERATURA" LCDOUT $FE,$90,"ING->P1 ERR->P2" LCDOUT $FE,$D0,"Regresar ---->P3" MOD_TEMPERATURA_: IF P1==0 THEN GOSUB REBOTE :goto ING_TEMPERATURA if P2==0 then GOSUB REBOTE :goto ERR_TEMPERATURA IF P3==0 THEN GOSUB REBOTE :goto NORMAL GOTO MOD_TEMPERATURA_ '*************************** ING TEMPERATURA *********************************** ING_TEMPERATURA: lcdout $FE,1,"Ingresando T.max" LCDOUT $FE,$90,"Up->P1 Down->P2" LCDOUT $FE,$D0,"Regresar---->P3" VALOR=0 Tmax_cont: GOSUB SELECCIONAR if valor>99 then VALOR=0 if valor==255 then VALOR=99 TH=VALOR GOSUB REFRESCAR GOTO Tmax_cont
SUBIR: VALOR=VALOR+1 RETURN
BAJ AR: VALOR=VALOR-1 RETURN
SELECCIONAR: IF P1==0 THEN PAUSE 25 :gosub SUBIR IF P2==0 THEN PAUSE 25 :GOSUB BAJ AR IF P3==0 THEN PAUSE 25 :gosub REBOTE :GOTO MOD_TEMPERATURA RETURN
REFRESCAR: LCDOUT $FE,$C0,"T.max =",DEC2 TH,"gC" PAUSE 4 RETURN '*************************** ERR TEMPERATURA *********************************** ERR_TEMPERATURA: lcdout $FE,1,"Ingresando error" LCDOUT $FE,$90,"Up->P1 Down->P2" LCDOUT $FE,$D0,"Regresar---->P3" VALOR=0 cont: GOSUB SELEC if valor>20 then VALOR=00 if valor==255 then VALOR=20 error=VALOR GOSUB RefrescarError GOTO cont SELEC: IF P1==0 THEN PAUSE 25 :gosub SUBIR IF P2==0 THEN PAUSE 25 :GOSUB BAJ AR IF P3==0 THEN PAUSE 25 :gosub REBOTE :GOTO MOD_TEMPERATURA RETURN RefrescarError: LCDOUT $FE,$C0,"error=",DEC2 error PAUSE 4 RETURN '****************************** MOD MEMORIA ************************************ MOD_MEMORIA: lcdout $FE,1,"VER MEMORIA" LCDOUT $FE,$C0,"BORRAR MEMORIA" LCDOUT $FE,$90,"VER->P1 BORR->P2" LCDOUT $FE,$D0,"RegresaR ---->P3" MOD_MEMORIA_: IF P1==0 THEN GOSUB REBOTE :goto VER_MEMORIA if P2==0 then GOSUB REBOTE :goto BORRAR_MEMORIA IF P3==0 THEN GOSUB REBOTE :goto AJ USTAR_SISTEMA GOTO MOD_MEMORIA_ '****************************** VER MEMORIA ************************************ VER_MEMORIA: lcdout $FE,1,"LEER MEMORIA" LCDOUT $FE,$C0,"POSICION MEMORIA" LCDOUT $FE,$90,"LEER->P1 POS->P2" LCDOUT $FE,$D0,"Regresar ---->P3" VER_MEMORIA_: IF P1==0 THEN GOSUB REBOTE :goto LEER_MEMORIA if P2==0 then GOSUB REBOTE :goto POSICION_MEMORIA IF P3==0 THEN GOSUB REBOTE :goto MOD_MEMORIA GOTO VER_MEMORIA_ '****************************** LEER MEMORIA *********************************** LEER_MEMORIA: if USB==1 OR CAL==1 THEN GOTO UsbLeer y=0 lcdout $FE,1 lcdout $FE,$C0,"Accediendo a Mem" GOSUB puntos UsbLeer: for x=1 to 24 i2cread MEM_SDA,MEM_SCL,%10100001,y,[dato] pause 4 ' tiempo necesario para la correcta lectura if x==1 then Th1=dato if x==2 then T1a=dato if x==3 then T1b=dato if x==4 then T1c=dato if x==5 then T1d=dato if x==6 then Deci1=dato
if x==7 then Th2=dato if x==8 then T2a=dato if x==9 then T2b=dato if x==10 then T2c=dato if x==11 then T2d=dato if x==12 then Deci2=dato
if x==13 then Th3=dato if x==14 then T3a=dato if x==15 then T3b=dato if x==16 then T3c=dato if x==17 then T3d=dato if x==18 then Deci3=dato
if x==19 then Th4=dato if x==20 then T4a=dato if x==21 then T4b=dato if x==22 then T4c=dato if x==23 then T4d=dato if x==24 then Deci4=dato
y=y+1 next tiem1=(T1d*1000)+(T1c*100)+(T1b*10)+T1a tiem2=(T2d*1000)+(T2c*100)+(T2b*10)+T2a tiem3=(T3d*1000)+(T3c*100)+(T3b*10)+T3a tiem4=(T4d*1000)+(T4c*100)+(T4b*10)+T4a if USB==1 THEN GOTO ACTIVAR_CONTROL IF CAL==1 THEN GOTO CALCULA_R lcdout $FE,1 lcdout $FE,$C0,"Datos Cargados!" :GOSUB t2s for x=1 to 4 lcdout $FE,$C0,"Temp",DEC1 x,":"," Tiempo",DEC1 x,":" if x==1 then lcdout $FE,$90,DEC Th1,"gC ",DEC tiem1,",",dec2 deci1,"seg" gosub pitillo PAUSE 1500 endif if x==2 then lcdout $FE,$90,DEC Th2,"gC ",DEC tiem2,",",dec2 deci2,"seg" gosub pitillo PAUSE 1500 endif if x==3 then lcdout $FE,$90,DEC Th3,"gC ",DEC tiem3,",",dec2 deci3,"seg" gosub pitillo PAUSE 1500 endif
if x==4 then lcdout $FE,$90,DEC Th4,"gC ",DEC tiem4,",",dec2 deci4,"seg" gosub pitillo PAUSE 1500 endif lcdout $FE,1 next goto main '*************************** POSICION MEMORIA ********************************** POSICION_MEMORIA: if conta>=0 and conta<6 then posicion=1 if conta>=6 and conta<12 then posicion=2 if conta>=12 and conta<18 then posicion=3 if conta>=18 and conta<24 then posicion=4 lcdout $FE,1,"La posicion act." LCDOUT $FE,$90,"Normal ---->P3" LCDOUT $FE,$C0,"Memoria: ",dec posicion POS_CONT: IF P3==0 THEN GOSUB REBOTE :goto NORMAL GOTO POS_CONT '**************************** BORRAR MEMORIA *********************************** BORRAR_MEMORIA: lcdout $FE,1,"----------------" lcdout $FE,$C0,"Borrar Memoria?" LCDOUT $FE,$90,"P1->si P2->no" lcdout $FE,$D0,"----------------" BorrarCont: IF P1==0 THEN GOSUB REBOTE :goto Borrar if P2==0 then GOSUB REBOTE :goto MOD_MEMORIA goto BorrarCont Borrar: for conta=0 to 23 TH=0 I2CWRITE MEM_SDA,MEM_SCL,%10100000,conta,[TH] pause 4 'tiempo necesario para la correcta escritura next conta=0 WRITE 1,conta 'Guardo en la EEPROM 1 el valor de conta lcdout $FE,1 LCDOUT $FE,$C0,"Borrando..." gosub puntos
ADCON0=%00000001 ;configuro el modulo ADCON0 channel 0 pauseus 50 ;pausa para setear el canal ADCON0.1=1 ;inicio de conversion pauseus 50 ;pausa para la conversion
resp_a =(62*ADRESH)-520 dato=resp_a/100 ;Ecuaion encontrada por la regresion de Minimos ;cuadrados, con una R=100 ohm (cafe negro cafe). C =resp_a//100 C =C*10 C =C/100
if TH==101 then GOSUB REBOTE :HIGH MOTOR :goto sal IF TH==102 then GOSUB REBOTE :LOW MOTOR :goto sal
''''''''''''''' if P1==0 THEN GOSUB REBOTE :HIGH MOTOR IF P2==0 THEN GOSUB REBOTE :LOW MOTOR
sal: ''''''' IF DATO>=TH THEN error=0 :y=1 ;:gosub pitillo
if calibrar>50 and calibrar<61 then high DmuxC :high DmuxB :high DmuxA :goto nex
IF calibrar>=TH THEN high DmuxC :high DmuxB :high DmuxA :high LedNiq ;off niq, on V2 if calibrar <TH THEN high DmuxC :high DmuxB :low DmuxA :low LedNiq ;on niq, off V2 nex: if USB==1 and y==1 then goto TiempoUSB IF y==1 THEN GOSUB TIEMPO if USB==1 then goto TRANSMICION if y==0 then gosub t1s ;;;;;;;;;;;;;;;;; goto Temper
IF P1==0 THEN GOTO REBOTE IF P2==0 THEN GOTO REBOTE IF P3==0 THEN GOTO REBOTE
for x=0 to 255 pauseus 45 next low pito RETURN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; pitillo: high pito for T=1 to 40 pause 1 next low pito return '********************* Tiempo Para Aproximar 1 seg. ************************** TIEMPO: FOR X1=0 TO 99 ;Pausa de 9 mseg. por 100 veces me PAUSEus 1930 ;da un total de 900 mseg. El cual ''''''' ;se complementa con el tiempo de las if P1==0 THEN HIGH MOTOR ;demas subrutinas o bucles. IF P2==0 THEN LOW MOTOR IF TIEM>999 THEN lcdout $FE,$9B,",",dec2 X1,"s" IF TIEM<=999 THEN lcdout $FE,$9A,",",dec2 X1,"s"
NEXT TIEM=TIEM+1 IF TIEM>999 THEN LCDOUT $FE,$90,"Tiempo:",DEC4 TIEM IF TIEM<=999 THEN LCDOUT $FE,$90,"Tiempo:",DEC3 TIEM RETURN ;;;;;;;;;;;; TiempoUSB: FOR X1=0 TO 99 ;Pausa de 9 mseg. por 100 veces me PAUSEus 1900 ;da un total de 900 mseg. El cual ''''''' ;se complementa con el tiempo de las if P1==0 THEN gosub t1s :HIGH MOTOR ;demas subrutinas o bucles. IF P2==0 THEN gosub t1s :LOW MOTOR IF TIEM>999 THEN lcdout $FE,$9B,",",dec2 X1,"s" IF TIEM<=999 THEN lcdout $FE,$9A,",",dec2 X1,"s"
USBOut 1, USBBuffer, USBBufferCount, UsbDecimal ' if bus available, transmit data
GOSUB DoUSBIn
NEXT TIEM=TIEM+1 LCDOUT $FE,$90,"Tiempo:",DEC3 TIEM T4=TIEM DIG 3 T3=TIEM DIG 2 T2=TIEM DIG 1 T1=TIEM DIG 0
GOTO TRANSMICION '********************* Tiempo Para Aproximar 0,5 seg. ************************** t1s: for x=0 to 200 pause 1 NEXT return '********************* Tiempo Para Aproximar 2 seg. ************************** t2s: for x=0 to 200 pause 1 NEXT for x=0 to 200 pause 1 NEXT
return '********************* Tiempo Para Aproximar 4 seg. ************************** t4s: for x=0 to 200 pause 1 NEXT
if USB==1 THEN SelecBombaUSBout ;;;;;;;;;;;;;;;;;;;;;;;; IF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IF P1==0 THEN for x=0 to 100 pause 1 NEXT VALOR=VALOR+1 ENDIF
IF P2==0 THEN goto ok reg: IF P3==0 THEN GOTO MAIN
if usb_save==101 then goto SAVE IF usb_save==102 THEN GOTO salir
goto SaveUSBout '''''''''''''''''''''''''''''''''''''''' G_D: if P1==0 THEN goto SAVE IF P2==0 then GOTO salir goto G_D
SAVE: lcdout $FE,1 LCDOUT $FE,$C0," Guardando..."
puntos:
for x=1 to 30 pause 1 next LCDOUT $FE,$90,"." for x=1 to 30 pause 1 next LCDOUT $FE,$91,"." for x=1 to 30 pause 1 next LCDOUT $FE,$92,"." for x=1 to 30 pause 1 next LCDOUT $FE,$93,"." for x=1 to 30 pause 1 next LCDOUT $FE,$94,"." for x=1 to 30 pause 1 next LCDOUT $FE,$95,"." for x=1 to 30 pause 1 next LCDOUT $FE,$96,"." for x=1 to 30 pause 1 next LCDOUT $FE,$97,"." for x=1 to 30 pause 1 next LCDOUT $FE,$98,"." for x=1 to 30 pause 1 next LCDOUT $FE,$99,"." for x=1 to 30 pause 1 next LCDOUT $FE,$9A,"." for x=1 to 30 pause 1 next LCDOUT $FE,$9B,"." for x=1 to 30 pause 1 next LCDOUT $FE,$9C,"." for x=1 to 30 pause 1 next LCDOUT $FE,$9D,"." for x=1 to 30 pause 1 next LCDOUT $FE,$9E,"." for x=1 to 30 pause 1 next LCDOUT $FE,$9F,"." for x=1 to 30 pause 1 next
if b==1 then goto punt_cont
return
punt_cont: I2CWRITE MEM_SDA,MEM_SCL,%10100000,conta,[TH] pause 4 ' tiempo necesario para la correcta escritura conta=conta+1 I2CWRITE MEM_SDA,MEM_SCL,%10100000,conta,[T1] pause 4 ' tiempo necesario para la correcta escritura conta=conta+1 I2CWRITE MEM_SDA,MEM_SCL,%10100000,conta,[T2] pause 4 ' tiempo necesario para la correcta escritura conta=conta+1 I2CWRITE MEM_SDA,MEM_SCL,%10100000,conta,[T3] pause 4 ' tiempo necesario para la correcta escritura conta=conta+1 I2CWRITE MEM_SDA,MEM_SCL,%10100000,conta,[T4] pause 4 ' tiempo necesario para la correcta escritura conta=conta+1 I2CWRITE MEM_SDA,MEM_SCL,%10100000,conta,[X1] pause 4 ' tiempo necesario para la correcta escritura
conta=conta+1 if conta >23 then conta=0 WRITE 1,conta 'Guardo en la EEPROM 1 el valor de conta
lcdout $FE,1 LCDOUT $FE,$C0,"Datos Guardados" for x=0 to 200 pause 1 NEXT for x=0 to 200 pause 1 NEXT
salir: TIEM=0 X1=0 INTCON=%10010000 'Abilita la interrupcion B0
enable 'Habilita las interrupciones despues del handler
if USB==1 THEN goto LEER_MEMORIA goto main
END
Al momento de terminar con el proceso se guardan los datos obtenidos si as lo decide el usuario.
Ahora se presenta la codificacin del segundo microcontrolador que comandara a la Niquelina, y que tambin cuenta con la opcin de multiplexar cuatro bombas las mismas que podrn transportar el aceite hacia el contenedor del viscosmetro de Engler.
'***************************************************************************** '* Name : DEMUX.BAS * '* Author : IVAN PARRA P. * '* Notice : Copyright (c) 2007 [set under view...options] * '* : All Rights Reserved * '* Date : 29/12/2007 * '* Version : 1.0 * '* Notes : Programa para demultiplexar las 4 bombas realizar * '* : el control de angulo de disparo * '***************************************************************************** CMCON=7 TRISA=%00111100 TRISB=%00000001 X var byte DmuxA var PORTA.2 DmuxB var PORTA.3 DmuxC var PORTA.4
BOMBA1 VAR PORTA.1 BOMBA2 VAR PORTA.0 BOMBA3 VAR PORTA.7 BOMBA4 VAR PORTA.6 SHOT VAR PORTB.1 disp var byte low BOMBA1 low BOMBA2 low BOMBA3 low BOMBA4 low shot '******************************************************************************* ON INTERRUPT GOTO DISPARO 'En caso de aber interrupcion ir a DISPARO INTCON=%10010000 'Abilita la interrupcion B0 OPTION_REG.6=1 'Habilito la interrupcin de RB0, por flanco de subida '******************************************************************************* INICIO: IF DMUXC==0 AND DMUXB==0 AND DMUXA==0 THEN disp=1 low shot HIGH BOMBA1 LOW BOMBA2 LOW BOMBA3 LOW BOMBA4 ENDIF
IF DMUXC==0 AND DMUXB==0 AND DMUXA==1 THEN disp=1 low shot LOW BOMBA1 HIGH BOMBA2 LOW BOMBA3 LOW BOMBA4 ENDIF
IF DMUXC==0 AND DMUXB==1 AND DMUXA==0 THEN disp=1 low shot LOW BOMBA1 LOW BOMBA2 HIGH BOMBA3 LOW BOMBA4 ENDIF
IF DMUXC==0 AND DMUXB==1 AND DMUXA==1 THEN disp=1 low shot LOW BOMBA1 LOW BOMBA2 LOW BOMBA3 HIGH BOMBA4 ENDIF goto INICIO
''''''''''''''''''''''''' HANDLER '''''''''''''''''''''''''''''''''''''''' DISABLE 'Deshabilita las interrupciones en el handler DISPARO: 'Handler de la interrupcion IF DMUXC==1 AND DMUXB==1 AND DMUXA==1 THEN goto salir if disp=1 then goto salir
FOR X=1 TO 125 'El bucle FOR es para contar los grados deceado para que se cierre el Triac PAUSEUS 36 '36 'En el calculo deberia ser el paso del grado de 46us pero en la practica con un cristal de 12MHz se da con 39us NEXT HIGH SHOT 'Disparo al triac pauseus 5 salir: low shot low BOMBA1 low BOMBA2 low BOMBA3 low BOMBA4 disp=0
INTCON=%10010000 'Abilita la interrupcion B0 resume 'Retorna a programa principal donde ocurrio la inte enable 'Habilita las interrupciones despues del handler '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' END 2.4 SOFTWARE DE LA PC
El software es hecho en el entorno de Labview 7.1, ya que es una herramienta muy amigable a la hora de programar, dado que es un lenguaje de programacin grfico que utiliza iconos en lugar de lneas de texto para crear las aplicaciones. En contraste con los lenguajes de programacin basados en texto, donde las instrucciones determinan la ejecucin del programa, en LabVIEW el flujo de los datos, determinan la ejecucin.
En LabVIEW se crea una interfaz de usuario utilizando un conjunto de herramientas y objetos. La interfaz del usuario es llamada el panel frontal. Posteriormente, se adiciona el cdigo utilizando representaciones grficas de funciones para controlar los objetos del panel frontal. El diagrama de bloques contiene dicho cdigo. En ocasiones, el diagrama de bloques parece un diagrama de flujo.
Los instrumentos virtuales (VIs) tienen tres partes principales: el panel frontal, el diagrama de bloques y el icono/conector. El panel frontal, que es la interfaz al usuario del VI, especifica las entradas y despliega las salidas del VI. El diagrama de bloques contiene el cdigo fuente grfico compuesto de nodos, terminales y cables.
En el diagrama de bloques, la programacin es netamente grafica, en donde se ha utilizado los siguientes conceptos:
2.4.1 ESTRUCTURA CASE
Una estructura Case, mostrada a la izquierda, tiene dos o mas subdiagramas, o casos. Solo uno de ellos es visible a la vez, al igual que su ejecucin. Un valor de entrada determina que subdiagrama ejecutar. La estructura Case es anloga a la instruccin Case o a las instrucciones if...then...else en lenguajes de programacin convencionales basados en texto.
El selector de caso identifica la estructura Case, mostrado a la izquierda, a su vez contiene botones de flecha de incremento a cada lado. Emplee los botones con flechas de decremento o incremento para pasar a travs de los casos disponibles.
Terminal de seleccin, mostrado a la izquierda, determina que caso se est ejecutando. Usted puede posicionar el selector terminal en cualquier borde de la estructura Case. Si el tipo de dato es Booleano, la estructura se basa en un caso Verdadero y un caso Falso. Si el tipo de dato es numrico, la estructura puede tener hasta 2 31 casos.
2.4.2 CICLO WHILE
Un ciclo While de LabVIEW, mostrado a la izquierda, ejecuta un subdiagrama hasta que se cumple alguna condicin especial. El ciclo While se encuentra en la paleta FunctionsStructures.
El ciclo While ejecuta el subdiagrama hasta que se cumpla la condicin terminal, una terminal de entrada recibe un valor booleano especfico. Por defecto, la apariencia y el comportamiento de la condicin terminal que termina la ejecucin del ciclo While es (contine si es verdadero), mostrada a la izquierda. Cuando la condicin terminal es Continue If True, el ciclo While ejecuta el subdiagrama hasta que se recibe el valor FALSE.
La terminal de iteracin (Un terminal de salida), mostrada a la izquierda, contiene el nmero de iteraciones completas. El contador de iteraciones siempre arranca en cero.
2.4.3 ESTRUCTURA DE SECUENCIA
Una estructura de secuencia, mostrada a la izquierda, contiene uno o ms subdiagramas o marcos que se pueden ejecutar en un orden de secuencia. La estructura de secuencia es el mecanismo que permite a LabVIEW controlar el orden en el que se ejecutan los nodos. El diagrama que va a ser ejecutado primero, se coloca dentro de un marco 0, luego el 1, despus el 2, y as sucesivamente. Al igual que la estructura Case, solamente un marco es visible a la vez.
Los tneles de las estructuras Sequence solo pueden tener una fuente de datos, a diferencia de las estructuras Case. La salida puede ser emitida de cualquier marco, pero el dato abandona la estructura de Sequence solo cuando todos los marcos se hayan ejecutado y no cuando un marco individual lo haya hecho. Al igual que las estructuras Case, los datos en los tneles de entrada estn disponibles para todos los marcos.
2.4.4 FUNCIONES DE ARREGLOS
Utilice las funciones de arreglos, localizadas en la paleta Functions>>5Array, para crear y manipular arreglos. Entre las funciones de arreglos se encuentran las siguientes:
Array Size. -(tamao del arreglo) regresa el nmero de elementos en cada dimensin de un arreglo. Si el arreglo de entrada es de n dimensiones, la salida size es un arreglo de n elementos. Por ejemplo, en la figura 2.7, la funcin Array size retorna un valor de 4 para el arreglo array.
Figura 2.7. Array Size
Initialize Array. -Crea un arreglo con el nmero de elementos especificados en dimensin size, cada elemento del arreglo es iniciado con el valor de la terminal element. El tamao de la funcin se puede cambiar para que corresponda al nmero de dimensiones del arreglo de salida. Por ejemplo, en la figura 2.8, la funcin Initialize Array retorna el siguiente arreglo para un element de 4, y una dimensin size de 3.
Figura 2.8. Initialize Array
Build Array.- mltiples arreglos, aade elementos a un arreglo de n dimensiones, ud. puede cambiar el tamao de esta funcin para incrementar el nmero de elementos en el arreglo de salida. Por ejemplo, si usted une dos arreglos, la funcin Build Array retorna el arreglo que se muestra en la figura 2.9.
Figura 2.9. Build Array
Para unir las entradas en un arreglo ms grande de la misma dimensin, como se muestra en la figura 2.10, haga click con el botn derecho del mouse en el nodo de la funcin y seleccione la opcin Concatenate Inputs del men.
Figura 2.10. Concatenate Inputs
Array Subset.- Retorna una parte de un arreglo, empezando en el nmero index y conteniendo el nmero de elementos expresado en lenght. Por ejemplo, si se utiliza el arreglo como entrada, como se muestra en la figura 2.11, la funcin Array Subset retorna el siguiente arreglo para index de 2 y length de 4.
Figura 2.11. Array Subset
Index Array.- Retorna un elemento de un arreglo apuntado por index. Por ejemplo, en la fig. 2.12, la funcin Index Array retorna 7 para un index de 2. Tambin se puede utilizar la funcin Index Array para extraer una fila o una columna de un arreglo 2D para crear un subarreglo del original. Para hacer esto, cablee un arreglo 2D a la entrada de la funcin. Dos terminales index estn disponibles. La terminal index superior indica la fila y la segunda terminal indica la columna. Se pueden cablear entradas a ambas terminales index para apuntar a un solo elemento o se puede cablear nicamente una terminal para extraer una fila o una columna de datos. Por ejemplo, cablee el siguiente arreglo a la entrada de la funcin.
Figura 2.12. Index Array, arreglo apuntado
La funcin Index Array retorna el siguiente arreglo para un index de 1 (en filas).
Figura 2.13. Index Array, arreglo en 2D
2.4.5 CADENAS DE CARACTERES
Una cadena de caracteres es una coleccin de caracteres ASCII desplegables o no desplegables. Las Cadenas de Caracteres proveen un formato de plataforma-independiente para informacin y datos. Entre las aplicaciones de la Cadena de Caracteres se encuentran:
Creacin de un mensaje de texto simple. Para controlar un instrumento, los datos numricos pasan como cadenas de caracteres y despus hay que convertirlos en valores numricos. En muchas ocasiones se requiere almacenar datos numricos en disco; para hacer esto, primero hay que convertirlos a cadenas de caracteres. Instruyendo o incitando al usuario con cajas de dilogo. En el panel frontal, las cadenas de caracteres aparecen en tablas, cajas de texto y etiquetas.
Coloque la Funcin Format into String localizada en la paleta Functions>> String. Esta funcin convierte el argumento Numeric en una cadena de caracteres.
2.4.6 OPERACIONES DE ENTRADA/SALIDA CON ARCHIVOS
Las operaciones de entrada y salida (E/S) de archivos permiten almacenar y obtener informacin de los archivos que se encuentran almacenados en disco. Estos se encuentran localizados en la paleta Functions>>File I/O, all se encuentran aspectos como los siguientes:
Abrir y cerrar datos de archivos. Leer y escribir datos para archivar. Leer y escribir archivos para hojas de clculo. Mover y renombrar archivos y directorios. Cambiar caractersticas de un archivo. Crear, modificar y leer una configuracin de un archive.
Una operacin tpica de manejo de acciones I/O en archivos involucra los siguientes procesos.
1. Crear o abrir un archivo.
Indicar donde se encuentra un archivo existente o donde se desea crear un nuevo archivo especificando la ruta o introducindola como respuesta a una caja de dilogo con el fin reindicarle a LabVIEW la localizacin del archivo. Luego que el archivo abre, un nmero de referencia denominado refnum lo representa.
2. Leer o escribir en el archivo.
3. Cerrar el archivo.
Use los siguientes VI`s y funciones para desarrollar las operaciones bsicas de I/O en archivos:
Open/Create/Replace File.- Abre o reemplaza un archivo existente ocrea uno nuevo. Si el parmetro File Path est vaco, el VI despliega una caja de dilogo en la cual se debe seleccionar el archivo nuevo o existente.
Read File.- Lee datos desde el archivo especificado por el parmetro refnum y los entrega en la salida date, adems count es la cantidad de datos ledos. La lectura comienza en la posicin indicada por pos mode y poss offset y depende el formato del archivo en particular.
Write File.- Escribe datos en el archivo especificado por el parmetro refnum. La escritura comienza en la posicin indicada por pos mode y poss offset para archivos de cadena de bytes y al final del archivos para los de tipo datalog.
Close File.- Cierra el archivo especificado por el parmetro refnum.
2.4.7 GRABANDO DATOS EN UN ARCHIVO NUEVO O EXISTENTE
Es posible escribir cualquier tipo de dato en un archivo que abra o cree con las funciones y VI`s para operaciones de I/O. Si otros usuarios o aplicaciones necesitan acceso al archivo, escriben cadenas de datos en formato ASCII. Usted puede acceder archivos tanto por medio del programa o a travs de una caja de dilogo.
En la tabla 2.1, se muestra como se construye el nombre de una ruta.
Tabla 2.1. Plataforma
Nombre de la ruta
Windows
Consiste del nombre del dispositivo, dos puntos, backslash separando los nombres de los directorios y del archivo. Por ejemplo, c:\testdata\test1.dat es el nombre de ruta para el archivo llamado test1.dat en el directorio testdata.
UNIX
Consiste de slash separando los nombres de los directorios y del archivo. Por ejemplo, /home/testdata/test1.dat es el nombre de ruta para el archivo llamado test1.dat en el directorio testdata del directorio /home. Los nombres de archivo y ruta son sensitivos a la escritura.
Macintosh
Consiste del nombre de volumen (nombre de la unidad), dos puntos separando los nombres de los folders y del archivo. Por ejemplo, Hard Disk:testdata:test1.dat es el nombre de ruta para el archivo tets1.dat en el folder llamado tetsdata de la unidad Hard Disk.
2.4.8 VISA VIs
Las funciones VISA que se utilizan para comunicarse con instrumentos GPIB frecuentemente son VISA Write y VISA Read. Muchos instrumentos GPIB requieren que se envi o se lea informacin.
VISA Configure Serial Port VI, localizado en FunctionsInstrument I/OSerial. Este VI inicializa el puerto serial y a la vez se confgura como el NI Istrument Simulator.
Simple Error Handler, localizado en la paleta FunctionsTime & Dialog. Este VI es el encargado de desplegar una caja de dialogo si ocurre algun error.
La funcin VISA Write escribe la cadena de caracteres write buffer para la tarjeta especificada por VISA resources name dup VISA resources name retornando a la misma seccion. Asincronicamente es escrita para todas las plataformas. La funcin VISA Read lee la cadena de caracteres para la tarjeta especificada por VISA resources name dup VISA resources name retorna el sensor a la misma seccin. En plataformas de UNIX los datos son leidos sincronicamente. Asincronicamente es leida para todas las plataformas. return count contiene el numero de bytes que actualmente estan siendo transferidos por la GPIB.
GPIB es un bus de 8 bits. Puede transferir nicamente un byte cada vez.
Visa Enable Event, habilita un tipo de evento especificado
VISA Wait on Event, Suspende la ejecucin de un hilo de aplicacin y espera por un tipo de evento para no exceder un perodo de tiempo especificado por la interrupcin. Usted puede poner esta funcin para realizar los funcionamientos de I/O sncronamente o asincrnicamente. Por defecto, la funcin se ocupa de funcionamientos de I/O asincrnicamente.
VISA Get USB Interrupt Data, Recupera los datos de la interrupcin que se guardan en una VISA USB.
2.4.9 IMPLEMENTACION EN LABVIEW
Labview consta de dos ventanas principales para llevar a cabo la programacin, que son el Panel Frontal y, el Diagrama de bloques o Flujos.
2.4.9.1 PANEL FRONTAL
El Panel Frontal es la interfaz con el usuario, en donde se transmiten y reciben todos los datos del computador al microcontrolador, adems de respaldar los datos obtenidos por el microcontrolador en una memoria eeprom.
Figura 2.14. Interfaz con el usuario.
En la figura 2.14, se muestra el entorno en el que se trabajara cuando se utilice la interfaz de comunicacin con una PC a travs del bus USB. A continuacin se especifica las funciones que realiza cada uno de los elementos del panel frontal que se aprecia en la fig 2.14. En la figura 2.15, que se expone abajo cuenta con las siguientes funciones:
Ingreso de la Temperatura mxima a la que funcionaran las Niquelinas. Ingreso del Error de Temperatura al que se accionaran las Niquelinas. Un cuadro de comentarios, en donde se indican las funciones actuales. Tres pulsantes, que sirven para decidir si se guardan los datos obtenidos a la memoria Eeprom, y para seleccionar las bombas en donde se encuentran los diferentes aceites.
Figura 2.15. Funciones de envo de datos al PIC.
Las funciones de la recepcin de los datos se muestra en la figura 2.16, y consta de:
Un selector en donde se visualiza los datos de cierta medicin. Visualizacin de la temperatura de la medicin seleccionada, en C. Visualizacin del tiempo de la medicin seleccionada, en segundos. Visualizacin del tiempo actual que demora el proceso en segundos.
Figura 2.16. Recepcin de datos.
La siguiente figura 2.17 se muestra el cambio de temperatura en tiempo real, observndose a travs de un graficador y un termmetro, y se muestra tambin un pulsante de paro general.
Figura 2.17. Indicador visual de la Temperatura actual.
2.4.9.2 DIAGRAMA DE FLUJOS
Es el cdigo de programacin, conocido como Diagrama de Flujos o, Diagrama de Bloques ya que es una programacin de tipo grafico.
A continuacin se describe el diagrama de flujos por etapas en el cual se indica las diferentes conexiones por medio de conectores marcados de color rojo (A-E), as en la fig. 2.18 se muestra la etapa de transmisin de la PC al PIC, en donde los datos que se envan son los necesarios para que el microcontrolador pueda trabajar de acuerdo a las utilidades del usuario, tales como son, el Error de Temperatura y, la Temperatura mxima la cual se deben tratar de mantener constante en la Niquelina.
Figura 2.18. Transmisin de datos Pc Pic
En la figura 2.19, se observa la etapa de recepcin de la PC al PIC, en donde el microcontrolador transmite al computador secuencialmente un paquete de 18 Buffer, en donde a este paquete de datos se los transforma a una cadena de datos de tipo String, por medio del convertidor Number To Decimal String
Figura 2.19. Recepcin de datos Pc Pic
La siguiente etapa se encarga de escoger o seleccionar el nmero de medicin que se ha hecho con el dispositivo, la misma que se encuentra en la memoria Eeprom de la tarjeta de control. En la fig. 2.20 muestra una Estructura Case, en donde se encuentra un Index Array que retorna un elemento del arreglo apuntado por index 8, 9 y 10, que se refiere a la temperatura mxima ingresada, el tiempo que duro el proceso y los centesimal de ese tiempo, a estos valores se los convierte en valores de tipo numrico, por medio del Decimal String To Number, as en el index 10, o Buffer 10, es posible dividirlo para 100 para poder tener el dato centesimal del tiempo, y luego sumarlo al valor numrico del index 9 y como resultado se tiene el tiempo total del proceso expresado en un numero de punto flotante.
Figura 2.20. Seleccin de la Medicin
La figura 2.20, se repite para las mediciones 1,3 y 4, ya que se hace el mismo procedimiento seleccionando los Buffers del 5 al 16 a travs del Index Array.
En la figura 2.21 se muestran, los mensajes de comentarios que se visualizan en el Panel Frontal, de acuerdo a los eventos que sucedan a la hora de correr el programa proveniente del index 17. Tambin se expone en la fig. 2.21, la temperatura actual que proviene del index 4 y el tiempo actual, que se procede de la misma manera que en la figura 2.20.
Figura 2.21. Comentarios y visualizacin de la temperatura y tiempo real
Por medio del index 17, el microcontrolador avisa a la PC si hubo o no interrupcin a causa del Fin de Proceso, es decir cuando el aceite se haya llenado en el recipiente de 200 cc luego de que la Niquelina se haya mantenido en la temperatura constante ingresada por el usuario. Una ves que se haya finalizado el proceso, el sistema o el programa le pregunta el usuario si desea guardar los datos obtenidos en la presente medicin, por medio de de dos pulsantes mostrados en la figura 2.22, al pulsar cualquiera de estos dos pulsantes, el computador transmitir esta decisin al microcontrolador para que ste responda a lo que se desea hacer.
Figura 2.22. Transmisin
En la figura 2.23, se muestra el mismo procedimiento que en la fig. 2.20, es decir entre los buffers del 5 al 16, los datos que se encuentran en tipo string se los convierte a valores de tipo numrico para poder ser procesados, y luego se los vuelve a convertir en datos de tipo string por medio del Number To Decimal String.
Figura 2.23. Procesamiento de los valores transmitidos por el Pic
2.5 COMUNICACIN USB DEL DISPOSITIVO A LA PC
Para poder hacer una correcta comunicacin entre el PIC y la PC, es necesario seguir los siguientes pasos:
1. Realizar el cdigo en MicroCode Studio por medio del EasyHID
Figura 2.24. EasyHID introduccin.
En la figura 2.24 se debe completar los casilleros Copany Name y Product Name, con las etiquetas que mas nos convenga, luego se hace clic en Next.
En la siguiente ventana se hace clic en Next, porque no es necesario modificar nada. Si se requiere obtener ayuda de cmo se debe hacer las conexiones alrededor de un PIC para USB, se hace clic en Tell me more about using Vendor and Products IDs, mostrado en la figura 2.25
Figura 2.25. EasyHID Vendor y Producto.
En la figura 2.26, se observa una ventana en donde indica el tiempo mximo, en que la interfaz usb debe hacerse como entrada y como salida, tambin se tiene el nmero de Buffer de entrada y salida disponibles, claro que se puede modificar de acuerdo al nmero de variables que se necesite enviar a la PC. Luego se hace clic en Next.
Figura 2.26. EasyHID Configuracin de Detalles
En la ventana siguiente se debe dar un nombre a al proyecto en Project Name y dar la ubicacin en Location. Tambin se debe indicar que tipo de microcontrolador se va a usar por ejemplo el pic 18F2550, y despus se da clic en Next.
Figura 2.27. EasyHID Nombre del Proyecto y Localizacin.
Y por ultimo se genera automticamente el cdigo fuente necesario para trabajar en MicroCode Studio Plus, mostrado en la figura 2.28, el mismo que se genero en la ubicacin que se designo en la figura 2.27.
Figura 2.28. EasyHID Generando el Proyecto.
2. Reconocer el PIC como interfaz humana.
Para esto se usa el programa VISA Driver Development Wizard de Nacional Instruments\VISA mostrado en la figura 2.29.
Figura 2.29. Visa Wizard
Aqu obviamente se debe pinchar en USB y luego se hace clic en Siguiente.
Figura 2.30. Informacin sobre el Dispositivo.
En la figura 2.30, se debe ingresar el nmero del Vendor ID del microcontrolador ya grabado con el cdigo fuente que se genero por medio del EasyHID, al igual que el nmero del Product ID. Dichos nmeros o direcciones se puede verificar al ingresar a la ventana del administrador de dispositivos.
Tambin se debe dar nombre a las etiquetas de Manufaturer Name y Model Name, y a continuacin se hace clic en Siguiente.
Figura 2.31. Archivo de Salida
Luego se da un nombre a la carpeta donde se creara el instalador USB Instrument Prefix, y despus se especifica la direccin en donde se creara dicha carpeta Directory for Output Files, y por ultimo se puede dar clic en Siguiente.
3. Configuracin en Labview
Para esto se debe utilizar el programa Measurement & Automation de Nacional Instrumets
Figura 2.32. Measurement & Automation Exploration.
En la ventana de Measurement & Automation, como se muestra en la figura 2.33, en Configuracin ubicado en la parte izquierda, se da clic en USB Devices, y aparece los detalles del dispositivo usb en la parte central, donde se puede dar un nombre o etiqueta en VISA Alias, y luego se hace clic en Save.
Figura 2.33. Measurement & Automation
Al hacer clic en Opern VISA Test Panel, ubicado en la parte superior de la figura 2.33, aparece una ventana como el de la figura 2.34, en donde en la pestaa de Property Node (Get), se debe de configurar con Resourse Name y dar clic en Execute, y en las pestaas de Enable Event, Disable Event, Discard Event y Wait on Event, se tienen que configurar en USB Interupt y luego hacer clic en Execute en cada una de las pestaas.
Figura 2.34. Visa Test Panel.
Una vez cumplido con estos tres pasos, la tarjeta de control esta lista para interactuar con el computador.