merlinkv escribió:Ya entiendo que el programador se carga todo lo que tenga el chip....
Mirando un poco más lo he encontrado, admite el modo PIC16F1826 (LVISP) ... necesito un adaptador "Header-01" voy a ver si lo consigo y si no, intentaré hacerme uno....
Lo del BL lo entiendo, más que nada era que necesitaba saber un poco la estructura de la programación que, en el caso de estos PICs, imagino sera más o menos en este orden ¿no?: Arranque del BL / Programación / BL
Gracias por la info
Hola, no he entendido muy bien lo que me comentas, pero llevo todo el día por Somiedo dando tumbos y estoy frito!
así que puede ser perfectamente achacable a eso.
Realmente no necesitas el adaptador para programar el chip. Con cinco hilos puedes hacerlo. Microchip utiliza dos sistemas para programar chips, uno se llama LVP (Low voltage programming) y otro ICSP (In circuit serial programming), que utiliza alto voltaje (bueno, los voltios habituales : 3..5, dependiendo del chip). El LVP tiene sus aplicaciones, pero puedes hacerlo perfectamente con voltaje normal con un protocolo serie de 3 hilos + alimentación:
VCC, GND, PGD (programming data), PGC (Programming Clock) y MCLR (Master Clear). Por lo que he visto, tu programador soporta este modo sin adaptador, aunque he mirado rápido, compruébalo
.
Respecto a la estructura, y lo digo de memoria ahora, por lo que a lo mejor no coincide al 100% con este chip, pero es mas o menos lo normal para los microcontroladores de microchip:
- bits de configuración: estos son unos bits o "fuses" que seleccionan algunos parámetros de operación como el tipo de reloj que se va a usar y su velocidad, la protección de escritura o lectura, el watchdog, la asignación de algunos pines... Estos sólo se pueden programar desde el programador y no son modificables en ejecución ni por autoprogramacion.
- user/serial: suele haber un espacio reservado para un número de serie y para datos sobre versión, etc. Creo que tampoco se puede cambiar en ejecución, pero no estoy seguro ahora.
- program flash: Los chips de microchip utilizan una arquitectura Hardvard, donde la zona de datos y de programas está separada. Aunque los PIC16 son de 8 bits(datos) son de 14bits de programas, por lo que se mide en words. Nuestro PIC tiene 2kwords.
- eeprom: Algunos chips tienen memoria eeprom incorporada, el nuestro tiene 256 bytes.
- RAM: nuestro chip tiene la friolera de 256 bytes de RAM
- stack HW: algunos PIC tienen un stack HW. El nuestro tiene uno de 12 niveles creo.
- registros: toda la memoria puede ser vista como registros, pero existe el equivalente al acumulador A del z80 que seria el registro w.
Al arrancar, y tras estabilizar el reloj (porque así se lo he indicado en un bit de configuración), se lee la instrucción 0 y se empieza a ejecutar el programa. El pic16 tiene varias interrupciones externas, el nuestro como 10 o así, pero un solo vector de interrupción en 0x08. He decidido poner el bootloader en los primeros 512words de flash, por lo que también capturo, de alguna forma, el vector de interrupción.
Al arrancar hace una serie de comprobaciones sobre los botones y, si no están pulsados, salta a la dirección 0x200, que es el inicio del programa real (sin bootloader)
Si los botones están pulsados, se intenta poner en comunicación con el spectrum para actualizar desde el 0x200 en adelante. El bootloader nunca cambia (politica normal de seguridad en los bootloaders, pero no es una restricción técnica como la de los fuses)
En ejecución normal, cuando salta una interrupción no enmascarada, se salta a la dirección 0x08, que a la vez llama al nuevo vector que he puesto en 0x208.
Al programar el chip, dependiendo del SW de programación, puedes elegir si grabar los bits de configuración, la eeprom, o una zona de la flash, aunque lo normal es borrar y grabar todo.
Espero haberme explicado bien, si no, pregunta lo que sea a ver si me aclaro!
(Modo ladrillo off
)