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

Temas similares

15/08/2014 #1


Problemas al grabar PIC con PICSTART
Hola amigos, quisiera hacerles una consulta, primero explicaré mi problema.
He realizado un programa en ccs denominado incubadora, la que realiza seteo temperatura máxima y mínima, recoge temperatura con un lm35, compara con temperatura máxima y mínima y según condición enciende o apaga un calefactor, además de cada una hora hace funcionar un motor paso a paso, primero en un sentido y luego en otro, todo esto ok, al grabar el pic lo hace sin problema.

Luego hice otro programa denominado sensorx, el que utiliza la primera parte del programa incubadora, es decir, sensor, seteo de temperatura, encendido y apagado de calefactor (compilo y simulo en proteus y todo ok)
El problema es que al grabar el hex, me arroja un error que dice...

PICSTART Program\Verify Report
15-Aug-2014, 23:39:26

Device Type: PIC16F877A
Address Range 0-b6f


Program Memory Errors

Address Good Bad

0024: 4000 0000

Pensé que era el PIC, pero me sucedió lo mismo en otros tres PIC.

Adjunto programa del sensor:
Código:
# include <16f877a.h>
# device *=16
# device adc=10
# use delay(clock=4M)
# include <lcd420.c>
# fuses xt,NOWDT
#include <internal_eeprom.c>

int16 adc_corte;
float temperatura;// variable para entrada de temperatura
float valor_temp_min;//variable para incremento/decremento de temp min
float valor_temp_max;//variable para incremento/decremento de temp max
                
 void main()
{
//*******************************
setup_adc_ports(AN0_AN1_AN3);//entrada del LM35
setup_adc(ADC_CLOCK_INTERNAL);
setup_COUNTERS(RTCC_internal.rtcc_div_1);//marca de divicion
set_adc_channel(0);
//*******************************

valor_temp_min = read_float_eeprom(25);
valor_temp_max = read_float_eeprom(35);;

output_low(pin_d2);//pone a cero calefactor
output_low(pin_d4);//pone a cero fuerza de calefactor
lcd_init();// inicia lcd


while (true)
{
if (input (pin_c4)==1)
{
    output_high (pin_d7);
}
if (input(pin_c4)==0)
{
      output_low (pin_d7);
      lcd_init();// inicia lcd
       //Se avisa sobre el suceso.
      lcd_gotoxy(1,1);
      printf(lcd_putc,"  probando");// imprime temp min
      lcd_gotoxy(1,2);
      printf(lcd_putc,"    pantallazo    ");//imprime tem actual
      lcd_gotoxy(1,3);
      printf(lcd_putc,"inicial ");//imprime temp max
      lcd_gotoxy(1,4);
      printf(lcd_putc,"espere");
      delay_ms(5000);
      lcd_init();// inicia lcd
}

   if (input(pin_c0)==1)//ve si esta pulsado el subir temp min y la incrementa
   {
   valor_temp_min=valor_temp_min+0.1;
   }
   
   if (input(pin_c1)==1)//ve si esta pulsado el bajar temp min y la decrementa
   {
   valor_temp_min=valor_temp_min-0.1;
   }

   if (input(pin_c2)==1)//ve si esta pulsado el subir temp max y la incrementa
   {
   valor_temp_max=valor_temp_max+0.1;
   }
   if (input(pin_c3)==1)//ve si esta pulsado el bajar temp max y la decrementa
   {
   valor_temp_max=valor_temp_max-0.1;  
   }

//********LEER SENSOR LM35
      
      set_adc_channel(0);           // Activar el canal 0
      delay_us(50);
      
      temperatura = read_adc();
      temperatura = ((temperatura *150)/308);  // Conversión. 
      
      //********SE IMPRIME EN LCD
      
   lcd_gotoxy(8,2);
   printf(lcd_putc,"%f",temperatura);//imprime bajo lectura temperatura, el valor de temperatura
   lcd_gotoxy(1,1);
   printf(lcd_putc,"T. min          ");// imprime temp min
   lcd_gotoxy(8,1);
   printf(lcd_putc,"T. Act      ");//imprime tem actual
   lcd_gotoxy(15,1);
   printf(lcd_putc,"T. max ");//imprime temp max
   lcd_gotoxy(1,2);
   printf(lcd_putc,"%f",valor_temp_min);// imprime el valor de tempmin 
   delay_ms(100);
   lcd_gotoxy(15,2);
   printf(lcd_putc,"%f",valor_temp_max);// imprime el valor de tempmax
   lcd_gotoxy(1,3);
   printf(lcd_putc,"   JUAN PIAMARTA    ");//futura descripcion
   delay_ms(100);
   lcd_gotoxy(1,4);
   printf(lcd_putc,"     TALCA, 2014    ");//futura descripcion
   delay_ms(100);

// SE ÑEE A3 PARA GUARDAR DATOS Y CORTE DE ENERGIA

      set_adc_channel(3);           // Activar el canal 3
      delay_us(50);
      
      adc_corte = read_adc();       // Leer el canal 3 para sensar corte eléctrico.
      
      if(adc_corte <= 850)          // Si la lectura del canal 3 es menor a 850...
      {
      
      //Se avisa sobre el suceso.
      lcd_gotoxy(1,1);
      printf(lcd_putc,"  CORTE  DE  ENERGIA");// imprime temp min
      lcd_gotoxy(1,2);
      printf(lcd_putc,"         O          ");//imprime tem actual
      lcd_gotoxy(1,3);
      printf(lcd_putc,"SISTEMA REINICIADO");//imprime temp max
      lcd_gotoxy(1,4);
      printf(lcd_putc,"REVISE EL SISTEMA");
      delay_ms(5000);
      
         // Se escriben las temperaturas seleccionadas en la eeprom interna.

         if(read_float_eeprom(25) !=valor_temp_min)
          {
         write_float_eeprom(25,valor_temp_min);
         delay_ms(10);
          }
         if(read_float_eeprom(35) != valor_temp_max)
          {
          write_float_eeprom(35,valor_temp_max);
         delay_ms(10);
          }
          }

//***********si la temperatura es mayor que temmax

   if(temperatura<=500&&temperatura>=valor_temp_max)// compara temperatura con rango maximo y si es asi detiene calefactor
   {
   output_low(pin_d2);//para calefactor
   output_low(pin_d4);//para fuerza de calefactor
   }
//**********si la temperatuta es menor a la tem min

   if(temperatura<=valor_temp_min&&temperatura>=0)// compara temperatura con rango minimo y si es asi enciende calefactor
   {
   output_high(pin_d2);//enciende de calefactor
   output_high(pin_d4);//enciende fuerza de calefactor
   } 
}    

    

}
Espero me puedan ayudar a solucionar este problema.

Juka.
16/08/2014 #2

Avatar de Daniel Meza

Hola, ¿Ya hiciste pruebas grabando cualquier otra cosa en los micros?, podría ser un error en el hardware del PICSTART debido al uso
16/08/2014 #3


Si, grabe el programa fuente y lo hace bien, y probe con otros programas y todo bien


Solo es cuando grabo el prgrama que adjunte antes

Juka
17/08/2014 #4

Avatar de Daniel Meza

adjunta tu archivo .HEX para hacer pruebas, pero siendo sincero me parece raro esto
17/08/2014 #5


Si muy raro, adjunto carpeta con los siguiientes archivos

En proteus :

Incubadora 1-1 que es el archivo base
sensor 1.0, que es la version resumida del anterior

en ccs:

INCUBADORA.1 es el archivo base ( realiza censado de temperatura, seteo de temperatura max y temperatura min., comparación de censado con máxima y mínima y acciona calefactor, según condición, acciona un motor paso a paso y si en A3, existe corte de energía indica en lcd este fenómeno) y que es en coordinación con el archivo incubadora 1-1 de proteus, aquí todo funciona ok, tanto la simulación como el quemado

SENSORX, es la versión resumida de incubadora, se saca el motor paso a paso y se incorpora un interruptor de iniciado del sistema ( al simularlo funciona bien)

También adjunto los archivos en hex.

Espero me puedan ayudar

Juka
Archivos Adjuntos
Tipo de Archivo: rar programa.rar (182,4 KB (Kilobytes), 7 visitas)
17/08/2014 #6

Avatar de Daniel Meza

He cargado ambos .HEX con el PIckit2 y programo los micros sin problemas; pero me aparece un warning que dice que los bits de configuración del micro no están declarados dentro del programa
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.