Bootloader PIC18F2550 con CCS PIC C Compiler

#21
puede que compile bien pero el CCS dependiendo la vercion genera errores en el USB
lo se por que me paso ami

lo que puedes hacer es buscar un .hex de un bootloader como el que da microchip que esta en microchip solutions 2013

tiene 2 bootloaders uno para el 2550 y el efectivo del 4550
se lo cargas y funciona bastante bien
 
#22
Gracias por tu pronta respuesta D@rkbytes pero sigue sin funcionar.
Si entra el modo bootloader pero la PC no detecta el dispositivo.
Otra pregunta: ¿Tiene que llevar USBDIV, no? Debido a que el periferico es de 48MHz.
Lo que pasa es que existen fuses que el compilador establece por defecto aún sin escribirlos en el programa.
Pones y quitas por software los que no hagan falta, por lo tanto, no es necesario escribirlos todos.
Mirando el archivo hex te puedes dar cuenta sobre la correcta configuración.
Sigue igual. No lo detecta ninguna PC. ¿Qué podrá ser?:confused:
Posiblemente tengas algo mal conectado, si usas protobord revisa falsos contactos.
Existen algunos que no hacen buen contacto y dan muchos dolores de cabeza.

Trata con lo siguiente:
.- Prueba subiendo el valor del capacitor del pin 14 a unos 470nF.
.- Cuando ocurre un error al conectar el dispositivo y es mal detectado, tienes que reiniciar la PC.
Esto sucede cuando el PIC no está trabajando a la frecuencia requerida.
.- Realiza un simple programa ejecutandose a 48MHz. (Hacer destellar un LED a 500Ms. Por ejemplo)
Eso descarta algo mal palabra de configuración.
Si notas que el LED destella a otra frecuencia, entonces debes corregirla.
.- Revisa compatibilidades sobre la versión del compilador.

Suerte.
 
#23
Posiblemente tengas algo mal conectado, si usas protobord revisa falsos contactos.
Existen algunos que no hacen buen contacto y dan muchos dolores de cabeza.
estoy usando placa..
Trata con lo siguiente:
.- Prueba subiendo el valor del capacitor del pin 14 a unos 470nF.
.- Cuando ocurre un error al conectar el dispositivo y es mal detectado, tienes que reiniciar la PC.
Esto sucede cuando el PIC no está trabajando a la frecuencia requerida.
.- Realiza un simple programa ejecutandose a 48MHz. (Hacer destellar un LED a 500Ms. Por ejemplo)
Eso descarta algo mal palabra de configuración.
Si notas que el LED destella a otra frecuencia, entonces debes corregirla.
.- Revisa compatibilidades sobre la versión del compilador.

Suerte.
la frecuencia bien,hice parpadear leds a 1 segundo y todo bien... cargue de nuevo el bootloader e hice todo eso que me dijiste y nada.. la compu no lo detecta, me sorprende que aunque lo conecte en otra compu tampoco lo reconoce, si enciende y todo pero nada...
tiene algo que ver que el bootloader no tenga el PIN SENSE (no se para que sea pero no lo tiene) he visto que otros bootloaders si lo tienen.

Tengo que borrar algun driver USB to UART instalado? como hago eso?
 
#24
si estas usando el bootloader de CCS cuando lo conectas dira dispositivo desconocido
y un simbolo con una interrogacion en el panel de control.

lo que sigue es ir a la carpeta del CCS y buscar el Driver deberia detectarlo recuerdo que hise eso una vez
 
#25
La frecuencia bien, hice parpadear leds a 1 segundo y todo bien.
Cargué de nuevo el bootloader e hice todo eso que me dijiste y nada.
La compu no lo detecta, me sorprende que aunque lo conecte en otra compu tampoco lo reconoce, si enciende y todo pero nada.
No sé a que se deba que no lo pueda reconocer otra PC, hice una prueba con los programas que subiste tras haber modificado la palabra de configuración y si lo detectó mi PC.
Sin embargo me pide controladores que jamás he podido encontrar y los que vienen con la versión que yo tengo de PICC, no funcionan.

Adjunto un vídeo para que veas como si es detectado el dispositivo en mi PC con esos programas.
Por eso se me ocurre que sigues teniendo algo mal conectado o algo que estés pasando por alto.
Capacitores del cristal, filtraje, lo básico, etc.
¿Tiene algo que ver que el bootloader no tenga el PIN SENSE (no sé para que sea pero no lo tiene) He visto que otros bootloaders si lo tienen.
Mira más atrás en el post #7 dentro del archivo EX_USB_BOOTLOADER.C se explica eso.
¿Tengo que borrar algun driver USB to UART instalado? ¿Cómo hago eso?
Cuando se instala correctamente un dispositivo o un controlador, es mostrado en el administrador de dispositivos.
Como no puedes instalar correctamente el dispositivo, lo más seguro es que no te aparezca nada o te aparezca el dispositivo con un signo de interrogación o advertencia.
Pero verifica si te aparece algo nuevo referente a HID, si es así desinstálalo. Mira por aquí.
No hay problema si remueves algún otro controlador, cuando reinicias, el sistema los vuelve a buscar, y si no los encuentra te los pedirá nuevamente.
 

Adjuntos

Última edición:
#26
Adjunto un video para que veas como si es detectado el dispositivo en mi PC con esos programas.
Por eso se me ocurre que sigas teniendo algo mal conectado o algo que estés pasando por alto.
Capacitores del cristal, filtraje, lo básico, etc.
muchisismas gracias por los comentarios pero aun sigue sin funcionar....tengo que ponerle resistencias de pull UP al D+ y D- del USB del PIC? si no es mucha molestia, me puedes pasar el diagrama que utilizaste para que lo reconociera tu PC? estoy pensando que incluso puede ser que mi pic se le quemaron los pines del USB,,, le he cargado otro programa para probar si aun funciona el pic y todo bien, pero supongo que por alguna extraña razon esos pines del USB ya no funcionan.... ire a comprar otro pic18f2550 y probare nuevamente...

si estas usando el bootloader de CCS cuando lo conectas dira dispositivo desconocido
y un simbolo con una interrogacion en el panel de control.

lo que sigue es ir a la carpeta del CCS y buscar el Driver deberia detectarlo recuerdo que hise eso una vez
eso debería pasar, pero ni si quiera lo detecta aunque ya reinicie la PC, elimine los drivers anteriores y nada...

he revisado un poco los archivos que se incluyen en el bootloader y no encuentro la funcion USB_INIT(); que se incluye en el main() del bootloader principal, ha de ser algo que no anda bien en los archivos, o en el usb_enumeratd(); pero no se que es.....
ahora me nace otra duda: el bootloader que trato de usar es HID o simula una comunicacion RS232?
hablo del codigo que puse del bootloader en el comentario https://www.forosdeelectronica.com/f24/bootloader-pic18f2550-ccs-pic-c-compiler-76134/#post935435 #18
 
#27
Muchísimas gracias por los comentarios pero aun sigue sin funcionar.
¿Tengo que ponerle resistencias de pull UP al D+ y D- del USB del PIC?
Si no es mucha molestia, ¿me puedes pasar el diagrama que utilizaste para que lo reconociera tu PC?
No necesitas colocar resistencias pull-up, así como está en el esquema adjunto es como lo probé.

Mira esta parte del código, es importante para que se inicie el reconocimiento del dispositivo.
Código:
[COLOR=Blue]void [/COLOR]main([COLOR=Blue]void[/COLOR]) 
{
   [COLOR=Blue]if[/COLOR](!input(BTLDR))             [COLOR=DimGray]// Si el pin RC2 está en 0 entonces...[/COLOR]
   {
      ON(LEDR);                 [COLOR=DimGray] // Se enciende el LED del pin RC1[/COLOR]
      g_InBootloader = TRUE;     
      usb_cdc_init();           [COLOR=DimGray] // Se inicia el USB CDC[/COLOR]
      usb_init();               [COLOR=DimGray] // Inicialización USB[/COLOR]
     [COLOR=Blue] while[/COLOR](!usb_enumerated());  [COLOR=DimGray]// Esperar mientras el dispositivo se enumera...[/COLOR]
      load_program();           [COLOR=DimGray] // Cargar el programa.[/COLOR]
   }
   g_InBootloader = FALSE;
   OFF(LEDR);
   [COLOR=Red]#ASM[/COLOR]
      [COLOR=Blue]goto[/COLOR] APPLICATION_START
  [COLOR=Red] #ENDASM[/COLOR]
}
Verifica que el pin RC2 esté en 0, yo le puse una resistencia de 4.7k hacia VDD como pull-up.
Para mantenerlo en estado bajo, únicamente coloqué un puente hacia VSS.
Si esté pin se encuentra flotante o en estado alto, la PC nunca reconocerá el dispositivo.

Suerte.
 

Adjuntos

Última edición:
#28
ya correjí el problema :D, desafortunadamente no se que era :unsure:.. ya que cambie todo nuevo :cool:, pero ahora lo armé en protoboard y funcionó correctamente con tu diagrama Darkbytes gracias :aplauso::aplauso:... le cargue el bootloader que coloqué anteriormente en este tema para el pic18f2550 cambiando el siguiente codigo:
Código:
#fuses HSPLL,PLL2,USBDIV,CPUDIV1,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT,VREGEN,PUT,MCLR,NOPBADEN
#use delay(clock=48MHz)
#define __USB_PIC_PERIF__ 1
#define (__PCH__)
porque uso un cristal de 8MHz, y las demas definiciones se las agregué porque no las tenia y en el USB_BOOTLOADER.H las pide y no estaban definidas...

y ya lo reconoce en el COM9 porque ya tenia instalado el driver que trae el CCS compiler en la direccion C:\Program Files (x86)\PICC\Drivers\NT,2000,XP,VISTA,7... TODO bien hasta ahora...

solo tengo una pregunta mas que refiere a lo siguiente: las direcciones de memoria en las que se carga este bootloader segun son: desde 0x0 hasta 0x1FFF, entonces entiendo que:
el firmware que yo cargue a travez del bootloader empieza desde 0x2000 hasta -1 del final de la memoria de programa del pic, y que las interrupciones de la aplicación empiezan +0x08 a partir del inicio del programa, es decir:

Código:
#define LOADER_SIZE        (0x1FFF)
#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)
1.- entonces como voy a saber cuanto tengo aun de espacio para hacer mi firmware? porque al compilar el bootloader me dice que tiene RAM 31% y ROM 19%, y mi firmware tiene RAM 23% y ROM 65%.
 
#29
Ya corregí el problema :D, desafortunadamente no sé que era :unsure: ya que cambie todo nuevo. :cool:
Pero ahora lo armé en protoboard y funcionó correctamente con tu diagrama D@rkbytes, gracias. :aplauso::aplauso:... le cargue el bootloader que coloqué anteriormente en este tema para el pic18f2550 cambiando el siguiente código:
Código:
#fuses HSPLL,PLL2,USBDIV,CPUDIV1,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT,VREGEN,PUT,MCLR,NOPBADEN
#use delay(clock=48MHz)
#define __USB_PIC_PERIF__ 1
#define (__PCH__)
porque uso un cristal de 8MHz, y las demas definiciones se las agregué porque no las tenía y en el USB_BOOTLOADER.H las pide y no estaban definidas.
OK, que bien que ya pudiste hacer que la PC lo reconociera.
Aunque en el post #18 comentaste que estabas usando un cristal de 20MHz. :confused:
les comento que mi diagrama únicamente tiene un cristal de 20Mhz
Por ese motivo fue que corregí la palabra de configuración en tu programa. :cool:
ya lo reconoce en el COM9 porque ya tenia instalado el driver que trae el CCS compiler en la direccion C:\Program Files (x86)\PICC\Drivers\NT,2000,XP,VISTA,7... TODO bien hasta ahora.
Si no es molestia, adjunta los controladores que usaste, porque los que yo tengo no funcionan (Posible incompatibilidad de versión)
A muchas personas nos pueden servir, ya que hemos tenido problema con esos controladores.
¿Entonces cómo voy a saber cuanto tengo aún de espacio para hacer mi firmware? porque al compilar el bootloader me dice que tiene RAM 31% y ROM 19%, y mi firmware tiene RAM 23% y ROM 65%.
Como los programas para Bootloaders son muy diferentes y tienen diferentes tamaños, es difícil decir cuanto espacio disponible te quedará tras haberlo cargado.
Lo que yo hago es mirar el archivo hex y me fijo hasta que dirección llega.
De ahí en adelante es el espacio que tendrás disponible.
Algunos tienen dos direccionamientos y también ese espacio se debe tener en cuenta.

Saludos.
 
#30
no es ninguna molestia... espero les sirva, mi LAP es Windows 7 Pro x64 y si funciona bien, les dejo el driver...

estoy intentando cargar el firmware en el PIC con el SIOW (desde la opción DOWNLOAD SOFTWARE) del CCs y me da error mientras descarga: dice TIMEOUT WHILE DOWNLOADING y a penas y hace una linea transferida de 1339... que puede ser? los fuses son iguales de mi firmware y del bootloader...

otra pregunta, como le cambio el nombre de CCS BOOTLOADER que viene en el usb_bootloader.h? quiero poner algo como "Nuevo Dispositivo V3.3"...
 

Adjuntos

#31
el bootloader .h como que mueve los vectores de interrupcion
cuando quieres hacer eso de cambiar nombre
debes ir al USB descriptor y lo que va entre comillas es el texto que debe salir
 
#32
el bootloader .h como que mueve los vectores de interrupcion
cuando quieres hacer eso de cambiar nombre
debes ir al USB descriptor y lo que va entre comillas es el texto que debe salir
gracias TRILO-BYTE lo checaré bien porque hay asignaciones de tamaños antes de cada string y hasta ahora no le entiendo...

respecto al problema del SIOW a veces se friqueaaa (falla)... solo hay que cerrar el SIOW y resetear el PIC y que entre en modo boot de nuevo.. esperamos unos 10 segundos a que lo reconozca bien el sistema operativo y entonces volvemos a correr el SIOW.exe y entonces si detectará automaticamente el COM donde esta instalado el driver... entonces volvemos a cargar nuestro firmware con el DOWNLOAD SOFTWARE...

SALUDOS Y MUCHAS GRACIAS A TODOS... espero que esto sirva de mucha ayuda a quienes estan empezando ya que a mi me ha servido un monton... saludos
 
#33
Disculpen alguien me puede ayudar...estoy en un proyecto de la escuela y queria utilizar un bootloader para cargar en el 18f4550...pueden subirlo???estoy utilizando ccsc compiler...no se cual utilizar que no cambie el lenguaje...como son los pinguinos
 
#35
Colegas, yo estoy haciendo el hardware del Bootloader y es completamente funcional.
La PC lo reconoce y carga los archivos HEX si problemas.

El problema es que los programas están mal sincronizados.
Me explico; hice un programa que prende y apaga un led durante un segundo con un cristal de 8 Mhz.
Cuando cargo el HEX al PIC con el Bootloader y empieza a correr el programa el led no prende y apaga en los 1 segundos que programé, se demora un poco más.
Así que pensé que sería porque el Bootloader fue grabado con una frecuencia de 48 Mhz y el HEX con uno de 8 Mhz.
Cambié la frecuencia del HEX a 48 Mhz y me funciona, pero cuando hago el mismo programa con interrupciones, los tiempos no concuerdan con los 1 segundos que programé.

¿Qué puede estar pasando? ¿Qué tengo que configurar?
¿Los archivos HEX a cargar deben tener todos la frecuencia a 48 Mhz.?
 
Última edición por un moderador:
#36
pues es que todo eso suena a un problema de configuracion de los fuses

no se que cristal usas en el bootloader pero respecto al cristal debes hacer cambio en el fuses

otra cosa no se por que pero en CCS con el bootloader del 18f4550 si usas muchas variables el programa no corre por eso no siempre es bueno trabajando con botloader
 
#37
Ya tenía esto olvidado porque no lograba que controladores se reconocieran, pero hace poco logré que funcionara.
¿Los archivos HEX a cargar deben tener todos la frecuencia a 48mhz?
Por lógica, si el Bootloader se ejecuta a una frecuencia de 48 MHz, también el programa que cargues debe ejecutarse a 48 MHz.

Esta es la configuración que usé para un programa de prueba:
PHP:
#include <18F4550.h>
#fuses   NOFCMEN,NOIESO
#use     delay(clock=48MHz,crystal=4MHz,USB_FULL)

#include "usb_bootloader.h"
Cuando hago el mismo programa pero con interrupciones los tiempos no concuerdan con los 1 segundos que programé.
¿Qué puede estar pasando?
Si te es posible, adjunta el programa que mencionas para revisarlo.
 
#38
Miré este post en la búsqueda de qué andaba mal con el ejemplo, igual y puede ser el fuse o porque estoy usando el reloj interno.
Yo utilizo la comunicación RS-232, no utilizo los controladores USB, uso un FTDI para la comunicación serial con los ejemplos ex_bootload y ex_bootloade

El problema es que al mandar el programa por Tera Term (configurando el Xon/Xoff que especifica como requerimiento) el PIC me responde correctamente con el ACK y con la solicitud del buffer lleno y vacío que son Xon y Xoff
Al menos eso parece en el osciloscopio, pero al final de la carga no parece ejecutarse el programa que se compiló, en este caso una impresión de la suma de un número por serial (ya lo probé ejecutándolo en el PIC por separado)

No sé si tenga problemas el direccionamiento de memoria o falte ejecutar algo más para que se logre cargar el programa.

Aquí les dejo un vídeo del problema.

El vídeo es pesado como para cargarlo. Una disculpa.

Esta configuración la utilizo para ambos programas. Los fuses son genéricos, puestos por el CCS C Compiler.
PHP:
#elif defined(__PCH__)
#include <18F2550.h> 
#fuses NOWDT,INTRC,NOLVP,NOXINST,NOVREGEN 
#use delay(internal=8000000) 
#use rs232(baud=9600,parity=N,xmit=PIN_B0,rcv=PIN_B1,bits=8,stream=PORT1)
#define PUSH_BUTTON PIN_A1
#endif
 
Última edición por un moderador:
#39
¿Ya probaste usando el SIOW? Es el mismo programa que la empresa recomienda para descargar el programa al microcontrolador.
Se encuentra en la carpeta de instalación del compilador.

Yo también lo he probado con el oscilador interno a 8 MHz. y usando un FT232RL, sin ningún problema.
 

Temas similares

Arriba