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:
Espero me puedan ayudar a solucionar este problema.
Juka.
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
}
}
}
Juka.
Última edición por un moderador: