Anda di halaman 1dari 24

El usb fue creado en los aos 90 por una asociacin de empresas con la finalidad de de mejorar la tcnica de plug and

play. Fsicamente, los datos usb son transmitidos por un par trenzado (D+,D-) adems de la tierra y el voltaje (+5V), suelen ser conectores tipo A o tipo B


La clasificacin de los modos de trabajo del usb son: Usb HID Usb CDC

USB CDC
En este modo de trabajo, la conexin USB se realiza por medio de un driver previamente instalado en el disco duro de nuestro sistema. Este modo de trabajo incluye la comunicacin serial solo se tienen que modificar algunos identificadores dentro de la librera. Microchip proporciona el driver mchpcdc.inf para los pic de la familia 18F2550 o 18F4550.

USB en ISIS
Para poder trabajar con el conector USB que proporciona ISIS, es necesario instalar los drivers para que funcione la simulacion de la siguiente manera:

Incio, Todos los programas, Proteus 7 Profesional, Virtual USB, Install USB Drivers


Una vez instalado los drivers podemos simular nuestro conector USB. Buscamos el conector USB y aparecer la siguiente imagen:

USB en CCS
Las libreras y funciones a utilizar son las siguientes: #define usb_con_sense_pin NUMERO_PIN #include <usb_cdc.h> usb_cdc_init(); usb_init(); Usb_task(); usb_enumerated();

#define usb_con_sense_pin NUMERO_PIN


Es un pin fsico que detecta cuando el conector usb a sido conectado a la PC

#include <usb_cdc.h>

Es la librera que contiene las funciones de conversin de usb a RS232

usb_cdc_init();
Es la lnea que define el inicio de la conexin usb dentro del programa

usb_task();
Es una funcin que se encarga de leer el bus de datos del puerto usb

usb_enumerated();

Es una funcin que permite saber si la PC le a asignado un numero al puerto USB emulando una conexin RS232 (Puerto COM)

Cambios en la libreria
Primero tenemos que cambiar algunas lneas de nuestra librera usb_desc_cdc.h Tenemos que buscar la siguiente parte de cdigo:

0x61,0x64,//vendor id(0x04D8 is Microchip, or is it 0x0461??)==8,9 0x33,0x00,//product id == 10,11


Y cambiar esas lneas por: 0xD8,0x04,//vendor id(0x04D8 is Microchip, or is it 0x0461??)==8,9 0x0A,0x00,//product id == 10,11

PIC 18F2550 y PIC 18F4550


Estos pics son de gama alta, por lo que su arquitectura e instrucciones a nivel ensamblador son completamente diferentes. Nosotros solo nos enfocaremos en la comunicacin USB y no nos adentraremos a su arquitectura interna.

La palabra de configuracin es diferente y est dada por los siguientes bits: HSPLL.- Cristal de alta frecuencia con PLL NOWDT NOLVP NODEBUG USBDIV.- Frecuencia del usb a 48MHz. PLL5.- Divide la frecuencia de un cristal entre 5 CPUDIV1. Divisor de frecuencia de 96 a 48 MHz VREGEN.- Regulador de 3.3V interno para USB NOPUT NOBROWNOUT

Programa Ejemplo
En este programa vamos a encender 5 leds conectados en el puerto D0 al D5, enviando las 5 primeras letras del abecedario y las 5 ltimas letras para apagarlos utilizando para ello la herramienta Virtual Terminal

#include <18f4550.h> #fuses HSPLL,NOWDT,NOLVP,NODEBUG,USBDIV,PLL5,CPUD IV1,VREGEN,NOPUT,NOBROWNOUT #use delay (clock=48000000)

#define USB_CON_SENSE_PIN PIN_C2 #include <usb_cdc.h> #use standard_io(d)

void main() { char i; set_tris_d(0x00); output_d(0x00); usb_cdc_init(); usb_init(); while(true) { usb_task();

if(usb_enumerated()) { i=usb_cdc_getc(); /*Encendido de leds*/ if(i=='A') output_high(PIN_D0); if(i=='B') output_high(PIN_D1); if(i=='C') output_high(PIN_D2); if(i=='D') output_high(PIN_D3); if(i=='E') output_high(PIN_D4);

if(i==V') output_low(PIN_D0); if(i==W') output_low(PIN_D1); if(i==X') output_low(PIN_D2); if(i==Y') output_low(PIN_D3); if(i==Z') output_low(PIN_D4);

} // IF PRINCIPAL }//WHILE } //VOID MAIN

USB con ADC


Vamos a obtener el valor de voltaje por medio de un potenciomentro conectado a RA0 y mostrar el valor por medio de la herramienta Virtual Terminal

#include <18F4550.h> #device adc=10 #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBD IV,PLL5,CPUDIV1,VREGEN

#use delay(clock=48000000) #define USB_CON_SENSE_PIN PIN_B2 #include <usb_cdc.h>

void main() { int16 q,q1; float p; q1=0;

setup_adc_ports(AN0|VSS_VDD); setup_adc(ADC_CLOCK_INTERNAL); set_adc_channel(0); usb_cdc_init(); usb_init();

do { usb_task(); if (usb_enumerated()) { delay_ms(500); q = read_adc(); if (q!=q1) { p = 5.0 * q / 1024.0; printf(usb_cdc_putc,"\r Voltage=%01.2fV", p); } q1=q; } } while (TRUE);

Prcticas 1 y 2
Realizar las respectivas interfaces en Visual Basic 6.0 para los 2 programas anteriores. Investigar cual es el procedimiento para poder leer el puerto COM y mostrar la cadena enviada por el pic

Anda mungkin juga menyukai