TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Nocturno en 02 de Noviembre de 2007, 13:32:46

Título: Please, que alguien compile un ejemplo de CCS
Publicado por: Nocturno en 02 de Noviembre de 2007, 13:32:46
Necesito que alguien me haga un favor, porque estoy a punto de volverme loco.

Estoy intentando probar el sencillo ejemplo ex_usb_serial.c de CCS, cuyo única función es enviar al puerto serie lo que se reciba en el USB y al USB lo que se reciba en el serie; vamos, una pasarela USB-serie.

Cuando lo compilo y lo grabo en un 18F2550 va perfecto.
Sin embargo, si lo intento compilar para un 18F2450 se abre de patas.

He estado tocando los .H de CCS hasta conseguir que compile y que incluso enumere el dispositivo USB, mostrándome un flamante puerto COM4 en Windows.

Sin embargo, cuando lo ejecuto es capaz de enviar caracteres por el USB, pero no recibe bien. Detecta
cuando llega algo, pero siempre lee 0.

¿Alguien puede probar a compilar para el 18F2450 con su versión de CCS?

Gracias
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: Azicuetano en 02 de Noviembre de 2007, 14:10:55
Acabo de compilarlo para el 18F2450 y me lo hace a la perfección.

La versión con la que lo he hecho es:

3.249

Es la que tengo en mi casa.


Un saludo desde Alicante.
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: Nocturno en 02 de Noviembre de 2007, 15:53:25
Gracias por la info, Iván. Había probado con la 3.242, 4.049 y 4.057 y fallaba con todas.

Acabo de hacerme con una 3.249 y efectivamente compila a la perfección.

Sin embargo, cuando lo grabo en el PIC no consigue enumerar el puerto USB. Me temo que me sigue quedando lucha por delante.
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: proclamer en 02 de Noviembre de 2007, 15:57:28
habra alguna razon en especial que las librerias de estos pic no compilen, o puede ser errores del compilador.
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: RedPic en 02 de Noviembre de 2007, 16:02:49
Los compiladores de CCS C son un Bug que compila ... la mayoría de las veces. Ja, ja, ja  :D :D :D

No, en serio. ¿No será el 18F2450 el que va mal?  :shock:
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: Nocturno en 02 de Noviembre de 2007, 16:10:02
Me extraña que esté mal, porque ya te digo que hasta he conseguido que enumere bien con otro Firmware e incluso funcione perfectamente el usb_cdc_putc() y el usb_cdc_kbhit(). Lamentablemente el problema es que el usb_cdc_getc() siempre devuelve 0. Creo que debe ser un problema de direcciones de memoria, pero me jode que el compilador no lo tenga resuelto.
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: RedPic en 02 de Noviembre de 2007, 16:15:02
Y el mismo ejemplo para el 18F2550 ¿va bien?

Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: Nocturno en 02 de Noviembre de 2007, 16:19:25
 :? :?  :? :?  :? :?  :? :?  :? :?  :? :?  :? :?  :? :?  :? :?  :? :?  :? :?

Si le pongo #include <18F2550.h> y lo grabo en un 18F2550 no va bien.

Si le pongo #include <18F2450.h> y lo grabo en un 18F2550 va perfecto.

Si le pongo #include <18F2450.h> y lo grabo en un 18F2450 no va bien.

 :? :?  :? :?  :? :?  :? :?  :? :?  :? :?  :? :?  :? :?  :? :?  :? :?  :? :?
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: jfh900 en 02 de Noviembre de 2007, 16:23:22
Manolo te falta la última posibilidad:

Si le pongo #include <18F2550.h> y lo grabo en un 18F2450. ?????????????

¿Que resultados obtienes?

Un saludo
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: Nocturno en 02 de Noviembre de 2007, 16:26:11
Cierto, también lo probé y también se abre de patas.
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: jfh900 en 02 de Noviembre de 2007, 16:30:28
Podrias compilar el programa para el 18F2450 y sacar la parte de la función usb_cdc_getc() en emsamblador, o mejor poner todo el programa en ensamblador para ver que puede ser.

Un saludo
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: Gorgonas en 02 de Noviembre de 2007, 23:59:21
Si le pongo #include <18F2550.h> y lo grabo en un 18F2550 no va bien.

Si le pongo #include <18F2450.h> y lo grabo en un 18F2550 va perfecto.

Si le pongo #include <18F2450.h> y lo grabo en un 18F2450 no va bien.

Abre los dos archivos el 18F2450.h y el 18F2550.h mira las difrencias y comprueba el datasheet, estos archivos solo son constantes y direcciones de memoria para el compilador, seguramente tendran errores.
Es la unica explicacion que le veo yo...
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: Nocturno en 03 de Noviembre de 2007, 02:18:34
Lo de pegar el programa en ensamblador me parece una barbaridad; las funciones del USB son largas, complejas y pesadas. Sólo la del usb_cdc_getc tiene un montón de llamadas, maneja variables de estructura y arrays... un lío realmente.
Yo pienso que el problema está en las direcciones de memoria porque es la principal diferencia entre ambos micros, y enlazo con lo que comenta Gorgonas. Ambos micros son muy diferentes, tanto en número de periféricos como en cantidad de memoria, lo que provoca que los .H sean también muy distintos.
Seguiré mirando diferencias y haciendo pruebas a ver qué sale.
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: Nocturno en 04 de Noviembre de 2007, 03:58:27
Por fin lo he conseguido. El problema estaba en que la librería de CCS hacía una gestión de la memoria de datos de USB como si estuviera trabajando con un 18F2550, cuyo mapa de memoria es este:
(http://img212.imageshack.us/img212/8853/18f2550usbmemorybl7.th.jpg) (http://img212.imageshack.us/my.php?image=18f2550usbmemorybl7.jpg)

Mientras que el mapa de memoria del 18F2450 es diferente:
(http://img253.imageshack.us/img253/5075/18f2450usbmemoryjn1.th.jpg) (http://img253.imageshack.us/my.php?image=18f2450usbmemoryjn1.jpg)

Estuve ajustando direcciones de memoria para encajarlo todo entre 0x400 y 0x4FF y parece que finalmente lo he conseguido. 
:-/
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: RedPic en 04 de Noviembre de 2007, 04:34:42
Como dice Iven Azicuetano, todo es ponerse. Felicidades.  :mrgreen:
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: Nocturno en 04 de Noviembre de 2007, 04:43:17
Pues sí, aunque me jode tener que ponerme yo con esto, cuando se supone que los de CCS cobran por hacerlo.
Y cuando les pongo un mensaje en su foro, me dicen que actualice la versión. ¡Como si no hubiera probado ya con 15 versiones!
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: supperty en 10 de Marzo de 2008, 15:27:59
¿Podrías contar un poco mejor como solucionaste el error?

¿Sabéis si las ultimas versiones del ccs ya tienen solucionado ese problema?

Un saludo.
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: Nocturno en 10 de Marzo de 2008, 18:02:42
Utilizando este .H modificado debería funcionarte
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: huichoman en 10 de Marzo de 2008, 19:13:48

Si le pongo #include <18F2550.h> y lo grabo en un 18F2550 no va bien.


Hola maestro, estoy utilizando el usb_cdc con un 18f2550, y todo va bien, incluso comunica con otro pic mediante un max485.  La versión que utilizo es la 4.068. Saludos.


GANBATTE KUDASAI !!

Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: Nocturno en 10 de Marzo de 2008, 19:22:49
¿Pero has probado con un 18F2450?
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: supperty en 10 de Marzo de 2008, 21:28:22
Gracias por el archivo. Mañana pruebo y cuento el resultado.
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: huichoman en 10 de Marzo de 2008, 22:56:18
¿Pero has probado con un 18F2450?

Nop   :?.

Solo tengo a la mano 2550 y 2553, tendré que conseguir 2450 pa probar.  :mrgreen:

Saludos.

Ganbatte kudasai.
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: supperty en 11 de Marzo de 2008, 07:35:51
Hola de nuevo.

No he usado tú archivo. Pero he actualizado a la versión 4.065 y compila correctamente y parece que también funciona el pic.

Un saludo.
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: Nocturno en 11 de Marzo de 2008, 07:47:29
Pues afortunado tú, que lo has conseguido. A mí me costo mucho sudor y algo de sangre.
Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: angeltr en 19 de Abril de 2009, 08:53:42
Por fin lo he conseguido. El problema estaba en que la librería de CCS hacía una gestión de la memoria de datos de USB como si estuviera trabajando con un 18F2550, cuyo mapa de memoria es este:
(http://img212.imageshack.us/img212/8853/18f2550usbmemorybl7.th.jpg) (http://img212.imageshack.us/my.php?image=18f2550usbmemorybl7.jpg)

Mientras que el mapa de memoria del 18F2450 es diferente:
(http://img253.imageshack.us/img253/5075/18f2450usbmemoryjn1.th.jpg) (http://img253.imageshack.us/my.php?image=18f2450usbmemoryjn1.jpg)

Estuve ajustando direcciones de memoria para encajarlo todo entre 0x400 y 0x4FF y parece que finalmente lo he conseguido. 
:-/

Hola tengo el mismo problema que tu, la función usb_cdc_getc() me devuelve siempre 0.

Estoy intentando utilizar el CDC en un pic 18F2450 y tengo la versión de CCS v4.084

He probado a modificar mi usb_cdc.h para hacerlo coincidir con el que tu has subido, con estas lineas:

  #if USB_MAX_EP0_PACKET_LENGTH==8
     //#locate usb_cdc_get_buffer_status_buffer=0x500+24   // Para 18F2550
     #locate usb_cdc_get_buffer_status_buffer=0x400+24   // Para 18F2450
  #elif USB_MAX_EP0_PACKET_LENGTH==64
     //#locate usb_cdc_get_buffer_status_buffer=0x500+136   // Para 18F2550
     #locate usb_cdc_get_buffer_status_buffer=0x400+136   // Para 18F2450

Pero no funciona. Ahora la función si que me devuelve un dato, pero es siempre el mismo, no cambia si le envío caracteres diferentes con el hyperterminal.

He estado viendo los SFR's el ICD2 en modo debugger  (en el mplab, View->File registers), y resulta que los datos si que llegan bien, porque aparecen en la dirección 0x430. Si envío una 'A' ascci, la cabrona aparece en 0x430 y sin embargo, no me sale devuelta por usb_cdc_getc(). En su lugar usb_cdc_getc(), devuelve siempre 0xA1 (que no es ninguna letra del mapa ascii simple). Mirando los SFR's he visto que el único valor que es 0xA1 entre 0x400 y 0x4FF está precisamente en la dirección 0x418 que es en la que tú haces el "#locate usb_cdc_get_buffer_status_buffer=0x400+24" (0x400+24d = 0x418).

Que coño pasa? Tiene algo que ver "USB_MAX_EP0_PACKET_LENGTH"

No se como a ti te funciona.

A parte de estas dos lineas con #locate debajo de las que lo hacían a 0x500 en vez de 0x400, has cambiado alguna otra cosa? Debe ser eso la única explicación.

Edito:

Me respodo a mi mismo, he tenido que poner esta otra línea en vez de la que recomienda nocturno y ahora si que va de puta madre.

  #if USB_MAX_EP0_PACKET_LENGTH==8
     //#locate usb_cdc_get_buffer_status_buffer=0x500+24   // Para 18F2550
     //#locate usb_cdc_get_buffer_status_buffer=0x400+24   // Para 18F2450, no funciona.
   #locate usb_cdc_get_buffer_status_buffer=0x400+48      // Para 18F2450, ahora si funciona!!

Un saludo.

Título: Re: Please, que alguien compile un ejemplo de CCS
Publicado por: uc20979 en 26 de Mayo de 2009, 08:57:28
hola gente

alguien me podría mandar las librerias (16f690.h y 18f2450.h) y lo necesario (ejemplos de codigo) para programar estos pic´s??


gracias.un saludo