Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

07/08/2013 #1


Memoria de PIC insuficiente ?
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!! ...
07/08/2013 #2

Avatar de ByAxel

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
07/08/2013 #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
07/08/2013 #4

Avatar de ByAxel

Friedrich dijo: Ver Mensaje
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.
07/08/2013 #5


Muchas gracias ,voy a probar!
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.