TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: scientist en 26 de Agosto de 2008, 18:48:52
-
Hola, solo queria preguntar acerca si alguiena tenido problemas con el driver mchpcdc , ya que hago mi programa, lo conecto al usb, lo detecta, instalo el driver mencionado, y no hace nada de nada, que podria ser?
pego el programa
#define __USB_PIC_PERIF__ 1
#if !defined(__PCH__)
#error USB CDC Library requires PIC18
#endif
#if __USB_PIC_PERIF__
#include <18F2455.h>
//configure a 20MHz crystal to operate at 48MHz
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
//#fuses USBDIV, PLL1, CPUDIV1, PROTECT, NOCPD, noBROWNOUT,HSPLL,NOWDT,nolvp, VREGEN
#use delay(clock=48000000)
#else //use the National USBN960x peripheral
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#endif //endif check to see which peripheral to use
#include <usb_cdc.h>
void main() {
BYTE i, j, address, value;
char RcvUSB;
#use standard_io(A)
usb_cdc_init();
usb_init();
while(!usb_cdc_connected()) {
output_bit( PIN_A0, 1);
delay_ms(1000);
output_bit( PIN_A0, 0);
delay_ms(1000);
}
do {
usb_task();
if (usb_enumerated()) {
printf(usb_cdc_putc, "\r\nHello World !");
RcvUSB = usb_cdc_getc();
if (RcvUSB=='b') {
printf(usb_cdc_putc, "\r\nSee how I blink 20 times on Port A.0 !");
for (i=1;i<=20;i++) {
output_bit( PIN_A0, 1);
delay_ms(250);
output_bit( PIN_A0, 0);
delay_ms(250);
};
}
else
printf(usb_cdc_putc, "\r\nI just received : %c",RcvUSB);
}
} while (TRUE);
}
saludos
-
Hola.
El proceso es a la inversa. Debes copiar el .inf al PC, darle click derecho, escojes la opcion instalar y luego conectas el hard y listo lo instalas como CDC.
Saludos
-
Muchas gracias MLO , asi lo habia hecho anteriormente guiandome del ejemplo del maestro Redpic, pero no me salia nada, lo que hiice que que a la hora de pedirme los driver mejor puse los que ya trae el CCS en su carpeta de driver, y asi me funciono, ahora mismo lo estoy probando, el driver cdc es generico no es asi? bueno, cualquier imprevisto expondre mi duda, saludos
-
Hola.
Si es generico en la clase que maneja, es decir CDC, pero depende de los VID y PID que hay en el firmware del micro y en el .inf, tienen que ser los mismos, si no no funcionara
Saludos
-
Tienes mucha razon MLO, cheque los vid y pid, y efectivamente era eso, muchas gracias, saludos
-
:mrgreen: :mrgreen:
Que bien que lo solucionaras.
Saludos
-
Hola, aprovecho para preguntar de la funcion en cdc. ya que mi pregunta se basa en si las interrupciones no funcionan dentro del ciclo while(!usb_cdc_connected())
ya que no me funciona ninguna interrupcion dentro de ese while, saludos
-
Hola.
:? No veo que estes usando alguna intrerrupcion!!!! no se bien a que te refieres. Si es con respecto al encendido y apagado del led mientras en el ciclo while(!usb_cdc_connected()), me parece que intervalos de 1 segundo es muucho tiempo, la verificacion de si se conecto o no, no demora mucho tiempo que digamos (o en mi caso al menos, solo lo coloco a esperar y antes de la espera enciendo el led y luego de la espera lo apago)
Saludos
-
Hola MLO, no me referia precisamente a ese ejemplo, me referia a una interrupcion por algun sistema embebido dentro del micro, por ejemplo el timer0 o la interrupcion #int_rda, lo que pasa es que quiero hacer un programa para cuando no este conectado al pc por usb, este leyendo un canal adc, y cuando detecte que se paso de un limite se comunique con un dispositivo en serial, la parte del adc, si me funciona, pero las interrupciones no, mi pregunta es, se pueden llamar a las interrupciones, mientras ejecuto un programa en ese ciclo while, o donde es conveniente poner el programa que se va a realizar cuando no este conectado al usb, saludos, (si pueden poner un pequeño ejemplo, muchisimo mejor, se lo agradeceria bastante) por quela verdad, no se en que parte poner el programa que va a correr sin la conexio usb. saludos
-
Hola, me respondo yo mismo, si que se puede llamar a interrupciones dentro de la funcion while(!usb_cdc_connected()) ahora, el problema me viene cuando quiero hacer la interrupcion por serial (int_rda) ya que es la unica que no funciona, que creen que sea? ya le estuve buscando y nada, alguien a tenido el mismo problema? donde me recomiendan situar la parte del programa que va a correr cuando no este conectado al usb? alguna sugerencia. saludos
bueno, si que se pueden hacer todas las interrupciones posibles que te da pa posibilidad el 18f2550, desde externa hasta la eeprom, un error de sintaxis me estaba matando, solucionado el problema, saludos :D