Autor Tema: una ayudita por favor...  (Leído 2333 veces)

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

Desconectado ipurple

  • PIC10
  • *
  • Mensajes: 4
una ayudita por favor...
« en: 13 de Julio de 2005, 10:17:00 »
Hola amigos,
Les felicito por este gran espacio...quisiera pedirles un poquito de ayuda con un programita que trato de hacer para medir una presion a partir de un voltaje. Estoy ocupando el compilador CCS y el mensaje que aparece es: "Error(71): Out of ROM, A segment or the program is too large", la verdad que no entiendo demasiado a que se debe, he tratado de corregir algunas secuencias pero no pasa nada...bienvenidas las sugerencias y gracias!



///////////////////////////// DIRECTIVAS DE PREPROCESADO /////////////////////////////

#include <16F870.h>
#device adc=10                            
#fuses    XT,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT      
#use      delay(clock=4000000)                      
#include  "lcd.c"                                        
#include  <math.h>
#use      fast_io(B)

////////////////////////////////////// GLOBALES //////////////////////////////////////
const int v_max=5;
const int escala=1023;
const float ctte=1.667;
const float mbar=11.33;

////////////////////////////////////// RUTINAS ////////////////////////////////////////

void borra_lcd()
   {
   lcd_putc("f"Giño;            // Borra el lcd
   }

void calcula_voltaje(float valor,float &voltaje)
   {                              
   voltaje = valor*v_max/escala*2;               //Calcula el voltaje desde ADC
                                                                        desde y multiplica *2 para
                                                                        compensar la entrada
   }
   
void calcula_value(float voltaje,float &value)
   {
   value=ctte*voltaje-mbar;                     //Calcula value
   }
   
void calcula_pressure(float value, float &pressure)
   {
   pressure=pow(10,value);                //Calcula presion segun algoritmo  10
                                                              elevado a value
   }
     

/////////////////////////////////////// PRINCIPAL //////////////////////////////////////

void main()
   {
                         
   float valor,voltaje,value,pressure;
   set_tris_B(0b00000000);                               // Puerto B configurado como salida
   port_b_pullups(FALSE);                                 // Desactiva pull-ups  puerto B
   setup_adc_ports(RA0_RA1_RA3_ANALOG);   //Configura A0,A1 y A3 como entradas analógicas y Vdd como voltaje de referencia
   setup_adc(ADC_CLOCK_INTERNAL);            // Reloj para el conversor
   set_adc_channel(0);                                    // Selecciona el canal 0 (RA0)
   
   for(valor=0;1.82<voltaje<8.6Giño                    // Bucle
     {
     valor = read_adc();            
     calcula_voltaje(valor,voltaje);                   // Entrada parámetro "valor" y
                                                                          devuelve "voltaje"
     calcula_value(voltaje,value);                    // Entrada parametro "voltaje" y
                                                                         devuelve "vale"
     calcula_pressure(value,pressure);           // Entrada parametro "value" y
                                                                         devuelve "pressure"
     lcd_init();                                                 // Inicializa LCD  
     borra_lcd();                                             // Borra LCD
     printf(lcd_putc,"%f",pressure);                // Muestra en el lcd el contenido de la variable "pressure"
     delay_ms(100);                                       // Retardo de un 100 ms
     
     }}

Desconectado ipurple

  • PIC10
  • *
  • Mensajes: 4
RE: una ayudita por favor...
« Respuesta #1 en: 13 de Julio de 2005, 10:21:00 »
Escrito originalmente por ipurple
Hola amigos,
Les felicito por este gran espacio...quisiera pedirles un poquito de ayuda con un programita que trato de hacer para medir una presion a partir de un voltaje. Estoy ocupando el compilador CCS y el mensaje que aparece es: "Error(71): Out of ROM, A segment or the program is too large", la verdad que no entiendo demasiado a que se debe, he tratado de corregir algunas secuencias pero no pasa nada...bienvenidas las sugerencias y gracias!



///////////////////////////// DIRECTIVAS DE PREPROCESADO /////////////////////////////

#include <16F870.h>
#device adc=10                            
#fuses    XT,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT      
#use      delay(clock=4000000)                      
#include  "lcd.c"                                        
#include  <math.h>
#use      fast_io(B)

////////////////////////////////////// GLOBALES //////////////////////////////////////
const int v_max=5;
const int escala=1023;
const float ctte=1.667;
const float mbar=11.33;

////////////////////////////////////// RUTINAS ////////////////////////////////////////

void borra_lcd()
   {
   lcd_putc("f" );            // Borra el lcd
   }

void calcula_voltaje(float valor,float &voltaje)
   {                              
   voltaje = valor*v_max/escala*2;               //Calcula el voltaje desde ADC
                                                                        desde y multiplica *2 para
                                                                        compensar la entrada
   }
   
void calcula_value(float voltaje,float &value)
   {
   value=ctte*voltaje-mbar;                     //Calcula value
   }
   
void calcula_pressure(float value, float &pressure)
   {
   pressure=pow(10,value);                //Calcula presion segun algoritmo  10
                                                              elevado a value
   }
     

/////////////////////////////////////// PRINCIPAL //////////////////////////////////////

void main()
   {
                         
   float valor,voltaje,value,pressure;
   set_tris_B(0b00000000);                               // Puerto B configurado como salida
   port_b_pullups(FALSE);                                 // Desactiva pull-ups  puerto B
   setup_adc_ports(RA0_RA1_RA3_ANALOG);   //Configura A0,A1 y A3 como entradas analógicas y Vdd como voltaje de referencia
   setup_adc(ADC_CLOCK_INTERNAL);            // Reloj para el conversor
   set_adc_channel(0);                                    // Selecciona el canal 0 (RA0)
   
   for(valor=0;1.82<voltaje<8.6; )                    // Bucle
     {
     valor = read_adc();            
     calcula_voltaje(valor,voltaje);                   // Entrada parámetro "valor" y
                                                                          devuelve "voltaje"
     calcula_value(voltaje,value);                    // Entrada parametro "voltaje" y
                                                                         devuelve "vale"
     calcula_pressure(value,pressure);           // Entrada parametro "value" y
                                                                         devuelve "pressure"
     lcd_init();                                                 // Inicializa LCD  
     borra_lcd();                                             // Borra LCD
     printf(lcd_putc,"%f",pressure);                // Muestra en el lcd el contenido de la variable "pressure"
     delay_ms(100);                                       // Retardo de un 100 ms
     
     }}


Desconectado modelo75

  • PIC10
  • *
  • Mensajes: 28
RE: una ayudita por favor...
« Respuesta #2 en: 13 de Julio de 2005, 10:58:00 »
coloca la sgte linea:
#device *=16
out rom significa que  el codigo es muy largo, cosa extraña si el codigo que usas es todo lo que pusiste.
prueba y comenta.
saludos

Desconectado ipurple

  • PIC10
  • *
  • Mensajes: 4
RE: una ayudita por favor...
« Respuesta #3 en: 14 de Julio de 2005, 16:33:00 »
Ok,  gracias.
Lo probare y te aviso.

Desconectado ipurple

  • PIC10
  • *
  • Mensajes: 4
RE: una ayudita por favor...
« Respuesta #4 en: 15 de Julio de 2005, 09:51:00 »
Bueno, probe con #device*=16 pero se mantuvo el mismo error... pero podrias explicarme un poco que significa este comando???...y si se te ocurren otras soluciones, bienvenidas!!!!
Muchas gracias de antemano...

Desconectado modelo75

  • PIC10
  • *
  • Mensajes: 28
RE: una ayudita por favor...
« Respuesta #5 en: 15 de Julio de 2005, 14:04:00 »
mira, entiendo que define los punteros en 16bit, crei que optimizaba tanto RAM como ROM, pero no, solo optimiza RAM. Intenete compilar tu codigo pero me da error en el "lcd.c". Si encuentro algo te aviso.
slds