TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: proyecto2009utu en 14 de Enero de 2011, 12:57:13

Título: problema al compilar delay_us en CCS
Publicado por: proyecto2009utu en 14 de Enero de 2011, 12:57:13
Buenas, estoy trabajando con el PIC18F4550, intentando levantar una comunicacion USB CDC...

este es mi programa por el momento:

Código: [Seleccionar]
#fuses   HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL12,CPUDIV1,VREGEN
#include <18f4550.h>       
#include <pic18_usb.h>         
#include <usb_desc_cdc.h>  // Descriptores del dispositivo USB.     
#include "usb_cdc.h" // Descripción de funciones del USB.
#use delay(clock=48000000)
#int_usb
short estado_usb;   // boolean global, se debe declarar antes de llamar a usb_cdc.h
#define USB_CON_SENSE_PIN PIN_E3
#define delay_us(x)
                       
static void adqrap(void);                                                                   
static void adqlen(void);
static void lectur(void);                                 
static void escrit(void);
                             
unsigned char datain;

void main() {
      do{
      usb_task();
     
       }while (1); // bucle infinito.                               
set_tris_b (0xff);     
set_tris_a (0);                       
                         
}
                   

El problema que tengo es que no me compila el archivo usb.c (de los driver de CCS) diciendo:
***Error12 Undefined identifier
The specified identifier is being used but has never been defined.  Check the spelling.


Alguien sabe como puedo arreglar esto?

Muchisimas gracias
Título: Re: problema al compilar delay_us en CCS
Publicado por: migsantiago en 14 de Enero de 2011, 13:05:42
Borra esta línea:

Código: [Seleccionar]
#int_usb
Título: Re: problema al compilar delay_us en CCS
Publicado por: proyecto2009utu en 14 de Enero de 2011, 13:37:40
Gracias, pero me sige haciendo exactamente lo mismo sin esa linea..  :?

gracias por el interes
Título: Re: problema al compilar delay_us en CCS
Publicado por: Nocturno en 14 de Enero de 2011, 13:42:19
Quita también esto
#define delay_us(x)
Título: Re: problema al compilar delay_us en CCS
Publicado por: proyecto2009utu en 14 de Enero de 2011, 13:52:20
Sigo en lo mismo....

Título: Re: problema al compilar delay_us en CCS
Publicado por: MGLSOFT en 14 de Enero de 2011, 14:45:50
Si clickeas sobre la linea del error, el compilador te lleva a la linea de programa donde se origina ese error...
Título: Re: problema al compilar delay_us en CCS
Publicado por: jhozate en 14 de Enero de 2011, 15:23:47
no será que hay que cambiar de lugar el use delay(clokc=48000000) ccs es quisquilloso con eso
Título: Re: problema al compilar delay_us en CCS
Publicado por: MLO__ en 14 de Enero de 2011, 15:48:07
Los FUSES no van depues del #include?
Título: Re: problema al compilar delay_us en CCS
Publicado por: bmb en 14 de Enero de 2011, 17:27:08
Los FUSES no van depues del #include?

Eso es cierto. De cuantos Mhz es tu cristal?  Asumiendo que el cristal es de 20Mhz, intenta corrigiendo el encabezado en este orden:

Código: C
  1. #include <18F4550.h>
  2.  
  3.   //configurar un cristal de 20MHz para operar a 48MHz
  4.   #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
  5.   #use delay(clock=48000000)

Después de esto, van los demás includes que necesites.

Saludos!

Edito: Te recomiendo que te estudies la librería usb_cdc.h, pues dentro de esta librería y según algunos defines se incluyen las otras librerías necesarias para la aplicación.  También puedes ver los sjemplos ex_usb_serial.c y ex_usb_serial2.c del CCS.

Acabo de ver algo más:  set_tris_b (0xff);  si quieres usar el puerto B como entradas digitales, también deberías incluir el fuse:
#FUSES NOPBADEN                 //PORTB pins are configured as digital I/O on RESET
Título: Re: problema al compilar delay_us en CCS
Publicado por: proyecto2009utu en 14 de Enero de 2011, 18:47:27
Has dado en el blanco bmb!
Muchas gracias, ya logre compilar mi programa  :-/

la solucion era poner el #use delay debajo de los #fuses

Ahora tengo otro problemita y es como hago para crear un driver? para que la pc me reconozca el dispositivo?
ya que me inicializa el usb, pero no lo puedo hacer funcionar  :(

Muchas gracias a todos por la ayuda
Título: Re: problema al compilar delay_us en CCS
Publicado por: bmb en 14 de Enero de 2011, 19:12:06
Hola, me alegra que vayas avanzando con tu programa, aunque yo solo te mostré el orden de como hacer lo que ya te habian dicho los colegas.  De todos modos hay algo que no me cuadra en tu configuración de fuses, por lo que te quisiera volver a preguntar: de cuantos Mhz es tu cristal?  Que aplicación es exactamente la que quieres hacer?  Leiste la parte de abajo (edito) de mi post?

Saludos!
Título: Re: problema al compilar delay_us en CCS
Publicado por: proyecto2009utu en 14 de Enero de 2011, 19:49:29
Si, lo lei, tengo que ver bien esos ejemplos y el usb_cdc.h

Mi cristal es de 48MHz, creo que asi debo usar PLL12 para dividir 48 entre 12 y lograr los 4MHz necesarios, no?

Mi aplicacion seria enviar datos binarios (8bit) a la PC y luego graficarlos, o sea hacer algo como un osciloscopio digital

Gracias a todos...
Título: Re: problema al compilar delay_us en CCS
Publicado por: bmb en 14 de Enero de 2011, 20:27:46
Hola, ahora si entiendo tu configuración. No olvides el fuse que habilita los pines del puerto B como digitales al resetear el PIC.  Uno de los ejemplos que trae el CCS es: ex_usb_scope.c, que es una aplicación muy sencilla de lo que sería la base de un osciloscopio; el problema es que para ensayarlo pide un programa ejecutable que solo viene con la compra de la board USB de ellos, pero lo puedes estudiar como base para tu proyecto.

Saludos!
Título: Re: problema al compilar delay_us en CCS
Publicado por: proyecto2009utu en 14 de Enero de 2011, 23:12:07
Ahi esta, muchas gracias... lo voy a ver...

Voy a revisar bien para solucionar el problema que tengo con el driver, cuando lo resuelva subire la explicacion aca para toda la comunidad que tanto me ha ayudado  :lol:

Gracias
Título: Re: problema al compilar delay_us en CCS
Publicado por: Oceano en 04 de Octubre de 2012, 17:13:40
Tengo entendido que los PICs con configuración para cristal de cuarzo (XT para 4 MHz y HS para el resto) no puede superar los 20MHz. Según parece a frecuencias superiores de 20MHz hay que poner un oscilador externo para que te entre la configuración que tienes. Según esto, no puedes usar un cristal de 48MHz.

Me pasó lo mismo que a ti y lo pregunté en el foro y me respondieron lo que te comento. La configuración de #fuses lo tienes bien, pero no admite más de 20MHz con cristal.

Por otra parte, en la mayoría de los casos no has de preocuparte por los MHz del cristal, porque internamente funciona a 48 MHz, gracias el PLL interno (y así lo tienes configurado). Es decir, que te va a ir igual de rápido un cristal de 4MHz que poniendo otro de 20MHz.

Si alguien no está de acuerdo o hay matizaciones, que me corrija.
Título: Re: problema al compilar delay_us en CCS
Publicado por: Oceano en 04 de Octubre de 2012, 17:25:36
Sobre la clase CDC sólo conseguí hacerla funcionar bien en 98/SE y XP, en el resto de las versiones Windows me he encontrado problemas.

En este mismo foro (y tb en la web) podrás encontrar una clase magistral de Pedro Palitroquez sobre el manejo del USB en modo CDC y Bulk-transfer. Él mismo creó un driver para estos menesteres:

http://www.todopic.com.ar/foros/index.php?topic=15208.0

Lo ideal (es mi punto de vista, tan válido como el que piense lo contrario) es usar la clase Bulk-Transfers para comunicaciones USB. Es lo más rápido, fiable, no has ir al panel de control para buscar el número de puerto virtual, es compatible con todas las versiones Windows y funciona por interrupción, cosa importante porque de esta forma no interfiere en otros procesos que estés ejecutando. El problema en este caso es estar "ducho" en programación para el PC porque hay que implementar una librería llamada "MPUSBAPI.DLL" (hay que buscar la versión 6 de esa librería para evitar problemas de compatibilidad con los distintos Windows, especialmente con 7).
En la web existe infinidad de información de cómo implementar esa librería en la mayoría de los lenguajes de programación.