Memoria de PIC insuficiente ?

#1
Hola,tengo este programa que consiste en mostrar los caracteres del código morse cada vez que se presiona un botón


Código:
#include <16F886.h>
#fuses XT,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG
#use delay(clock=4000000)
#include "lcd.c"
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)

#byte PORTA=5
#byte PORTB=6
#byte PORTC=7
#bit Boton0=PORTB.4

struct{
   char ascii;
   char longitud;
   char codigo[7];
   }tabla[49]={ {\'A\',\'2\',"01"}
                {\'B\',\'4\',"1000"}
                {\'C\',\'4\',"1010"}
                {\'D\',\'3\',"100"}
                {\'E\',\'1\',"0"}
                {\'F\',\'4\',"0010"}
                {\'G\',\'3\',"110"}
                {\'H\',\'4\',"0000"}
                {\'I\',\'2\',"00"}
                {\'J\',\'4\',"0111"}
                {\'K\',\'3\',"101"}
                {\'L\',\'4\',"0100"}
                {\'M\',\'2\',"11"}
                {\'N\',\'2\',"10"}
                {\'O\',\'3\',"111"}
                {\'P\',\'4\',"0110"}
                {\'Q\',\'4\',"1101"}
                {\'R\',\'3\',"010"}
                {\'S\',\'3\',"000"}
                {\'T\',\'1\',"1"}
                {\'U\',\'3\',"001"}
                {\'V\',\'4\',"0001"}
                {\'W\',\'3\',"011"}
                {\'X\',\'4\',"1001"}
                {\'Y\',\'4\',"1011"}
                {\'Z\',\'4\',"1100"}
                {\'1\',\'5\',"01111"}
                {\'2\',\'5\',"00111"}
                {\'3\',\'5\',"00011"}
                {\'4\',\'5\',"00001"}
                {\'5\',\'5\',"00000"}
                {\'6\',\'5\',"10000"}
                {\'7\',\'5\',"11000"}
                {\'8\',\'5\',"11100"}
                {\'9\',\'5\',"11110"}
                {\'0\',\'5\',"11111"}
                {33,\'6\',"101011"}
                {34,\'6\',"010010"}
                {39,\'6\',"011110"}
                {40,\'6\',"101101"}
                {41,\'6\',"101101"}
                {44,\'6\',"110011"}
                {45,\'6\',"100001"}
                {46,\'6\',"010101"}
                {47,\'5\',"10010"}
                {58,\'6\',"111000"}
                {59,\'6\',"101010"}
                {61,\'5\',"10001"}
                {63,\'6\',"001100"}};

void main(){
    int i=0;
   lcd_init();
   set_tris_b(0xFF);
    set_tris_a(0x00);
    port_b_pullups(1);
    delay_ms(500);
    lcd_putc ("\\ Listo...");
    while(1){
       if(Boton==0){
         printf(lcd_putc,"ASCII LONGITUD CODIGO\\n\\t");
          printf(lcd_putc,"%c,%c,%c", tabla[i].ascii,tabla[i].longitud,tabla[i].codigo);
          i++;
          if(i==49) i=0;
      }
         }
}

El problema surge cuando lo compilo,me sale este error:"Data item too big",y apunta a la linea donde se define el tamaño de la struct.
Mi duda es si es problema de la memoria, y si se puede hacer de otra manera un poco mas eficiente, como guardar estos dato en la eeprom para que no ocupe lugar en la memoria del programa,gracias!! ...
 
Última edición por un moderador:
#2
Hola.
Si, parece poco conveniente poner una tabla en una estructura... para esto tienes algunas opciones...
- Crear la tabla en la RAM, basta con definir el array con los datos.
char Tabla[49] = {...,...}
- Crear la tabla en la ROM, para esto debe ser constante.
const char Tabla[49] = {...,...}
- Crear la tabla en la EEPROM, se debe de usar las funciones read_eeprom.
#ROM 0x0021={...,...} // Para los PIC16

Saludos
 
#3
- Crear la tabla en la EEPROM, se debe de usar las funciones read_eeprom.
#ROM 0x0021={...,...} // Para los PIC16

Hpla,gracias por contestar,como se cargan en la eeprom,al principio del programa,la puedo cargar tal cual como la he escrito,como una struct? Muchas gracias
 
#4
como se cargan en la eeprom,al principio del programa,la puedo cargar tal cual como la he escrito,como una struct? Muchas gracias
Para cargar en la eeprom se utiliza la directiva #ROM 0x0021 para los PIC16F y dentro de llaves separados por comas se escriben los datos (binario, decimal, ascii, hex) pero solo como lista plana (unidimencional), así que tendrás que modificar el modo al que accedes a los datos... y no usar struct para esto...

PD: Estas cosas están en la ayuda "Help" del programa.
Saludos.
 
Arriba