Autor Tema: Duda memoria Ram pic16f887  (Leído 2740 veces)

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

Desconectado jeison

  • PIC10
  • *
  • Mensajes: 19
Duda memoria Ram pic16f887
« 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

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Duda memoria Ram pic16f887
« Respuesta #1 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
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado jeison

  • PIC10
  • *
  • Mensajes: 19
Re: Duda memoria Ram pic16f887
« Respuesta #2 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);
       
      }
   }
}

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Duda memoria Ram pic16f887
« Respuesta #3 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!
-
Leonardo Garberoglio

Desconectado jeison

  • PIC10
  • *
  • Mensajes: 19
Re: Duda memoria Ram pic16f887
« Respuesta #4 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

Desconectado jeison

  • PIC10
  • *
  • Mensajes: 19
Re: Duda memoria Ram pic16f887
« Respuesta #5 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

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Duda memoria Ram pic16f887
« Respuesta #6 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.
-
Leonardo Garberoglio

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Duda memoria Ram pic16f887
« Respuesta #7 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.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado jeison

  • PIC10
  • *
  • Mensajes: 19
Re: Duda memoria Ram pic16f887
« Respuesta #8 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!


 

anything