Autor Tema: No puedo leer ni escribir el registro PCLATH PIC16F648A  (Leído 402 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado betobono

  • PIC10
  • *
  • Mensajes: 9
No puedo leer ni escribir el registro PCLATH PIC16F648A
« en: 12 de Julio de 2019, 13:28:27 »
Colegas, un cordial saludo :-).

Siempre he leído, rebuscado y armado rompecabezas para solucionar los problemas que se me presentan, pero esta vez, tengo la necesidad de escribirles para pedirles humildemente ayuda con el siguiente caso.

Aquí va...

Desarrollo un programa en el PIC16F648A que ocupa aproximadamente 4K de memoria de programa. Según datasheet y todo lo que he consultado, las instrucciones del tipo CALL o GOTO ponen 11 bits en el Contador de Programa (PC) y el registro PCLATH < 3:4 > agrega al PC los 2 bits restantes para completar los 13 bits de direccionamiento. Estos dos últimos bits deben modificarse manualmente antes de cada salto de página (cada 2K).

Tengo dos problemas:

1. Cuando aparentemente escribo "1" en el bit 3 del PCLATH para ir desde la página 0 a la 1 (> 0x800), y a continuación leo el PCLATH, siempre me muestra "0".

Lenguaje PIC BASIC PRO (disculpen, es el que manejo :?):

PCLATH.3=1                       ; Escribe 1 el bit 3 del PCLATH
PCLATH=%00001000          ; Escribe 1 el bit 3 del PCLATH
LCDOUT $FE,1, BIN PCLATH ; Muestra el valor binario cargado en el registro PCLATH (siempre aparece en "0")

2.El programa de casi un peso de 4K se ejecuta "aparentemente" bien sin necesidad de modificar el PCLATH. Intentando verificar puedo leer el PCL (8 bits), pero como el resultado de leer el PCLATH es siempre "0", no puedo verificar el PC completo (13 bits) y por lo tanto, no puedo saber si el PC se está direccionando correctamente.
Frente a este comportamiento, me surgen las siguientes dudas: ¿Es posible que el PIC16F648A no requiera modificar el PCLATH para que salte sin problemas entre páginas? y si es necesario modificar el PCLATH, por qué mi programa se ejecuta normalmente sin tocar este registro? Será posible que este PIC no tenga páginas de 2K sino un solo bloque de 4K?


Ojalá alguno de ustedes tenga la respuesta o me pueda dar más pistas ya que sigo en el limbo (y muchos conocen la sensación, que a veces no te deja dormir...  :shock:). Gracias de antemano :-/


   
« Última modificación: 12 de Julio de 2019, 15:11:40 por betobono »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7231
Re:No puedo leer ni escribir el registro PCLATH PIC16F648A
« Respuesta #1 en: 12 de Julio de 2019, 14:40:30 »
Citar
¿Es posible que el PIC16F648A no requiera modificar el PCLATH para que salte sin problemas entre páginas? y si es necesario modificar el PCLATH, por qué mi programa se ejecuta normalmente sin tocar este registro? Será posible que este PIC no tenga páginas de 2K sino un solo bloque de 4K?

Casi todas tus preguntas se resumen a lo siguiente:
En un lenguaje de alto nivel, no necesitas preocuparte por cambiar los registros PCLATH, de eso se encarga el compilador. Solo en lenguajes de bajo nivel como ASM vas a tener que realizarlo.

Las direcciones de memoria van desde 0x0000 a 0x0FFE, 11 aporta el opcode de los GOTO/CALL, y los dos bits restantes el PCLATH.

No existen "bloques" de memoria Flash en este caso.. Solo que la forma de direccionarse es distinta... Por ejemplo con la ALU tenes 8 bits para direccionarte y todo lo demas viene del PCLATH, pero eso no significa que tenes bloques de 256 posiciones, seria una contradiccion contra los 2K. Igual la flash no tiene bloques de 2K porque tengas 11 bits para direccionarte solo en el OPCODE de una instruccion.
Tampoco significa que tendrias saltos de 2K en distintos modelos de PICs, por que los tamaños son de 1K, 2K y 4K posiciones de memoria.

Es cierto que en PICs que puede regrabarse la Flash se borran en bloques, Pero mirándolo del punto de vista de solo lectura no tiene sentido la palabra "bloque".

Desconectado betobono

  • PIC10
  • *
  • Mensajes: 9
Re:No puedo leer ni escribir el registro PCLATH PIC16F648A
« Respuesta #2 en: 12 de Julio de 2019, 16:03:42 »
 ((:-)) KILLERJC. Muchas gracias por tu respuesta brother. Me has ahorrado un resto de tiempo más en investigación.... hasta le había escrito al Soporte de Microchip....

Aunque no existía problema alguno con la ejecución del programa, la sensación de no saber si siempre correría bien o si solo se trataba de un golpe de suerte genera mucha preocupación hasta saber el por qué.

Es un inconveniente (entiendo) que si en lenguaje de alto nivel la paginación se hace automáticamente aún se muestre el mensaje [306] Crossing page boundary tras la compilación. A cualquiera que no sepa este detalle lo pone a parir....

Tengo otra duda... quizá también tengas la respuesta:

La primera parte de mi programa la desarrollé en un PIC16F628A. Cuando compilé el mismo programa en el PIC16F648A, el número de palabras de memoria utilizada aumentó más del 20% :shock:... Estará esto relacionado con la paginación y/o a funciones adicionales que están fuera de mi programa fuente y que se requieren en la migración de PICs? 

« Última modificación: 12 de Julio de 2019, 16:19:21 por betobono »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7231
Re:No puedo leer ni escribir el registro PCLATH PIC16F648A
« Respuesta #3 en: 12 de Julio de 2019, 20:31:32 »
Citar
Es un inconveniente (entiendo) que si en lenguaje de alto nivel la paginación se hace automáticamente aún se muestre el mensaje [306] Crossing page boundary tras la compilación. A cualquiera que no sepa este detalle lo pone a parir....

Compiladores... Personalmente no me gusta ninguno, pero de preferir uso XC8 para programar los micros PIC.

Citar
Estará esto relacionado con la paginación y/o a funciones adicionales que están fuera de mi programa fuente y que se requieren en la migración de PICs? 

No creo, ya que debería ocupar el mismo lugar en ambos microcontroladores, ya que son de la misma familia, es un problema del compilador o agregaste algo.
« Última modificación: 12 de Julio de 2019, 20:36:11 por KILLERJC »

Desconectado betobono

  • PIC10
  • *
  • Mensajes: 9
Re:No puedo leer ni escribir el registro PCLATH PIC16F648A
« Respuesta #4 en: 15 de Julio de 2019, 10:22:05 »
El problema estaría entonces en el compilador, ya que cualquier programa que compilo termina generando más uso de memoria Flash con el PIC16F648A que con el PIC16F628A.

El 12-Jul-2019, creé un caso con Soporte de Microchip. Cuando termine, me comprometo a compartir los resultados.

Slds. 

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7231
Re:No puedo leer ni escribir el registro PCLATH PIC16F648A
« Respuesta #5 en: 15 de Julio de 2019, 13:34:39 »
Citar
El 12-Jul-2019, creé un caso con Soporte de Microchip. Cuando termine, me comprometo a compartir los resultados.

Es que no tiene nada que ver con Microchip, tu problema es con quien hizo el compilador ( en lenguaje BASIC ), ya que Microchip el unico compilador que hace para esos PICs es XC8

Desconectado betobono

  • PIC10
  • *
  • Mensajes: 9
Re:No puedo leer ni escribir el registro PCLATH PIC16F648A
« Respuesta #6 en: 15 de Julio de 2019, 15:47:14 »
Es como indicas, al final (Microchip) terminaría probando el programa en su compilador y me dirían que el que tengo tiene problemas, pero no pierdo las esperanzas de recibir una pista de qué debo hacer...

Ahora en la mañana me dediqué a buscar en internet otro compilador de PIC BASIC para probarlo como alternativa, pero no he encontrado nada diferente al PBP (que ya tengo); lo que varía son las versiones...

Saludos.


 

anything