TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: proyecto2009utu en 10 de Enero de 2011, 17:59:05
-
Buenas comunidad, desde hace dias ya estoy intentando levantar una comunicacion USB CDC sin exito....
He encontrado algunos ejemplos en la web pero tampoco pude hacer andar ninguno, lo que me desconcierta mas :?
Yo recien empiezo a trabajar con CCS, y mis experiencas anteriores fueron con MikroC con el cual logre estableer una comunicacion HID mediante el USB
Por ahora lo unico que quiero hacer es establecer la comunicacion CDC y ver que funciona.
Tengo algunas dudas con el driver, no se si lo debo crear o es el mismo siempre???
Y mi gran duda es el error que me da en mis programas al compilar, me dice que no esta definido #device PIC18F4550, en el 18f4550.h
No entiendo porque este error, y como lo corrigo?
Luego seguire colocando otras dudas en este hilo, pero la verdad esto me tiene muy trancado :5]
Desde ya mil gracias
-
Amigo busca un tema llamado el usb desencadenado http://picmania.garcia-cuervo.net/usb_0_desencadenado.php , allí encontraras todo sobre el usb cdc, bulk, hid está todo muy fácil de entender. Yo los he probado y hecho aplicaciones sencillas con el usb_cdc con el 18f4550 en win 7 64 bit y en general todo funciona muy bien, solo asegurate q el archvo inf incluya los SO de 64 bit o 32 bit segun en cual estes trabajando
-
Como mencione mas arriba en general no he tenisdo problemas con el usb_cdc
Habia hecho algunas pruebas y todo funcionaba bien, luego quice enviar datos desde el pc a un pic el cual a su vez lo enviaba a otro pic y finalmente el 1er pic lo enviaba al PC. Bueno la cosa no funciono y el primer pic no entraba en la rutina de interrupcion. Luego de algunas pruebas nada mejoro, asi q decidi hacer lo mas basico hacer el eco desde el 1er pic, y para sopresa el eco enviado al pc es cualquier cosa menos el caracter enviado por el pc.
Al enviar el caracter desde el pc el pic lo recibe ya q se enciende un led como bandera, pero retorna al pc cualquier cosa.
Estoy usando e CCS 4.104 en win 7 64 bit. El pc reconoce bien el pic y le asigna un puerto com.
este es el Cod.
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include <usb_cdc_HomeScada.h>
//#define USB_CON_SENSE_PIN PIN_B2
char recepcion;
void main(){
delay_ms(300);
usb_cdc_init(); //esta en usb_cdc y configura los baudios, bit paridad etc
usb_init(); // esta en pic18_usb llama a usb_init_cs() q a su vez llama a usb_task()
while(!usb_cdc_connected()) {}
usb_task(); //está en pic18_usb
if (usb_enumerated()) printf(usb_cdc_putc, " TEST ECO USB:\r\n");
//Atencion de eco USB_CDC
do{
usb_task(); //está en pic18_usb
if (usb_enumerated()) {
if(usb_cdc_kbhit()) {
if ((recepcion=usb_cdc_getc()) != 0x00) {
usb_cdc_putc(recepcion);recepcion=0x00;
output_high(pin_c0); //enciende led para monitorea si entra en rutina de rx y tx
delay_ms(10);
output_low(pin_c0);
}
}
}
} while(true);
}
-
Seguí haciendo pruebas y la falla se mantenía por el lado de la recepción usb_cdc del pic. Todo lo que el PIC recibía y retransmitia al pc o al módulo serie salia mal.
Así que decidí, compilar en otra versión anterior el mismo código, y esto resolvió el problema
Con la versión 4.104 de CCS me genera un .hex que tiene falla en la recepción usb_cdc
Con la versión 4.023 de CCS no produce problemas .
Este es el cod de prueba usado en las dos versiones
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N)
#include <usb_cdc_HomeScada.h>
//#define USB_CON_SENSE_PIN PIN_B2
char s;
void main(){
char c=0x00;
delay_ms(300);
usb_cdc_init(); //esta en usb_cdc y configura los baudios, bit paridad etc
usb_init(); // esta en pic18_usb llama a usb_init_cs() q a su vez llama a usb_task()
while(!usb_cdc_connected()) {}
enable_interrupts(global);
enable_interrupts(int_rda);
do{
usb_task(); //está en pic18_usb
if (usb_enumerated()) {
c=usb_cdc_getc();
usb_cdc_putc(c);
putc(c);
c=0x00; // lo retransmite por rs232 y hace eco usb
}
} while(true);
}
#int_rda
void serie_isr(){
if (kbhit()){
output_high(pin_c0); //enciende led para monitorea q entro en rutina de rx
s=getc();
putc(s);
delay_ms(1);
output_low(pin_c0);
usb_task(); //está en pic18_usb
if (usb_enumerated()){ if (s != 0x00) usb_cdc_putc(s); s=0x00;}
}}
-
Interesante que con una version mas nueva te de problemas...
Yo estoy usando la version 4.104 actualemente (en sistemas operativos de 32 bit), voy a ver si me paso a la 4.023, como tu dices...
Cual es la aplicacion que estas utilizando para comprobar tus programas???
Actualmente estoy con problemas para instalar el driver, ya que inicializo el USB pero no logro instalar el driver para que el sistema operativo reconozca al dispositivo
Tu como lo haces?
Desde ya muchas gracias
-
Hola, ya descubrí mi problema. Los archivos usb_desc_cdc.h q usaba los habia creado con una versión menos reciente de PICC. Así que modifique el archivo usb_desc_cdc. de la versión 4.104 y todo funciona bien, también lo probe con la versión 4.114 y compila bien. Probe mi tarjeta en win 7 64 bit y se asigna puerto com. Hice las pruebas de eco y responde muy bien.
Prueba este código solo hace el eco emulando un puerto com con USB_CDC
eco_usb_cdc.c
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN // uso un cristal de 20MHz
#use delay(clock=48000000)
#include <usb_cdc.h>
#define USB_CON_SENSE_PIN PIN_B2 // puede ser aunq deshabilitado tb me funcionó para este ejemplo en otros casos si es necesario
char s;
char c=0x00;
void main(){
delay_ms(300);
usb_cdc_init(); //esta en usb_cdc y configura los baudios, bit paridad etc
usb_init(); // esta en pic18_usb llama a usb_init_cs() q a su vez llama a usb_task()
while(!usb_cdc_connected()) {}
do{
usb_task();
//c=0x00;
if (usb_enumerated()) {
c=usb_cdc_getc();
usb_cdc_putc(c);
}
}
while(true);
}
Te adjunto el archivo usb_desc_cdc.h
Nota: no uso el VID y PID de microchip, solo por antojo jejeje, así q puedes usar el q quieras para fines didácticos, no así para fines comerciales.
Verifica que en tu archivo usb_cdc.h este esta línea,
#include <usb_desc_cdc.h> //USB Configuration and Device descriptors for this UBS device
para que pueda llamar al archivo usb_desc_cdc.h q t adjunto y este a su vez llame al .inf q tb adjunto el cual a su vez llama al driver standard de windows. (no olvides hacer un respaldo de tus drivers originales si coincide el nombre o cambia el nombre al q t envio, sin olvidar cambiar el nombre en la línea antes citada.
modifica el arch .txt a .inf
-
Anda bien... ni siquiera me pide para instalar el driver y me genera un com virtual...
No se que aplicacion utilizar para probarlo
Ya que con el hyperterminal me recibe los datos pero no me devuelve nada :(
Gracias
-
proyecto2009ut
al usar CDC, no necesitas driver, porque el windows ya lo trae, pero si necesitas informarle al windows como será la configuración del dispositivo que trabajará como puerto serial virtual y es allí donde debes buscar un archivo con extensión .inf
el que yo he usado es el que proporciona microchip en su MCHPFSUSB Framework http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en537044
buscas en la carpeta drivers y cdc y allí deben estar unos 4 o 5 archivos que son los que necesitan,
pero eso si, debes usar el mismo VID y PID para que puedan integrarse correctamente al sistema.
bueno debo corregir mi post anterior, en realidad si necesita un driver, los archivos que te mencioné son estos:
(http://img708.imageshack.us/img708/4310/drivercdcmicrochip.jpg)
al buscar el inf, el inf copia los .sys a la carpeta del sistema
-
Cuando preguntas q aplicación uso, t refieres al software ??
Con cualquier visor de puerto serie deberías ver lo q envias por el puerto com y lo q recibes por el.
Yo hago las pruebas con el Docklihgt 1.6 y el monitor de puerto serie q está en tools del compilador ccs.
Y el hardaware es una tarjeta en la que tengo un 18f4550 conectado al usb, y su puerto serie a un modulo xbee, admas de una memoria i2c, y otras cosas.
Creo q si usas win de 32 bit, puedes simular la comunicaión usb_cdc en proteus, asi no necitaras de una tarjeta fisica o si ya dispones de una o en un proto, mucho mejor.
Y como bien dice Palitroquez el usb_cdc no necesita driver pq windows ya lo tiene, pues lo único q uno hace es indicarle cual driver usar, con el archivo .inf
Proyecto2009ut, sube los códigos q usas, así mas puden verlos y te podrán dar buenas sugerencias.
-
Buenas, gracias por su interes...
Si te preguntaba por la aplicacion, yo estaba usando el putty y el hyperterminal, y los dos me hacen lo mismo, me envian lo que escribo pero no recibo nada.... es raro :?, pero igual yo estoy trancado en un paso anterior ya que la pc no me reconoce el dispositivo :5]
Lo que estoy intentando realizar es un osciloscopio digital, que se comunique por usb. Ahora bien estoy teniendo ciertos polemas con el PIC...
El codigo que tengo hasta al momento es solo una pequeña parte de lo que quiero hacer...
#include <18f4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL12,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)
#include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include "usb_desc_cdc.h" // Descriptores del dispositivo USB.
#include "usb_cdc.h" // Descripción de funciones del USB.
short estado_usb; // boolean global, se debe declarar antes de llamar a usb_cdc.h
#define USB_CON_SENSE_PIN PIN_E3
#define PORTB = busdata // Defino el puerto B como la entrada de datos
// Declaracion de funciones
static void adqrap(void); // Defino adquisicion rapida
static void adqlen(void); // Defino adquisicion lenta
static void lectur(void); // Funcion Lectura
static void escrit(void); // Funcion Esctritura
// Declaracion de variables
int8 var1;
char var;
void main() {
set_tris_b (0xff);
set_tris_a (00010000);
usb_cdc_init();
usb_init();
while(!usb_cdc_connected()) {}
// espera a detectar una transmisión de la PC (Set_Line_Coding)
do{
usb_task();
if (usb_enumerated()){
usb_cdc_putc(var);
if(usb_cdc_kbhit()){ //en espera de nuevo(s) caracter(es) en el buffer
if(usb_cdc_getc()=='x'){ //¿lo que llegó fué el caracter x?
printf(usb_cdc_putc, "Probando comunicacion\n\r");
//si, entonces envía una cadena hacia el PC
}
if(usb_cdc_getc()=='a'){ //¿lo que llegó fué el caracter a?
printf(usb_cdc_putc, "Proximamente datos osciloscopio\n\r");
//si, entonces envía una cadena hacia el PC
}
}
}
}while (TRUE); // bucle eterno
}
Ahora bien, lo que quiero hacer y no se como es cargar los datos del PuertoB en alguna de las variables y enviarlo por el USB, como puedo cargar una variable con el valor del puerto?
Gracias
PD: No se si me entienden el codigo, la parte de los caracteres y printf es solo para probar la comunicacion :oops:
-
para leer el puerto define la variable y lees con
variable=input_b();
-
La aplicación funciona, uno de los problemas es q al inicio del buble mandas el valor de var y ésta está vacio asi q solo mandas 0x00 o caratcter nulo, además como está al inicio del bucle infinito, saturas el terminal, ya q no hay nada q controle su envio.
Por otro lado no puedes ver el valor del PORTB:
1.- No lo lees
2.- No lo guardas en ninguna variable (si asi lo deseas).
3.- En ningun momento envias el valor del PORTB al PC
4.- Declaras varias funciones, pero no las usas
Como te mencionan con input_b() puedes leer el PORTB
#include <18f4550.h>
//#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN // YO USO CRISTAL DE 20MHz 20/5=4MHz, TU USAS UNO DE 48 MHz YA 1 USAS PLL12 48/12=4MHz
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL12,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)
//#include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
//#include "usb_desc_cdc.h" // Descriptores del dispositivo USB.
// usb_cdc.h ya incluye los arch antes citados, reviza usb_cdc.h
#include "usb_cdc.h" // Descripción de funciones del USB.
//short estado_usb; // boolean global, se debe declarar antes de llamar a usb_cdc.h
//#define USB_CON_SENSE_PIN PIN_B2
#define USB_CON_SENSE_PIN PIN_E3
//#define PORTB = busdata // Defino el puerto B como la entrada de datos
//#byte PORTB =0x81 // defino portb reg 0x81 del 18f4550
// Declaracion de funciones
static void adqrap(void); // Defino adquisicion rapida
static void adqlen(void); // Defino adquisicion lenta
static void lectur(void); // Funcion Lectura
static void escrit(void); // Funcion Esctritura
// Declaracion de variables
int8 var1;
char var;
void main() {
//set_tris_b (0xff);
//set_tris_a (00010000);
delay_ms(300);
usb_cdc_init();
usb_init();
while(!usb_cdc_connected()) {}
// espera a detectar una transmisión de la PC (Set_Line_Coding)
do{
usb_task();
if (usb_enumerated()){
var1=input_b();
var=input_b();
//usb_cdc_putc(var1);
//usb_cdc_putc(var);
if(usb_cdc_kbhit()){ //en espera de nuevo(s) caracter(es) en el buffer
if(usb_cdc_getc()=='x'){ //¿lo que llegó fué el caracter x?
printf(usb_cdc_putc, "Probando comunicacion\n\r");
//si, entonces envía una cadena hacia el PC
}
if(usb_cdc_getc()=='a'){ //¿lo que llegó fué el caracter a?
printf(usb_cdc_putc, "Proximamente datos osciloscopio\n\r");
//si, entonces envía una cadena hacia el PC
}
if(usb_cdc_getc()=='b'){ //¿lo que llegó fué el caracter b? // aca t muestra el valor de PORTB
printf(usb_cdc_putc, "PORTB= %c\n\r",var);
printf(usb_cdc_putc, "PORTB= %u\n\r",var1);}
}
}
}while (TRUE); // bucle eterno
}
Hice las pruebas con dos soft y con ambos funciona igual ve las imagenes
-
Muchas gracias por sus respuestas y por su gran ayuda!
A mi tambien me a funcionado perfectamente.... :-/
pero tengo un problema extraño... les cuento un poco:
Yo trabajo con dos maquinas una con win7 y otra con winxp (los dos de 32bits) pero con win7 me anda y no en xp, que sigue sin reconocerme el driver...
Es extraño esto no???
En win7 le puse que me buscara el driver en una carpeta raiz y que incluyera todas las sub carpetas (y ahi encontro alguno, pero no se exactamente cual es) en xp no me deja hacer esto :?
Igualmente si no estoy equivocado los archivos que preciso de driver son siempre los mismos verdad???
el mchpcdc.cat y el mchpcdc.inf que son propiedad de microchip
en las imagenes muestro un poco lo que me aprece
Por favor digame si estoy muy equivocado, porque esto es lo que me esta desconcertando un poco :shock:
Muchisimas gracias!
Espero este hilo le pueda servir a mucha mas gente
-
yo copié esos dos archivos en la carpeta "projects" de ccs y asi me los encuentra
-
Pero luego le pones la ubicacion especifica que te lo busque en la carpeta "projects" no jhozate?
Igual creo que se supone que se puede poner en cualquier carpeta, siempre y cuando uno le especifique donde esta el driver para el controlador, no?
-
si claro, le pongo la direccion hacia "projects", solo asi me los reconocio el windows 7 de resto en cualquier otro lado que los pusiera no los encontraba.
Edit: Efectivamente, algo falla. En mi windows 7 funciona OK, pero en XP no me reconoce el driver, me toco usar el de CCS y ese si lo encuentra
-
Gracias, en win7 me esta andando y si en winxp le tengo que colocar el driver de CCS, y anda....
Pero solamente me anda en la simulacion en proteus (cuando lo bajo al pic no me anda en ninguno de los dos :()
Otra cosa que me esta pasando es que en win7 la simulacion del puerto USB a veces anda y a veces no...
Pienso que lo me puede estar pasando es que ya tengo un dispositivo instalado con un VID y un PID, y no me deja instalar otro con los mismos numeros
puede ser esto cierto????
Porque exactamente el mismo programa que me anda en proteus no anda en el PIC :shock:
Les paso una imagen de lo que me muestra... me parece muy estraño que tanto el VID como el PID sean 0000
Debe ser porque no tiene ningun controlador instalado ¿?
Gracias por su ayuda!
-
yo no he probado la simulacion de proteus, pero si no estoy mal en una de sus carpetas(proteus) hay un driver que hay que instalar.
El dispositivo parece como si ya estuviese instalado, descarga este (http://www.nirsoft.net/utils/usbdeview.zip) soft, si estas en Windows 7, ejecutalo como administrador, elige el dispositivo desconocido dale click derecho y luego Unistall, ahi ya puedes hacer el proceso de cero. Asegurate que el VID y PID sean los mismo en el archivo descriptor y en el driver, ademas de conectarlo en el mismo puerto
-
Lo de instalar los USB drivers (de proteus) lo probe, pero a veces anda y a veces no... no se porque :o
Y con el soft ese, no me muestra el dispositivo desconocido, por lo tanto no lo puedo borrar.... me parece que eso es algo que pone el windows cuiando no tiene ningun controlador
Lo que me extraña es que en la simulacion me funcione perfectamente y en el harware real no me reconozca el dispositivo
Estoy usando el driver de C:\Archivos de programa\PICC\Drivers
Les agradezco su ayuda
-
Bueno despues de estar mucho tiempo trancado con esto :5]
Encontre cual era el problema! Lo que menos pensaba que podia ser, el cristal de 48MHz (compre 5 y nunguno anda) :oops:
Pero bueno cambie por cristal de 20MHz y funciono perfecto :lol:
Gracias por toda su ayuda que me a ayudado a despejar algunas dudas
Ya estoy en la recta final de mi proyecto asi que pronto subire los archivos para que vayan viendo mi trabajo
Saludos
-
Bueno despues de estar mucho tiempo trancado con esto :5]
Encontre cual era el problema! Lo que menos pensaba que podia ser, el cristal de 48MHz (compre 5 y nunguno anda) :oops:
Pero bueno cambie por cristal de 20MHz y funciono perfecto :lol:
Gracias por toda su ayuda que me a ayudado a despejar algunas dudas
Ya estoy en la recta final de mi proyecto asi que pronto subire los archivos para que vayan viendo mi trabajo
Saludos
el pic trabaja con cristales hasta 20MHz, para meterle 48MHz, entonces debes meterle un oscilador que genere los 48MHz
-
Hola a todos!!!
He logrado conectar mi PIC18F4550 a la PC con windows 7, me lo ha detectado como puerto COM. Lo que no sé es como enviar datos desde el PIC con CCS, estoy usando la sentencia
printf(usb_cdc_putc, " TEST ");
Pero no se si es correcta. Para recibir en la PC uso el terminal 1.6 que usaba con mi PIC16F876A vía serie. Hay algún soft que me permita recibir los datos por USB CDC?
Muchas gracias!
Saludos.
-
Hola a todos!!!
He logrado conectar mi PIC18F4550 a la PC con windows 7, me lo ha detectado como puerto COM. Lo que no sé es como enviar datos desde el PIC con CCS, estoy usando la sentencia
printf(usb_cdc_putc, " TEST ");
Pero no se si es correcta.
Según el ejemplo ex_usb_serial es correcto, lo implementa de la misma manera.
Para recibir en la PC uso el terminal 1.6 que usaba con mi PIC16F876A vía serie. Hay algún soft que me permita recibir los datos por USB CDC?
Cualquier programa que pueda recibir datos de forma serial, solo hay que seleccionar bien el puerto y su configuración emulada.
Saludos!
-
Suky gracias por tu respuesta!
Con respecto a la configuración emulada, eso lo tengo que ver en dentro de las propiedades del controlador del dispositivo dentro de la PC con Windows7 que tengo, no? Porque en el PIC no creo tener echa ninguna configuración.
Saludos
-
Suky gracias por tu respuesta!
Con respecto a la configuración emulada, eso lo tengo que ver en dentro de las propiedades del controlador del dispositivo dentro de la PC con Windows7 que tengo, no? Porque en el PIC no creo tener echa ninguna configuración.
Saludos
Exacto, propiedades del driver ;-)
-
Suky tenés el link de algún soft para recibir los datos que funcione en Windows7 64 bits???
Te debo un asado!!!
Abrazo
-
CCS tiene el Siow (Dentro del IDE el acceso directo, sino dentro de Archivos de Programa/PICC), no se si funcionará en 64-bits. Sino ejecútalo en modo compatibilidad :tongue:
-
Estuve probando enviar una cadena de caracteres a la PC y verlos en el SIOW, pero hasta ahora no lo puedo conseguir. El código que tengo en el PIC es el que sigue:
#include <18F4550.h>
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)
#include <usb_cdc.h>
#include "usb_desc_cdc.h"
#include <usb.c> //handles usb setup tokens and get descriptor reports
#define LOADER_SIZE (0x0FFF)
#define LOADER_START (0)
#define LOADER_END (LOADER_SIZE)
#define APPLICATION_START (LOADER_SIZE+1)
#define APPLICATION_END (getenv("PROGRAM_MEMORY")-1)
#define APPLICATION_ISR (APPLICATION_START+8)
#build(reset=APPLICATION_START, interrupt=APPLICATION_ISR)
#org 0,LOADER_END AUTO=0 void bootloader(void) {}
void main(){
usb_cdc_init();
usb_init_cs();
while(true){
usb_task();
if(usb_cdc_connected()){
if (usb_enumerated()){
printf(usb_cdc_putc, "Hola");
delay_ms(500);
}
}
}
}
En el SIOW tengo configurado el COM5 que me enumera la PC, con 9600-8-N-1. Cuando le doy conectar se encienden en verde RTS y DTR, pero no me llega ningún caracter.
Ejecute el SIOW en modo compatible con Windows XP y tampoco funcionó.
Alguien tiene alguna sugerencia de cual puede ser mi error?
Gracias!
P.D. las primeras líneas de código las uso para proteger de escritura el bootloader USB que tengo cargado
-
Hola a todos.
Estoy tratando de usar el mismo código en mi PIC, y en Proteus se me presenta el problema que describieron un unos mensajes. Cuando ejecuto la simulación, el VIP&PID me llega con 0000 0000 respectivamente, y cuando busco el .inf, me dice que no puede instalar el dispositivo. Lo extraño es que con el HEX original de uno de los proyectos compartidos funciona de maravillas, me reconoce el dispositivo y aparecen los datos referentes a éste. Pero cuando compilo con mi CCS (v4.104 y v4.128), ocurre lo que les mencioné; Windows lo detecta como dispositivo desconocido.
Aclaro que estoy usando un Crystal de 20Mhz con el PLL5. El código es exactamente igual, salvo por esta diferencia; que cuando compilo, no funciona.
Alguien tendrá alguna sugerencia?
De antemano, muchísimas gracias!
Cristian.
-
Hola.
Si actualizaste el compilador lo mas seguro es que se te sobre-escribiera el archivo donde estan definidos el PID y el VID .. debes volver a cambiarlo.
Saludos
-
Hola a todos!
cristiancrm yo estuve trabajando un poco con USB CDC y el problema que comentas lo solucioné utilizando los drivers de una versión anterior del compilador. Utilicé los drivers de la versión 4.023 y funcionó correctamente.
Lo que hice es sobreescribir la carpeta Drivers.
Probá con esa opción y comentá los resultados!
-
Hola, Marito!
Muchas gracias, voy a probar eso ahora y te comento a la brevedad.
Sinceramente ya me había dado por vencido y migré a C18 :). Vi que tiene muchos ejemplos y en teoría los drivers están actualizados. De todos modos aún estoy investigando.
Te aviso en cuanto tenga algún dato.
Muchas gracias!!
Cristian.
-
Heey!! Excelente!!! Ahora sí funciona!!! :-/.
Ahora quiero ver por qué motivo no funciona con los drivers de la última versión.
Muchas gracias!! :)
-
Yo no logré encontrar porque no funcionan los drivers nuevos, si encontrás el motivo publicá!!!
Estás usando windows7 64 bits?
-
Quizás algún parámetro estamos omitiendo en el Stack USB de la versión nueva, voy a comparar los drivers para ver en donde está la diferencia. Si encuentro el motivo estaré publicando la razón, pero es cuestión de analizar el Stack.
Para la simulación estoy usando Proteus en Windows XP, porque no tiene soporte para la emulación del driver USB en windows 7. De todos modos no creo que haya problemas para conectarlo físicamente al USB con Windows 7. Ya pedí mi PIC18F2550 para hacer pruebas reales, si encuentro algo raro estaré reportando.
Saludos!
Cristian.
-
Hola:
Y esto de el PID y el VID que citó MLO__ ya lo revisaron?
Saludos.
Jukinch
Hola.
Si actualizaste el compilador lo mas seguro es que se te sobre-escribiera el archivo donde estan definidos el PID y el VID .. debes volver a cambiarlo.
Saludos
-
Hola, Jukinch.
Sí, fue una de las primeras modificaciones que hice cuando comprendí la configuración del Stack. Hice de todo con esos dos valores y nunca funcionó.
Por lo que pude ver, la versión nueva tiene otra forma de configurar esos valores, pero por más que lo cambie siempre llegan con 0000 al SistemaOperativo.
Saludos.
-
Hola.
Pues a mi no me ha dado problema el CDC en Win7 de 64 bits.
El problema es la simulacion ... en ese caso se debe usar una version anterior ... porque los drivers del ISIS no funcionan :(
(http://img141.imageshack.us/img141/2/controladores.png)
Saludos
-
Hola!
AAhh, entonces por ahí viene el problema.
Bueno, yo aún no pude probar en mi PIC, ya que todavía lo estoy esperando, por eso me guié más que nada en la simulación en ISIS.
Entonces con la versión nueva debería funcionar bien también.
Esta tarde estoy recibiendo mi PIC, pruebo y luego les aviso.
Saludos y gracias!
-
Yo he probado la comunicación PIC-PC USB con el PIC18F4550. No logré que funcionará hasta que no utilicé los drivers de versiones anteriores, como mencioné en post anteriores.
Trabajó con una notebook con W7 64 bits
-
Hola, ya descubrí mi problema. Los archivos usb_desc_cdc.h q usaba los habia creado con una versión menos reciente de PICC. Así que modifique el archivo usb_desc_cdc. de la versión 4.104 y todo funciona bien, también lo probe con la versión 4.114 y compila bien. Probe mi tarjeta en win 7 64 bit y se asigna puerto com. Hice las pruebas de eco y responde muy bien.
Prueba este código solo hace el eco emulando un puerto com con USB_CDC
eco_usb_cdc.c
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN // uso un cristal de 20MHz
#use delay(clock=48000000)
#include <usb_cdc.h>
#define USB_CON_SENSE_PIN PIN_B2 // puede ser aunq deshabilitado tb me funcionó para este ejemplo en otros casos si es necesario
char s;
char c=0x00;
void main(){
delay_ms(300);
usb_cdc_init(); //esta en usb_cdc y configura los baudios, bit paridad etc
usb_init(); // esta en pic18_usb llama a usb_init_cs() q a su vez llama a usb_task()
while(!usb_cdc_connected()) {}
do{
usb_task();
//c=0x00;
if (usb_enumerated()) {
c=usb_cdc_getc();
usb_cdc_putc(c);
}
}
while(true);
}
Te adjunto el archivo usb_desc_cdc.h
Nota: no uso el VID y PID de microchip, solo por antojo jejeje, así q puedes usar el q quieras para fines didácticos, no así para fines comerciales.
Verifica que en tu archivo usb_cdc.h este esta línea,
#include <usb_desc_cdc.h> //USB Configuration and Device descriptors for this UBS device
para que pueda llamar al archivo usb_desc_cdc.h q t adjunto y este a su vez llame al .inf q tb adjunto el cual a su vez llama al driver standard de windows. (no olvides hacer un respaldo de tus drivers originales si coincide el nombre o cambia el nombre al q t envio, sin olvidar cambiar el nombre en la línea antes citada.
modifica el arch .txt a .inf
Muchas gracias rodrigo_control2009 ((:-)) me sacaste de un gran problema ya que habia probado de todo y el pic me devolvia caracteres extraños en la prueba de echo. Muchas gracias sobre todo por tus archivos ya que no sabia bien como modificar el usb_desc_cdc.h y .inf, con los que publicaste realice mis pruebas y funcionaron.
Como info general sobre mi proyecto, para los que andan haciendo pruebas, compile con los archivos que rodrigo_control2009 amablemente publico en el CCS PCWHD 4.093 y funciono de maravilla pero en win7 de 32 bits, en 64 bits ya no funciono bien el driver .inf, cosa que deben tener en cuenta.
Saludos y gracias a todos por sus aportes. :-)
-
Hola y por si te interesa probar en modo bulk, aca un pequeño ejemplo usando LabView 2012.
La aplicación enciende/apaga un led y recibe un byte de una señal digitalizada.
https://mega.co.nz/#!J5Z3DACB!Dt6lA2T4okgpqH31hJithxfXl6A7iFX9eiGFUvw3d1M