Pues se trata de eso, un código que cada vez que se lo meto me da una mala programación y el pic queda que no lo vuelve a reconocer, se trata del 16f818 y ya me he cargado 6. El pic queda grabado, pero ya no se puede volver a regrabar y no lo reconoce.
El código consiste en una secuencia de comparaciones en las que cambio mayor por menor, es la UNICA diferencia.
Posteo los dos códigos, uno que funciona perfectamente con el mayor en la secuencia de comparaciones del main, y el que destruye el pic. Haber si sabeis a que se debe.
Porque yo lo achaco a un fallo del ccs.
Debo decir que el programador funciona perfectamente, es la primera vez que me pasa esto. Y el código he probado también a darle un valor fijo a la variable TA por si fuese que se queda con la posibilidad de que en algún momento no tenga valor, pero me extrañaria que fuese eso, ya que como he dicho el pic queda inservible.
Gracias por la ayuda.
Codigo correcto y completo:
Y esta es la parte del codigo que modifico:
El código consiste en una secuencia de comparaciones en las que cambio mayor por menor, es la UNICA diferencia.
Posteo los dos códigos, uno que funciona perfectamente con el mayor en la secuencia de comparaciones del main, y el que destruye el pic. Haber si sabeis a que se debe.
Porque yo lo achaco a un fallo del ccs.
Debo decir que el programador funciona perfectamente, es la primera vez que me pasa esto. Y el código he probado también a darle un valor fijo a la variable TA por si fuese que se queda con la posibilidad de que en algún momento no tenga valor, pero me extrañaria que fuese eso, ya que como he dicho el pic queda inservible.
Gracias por la ayuda.
Codigo correcto y completo:
Código:
#include <16f818.h>
#device ADC=10
#fuses nowdt,noput,nobrownout,protect,NOMCLR,INTRC_IO
//nomclr... habilita la patita mclr para que sea RA5 (I/O)
//intrc_io... usa reloj interno, habilita RA6 y RA7 como I/O
#use delay(clock=8000000)
#use standard_io(b)
float valor;
int TA;
int TB;
const int MAX=20;
void configura_adc(){
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(AN0);
}
void lectura_adc(){
valor=0.0;
set_adc_channel(0);
//delay_ms(1);
valor=read_adc();
valor=valor*0.00477;
//valor=valor*3.2185;
}
void retrasando(){
TB=MAX-TA;
switch (TA){
case 0:
output_b(0X3F);break;
case 8:
output_b(0X0C);break;
case 9:
output_b(0X5B);break;
case 10:
output_b(0X5E);break;
case 11:
output_b(0X6C);break;
case 12:
output_b(0X76);break;
case 14:
output_b(0X67);break;
case 16:
output_b(0X1C);break;
case 18:
output_b(0X7F);break;
case 20:
output_b(0X7C);break;
}
if (TA!=20){
output_low(PIN_A1);
delay_ms(TB);
}
if (TA>0 && TA<21){
output_high(PIN_A1);
delay_ms(TA);
}
}
void main(){
configura_adc();
do{
lectura_adc();
[B] if (valor>0.0){
TA=0;
}
if (valor>0.5){
TA=8;
}
if (valor>1.0){
TA=9;
}
if (valor>1.5){
TA=10;
}
if (valor>2.0){
TA=11;
}
if (valor>2.5){
TA=12;
}
if (valor>3.0){
TA=14;
}
if (valor>3.5){
TA=16;
}
if (valor>4.0){
TA=18;
}
if (valor>4.5){
TA=20;
}[/B]
retrasando();
}while (true);
}
Y esta es la parte del codigo que modifico:
Código:
.....
.....
void main(){
configura_adc();
do{
lectura_adc();
[B] if (valor<10.0){
TA=0;
}
if (valor<4.5){
TA=8;
}
if (valor<3.0){
TA=9;
}
if (valor<3.5){
TA=10;
}
if (valor<3.0){
TA=11;
}
if (valor<2.5){
TA=12;
}
if (valor<2.0){
TA=14;
}
if (valor<1.5){
TA=16;
}
if (valor<1.0){
TA=18;
}
if (valor<0.5){
TA=20;
}[/B]
retrasando();
......
......