hola que tal; bueno, la verdad este tema está bastante bueno
, yo he estado trabajando un poco con usb cdc, seguido de algunos manuales que han hecho.
pero por alguna razón que desconozco, no se si sea por mi compu o el pic, la comunicacion por usb cdc ya no me funciona, y quería ver si me podrían ayudar, pues creo que también les podría pasar a otros. Resumo mi PROBLEMA:
uso un pic 18f4550, interfaz usb cdc, y los programas que hago para la comunicación están hechos en visual basic .net.
Cuando conecto el pic a la PC, instalo el controlador (.inf), y todo perfecto. si windows le asigna el COM3, ese puerto uso para mi programa, y no pueden entablar comunicación. Y lo que es extraño: todos los programas que he probado, siempre pueden abrir ese puerto COM3, aún aunque ya haya desconectado mi dispositivo, (y haya desaparecido del administrador de dispositivos de windows), como si windows lo mantuviera activo ocultamente. el problema no es al abrir ni cerrar el puerto en los programas, sino al enviar datos.
por cierto: aquí escribo los codigos de mis programas (en PICC y VB.net), ambos están compilados sin errores.
El pic siempre se queda en la pantalla "Iniciando...", y de ahí no pasa.
los codigos son simples, basandome en ejemplos que encontré aquí.
Lo que es mas cuirioso todavía: antes si me funcionaba, hasta un dia en la mañana que la encendí, ya no (como por arte de magia) . es algo de windows?
Código:
///////////////////////////////////////////////////////////////////////////////////
#include <18F4550.h> // Definición de registros internos.
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN
// Fuses utilizados:
/*
HSPLL: utilizamos un cristal HS de alta velocidad, en conjunto con el PLL para generar los 48Mhz.
-eliminado-NOMCLR: Utilizamos reset por software, y dejamos el pin 1 del micro como entrada/salida digital.
NOWDT: No utilizamos el perro guardían.
NOPROTECT: Desactivamos la protección de código.
NOLVP: Desactivamos la programación a bajo voltaje.
NODEBUG: No entramos al modo debug.
USBDIV: signfica que el clock del usb se tomará del PLL/2 = 96Mhz/2 = 48Mhz.
PLL5: significa que el PLL prescaler dividirá en 5 la frecuencia del cristal. para HS = 20Mhz/5 = 4Mhz.
CPUDIV1: El PLL postscaler decide la división en 2 de la frecuencia de salida del PLL de 96MHZ, si queremos 48MHZ, lo dejamos como está.
VREGEN: habilita el regulador de 3.3 volts que usa el módulo USB
*/
#use delay(clock=48000000) // Frecuencia máxima de trabajo.
#include "usb_cdc.h" // Descripción de funciones del USB.
#include "usb_desc_cdc.h" // Descriptores del dispositivo USB.
#define LCD_ENABLE_PIN PIN_D2
#define LCD_RS_PIN PIN_B2
#define LCD_RW_PIN PIN_B3
#define LCD_DATA0 PIN_B4
#define LCD_DATA1 PIN_B5
#define LCD_DATA2 PIN_B6
#define LCD_DATA3 PIN_B7
#include <lcd.c>
void main() {
char codigo;
lcd_init();
lcd_putc("Iniciando...");
////////////////////////////////////////////////////////////////////////////
//CONEXION Y HABILITACION DEL USB CON LA PC
////////////////////////////////////////////////////////////////////////////
usb_cdc_init(); // Configuramos al puerto virtual.
usb_init(); // Inicializamos el stack USB.
while(!usb_cdc_connected()) {} // espera a detectar una transmisión de la PC (Set_Line_Coding).
usb_task();
usb_wait_for_enumeration(); // Espera a que el dispositivo sea enumerado por el host.
while(TRUE){ // bucle infinito.
lcd_putc("\fEsperando codigo");
codigo=usb_cdc_getc(); //esperar codigo de la PC
lcd_putc("\fCodigo recibido");
}
}
Código:
Imports MSCommLib
Public Class Form1
Public WithEvents PuertoCom As MSComm
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
PuertoCom = New MSComm
PuertoCom.CommPort = 3
PuertoCom.Settings = "9600,N,8,1"
PuertoCom.InBufferSize = 30
PuertoCom.InputLen = 1
PuertoCom.OutBufferSize = 30
While Not PuertoCom.PortOpen
Try
PuertoCom.PortOpen = True
Catch ex As Exception
End Try
End While
PuertoCom.Output = "p"
End Sub
End Class
gracias, sé que ustedes sabran cual es el problema, porque yo lo noto un tanto confuso. si no lo dejé claro, por favor pregunten
gracias
salu2