TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: Enrique_86 en 05 de Noviembre de 2009, 14:25:16

Título: Ampliar niveles del Stack PIC16F628A
Publicado por: Enrique_86 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:
Título: Re: Ampliar niveles del Stack PIC16F628A
Publicado por: Leon Pic 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.
Título: Re: Ampliar niveles del Stack PIC16F628A
Publicado por: Enrique_86 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..
Título: Re: Ampliar niveles del Stack PIC16F628A
Publicado por: migsantiago 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 (http://en.wikipedia.org/wiki/Stack_%28data_structure%29)).

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 (http://ccsinfo.com/content.php?page=newcompilercomp)).

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.  :?:
Título: Re: Ampliar niveles del Stack PIC16F628A
Publicado por: Suky 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!
Título: Re: Ampliar niveles del Stack PIC16F628A
Publicado por: migsantiago 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
Título: Re: Ampliar niveles del Stack PIC16F628A
Publicado por: Suky 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
Título: Re: Ampliar niveles del Stack PIC16F628A
Publicado por: migsantiago 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
Título: Re: Ampliar niveles del Stack PIC16F628A
Publicado por: Enrique_86 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.. :?
Título: Re: Ampliar niveles del Stack PIC16F628A
Publicado por: migsantiago 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


Título: Re: Ampliar niveles del Stack PIC16F628A
Publicado por: Enrique_86 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)