TODOPIC
FORO TÉCNICO => Foro Técnico => Mensaje iniciado por: jfmateos2 en 30 de Enero de 2011, 13:58:24
-
Estaba buscando información sobre si es posible configurar una conexión USB CDC en un PIC sin cristal externo, usando el oscilador interno.
En principio parece ser que no es posible, pero aquí proponen una solución que consiste en instalar en Windows un driver tuneado: AVR-CDC
http://www.recursion.jp/avrcdc/cdc-232.html
-
Sí que se puede, Juanfe.
Aquí tienes los fuses que usé en un 24F: http://www.todopic.com.ar/foros/index.php?topic=27689.msg262753#msg262753
Aunque si usas un 18F, nunca lo conseguí.
-
Pero tú usas HID no CDC ¿no?
-
Sí, tienes razón, ¿pero tú crees que no funcionaría en CDC?
Me has dejado en la duda, a ver si puedo probarlo.
-
¿Low speed? ¿Para qué quieres que sea Low Speed, acaso usas USB 1.1?
-
Quiero ahorrarme el cristal mig.
Parece ser que el sistema CDC usa Bulk transfer, que sólo funciona en alta velocidad.
Pero también parece ser que el oscilador interno del PIC es capaz, en la mayoría de los casos, de proporcionar suficiente estabilidad para alcanzar alta velocidad, aunque Microchip no lo garantiza. En resumen, si tu PIC está bien fabricado podría funcionar en alta velocidad con el oscilador interno.
-
Bueno, pues después de volver a CCS, acabo de probar con el cristal interno una comunicación CDC y, aparentemente, funciona bien.
-
Que PIC?
-
pic18f27j53 con estos fuses (te dejo un pequeño programa que funciona):
#include <18F27J53.h>
#use delay(clock=48000000)
#include <usb_cdc.h>
#fuses INTRC_PLL_IO, PLL2, PLLEN, NOCPUDIV, NOWDT
void main(){
setup_oscillator(OSC_8MHZ | OSC_PLL_ON);
int c;
//these lines do some initialization, obviously:
usb_cdc_init();
usb_init();
usb_wait_for_enumeration();
while(true) {
usb_task(); //handles connections to and disconnections from the computer, registering the PIC with the computer, etc. call this pretty often so that the PIC responds to being plugged in.
if(usb_cdc_kbhit()) { //did we get some incoming data?
c = usb_cdc_getc(); //get one character of input
printf(usb_cdc_putc, "you typed: %c\r\n", c); //print out a response over usb
output_high(PIN_A1);
delay_ms(100);
output_low(PIN_A1);
delay_ms(100);
}
}
}
-
Ah vaya, es q me quedado atras con el PIC18F2550 :D