Hola a todos y Feliz Año Nuevo.
Tengo un par de diseños con el 18F25K22 funcionando muy bien con Proton y en Proteus. Se me ha ocurrido comprar una pseudo Arduino que monta un 18F25J50. Inicialmente creía que la única diferencia era que éste último tenía USB lo que supone la pérdida de 3 pines de I/O, dos para las D+ y D- y uno para el VUSB.
El paso de uno a otro se ha ido haciendo sin más complicaciones hasta que se me ha ocurrido empezar a utilizar las funciones EWrite y ERead. A las primeras de cambio, el compilador Proton me da un error:
No Eeprom memory on this microcontroller!
He conseguido averiguar que Proton tiene 3 instrucciones para utilizar la memoria Flash como si fuera una EEPROM. La rutina básica sería algo así:
Dim wPMADRPMADRL.Word
Dim FlashIndex As Byte
Dim wFlashAddress As Word
Dim FlashByte As Byte
wFlashAddress = $0780
MAIN:
' Borra un bloque de 16 words de la memoria flash
CErase wFlashAddress
' Escribe 16 bytes en la memoria flash
CWrite wFlashAddress,[10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160]
' Lee 16 bytes desde la memoria flash
For FlashIndex = 0 To 15
FlashByte = CRead wFlashAddress
Inc wFlashAddress
Next
Stop
Pero no funciona en el 25J50. Para empezar:
a) el registro PMADRL no existe y tampoco sé ni qué hace ni qué valor debería tener. ¿Alguien podría explicarme el equivalente en el 25J50?.
b) por lo visto hay PICs que deben borrarse, escribir y leer en bloque de 16 words, otro de 32 y puede que los haya de 64. ¿Dónde debo mirar en la hoja de datos del 25J50 para saber el tamaño de borrado de un bloque?
c) para terminar, supongo que deberé reservar una zona de la memoria flash para no meterme en la parte del programa. ¿Dónde y cómo se reserva la zona?.
Muchas gracias por vuestra atención y vuestro tiempo,