TODOPIC

Misceláneas - Interés General => Uso y aplicaciones de los PIC / Curiosidades electrónicas => Mensaje iniciado por: jeison en 11 de Septiembre de 2014, 17:38:18

Título: Duda memoria Ram pic16f887
Publicado por: jeison en 11 de Septiembre de 2014, 17:38:18
Hola amigos, tengo un problema que me tiene en apuros; necesito enviar cierta cantidad de tramas para manejar pantallas led desde el micro pic16f887, sin embargo cuando compilo me dice que  no hay suficiente memoria, lo que es razonable dado el tamaño de las tramas, pero se que se puede solucionar pues he visto que varios usuarios han tenido problemas similares, solo que como soy muy novato con los pic's y en cada respuesta hay soluciones diferentes, necesito saber como usar bien dicha memoria o si estoy haciendo algo mal(no lo dudo) pero necesito esto urgentemente.
muchas gracias
Título: Re: Duda memoria Ram pic16f887
Publicado por: AngelGris en 11 de Septiembre de 2014, 18:28:54
Hola amigos, tengo un problema que me tiene en apuros; necesito enviar cierta cantidad de tramas para manejar pantallas led desde el micro pic16f887, sin embargo cuando compilo me dice que  no hay suficiente memoria, lo que es razonable dado el tamaño de las tramas, pero se que se puede solucionar pues he visto que varios usuarios han tenido problemas similares, solo que como soy muy novato con los pic's y en cada respuesta hay soluciones diferentes, necesito saber como usar bien dicha memoria o si estoy haciendo algo mal(no lo dudo) pero necesito esto urgentemente.
muchas gracias

  Para obtener una buena ayuda sería conveniente que detalles un poco en que lenguaje de programación estás trabajando, con que compilador, también podrías mostrar tu programa y el conexionado.. En fin, que tienes que ser más específico porque decir "necesito enviar cierta cantidad de tramas" es casi como no decir nada. Ya que "cierta cantidad" puede ser 5 o 10 o 50 o incluso mas
Título: Re: Duda memoria Ram pic16f887
Publicado por: jeison en 12 de Septiembre de 2014, 12:10:10
Hola, si; tienes razón es solo que soy nuevo y no se sabía bien si en realidad como usar bien el foro. Básicamente es un programa para enviar unas tramas que me programan una pantalla led, estoy usando CCS compiler y estoy programando en C, aqui adjuntaré el código que es muy sencillo, me disculpan los errores y la ignorancia en cualquier cosa pero en realidad necesito ayuda con esto.

allí se puede ver que solo estoy enviando por el serial una de las tramas cuando activo el RD3 pero la idea es poderlas mostrar con un respectivo pin cada una, es solo que aqui está a manera de ejemplo ya que lo que me ocupa tanto espacio en el micro son las variables que le corresponden a cada trama, solo me permite usar tres de ellas y cuando compilo me sale lo siguiente: "Not enough RAM for all variables"
muchas gracias

#include <16f887.h>
#fuses INTRC_IO,NOWDT,NoPROTECT,NOLVP,PUT
#use delay (clock = 4000000)
#use RS232 (baud = 57600,  xmit = pin_c6, rcv = pin_c7)//(baud = 9600, bits = 8, parity = N, xmit = pin_c6, rcv = pin_b1)


                           
unsigned char vectrama6[51]={0xA5,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x4A,0x05,0x01,0x01,0x01,0x01,
                             0x00,0x00,0x00,0x00,0x02,0x01,0x01,0x0A,0x03,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                             0x00,0x00,0x55,0x45,0x54,0x46,0x30,0x30,0xD3,0x02,0xAE};// UET-F00
                             
 
unsigned char vectrama1[51]={0xA5,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x4A,0x05,0x01,0x01,0x01,0x01,
                             0x00,0x00,0x00,0x00,0x02,0x01,0x01,0x0A,0x03,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                             0x00,0x00,0x55,0x45,0x54,0x54,0x30,0x31,0xE2,0x02,0xAE};// UET-T01
                             
unsigned char vectrama2[51]={0xA5,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x4A,0x05,0x01,0x01,0x01,0x01,
                             0x00,0x00,0x00,0x00,0x02,0x01,0x01,0x0A,0x03,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                             0x00,0x00,0x55,0x45,0x54,0x54,0x31,0x34,0xE6,0x02,0xAE};// UET-T14

unsigned char vectrama3[51]={0xA5,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x4A,0x05,0x01,0x01,0x01,0x01,
                             0x00,0x00,0x00,0x00,0x02,0x01,0x01,0x0A,0x03,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                             0x00,0x00,0x55,0x45,0x54,0x4D,0x31,0x52,0xFD,0x02,0xAE};// UET-M1R

unsigned char vectrama4[53]={0xA5,0x00,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x4A,0x05,0x01,0x01,0x01,0x01,
                             0x00,0x00,0x00,0x00,0x02,0x01,0x01,0x0A,0x03,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                             0x00,0x00,0x55,0x45,0x54,0x20,0x4D,0x53,0x41,0x53,0x83,0x03,0xAE};// UET-MESAS

                             
unsigned char i=0;

void main()
{

SET_TRIS_A(0xFF);
SET_TRIS_D(0x00);

while(1)
   {
   
   
   if(input(pin_D3)==0)
      {
      output_high(pin_A0);
      delay_ms(300);
      output_low(pin_A0);
   
     
       
         for(i=0;i<=52;i++)
         
           putc(vectrama4);           
         
          delay_ms(500);
         
         for(i=0;i<=52;i++)
         
           putc(vectrama4);
       
      }
   }
}
Título: Re: Duda memoria Ram pic16f887
Publicado por: elgarbe en 12 de Septiembre de 2014, 12:45:14
Por lo que veo casitodos los caracteres del inicio son iguales a todas las tramas... porque no haces un vectorunico con esa parte y luego vectores mas pequeños con el resto?
Si son tramas fijas puede poner el prefijo const para que en vez de ram se almacene en la rom...

Saludos!
Título: Re: Duda memoria Ram pic16f887
Publicado por: jeison en 12 de Septiembre de 2014, 12:56:52
es una buena idea, solo que intenté algo similar pero no recibía la información bien, pero ya mismo voy a inentar hacer lo que me dices haber que tal, no es por demás si depronto no es mucho pedir como sería bien la sintaxis.
Eres muy amable y me sorprende poder contar con alguien aunque ni me conozca. Un abrazo
Título: Re: Duda memoria Ram pic16f887
Publicado por: jeison en 12 de Septiembre de 2014, 13:07:31
El problema es que en la trama completa se encuentran los parámetros de lo que voy a enviar, por eso es que todos son idénticos al principio, pues son indispensables entre si para entablar la conexión y marcan el inicio, final, los datos, los espacios, etc de cada tipo de texto que voy a mostrar en la pantalla de leds.
de nuevo gracias
Título: Re: Duda memoria Ram pic16f887
Publicado por: elgarbe en 12 de Septiembre de 2014, 13:32:51
prueba esto:

Código: [Seleccionar]
#include <16f887.h>
#fuses INTRC_IO,NOWDT,NoPROTECT,NOLVP,PUT
#use delay (clock = 4000000)
#use RS232 (baud = 57600,  xmit = pin_c6, rcv = pin_c7)//(baud = 9600, bits = 8, parity = N, xmit = pin_c6, rcv = pin_b1)


                           
unsigned char vect_inicio[44]={0xA5,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x4A,0x05,0x01,0x01,0x01,0x01,
                             0x00,0x00,0x00,0x00,0x02,0x01,0x01,0x0A,0x03,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                             0x00,0x00,0x55,0x45};// UET-F00
unsigned char vect_F00[7]={0x54,0x46,0x30,0x30,0xD3,0x02,0xAE};                             
 
                             
unsigned char i=0;

void main()
{

SET_TRIS_A(0xFF);
SET_TRIS_D(0x00);

while(1)
   {
   
   
   if(input(pin_D3)==0)
      {
      output_high(pin_A0);
      delay_ms(300);
      output_low(pin_A0);
   
           
         for(i=0;i<=43;i++)       
           putc(vect_inicio);                   
         for(i=0;i<=6;i++)         
           putc(vect_F00);

        delay_ms(500);
       
         for(i=0;i<=43;i++)       
           putc(vect_inicio);                   
         for(i=0;i<=6;i++)         
           putc(vect_F00);
      }
   }
}

eso sería para la trama 6. no se si el pequeño delay que se introduce al cambiar de fector en el for produce algun problema. Si produce problema, me avisas y te comento otra forma.

Sds.
Título: Re: Duda memoria Ram pic16f887
Publicado por: BrunoF en 14 de Septiembre de 2014, 13:54:45
Si esas tramas son constantes, declará el atributo const delante de los unsigned char de los arrays. Te estás devorando la RAM sino.

Saludos.
Título: Re: Duda memoria Ram pic16f887
Publicado por: jeison en 15 de Septiembre de 2014, 12:01:26
Hola, gracias a elgarbe, pues me dió la solución de poner los constant y efectivamente ya me funciona, lo que me ratificó BrunoF. de nuevo les agradezco mucho y espero que nos podamos ayudar mucho entre si.
Un saludo!