domingo, 7 de julio de 2013

8. Implementacion de rutina tipo hardware-software utilizando el modulo USB

Uso del modulo USB en aplicacion hardware-software

Para este laboratorio se implementara un circuito que enviara y recivira información entre el microprocesador y un computador utilizando como medio de comunicación el modulo USB, para poder desarrollar el laboratorio fue necesario instalar un driver para poder utilizar dispositivos HID, con este software ya se puede realizar la comunicacion entre el computador y el microprocesador.

materiales utilizados para este laboratorio:

  • Tarjeta de propósito general para PIC 18F2550.
  • Resistencia variable 1KΩ (Potenciómetro)..
  • Bloque X 8 led´s.
  • Resistencias 330Ω X 8.
Desarrollo del laboratorio:

Para este caso se realiza la captura de la variación de voltaje ocasionada por el movimiento de un potenciometro, esta variación se toma por el ADC del microprocesador almacenadose en una variable que después se envía por el modulo USB hacia el computador en el cual se visualiza en una aplicación desarrollada en Visual Studio. Net 2010, adicional mente en la aplicación se realiza una trackbar cuya variación se envía por el modulo USB hacia el microprocesador, esta información se visualiza en los led´s conectados en el puerto B del microprocesador.

a continuación se muestra el código del fireware.

#include <18F2550.h>
#device adc=8                                                                   
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN
#use delay (clock=12000000)//12Mhz
#USE STANDARD_IO(A)
#USE STANDARD_IO(B)

// CCS Library dynamic defines
#DEFINE USB_HID_DEVICE  TRUE 
#define USB_EP1_TX_ENABLE  USB_ENABLE_INTERRUPT  
#define USB_EP1_TX_SIZE    64 
#define USB_EP1_RX_ENABLE  USB_ENABLE_INTERRUPT   
#define USB_EP1_RX_SIZE    64 

// CCS USB Libraries
#include <pic18_usb.h>   
#include <usb_desc_hid 8-byte.h>   
#include <usb.c>      

void usb_debug_task(VOID)
{
   STATIC int8 last_connected;
   STATIC int8 last_enumerated;
   INT8 new_connected;
   INT8 new_enumerated;
   new_connected = usb_attached ();
   new_enumerated = usb_enumerated ();
   last_connected = new_connected;
   last_enumerated = new_enumerated;
}

// ----------------------------------Declaración de variables----------------------------------

int dato4;                                                                       //variable
int dato1;                                                                       //variable

//Variables USB-----------------------------------

int16 tx;
#byte txl=43
#byte txh=44
#byte tx1l=45
#byte tx1h=46

int8 in_data[8];
int8 out_data[8];

// ----------------------------------Declaración de los prototipos de las funciones---------------------------------

#INT_TIMER1
void int_TMR1()      //retardo programado a un segundo
{
}

void main(){

   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);  
   usb_init();
   
      for (;;) {

      SET_ADC_CHANNEL(0);
      DELAY_US(20);
      dato4=READ_ADC();
      usb_task ();
      usb_debug_task ();
      usb_get_packet (1, in_data, 8);

            txh=(in_data[1]);
            txl=(in_data[2]);
            tx1h=(in_data[3]);
           dato1=(in_data[4]);
           output_b(dato1);                  
   
            
            out_data[0]=30 ;
           out_data[3]=dato4;                     
            usb_put_packet (1, out_data, 8, USB_DTS_TOGGLE);
            ENABLE_INTERRUPTS(int_timer0);
            set_timer0(tx);

     }
}

y esta es la simulación:


Y por ultimo se muestra el montaje real


No hay comentarios:

Publicar un comentario