Autor Tema: Ampliar niveles del Stack PIC16F628A  (Leído 4791 veces)

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

Desconectado Enrique_86

  • PIC12
  • **
  • Mensajes: 62
Ampliar niveles del Stack PIC16F628A
« en: 05 de Noviembre de 2009, 14:25:16 »
Hola a todos.. :-/
Estoy realizando un proyecto con un 16F628A, el programa en si solo atiende interrupciones y en el bucle principal pongo al pic a sleep, entonces al estar trabajando con interrupciones hago llamado a subrutinas de codigo diversas para lo que necesito, y he llegado a un punto en que los niveles del stack me quedan cortos, mi consulta es ¿Se puede de algun modo ampliar los niveles del stack?¿Es posible hacer esto mediante codigo?.. bueno espero que alguien me ayude xD... se los agradece bastante, un saludo a la gente del foro..  :mrgreen:
...enrique  :-)

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Ampliar niveles del Stack PIC16F628A
« Respuesta #1 en: 05 de Noviembre de 2009, 14:57:13 »
La respuesta es sencilla NO  :(
Desde mi punto de vista tienes dos opciones:

1- Optimizar tu código.
2- Cambiar por un PIC con más niveles de pila.

Ten en cuenta que la pila, es físico y viene de fábrica. Emular la pila, por medio de software, no se puede.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado Enrique_86

  • PIC12
  • **
  • Mensajes: 62
Re: Ampliar niveles del Stack PIC16F628A
« Respuesta #2 en: 05 de Noviembre de 2009, 15:53:35 »
Hola, Leon_Pic
Uhm si ya lo habia pensado... pero no queria perder la esperanza de que por ahi habia alguna ligera posibilidad de que eso fuese posible, pero bueno gracias por la ayuda!  :mrgreen:
La unica opcion que tengo es optimizar el codigo y no hacer muchos llamados a subrutinas, lo cual lo hace un poco tedioso, pero bueno, gracias nuevamente por la ayuda..
...enrique  :-)

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Ampliar niveles del Stack PIC16F628A
« Respuesta #3 en: 05 de Noviembre de 2009, 17:19:45 »
Hola

Creo que sí se puede guardar la pila por software ya que en los PIC16 la parte baja y alta del apuntador de programa son visibles para el usuario desde cualquier banco (con ciertas limitantes) y antes de brincar a una subrutina se podrían salvar en una pila por software del tamaño que uno elija y que quepa en la ram del pic (un algoritmo push-pop).

Las variables son PCL (parte baja) y PCLATH (parte alta).

Mediante instrucciones como GOTO en vez de CALL o escritura directa sobre PCL se podría hacer el salto a muchas subfunciones, incluso creo que se podría implementar una recursividad que solo existe en el compilador de Microchip en familias PIC18 y mejores (detalle).

Claro está que esto de ser posible requeriría un esfuerzo mayor y un poco de programación avanzada y lo mejor es que al estar en ensamblador no habría restricciones. Está el detalle de que PCH no es leíble, pero con un poco de creatividad creo que podría solucionarse.  :?:

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Ampliar niveles del Stack PIC16F628A
« Respuesta #4 en: 05 de Noviembre de 2009, 17:35:21 »
mmm... claro, el problema es que la parte alta de PC no puede leerse y eso complica bastante las cosas  :? Hay que tener pleno control sobre el programa para saber que cambios puede llegar a tener estos últimos 5 bits.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Ampliar niveles del Stack PIC16F628A
« Respuesta #5 en: 05 de Noviembre de 2009, 17:40:08 »
mmm... claro, el problema es que la parte alta de PC no puede leerse y eso complica bastante las cosas  :? Hay que tener pleno control sobre el programa para saber que cambios puede llegar a tener estos últimos 5 bits.

Saludos!

Exacto, pero podrían ubicarse las subrutinas y los llamados en posiciones de memoria fijas y no donde MPLAB las acomode. Cuando uno haga el salto se sabe de dónde se originó y se guardaría en la pila virtual.

Con unos cuantos #org creo que sería posible.  :?: Pero creo que un PIC18 sigue siendo la mejor solución.  :D

Edito: apenas leí que el pic18 tiene 31 posiciones en su pila y además cuenta con un registro leíble del apuntador de pila.  :o
« Última modificación: 05 de Noviembre de 2009, 17:42:32 por migsantiago »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Ampliar niveles del Stack PIC16F628A
« Respuesta #6 en: 05 de Noviembre de 2009, 17:44:35 »
Si, es cierto y que la función en ningún momento avance mas de 256 pasos o menos según donde se ubique o sino tenerlo en cuenta  :? Se complica  :? Mejor un 18F  :D :D
No contesto mensajes privados, las consultas en el foro

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Ampliar niveles del Stack PIC16F628A
« Respuesta #7 en: 05 de Noviembre de 2009, 17:56:49 »
Si, es cierto y que la función en ningún momento avance mas de 256 pasos o menos según donde se ubique o sino tenerlo en cuenta  :? Se complica  :? Mejor un 18F  :D :D

 :D :D :D

Bueno... me acabo de acordar de los PIC16 mejorados... ¡ya traen 16 niveles de pila!  ;-) Además de direccionamiento indirecto de memoria de programa y...

Citar
The user also has full access to all 16-levels via three new registers, stack pointer (SPTR), top of stack high (TOSH) and top of stack low (TOSL).

 :-/

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2693&param=en537974

Desconectado Enrique_86

  • PIC12
  • **
  • Mensajes: 62
Re: Ampliar niveles del Stack PIC16F628A
« Respuesta #8 en: 05 de Noviembre de 2009, 18:02:05 »
Bueno gracias por las respuestas, en definitiva un PIC18F es la mejor solucion, pero el problema es cuando el hardware ya esta diseñado y se van a agregar mas funcionalidades al software del PIC, es decir renovar un programa antiguo y hacerlo mas completo, el proyecto implica no cambiar de microcontrolador.
Tendria que investigar mas al respecto de como podria implementar una pila por software, espacio en la ram aun hay suficiente, me parece que aun no esta del todo descartado la pila por software, investigare un poco mas, si tienen alguna idea bienvenida sea  :mrgreen:, saludos a todos gracias por la colaboracion...
PIC16 mejorados??  y como es eso..  :shock:
Uhm acabo de revisar la informacion, estan disponibles en el encapsulado de un 16F628A?? no lo encuentro.. :?
« Última modificación: 05 de Noviembre de 2009, 18:14:45 por Enrique_86 »
...enrique  :-)

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Ampliar niveles del Stack PIC16F628A
« Respuesta #9 en: 05 de Noviembre de 2009, 19:04:23 »
PIC16 mejorados??  y como es eso..  :shock:
Uhm acabo de revisar la informacion, estan disponibles en el encapsulado de un 16F628A?? no lo encuentro.. :?

Claro, hay para todos los gustos... de 18 pines como el 628a tenemos a... PIC16F1826
http://ww1.microchip.com/downloads/en/DeviceDoc/41391B.pdf



Desconectado Enrique_86

  • PIC12
  • **
  • Mensajes: 62
Re: Ampliar niveles del Stack PIC16F628A
« Respuesta #10 en: 05 de Noviembre de 2009, 20:03:05 »
Excelente aporte!! me vendria bien cambiar al 16F628A por este micro sin comprometer el hardware, seria una solucion mas adecuada, gracias.. pero igualmente seguire en busca de la pila por software, me parece interesante esta solucion..   :mrgreen: gracias nuevamente.   8)
...enrique  :-)