cnc2014b

30
Arquitectura de Computadoras 2014 UNIVERSIDAD NACIONAL DE SAN AGUSTIN FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICA ARQUITECTURA DE COMPUTADORAS TEMA: INFORME FINAL: POSICIONADOR XY NOMBRE: CUI: Cano Torres Marco Alonso 20084090 Condori Choque Willy O. 20080639 Miranda Campos Luis Angel 20082037 1 de Diciembre - 2014 1

description

cnc2014b

Transcript of cnc2014b

Page 1: cnc2014b

Arquitectura de Computadoras 2014

UNIVERSIDAD NACIONAL DE SAN AGUSTINFACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS

ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICA

ARQUITECTURA DE COMPUTADORASTEMA:

INFORME FINAL:POSICIONADOR XY

NOMBRE: CUI:

Cano Torres Marco Alonso 20084090 Condori Choque Willy O. 20080639 Miranda Campos Luis Angel 20082037

1 de Diciembre - 2014

1

Page 2: cnc2014b

Arquitectura de Computadoras 2014

INDICE

1 ESPECIFICACIONES TECNICAS DEL PROYECTO……………………………………………………………………………3

A. MICROCONTROLADOR PIC 18F45B. MOTOR DC CON ENCODERC. MOTOR PAP

2. DIAGRAMA DE BLOQUES……………………………………………………………………………………………………….9

3. MORFOLOGIA DEL SISTEMA…………………………………………………………………………………………………..9

4. SOTWARE DE INSTALACIO……………………………………………………………………………………………………..10

5. TAREAS PREESTABLECIDAS…………………………………………………………………………………………………….11

6. CONCLUSIONES…………………………………………………………………………………………………………………….13

7. APORTES……………………………………………………………………………………………………………………………….13

8. ANEXOS…………………………………………………………………………………………………………………………………13

FOTOS

ESQUEMATICOS

PC DRIVER Y PIC

PROGRAMA EN PROTON

PROGRAMA E VISUAL BASIC

2

Page 3: cnc2014b

Arquitectura de Computadoras 2014

CONTROL NUMÉRICO POR COMPUTADORA

1.- ESPECIFICACIONES TECNICAS DEL PROYECTO

El siguiente posicionador XY se realizó según especificaciones que se requerían en el laboratorio con ciertas limitaciones

Uso del controlador USB 18F4550 Sistema de realimentación para conocer la posición del puntero Motor DC con encoder para el eje X Motor PAP para el eje Y Programa compilado Entradas y salidas digitales (no usamos analógicos) Precisión +/- 1mm Punto de origen (0,0) y puede regresar al mismo

A. Microcontrolador PIC 18F4550

Características:

- Arquitectura RISC avanzada Harvard: 16 bits con 8 bits de datos- 77 interrupciones- Hasta 64kKbytes de programa (hasta 2 Mbytes en ROMless)- Hasta 3968 bytes de RAM y 1KBytes de EEPROM- Frecuencia máxima de reloj de 40Mhz. Hasta 10 MIPS- Pila de 32 niveles- Multiples fuentes de alimentación- Periféricos de comunicación avanzados

3

Page 4: cnc2014b

Arquitectura de Computadoras 2014

4

Page 5: cnc2014b

Arquitectura de Computadoras 2014

B. Motor DC con encoder

El motor que se utilizo fue un EMG30 que es un motor de corriente continua de 12V y 170 revoluciones que se caracteriza por incluir un encoder o codificador de cuadrante que manda un tren de impulsos cuando gira el eje del motor, permitiendo así que un circuito externo pueda saber la velocidad real a la que esta girando el eje y cuantas vueltas da. El encoder está formado por dos sensores de efecto hall que proporcionan un total de 360 pulsos por cada vuelta completa del rotor. El motor cuenta con condensadores internos de filtro que ayudan a minimizar el ruido y los parásitos generados por el motor al girar. El eje de salida es de 5mm de diámetro y encaja perfectamente en el casquillo de la rueda de 100 mm S360182. Existe un soporte especialmente diseñado para este motor S360300 que permite una sujeción sencilla y robusta a cualquier superficie. Características: Tensión nominal: 12V. Fuerza: 1,5 Kg/cm. Velocidad nominal: 170 rpm. Corriente nominal: 530 mA. Velocidad sin carga: 216 rpm. Corriente sin carga: 150 mA. Corriente de parada: 2,5 A. Potencia nominal: 4,22 W. Pulsos por vuelta: 360 ppr. Longitud total: 86,6mm. Diámetro motor: 30mm. Diámetro Eje: 5mm. Longitud Eje: 9mm. Conexiones :Cable de 6 conductores de 90mm acabado en un conector tipo JST de 6 vías. Circuito de control recomendado: S310112

Un sistema de encoder se caracteriza porque determina su posición, contando el numero de impulsos que se generan cuando un rayo de luz, es atravesado por marcas opacas en la superficie de un disco unido al eje.

En el estator hay como mínimo dos pares de fotorreceptor ópticos, escalados un número entero de pasos más ¼ de paso. Al girar el rotor genera una señal cuadrada, el escalado hace que las señales tengan un desfase de ¼ de periodo si el rotor gira en un sentido y de ¾ si gira en el sentido contrario, lo que se utiliza para discriminar el

5

Page 6: cnc2014b

Arquitectura de Computadoras 2014

sentido de giro.

Un simple sistema lógico permite determinar desplazamientos a partir de un origen, a base de contar impulsos de un canal y determinar el sentido de giro a partir del desfase entre los dos canales. Algunos encoders pueden disponer de un canal adicional que genere un pulso por vuelta y la lógica puede dar número de vueltas más fracción de vuelta.

La resolución del encoder depende del número de impulsos por revolución.

C. Motor PAP

En los motores paso a paso debemos diferenciar los motores unipolares de los bipolares. Los motores unipolares se llaman así porque la corriente que circula por los diferentes bobinados siempre circula en el mismo sentido. En los motores bipolares para que el motor funcione la corriente que circula por los bobinados cambia de sentido en función de la tensión que se aplica. por lo que un mismo bobinado puede tener en uno de sus extremos distinta polaridad (bipolar). Algunos motores tienen los bobinados de tal manera que en función de puentes pueden convertirse en unipolares o bipolares.Lo mas importante de un motor es saber el tipo de motor que es, la potencia, el numero de pasos, el par de fuerza, la tensión de alimentación y poco mas si son motores sencillos. 

               

Unipolar: Estos motores suelen tener 6 o 5 cables de salida, dependiendo de su conexionado interno (ver figura 2). Este tipo se caracteriza por ser más simple de controlar. En la figura 4 podemos apreciar un ejemplo de conexionado para controlar un motor paso a paso unipolar mediante el uso de un ULN2803, el cual es una array de 8 transistores tipo Darlington capaces de manejar cargas de hasta 500mA. Las entradas de activación (Activa A, B , C y D) pueden ser directamente activadas por un microcontrolador.

6

Page 7: cnc2014b

Arquitectura de Computadoras 2014

Secuencia Normal: Esta es la secuencia más usada y la que generalmente recomienda el fabricante. Con esta secuencia el motor avanza un paso por vez y debido a que siempre hay al menos dos bobinas activadas, se obtiene un alto torque de paso y de retención.

7

Page 8: cnc2014b

Arquitectura de Computadoras 2014

2.- DIAGRAMA DE BLOQUES

3.- Morfología del sistema

El siguiente CNC está constituido por materiales reciclados de impresoras, carriles de escritorios entre otros

Eje x, con un motor DC y un carril de impresora , que es controlado mediante limitación de corriente , dicho motor tiene una resolución de 100 ósea que en una vuelta recorre 36mm

Eje y con un motor PAP y rieles de escritorio, dicho motor tiene una resolución de 4 pasos por milímetro

8

PC

PIC 18F2550

MOSFET MOSFET

MOTOR PASO A PASO

MOTOR DC

ENCODER

Page 9: cnc2014b

Arquitectura de Computadoras 2014

4.- SOFTWARE DE INSTALACIÓN

El programa es completamente ejecutable, la comunicación se hace mediante puerto USB Interface creado en Visual Basic, que nos permite crear nuestro entorno de manera

fácil y practica, para nuestro entorno crearemos botones de acciones instantáneas, una ventana de mensajes, dos ventanas para introducir texto (en estas ventanas introduciremos las coordenadas X, Y) y una barra de menús para acciones secundarias (obtener información del proyecto, de los creadores y salir del programa).

Antes de todo, lo primero que tenemos que hacer es agregar la clase easyHID.cs al proyecto de Visual Basic que habíamos creado antes. A través de ella podremos llamar a las diferentes funciones de control que se encuentran en easyHID.dll, una librería proporcionada por la empresa MecaniqueUK para el control de dispositivos USB mediante protocolo HID. Para poder agregar la clase tenemos que agregar al directorio donde se encuentra nuestro proyecto 2 archivos:

- mcHID.dll (Librería de control).- easyHID.cs (Clase con las funciones de control definidas).

Y después ya se puede empezar a programar en Proton

Para la instalación del programa solo basta con abrir el archivo y se nos abrirá el siguiente cuadro

9

Page 10: cnc2014b

Arquitectura de Computadoras 2014

5.- TAREAS PREESTABLECIDAS

1. Empezar en el origen

2. Dibujar cuadrado

3. Dibujar triangulo

4. Dibujar circulo

5. Regresar a la posición (0.0)

10

Page 11: cnc2014b

Arquitectura de Computadoras 2014

7.- CONCLUSIONES Y APORTES

CONCLUSIONES

Se logro implementar la comunicación vía USB gracias a un entrono de trabajo

creado en Visual Basic con el cual es posible mandar y recibir datos del PIC hacia la

PC y viceversa.

La precisión se logro calculando el número de pasos del motor PAP al que equivale

un milímetro de recorrido para el eje angular.

La precisión en el eje radial puede ser exacta gracias a la realimentación del

encoder.

La precisión lograda funciona perfectamente bien, esto hace que nuestro proyecto se

asemeje aun más a otros con acabados mucho más comerciales y de aplicaciones

industriales.

Es factible trabajar con dos motores PAP para una precisión mas exacta, además

que el sistema de control es mas fácil

El gran aporte del encoder seria de que tenemos realimentación y asi se puede hacer

una lectura correcta de la posición

APORTES

El siguiente trabajo tiene una muy confiable estabilidad lo que hace pueda tener una

aplicación mas industrial

Aplicaciones como una maquina fresadora, impresora 3D

11

Page 12: cnc2014b

Arquitectura de Computadoras 2014

8.- ANEXOS

ESQUEMATICOS DRIVER DE MOTORES Y PIC

12

Page 13: cnc2014b

Arquitectura de Computadoras 2014

PCB DE DRIVER Y PIC

PROGRAMA EN PROTON

PortB_Pullups = On ' Enable PORTB pull-ups '***Configuracionn de puertos******************All_Digital= TRUETRISA = %00000011TRISD = 0TRISC = 0TRISE = 0TRISB = %01110000'***Variables*********************************** Dim k_dc As Byte ' constante para calibrar DC Dim p1_x As Dword ' posicon final de "x" DC (posicion inicial) Dim x As Dword ' posicion actual DC

Dim aux_x As Dword Dim x_mm As Byte Dim x_cm As Byte Dim aux As Byte Dim enc As Byte Dim num As Byte Dim k_pap As Byte ' constante para calibrar PAP Dim vel_pap As Word Dim p1_y As Dword ' posicon final de "y" PAP (posicion inicial) Dim y As Dword ' posicon final

PAP Dim aux_y As Dword Dim y_mm As Byte Dim y_cm As Byte

13

Page 14: cnc2014b

Arquitectura de Computadoras 2014

Dim z As Byte ' estado actual de eje Z Dim chose As Byte Dim mov_x As Dword 'Triangulo Dim mov_y As Dword Dim rel As Byte Dim b As Dword Dim h As Dword Dim m As Word Dim n As Word Dim r As Byte'--Motor DC y Encoder------------------------ x_mm=0 x_cm=0 x=0 aux=0 enc=0 k_dc= 2 p1_x=0'--Motor PAP--------------------- y_mm=0 y_cm=0 y=0 vel_pap = 8 k_pap= 1 p1_y=0 '***Symbol***************************************Symbol dc_1a= PORTD.6 'Eje XSymbol dc_1b= PORTD.7Symbol dc_2a= PORTD.4 'Eje ZSymbol dc_2b= PORTD.5Symbol pap_1a= PORTD.0 'Eje YSymbol pap_1b= PORTD.1Symbol pap_1c= PORTD.2Symbol pap_1d= PORTD.3Symbol led_A= PORTC.6Symbol led_B= PORTC.7Symbol boton_z=PORTB.4 ' ENTRADAS DE SENSORES DE FIN DE CARRERASymbol boton_x=PORTB.5Symbol boton_y=PORTB.6'***Inicializacion de puertos********************PORTA=0

PORTC=0PORTD=0PORTE=0PORTB=0

' descriptor file, located in \inc\usb_18 - a copy' is located in the same folder as this fileUSB_Descriptor = "CNC_ADESC.inc"

' USB Buffer...Symbol USBBufferSizeMax = 8Symbol USBBufferSizeTX = 8Symbol USBBufferSizeRX = 8Dim USBBuffer[USBBufferSizeMax] As Byte

' some useful flags...Dim PP0 As Byte System ' USBPOLL status returnSymbol CARRY_FLAG = STATUS.0 ' high if microcontroller does not have control over the bufferSymbol ATTACHED_STATE = 6 ' is USB attached ' ************************************************************' * main program loop - remember, you must keep the USB *' * connection alive with a call to USBPoll, USBIn or USBOut *' * every couple of milliseconds or so *' ************************************************************GoSub AttachToUSB GoSub pos_cero 'LLENDO A LA POSICION (0,0)ProgramLoop: GoSub DoUSBIn chose= USBBuffer [0] z= USBBuffer [1] x_mm=USBBuffer [2]

14

Page 15: cnc2014b

Arquitectura de Computadoras 2014

x_cm=USBBuffer [3] y_mm=USBBuffer [4] y_cm=USBBuffer [5] USBPoll If USBBuffer [6]=10 Then chose=1 x_mm=0 x_cm=0 y_mm=0 y_cm=0 z=1 led_A=0 EndIf USBPoll GoSub Dibujar USBPoll 'GoSub DoUSBOut GoTo ProgramLoop ' ************************************************************' * receive data from the USB bus *' ************************************************************DoUSBIn: USBIn 1, USBBuffer, USBBufferSizeRX, DoUSBIn Return ' ************************************************************' * transmit data *' ************************************************************DoUSBOut: USBOut 1, USBBuffer, USBBufferSizeTX, DoUSBOut Return

' ************************************************************' * wait for USB interface to attach *' ************************************************************AttachToUSB: Repeat

USBPoll Until PP0 = ATTACHED_STATE led_A=1 Return'*************************************************************'*SUBRUTINAS DE PROGRAMA PRINCIPAL *'*************************************************************'***SUBRUTINA PRINCIPAL*********** Dibujar: Select Case chose Case 1 'POSICION INICIAL p1_x=(10*x_cm)+x_mm 'Posicion deseada eje X, en "mm" aux_x= k_dc*(p1_x+9) 'Ecuacion de desplazamiento eje X p1_y=(10*y_cm)+y_mm 'Posicion deseada eje Y, en "mm", 10->10mm aux_y= k_pap*p1_y 'Ecuacion de desplazamiento eje Y USBPoll GoSub eje_Z GoSub eje_X GoSub eje_Y USBPoll Break Case 2 mov_x= (10*x_cm)+x_mm mov_x=mov_x+p1_x aux_x= k_dc*(mov_x+9) USBPoll GoSub eje_X

15

Page 16: cnc2014b

Arquitectura de Computadoras 2014

mov_y=(10*x_cm)+x_mm mov_y= mov_y+p1_y aux_y= k_pap*mov_y USBPoll GoSub eje_Y aux_x= k_dc*(p1_x+9) USBPoll GoSub eje_X aux_y= k_pap*p1_y USBPoll GoSub eje_Y Break Case 3 mov_x= (10*x_cm)+x_mm h=mov_x 'Altura mov_y=(10*y_cm)+y_mm b= (mov_y)/2 rel=h/b mov_x=p1_x mov_y=p1_y USBPoll For r=0 To 1 Step 1 For m=0 To b Step 1 'eje y mov_y=mov_y+1 aux_y= k_pap*( mov_y) USBPoll GoSub eje_Y DelayMS 40 USBPoll For n=0 To h Step rel 'eje x If r=0 Then mov_x=mov_x+1 aux_x= k_dc*(mov_x+9) USBPoll GoSub eje_X DelayMS 40 USBPoll Else mov_x=mov_x-1 aux_x= k_dc*(mov_x+9) USBPoll GoSub eje_X DelayMS 40 USBPoll EndIf Next n

Next m Next r aux_y= k_pap*(p1_y) USBPoll GoSub eje_Y Break End Select Return'***Posicion cero (0,0)***********pos_cero: While boton_z=0 DelayMS 20 dc_2a=0 dc_2b=1 led_B=1 USBPoll Wend dc_2b=0 While boton_x=1 DelayMS 20 dc_1a=0 dc_1b=1 'Decrementa posicion eje X led_B=1 USBPoll Wend dc_1b=0 While boton_y=1 DelayMS 20 GoSub decre_PAP led_B=1 USBPoll Wend pap_1a=0 pap_1b=0 pap_1c=0 pap_1d=0 led_B=0 USBPollReturn'***Movimiento eje X**************eje_X:While x<>aux_x aux=enc 'decodificacion de encoder

16

Page 17: cnc2014b

Arquitectura de Computadoras 2014

enc=PORTA &3 If aux=2 And enc=3 Then Inc x ' considerando flancos ascendentes If aux=3 And enc=2 Then Dec x If x>aux_x Then 'Decrementa posicion eje X dc_1a=0 dc_1b=1 led_B=1 USBPoll EndIf If x<aux_x Then dc_1b=0 'incrementa posicion eje X dc_1a=1 led_B=1 USBPoll EndIf If x=aux_x Then dc_1a=0 dc_1b=0 led_B=0 USBPoll DelayMS 20 'por la inercia EndIf WendReturn'***Movimiento eje Y****************eje_Y: While y<>aux_y If y<aux_y Then led_B=1 GoSub incre_PAP y=y+1 USBPoll EndIf If y>aux_y Then led_B=1 GoSub decre_PAP y=y-1 USBPoll EndIf If y=aux_y Then pap_1a=0 pap_1b=0 pap_1c=0

pap_1d=0 led_B=0 USBPoll EndIf WendReturn'----------------decre_PAP: ' Representa un paso (equivale 1mm), Decrementa posicion eje Y pap_1a=1 pap_1b=0 pap_1c=0 pap_1d=0 DelayMS vel_pap pap_1a=0 pap_1b=0 pap_1c=0 pap_1d=1 DelayMS vel_pap pap_1a=0 pap_1b=1 pap_1c=0 pap_1d=0 DelayMS vel_pap pap_1a=0 pap_1b=0 pap_1c=1 pap_1d=0 DelayMS vel_papReturn'----------------incre_PAP: ' Representa un paso (equivale 1mm), incrementa posicion eje Y pap_1a=0 pap_1b=0 pap_1c=1 pap_1d=0 DelayMS vel_pap pap_1a=0 pap_1b=1 pap_1c=0 pap_1d=0 DelayMS vel_pap pap_1a=0 pap_1b=0

17

Page 18: cnc2014b

Arquitectura de Computadoras 2014

pap_1c=0 pap_1d=1 DelayMS vel_pap pap_1a=1 pap_1b=0

pap_1c=0 pap_1d=0 DelayMS vel_papReturn

PROGRAMA EN VISUAL BASIC 6

Dim eje_z As Integer

' vendor and product IDs

Private Const VendorID = 6017

Private Const ProductID = 2000

' read and write buffers

Private Const BufferInSize = 8

Private Const BufferOutSize = 8

Dim BufferIn(0 To BufferInSize) As Byte

Dim BufferOut(0 To BufferOutSize) As Byte

Private Sub Check1_Click()

If Check1.Value = 1 Then

eje_z = 2

Check1.Caption = "Abajo"

Else

eje_z = 1

Check1.Caption = "Arriba"

End If

End Sub

Private Sub Command1_Click()

chose = 1 'POSICION INICIAL

num1 = CDbl(Text1.Text) 'Eje X

If num1 > 9 Then

num1_mm = num1 Mod 10

num1_cm = (num1 - num1_mm) / 10

End If

If num1 < 10 Then

num1_mm = num1

num1_cm = 0

End If

num2 = CDbl(Text2.Text) 'Eje Y

If num2 > 9 Then

num2_mm = num2 Mod 10

num2_cm = (num2 - num2_mm) / 10

18

Page 19: cnc2014b

Arquitectura de Computadoras 2014

End If

If num2 < 10 Then

num2_mm = num2

num2_cm = 0

End If

BufferOut(0) = 0 ' first by is always the report ID

BufferOut(1) = chose

BufferOut(2) = eje_z

BufferOut(3) = num1_mm

BufferOut(4) = num1_cm

BufferOut(5) = num2_mm

BufferOut(6) = num2_cm

hidWriteEx VendorID, ProductID, BufferOut(0)

End Sub

Private Sub Command2_Click()

chose = 2 'DIBUJAR CUADRADO

num3 = CDbl(Text3.Text)

If num3 > 9 Then

num3_mm = num3 Mod 10

num3_cm = (num3 - num3_mm) / 10

End If

If num3 < 10 Then

num3_mm = num3

num3_cm = 0

End If

BufferOut(0) = 0 ' first by is always the report ID

BufferOut(1) = chose

BufferOut(2) = eje_z

BufferOut(3) = num3_mm

BufferOut(4) = num3_cm

hidWriteEx VendorID, ProductID, BufferOut(0)

End Sub

Private Sub Command3_Click()

chose = 3 'TRIANGULO

num4 = CDbl(Text4.Text) 'Bsse

If num4 > 9 Then

num4_mm = num4 Mod 10

num4_cm = (num4 - num4_mm) / 10

End If

If num4 < 10 Then

num4_mm = num4

19

Page 20: cnc2014b

Arquitectura de Computadoras 2014

num4_cm = 0

End If

num5 = CDbl(Text5.Text)

If num5 > 9 Then

num5_mm = num5 Mod 10

num5_cm = (num5 - num5_mm) / 10

End If

If num5 < 10 Then

num5_mm = num5

num5_cm = 0

End If

BufferOut(0) = 0 ' first by is always the report ID

BufferOut(1) = chose

BufferOut(2) = eje_z

BufferOut(3) = num5_mm

BufferOut(4) = num5_cm

BufferOut(5) = num4_mm

BufferOut(6) = num4_cm

hidWriteEx VendorID, ProductID, BufferOut(0)

End Sub

Private Sub Command4_Click()

chose = 4

num6 = CDbl(Text6.Text)

If num6 > 9 Then

num6_mm = num6 Mod 10

num6_cm = (num6 - num6_mm) / 10

End If

If num6 < 10 Then

num6_mm = num6

num6_cm = 0

End If

BufferOut(0) = 0 ' first by is always the report ID

BufferOut(1) = chose

BufferOut(2) = eje_z

BufferOut(3) = num6_mm

BufferOut(4) = num6_cm

hidWriteEx VendorID, ProductID, BufferOut(0)

End Sub

' ****************************************************************

' when the form loads, connect to the HID controller - pass

20

Page 21: cnc2014b

Arquitectura de Computadoras 2014

' the form window handle so that you can receive notification

' events...

'*****************************************************************

Private Sub Form_Load()

' do not remove!

ConnectToHID (Me.hwnd)

End Sub

'*****************************************************************

' disconnect from the HID controller...

'*****************************************************************

Private Sub Form_Unload(Cancel As Integer)

BufferOut(7) = 10

hidWriteEx VendorID, ProductID, BufferOut(0)

DisconnectFromHID

End Sub

'*****************************************************************

' a HID device has been plugged in...

'*****************************************************************

Public Sub OnPlugged(ByVal pHandle As Long)

If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) = ProductID Then

' ** YOUR CODE HERE **

Shape1.BackColor = vbRed

Label13.Caption = "USB Conectado"

End If

End Sub

'*****************************************************************

' a HID device has been unplugged...

'*****************************************************************

Public Sub OnUnplugged(ByVal pHandle As Long)

If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) = ProductID Then

' ** YOUR CODE HERE **

Shape1.BackColor = &HE0E0E0

Label13.Caption = "USB Desconectado"

Text1.Text = "0"

21

Page 22: cnc2014b

Arquitectura de Computadoras 2014

Text2.Text = "0"

Text3.Text = "0"

Text4.Text = "0"

Text5.Text = "0"

Text6.Text = "0"

Check1.Caption = "Arriba"

Check1.Value = 0

End If

End Sub

'*****************************************************************

' controller changed notification - called

' after ALL HID devices are plugged or unplugged

'*****************************************************************

Public Sub OnChanged()

Dim DeviceHandle As Long

' get the handle of the device we are interested in, then set

' its read notify flag to true - this ensures you get a read

' notification message when there is some data to read...

DeviceHandle = hidGetHandle(VendorID, ProductID)

hidSetReadNotify DeviceHandle, True

End Sub

'*****************************************************************

' on read event...

'*****************************************************************

Public Sub OnRead(ByVal pHandle As Long)

' read the data (don't forget, pass the whole array)...

If hidRead(pHandle, BufferIn(0)) Then

' ** YOUR CODE HERE **

' first byte is the report ID, e.g. BufferIn(0)

' the other bytes are the data from the microcontrolller...

End If

End Sub

'*****************************************************************

' this is how you write some data...

'*****************************************************************

Public Sub WriteSomeData()

22

Page 23: cnc2014b

Arquitectura de Computadoras 2014

BufferOut(0) = 0 ' first by is always the report ID

BufferOut(1) = 10 ' first data item, etc etc

' write the data (don't forget, pass the whole array)...

hidWriteEx VendorID, ProductID, BufferOut(0)

End Sub

FOTOS

23