LM335 acondicionamiento

Hola, estuve buscando hilos viejos pero no acabo de encontrar lo que busco, a ver si me podeis ayudar.

Tengo que entregar un ejercicio mediante un pic 16f873 y un sensor lm335.

Cuando llegue a 20grados por ejemplo, se tiene que encender un led y cuando baje apagarse, para simularlo utilizo proteus y el programa lo ago en el compilador CCS.

Se que el lm335 cada 1grado sube 10mV.

Pero no se como programar para que el ccs interprete los valores, es decir, a 0grados hay 2,72v, entonces lo que se me ocurre es hacer un "if(valor=2,72)" se encienda un led, se que está mal, es una manera de deciros lo que no se, no se si me explico...:unsure:

A ver si podeis ayudarme, muchas gracias anticipadas:)

os pongo en imagen lo que tengo.

lm_zps18a33cbb.jpg

lmccs_zpsd3cbab94.jpg
 
Si quieres que a partir de cierto nivel del ADC active algo y bajando de ese valor se desactive lo mas simple seria poner:
while(true){
valor=read_adc();
valor=valor/204.6;
if (valor<0.27) //temperatura ambiente por ejemplo.
//aqui activas o desactivas algo.
else
//mantienes el valor anterior por ejemplo.
}
 
mmmmm, no entiendo, porque divides valor entre 204.6? y el 0.27? Acabo de probar tal que así:


while(1){
valor=read_adc();
valor=valor/204.6;
if (valor<0.27) //temperatura ambiente por ejemplo.
output_high(pin_b1); //aqui activas o desactivas algo.

//mantienes el valor anterior por ejemplo.
}

}

El led está siempre encendido, si pongo else me da error...si lo borro compila, me gustaria saber el proceso paso a paso para entenderlo bien, se supone que el sensor entrega una señal adc y se le con read_adc(), despues hay que prepararla para pasar a digital, no? me tiene muy liado esto........:cool:
 
Me equivoque con el LM35. En tu caso estoy dividiendo entre 204.6 por que el ADC del PIC da valores entre 0-1023 en otras palabras 1023 = 5V como máximo, ahora debes de poner else por que si no activara el pin B1 cuando llegue a tu valor de referencia pero nunca se apagara aunque sea menor que dicho valor.
while(1){
valor=read_adc();
valor=valor/204.6;
if (valor<=2.7) //temperatura ambiente por ejemplo.
output_high(pin_b1);
else
output_low(pin_b1);
 
Última edición:
Con este programa el led siempre está encendido, lo acabo de probar y nunca se apaga, no entiendo como calculas 204.6, ni 2.7, si me puedes explicar todo el proceso o algun link que lo explique te lo agradecería

Gracias
 
Me funciona de esta manera, decidme si es correcto:

set_adc_channel(0);
delay_us(10);

while(1){

tension=read_adc();
delay_us(30);

if((tension>=614)||(tension<=589.8)){ //led enciende si la temp.sale de este rango15y27grados
output_high(pin_b1);}
else{
output_low(pin_b1);}

}

}

Calculé del siguiente modo:

Con el voltimetro del proteus, comprobé:

-a maxima temperatura: 125grados-------3.28v
-a minima temperatura: -50grados-------2.23v

rangos que quiero que no se encienda el led:

-15 y 27grados, fuera de esta temperatura se enciende.

Volviendo a medir con el voltimetro del proteus me da lo siguiente:

-para 15grados-----2.88v
-para 27grados-----3v

Entonces ago dos reglas de 3:

5v-------------1024
2.88(15ºc)------x

5v-------------1024
2.88(15ºc)------x

x=589.8 para 15grados

5v--------------1024
3v(27ºC)---------x

x=614.4 para 27grados

Me gustaría saber calcularlo sin el proteus porque en la realidad no se podría hacer.

De todos modos, para este caso como el lm335 no llega a 5v, ni a 0, se deberia poner -vref a 2.23v y +vref a 3.28, no?
 
Atrás
Arriba