Autor Tema: Bootloader 18F4550 RS232 Serie  (Leído 19861 veces)

0 Usuarios y 4 Visitantes están viendo este tema.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Bootloader 18F4550 RS232 Serie
« Respuesta #45 en: 10 de Marzo de 2012, 13:57:54 »
Tienes toda la razon.
Por lo menos ahora sabemos que un programa puede enviar datos al PC.
Voy a preparar un programa de test para hacer echo y lo posteo.

Saludos.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Bootloader 18F4550 RS232 Serie
« Respuesta #46 en: 10 de Marzo de 2012, 15:15:26 »
Aquí está el test de USART (RS232) que devuelve todos los caracteres enviados:

   USART Test echo

Hay versiones para varias velocidades de transmisión.

Saludos.

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Bootloader 18F4550 RS232 Serie
« Respuesta #47 en: 10 de Marzo de 2012, 16:54:30 »
Funciona perfecto, el envío y recepción.

Tiene un problema que si quiero cargar por segunda vez el programa, se genera el siguiente error:

Citar
Connected to \\.\COM5 at 9600
  Searching for PIC ...
  Found:18F 2550/4550
 
Connected to \\.\COM5 at 9600
  HEX: 2 hours old, INHX32,18Fcode, total=90 bytes.
  Searching for PIC ...
  pic sending unknown data:  "K" <>  Ah=
 
Check baudrate & Start Write while PIC is not sending serial data (e.g. in reset)
  ERROR!

Lo probé a 9600 baudios. En resumen, la primera vez que hago la descarga, funciona bien. Si quiero descargar nuevamente el programa, genera error. Todo esto con el programa de TEST ECHO

Será por la protección de escritura de las primeras líneas del bootloader?

Voy a estudiar un poco los fuses de mi programa para ver si encuentro porque no funciona con mi aplicación
« Última modificación: 10 de Marzo de 2012, 16:58:51 por marito »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Bootloader 18F4550 RS232 Serie
« Respuesta #48 en: 10 de Marzo de 2012, 22:05:15 »
A veces aparece ese error si intentas comunicar con el bootloader mientras este está utilizando el RS232.

Intenta otra vez pulsar "Check PIC" o "Write Flash" y la segunda vez funciona.

Saludos.


Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Bootloader 18F4550 RS232 Serie
« Respuesta #49 en: 15 de Marzo de 2012, 16:07:25 »
Hola Picuino!!!

Estuve probando el bootloader y sólo funciona con el programa que me enviaste para la comunicación ida y vuelta RS232. Podrías pasarme la configuración de fuses que debería tener?

Gracias!
Saludos

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Bootloader 18F4550 RS232 Serie
« Respuesta #50 en: 15 de Marzo de 2012, 19:25:10 »
El bootloader en formato HEX ya trae incluidos los fuses necesarios para funcionar. Cuando grabes el bootloader, aseguraté de grabar también los fuses incluidos en el HEX.
Las aplicaciones las graba el bootloader sin fuses. La aplicación que te envié tenía el código asm adjunto (sin fuses porque no se modifican los fuses del bootloader)

Como mi programa se carga y funciona correctamente, el problema no está en el microcontrolador ni en el bootloader, creo que está en tu programa.

Yo no conozco el compilador que utilizas, pero seguro que tiene una directiva #pragma o algo similar para decirle que comience en la dirección 50h. A ver si de esa manera te funciona.

Saludos.
« Última modificación: 15 de Marzo de 2012, 19:27:22 por picuino »

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Bootloader 18F4550 RS232 Serie
« Respuesta #51 en: 16 de Marzo de 2012, 08:55:58 »
Perfecto, voy a compilar mi programa sin fuses. Me podrías pasar la configuración de fuses del bootloader? La protección del área del bootloader ya la conseguí ubicando el programa a partir de la dirección 20h.

Utilizo el compilador PCW.

Saludos!

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Bootloader 18F4550 RS232 Serie
« Respuesta #52 en: 16 de Marzo de 2012, 16:29:27 »
Cada bootloader tiene una configuración de fuses. Te copio la de uno de ellos:

Enlace a todos los bootloader con código fuente


Fuses del fichero: PIC18F2550_i8Mhz_19200baud.asm

Código: ASM
  1. ;********************************************************************************************
  2. ; FUSE OPTIONS
  3. ;
  4. ; PLL Prescaler Selection bits:
  5. ;    CONFIG   PLLDIV = 1          ;No prescale (4 MHz oscillator input drives PLL directly)
  6. ;    CONFIG   PLLDIV = 2          ;Divide by 2 (8 MHz oscillator input)
  7. ;    CONFIG   PLLDIV = 3          ;Divide by 3 (12 MHz oscillator input)
  8. ;    CONFIG   PLLDIV = 4          ;Divide by 4 (16 MHz oscillator input)
  9.     CONFIG   PLLDIV = 5          ;Divide by 5 (20 MHz oscillator input)
  10. ;    CONFIG   PLLDIV = 6          ;Divide by 6 (24 MHz oscillator input)
  11. ;    CONFIG   PLLDIV = 10         ;Divide by 10 (40 MHz oscillator input)
  12. ;    CONFIG   PLLDIV = 12         ;Divide by 12 (48 MHz oscillator input)
  13. ;
  14. ; CPU System Clock Postscaler:
  15.     CONFIG   CPUDIV = OSC1_PLL2  ;[OSC1/OSC2 Src: /1][96 MHz PLL Src: /2]
  16. ;    CONFIG   CPUDIV = OSC2_PLL3  ;[OSC1/OSC2 Src: /2][96 MHz PLL Src: /3]
  17. ;    CONFIG   CPUDIV = OSC3_PLL4  ;[OSC1/OSC2 Src: /3][96 MHz PLL Src: /4]
  18. ;    CONFIG   CPUDIV = OSC4_PLL6  ;[OSC1/OSC2 Src: /4][96 MHz PLL Src: /6]
  19. ;
  20. ; USB Clock Selection bit (used in Full Speed USB mode only; UCFG:FSEN = 1):
  21. ;    CONFIG   USBDIV = 1          ;USB clock source comes directly from the primary oscillator block with no postscale
  22.     CONFIG   USBDIV = 2          ;USB clock source comes from the 96 MHz PLL divided by 2
  23. ;
  24. ; Oscillator Selection bits:
  25. ;    CONFIG   FOSC = XT_XT        ;XT oscillator, XT used by USB
  26. ;    CONFIG   FOSC = XTPLL_XT     ;XT oscillator, PLL enabled, XT used by USB
  27. ;    CONFIG   FOSC = ECIO_EC      ;External clock, port function on RA6, EC used by USB
  28. ;    CONFIG   FOSC = EC_EC        ;External clock, CLKOUT on RA6, EC used by USB
  29. ;    CONFIG   FOSC = ECPLLIO_EC   ;External clock, PLL enabled, port function on RA6, EC used by USB
  30. ;    CONFIG   FOSC = ECPLL_EC     ;External clock, PLL enabled, CLKOUT on RA6, EC used by USB
  31. ;    CONFIG   FOSC = INTOSCIO_EC  ;Internal oscillator, port function on RA6, EC used by USB
  32. ;    CONFIG   FOSC = INTOSC_EC    ;Internal oscillator, CLKOUT on RA6, EC used by USB
  33. ;    CONFIG   FOSC = INTOSC_XT    ;Internal oscillator, XT used by USB
  34. ;    CONFIG   FOSC = INTOSC_HS    ;Internal oscillator, HS used by USB
  35. ;    CONFIG   FOSC = HS           ;HS oscillator, HS used by USB
  36.     CONFIG   FOSC = HSPLL_HS     ;HS oscillator, PLL enabled, HS used by USB
  37. ;
  38. ; Fail-Safe Clock Monitor Enable bit:
  39.     CONFIG   FCMEN = OFF         ;Fail-Safe Clock Monitor disabled
  40. ;    CONFIG   FCMEN = ON          ;Fail-Safe Clock Monitor enabled
  41. ;
  42. ; Internal/External Oscillator Switchover bit:
  43.     CONFIG   IESO = OFF          ;Oscillator Switchover mode disabled
  44. ;    CONFIG   IESO = ON           ;Oscillator Switchover mode enabled
  45. ;
  46. ; Power-up Timer Enable bit:
  47.     CONFIG   PWRT = ON           ;PWRT enabled
  48. ;    CONFIG   PWRT = OFF          ;PWRT disabled
  49. ;
  50. ; Brown-out Reset Enable bits:
  51.     CONFIG   BOR = OFF           ;Brown-out Reset disabled in hardware and software
  52. ;    CONFIG   BOR = SOFT          ;Brown-out Reset enabled and controlled by software (SBOREN is enabled)
  53. ;    CONFIG   BOR = ON_ACTIVE     ;Brown-out Reset enabled in hardware only and disabled in Sleep mode (SBOREN is disabled)
  54. ;    CONFIG   BOR = ON            ;Brown-out Reset enabled in hardware only (SBOREN is disabled)
  55. ;
  56. ; Brown-out Voltage bits:
  57. ;    CONFIG   BORV = 0            ; 4.59 v
  58.     CONFIG   BORV = 1            ; 4.33 v
  59. ;    CONFIG   BORV = 2            ; 2.79 v
  60. ;    CONFIG   BORV = 3            ; 2.05 v
  61. ;
  62. ; USB Voltage Regulator Enable bit:
  63. ;    CONFIG   VREGEN = OFF        ;USB voltage regulator disabled
  64.     CONFIG   VREGEN = ON         ;USB voltage regulator enabled
  65. ;
  66. ; Watchdog Timer Enable bit:
  67.     CONFIG   WDT = OFF           ;HW Disabled - SW Controlled
  68. ;    CONFIG   WDT = ON            ;HW Enabled - SW Disabled
  69. ;
  70. ; Watchdog Timer Postscale Select bits:
  71. ;    CONFIG   WDTPS = 1           ;1:1
  72. ;    CONFIG   WDTPS = 2           ;1:2
  73. ;    CONFIG   WDTPS = 4           ;1:4
  74. ;    CONFIG   WDTPS = 8           ;1:8
  75. ;    CONFIG   WDTPS = 16          ;1:16
  76. ;    CONFIG   WDTPS = 32          ;1:32
  77. ;    CONFIG   WDTPS = 64          ;1:64
  78. ;    CONFIG   WDTPS = 128         ;1:128
  79. ;    CONFIG   WDTPS = 256         ;1:256
  80. ;    CONFIG   WDTPS = 512         ;1:512
  81. ;    CONFIG   WDTPS = 1024        ;1:1024
  82. ;    CONFIG   WDTPS = 2048        ;1:2048
  83. ;    CONFIG   WDTPS = 4096        ;1:4096
  84. ;    CONFIG   WDTPS = 8192        ;1:8192
  85. ;    CONFIG   WDTPS = 16384       ;1:16384
  86.     CONFIG   WDTPS = 32768       ;1:32768
  87. ;
  88. ; MCLR Pin Enable bit:
  89. ;    CONFIG   MCLRE = OFF         ;RE3 input pin enabled; MCLR disabled
  90.     CONFIG   MCLRE = ON          ;MCLR pin enabled; RE3 input pin disabled
  91. ;
  92. ; Low-Power Timer 1 Oscillator Enable bit:
  93. ;    CONFIG   LPT1OSC = OFF       ;Timer1 configured for higher power operation
  94.     CONFIG   LPT1OSC = ON        ;Timer1 configured for low-power operation
  95. ;
  96. ; PORTB A/D Enable bit:
  97.     CONFIG   PBADEN = OFF        ;PORTB<4:0> pins are configured as digital I/O on Reset
  98. ;    CONFIG   PBADEN = ON         ;PORTB<4:0> pins are configured as analog input channels on Reset
  99. ;
  100. ; CCP2 MUX bit:
  101. ;    CONFIG   CCP2MX = OFF        ;CCP2 input/output is multiplexed with RB3
  102.     CONFIG   CCP2MX = ON         ;CCP2 input/output is multiplexed with RC1
  103. ;
  104. ; Stack Full/Underflow Reset Enable bit:
  105.     CONFIG   STVREN = OFF        ;Stack full/underflow will not cause Reset
  106. ;    CONFIG   STVREN = ON         ;Stack full/underflow will cause Reset
  107. ;
  108. ; Single-Supply ICSP Enable bit:
  109.     CONFIG   LVP = OFF           ;Single-Supply ICSP disabled
  110. ;    CONFIG   LVP = ON            ;Single-Supply ICSP enabled
  111. ;
  112. ; Extended Instruction Set Enable bit:
  113.     CONFIG   XINST = OFF         ;Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
  114. ;    CONFIG   XINST = ON          ;Instruction set extension and Indexed Addressing mode enabled
  115. ;
  116. ; Background Debugger Enable bit:
  117. ;    CONFIG   DEBUG = ON          ;Background debugger enabled, RB6 and RB7 are dedicated to In-Circuit Debug
  118.     CONFIG   DEBUG = OFF         ;Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
  119. ;
  120. ; Code Protection bit Block 0:
  121. ;    CONFIG   CP0 = ON            ;Block 0 (000800-001FFFh) code-protected
  122.     CONFIG   CP0 = OFF           ;Block 0 (000800-001FFFh) not code-protected
  123. ;
  124. ; Code Protection bit Block 1:
  125. ;    CONFIG   CP1 = ON            ;Block 1 (002000-003FFFh) code-protected
  126.     CONFIG   CP1 = OFF           ;Block 1 (002000-003FFFh) not code-protected
  127. ;
  128. ; Code Protection bit Block 2:
  129. ;    CONFIG   CP2 = ON            ;Block 2 (004000-005FFFh) code-protected
  130.     CONFIG   CP2 = OFF           ;Block 2 (004000-005FFFh) not code-protected
  131. ;
  132. ; Code Protection bit Block 3:
  133. ;    CONFIG   CP3 = ON            ;Block 3 (006000-007FFFh) code-protected
  134.     CONFIG   CP3 = OFF           ;Block 3 (006000-007FFFh) not code-protected
  135. ;
  136. ; Boot Block Code Protection bit:
  137. ;    CONFIG   CPB = ON            ;Boot block (000000-0007FFh) code-protected
  138.     CONFIG   CPB = OFF           ;Boot block (000000-0007FFh) not code-protected
  139. ;
  140. ; Data EEPROM Code Protection bit:
  141. ;    CONFIG   CPD = ON            ;Data EEPROM code-protected
  142.     CONFIG   CPD = OFF           ;Data EEPROM not code-protected
  143. ;
  144. ; Write Protection bit Block 0:
  145. ;    CONFIG   WRT0 = ON           ;Block 0 (000800-001FFFh) write-protected
  146.     CONFIG   WRT0 = OFF          ;Block 0 (000800-001FFFh) not write-protected
  147. ;
  148. ; Write Protection bit Block 1:
  149. ;    CONFIG   WRT1 = ON           ;Block 1 (002000-003FFFh) write-protected
  150. ;    CONFIG   WRT1 = OFF          ;Block 1 (002000-003FFFh) not write-protected
  151. ;
  152. ; Write Protection bit Block 2:
  153. ;    CONFIG   WRT2 = ON           ;Block 2 (004000-005FFFh) write-protected
  154.     CONFIG   WRT2 = OFF          ;Block 2 (004000-005FFFh) not write-protected
  155. ;
  156. ; Write Protection bit Block 3:
  157. ;    CONFIG   WRT3 = ON           ;Block 3 (006000-007FFFh) write-protected
  158.     CONFIG   WRT3 = OFF          ;Block 3 (006000-007FFFh) not write-protected
  159. ;
  160. ; Boot Block Write Protection bit:
  161. ;    CONFIG   WRTB = ON           ;Boot block (000000-0007FFh) write-protected
  162.     CONFIG   WRTB = OFF          ;Boot block (000000-0007FFh) not write-protected
  163. ;
  164. ; Configuration Register;Write Protection bit:
  165. ;    CONFIG   WRTC = ON           ;Configuration registers (300000-3000FFh) write-protected
  166.     CONFIG   WRTC = OFF          ;Configuration registers (300000-3000FFh) not write-protected
  167. ;
  168. ; Data EEPROM Write Protection bit:
  169. ;    CONFIG   WRTD = ON           ;Data EEPROM write-protected
  170.     CONFIG   WRTD = OFF          ;Data EEPROM not write-protected
  171. ;
  172. ; Table Read Protection bit Block 0:
  173. ;    CONFIG   EBTR0 = ON          ;Block 0 (000800-001FFFh) protected from table reads executed in other blocks
  174.     CONFIG   EBTR0 = OFF         ;Block 0 (000800-001FFFh) not protected from table reads executed in other blocks
  175. ;
  176. ; Table Read Protection bit Block 1:
  177. ;    CONFIG   EBTR1 = ON          ;Block 1 (002000-003FFFh) protected from table reads executed in other blocks
  178.     CONFIG   EBTR1 = OFF         ;Block 1 (002000-003FFFh) not protected from table reads executed in other blocks
  179. ;
  180. ; Table Read Protection bit Block 2:
  181. ;    CONFIG   EBTR2 = ON          ;Block 2 (004000-005FFFh) protected from table reads executed in other blocks
  182.     CONFIG   EBTR2 = OFF         ;Block 2 (004000-005FFFh) not protected from table reads executed in other blocks
  183. ;
  184. ; Table Read Protection bit Block 3:
  185. ;    CONFIG   EBTR3 = ON          ;Block 3 (006000-007FFFh) protected from table reads executed in other blocks
  186.     CONFIG   EBTR3 = OFF         ;Block 3 (006000-007FFFh) not protected from table reads executed in other blocks
  187. ;
  188. ; Boot Block Table Read Protection:
  189. ;    CONFIG   EBTRB = ON          ;Boot block (000000-0007FFh) protected from table reads executed in other blocks
  190.     CONFIG   EBTRB = OFF         ;Boot block (000000-0007FFh) not protected from table reads executed in other blocks
  191. ;
  192. ;********************************************************************************************

Saludos.

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Bootloader 18F4550 RS232 Serie
« Respuesta #53 en: 22 de Marzo de 2012, 08:21:43 »
Picuino quería preguntarte si has usado algún otro bootloader? Porque ya estoy pensando en usar un zócalo zif y mi programadora, pero no quisiera darme por vencido antes de tiempo...

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Bootloader 18F4550 RS232 Serie
« Respuesta #54 en: 22 de Marzo de 2012, 08:50:37 »
No te des por vencido. Te aseguro que merece la pena todo el esfuerzo necesario para poder utilizar bootloader.
Antes programaba con programador y zócalo zif.
Desde que conozco los bootloader no he vuelto a programar micros de esa forma.


Vamos a ver donde está el problema. ¿Puedes decirme otra vez qué es lo que si funciona y lo que no funciona?

Para que hablemos de lo mismo:

Carga el bootloader: PIC18F2550_i8Mhz_19200baud.hex

Prueba el test de UART a 19200 baudios: Programa: Test de funcionamiento USART a varias velocidades


Y me cuentas los problemas que encuentres.


Saludos.
« Última modificación: 22 de Marzo de 2012, 09:14:32 por picuino »

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Bootloader 18F4550 RS232 Serie
« Respuesta #55 en: 22 de Marzo de 2012, 09:08:52 »
Realmente es muy cómodo usar el bootloader, he trabajado con los 16F con bootloader y nunca tuve ningún inconveniente.

El problema es que una vez que grabo mi programa con el bootloader, no puedo enviar y recibir datos vía serial entre el PIC y la PC. Necesito que además del bootloader, me funcioné la comunicación serie.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Bootloader 18F4550 RS232 Serie
« Respuesta #56 en: 22 de Marzo de 2012, 09:12:30 »
Hola marito, estoy en linea y tengo la mala costumbre de editar los mensajes.
He cambiado unas líneas en el mensaje anterior.

Si descargas ahora el bootloader que he dejado y cargas el programa de test te puedo echar una mano.


Saludos.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Bootloader 18F4550 RS232 Serie
« Respuesta #57 en: 22 de Marzo de 2012, 09:16:53 »
La configuración de la comunicación serie la cambia el bootloader antes de saltar a tu programa.

Si quieres volver a utilizar el RS232 en tu programa tienes que volver a configurar la UART.

Si me envías el programa con el que tienes problemas y todos los archivos generados por el compilador (listados, ensamblador, hex, etc) les echo un vistazo para decirte donde puede estar el problema.


Saludos.

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Bootloader 18F4550 RS232 Serie
« Respuesta #58 en: 22 de Marzo de 2012, 09:23:26 »
El código del programa que estoy utilizando es el siguiente:

Código: [Seleccionar]
#include <18F4550.h>
#fuses HSPLL,NOMCLR,NOWDT,PROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#use rs232(baud=115200,xmit=pin_c6,rcv=pin_c7)//configuracion del puerto rs232 envia por pin_c6 y recibe por pin_c7

void main()
{
char dato;
   while(true)
   {


 if(kbhit())
         {
            dato=getc();
            printf("Recibi el dato: %c",dato);//imprimo datos por RS232;
            }

           
   }
}

Por la tarde si te parece necesario te adjunto todos los archivos de mi proyecto

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Bootloader 18F4550 RS232 Serie
« Respuesta #59 en: 22 de Marzo de 2012, 09:27:32 »
Necesito los archivos porque yo no tengo el compilador que utilizas.


Un saludo.


 

anything