En el siguiente documento se detallan algunas funciones y procedimientos para realizar una conexion mediante CDC ( Emulación de puerto serie) con un microcontrolador de la familia 18F con soporte para USB y LabView. Son bienvenidas las observaciones, correciones y/o correciones sugerencias para este documento.
Conexion CDC PIC<->LabView
El hardware utilizado para este ejemplo dispone de 5 pushbuttons conectados en el puerto A (A1..A5) y 8 leds en el puerto B (B0..B7).
#include <18f2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL4,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)
#define LED1 PIN_B0
#define LED2 PIN_B1
#define LED3 PIN_B2
#define LED4 PIN_B3
#define LED5 PIN_B4
#define LED6 PIN_B5
#define LED7 PIN_B6
#define LED8 PIN_B7
#define LED_ON output_low
#define LED_OFF output_high
#include
#include
void main(void) {
char c;
usb_init();
while (TRUE) {
if (usb_enumerated()) {
if (usb_cdc_kbhit()) {
c=usb_cdc_getc();
if (c=='1') output_toggle(LED1);
if (c=='2') output_toggle(LED2);
if (c=='3') output_toggle(LED3);
if (c=='4') output_toggle(LED4);
if (c=='5') output_toggle(LED5);
if (c=='6') output_toggle(LED6);
if (c=='7') output_toggle(LED7);
if (c=='8') output_toggle(LED8);
}
if (input_STATE(PIN_A5)==0){
delay_ms(800);
printf(usb_cdc_putc,"5\r");
}
if (input_state(PIN_A4)==0){
delay_ms(800);
printf(usb_cdc_putc,"4\r");
}
if (input_state(PIN_A3)==0){
delay_ms(800);
printf(usb_cdc_putc,"3\r");
}
if (input_state(PIN_A2)==0){
delay_ms(800);
printf(usb_cdc_putc,"2\r");
}
if (input_state(PIN_A1)==0){
delay_ms(800);
printf(usb_cdc_putc,"1\r");
}
}
}
}
A continuación un video para complementar el documento...
.