Autor Tema: Ayuda con Sensor de Temperatura con 16F876  (Leído 6773 veces)

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

Desconectado Ernie-

  • PIC12
  • **
  • Mensajes: 56
Ayuda con Sensor de Temperatura con 16F876
« en: 13 de Diciembre de 2006, 18:07:49 »
Hola a tod@s:
Estoy realizando un proyecto para controlar la temperatura de una habitación con el PIC16F876 y sensor de temperatura LM35. Ya tengo calculada la escala en que medirá la temperatura para que sea lo más ajustada posible, pero no consigue leer el puerto A para mostrar la temperatura por el LCD.

Hice una prueba para mostrar la temperatura y funciona correctamente mostrando -4ºC. Ahora lo que quisiera es mostrar la temperatura leyendo el puerto A (ahí irá conectado el LM35)

El código es el siguiente:

Código: [Seleccionar]
#include <16f876.h>
#use delay(clock=4000000)
#include <lcd3.c>

#byte puerto_A=0x05
#byte puerto_B=0x06
#byte puerto_C=0x07

#byte tris_A=0x85 
#byte tris_B=0x86
#byte tris_C=0x87

void main() {
   int16 valor1;
lcd_init();


tris_a=0xFF;
tris_b=0x00;
tris_c=0x1F;

setup_adc(ALL_ANALOG);


while(1)
{
lcd_enviar(LCD_COMANDO, LCD_CLEAR);
lcd_enviar(LCD_COMANDO, LCD_HOME);
set_adc_channel(0);
lcd_putc("-");
lcd_putc(48+4);
lcd_putc(0b11011111);
lcd_putc("C");
delay_ms(5000);
}
}

Alguien me podría ayudar a leer el puerto A?

Gracias por adelantado. Un saludo.

Ernie
La mitad del mundo tiene algo que decir, pero no puede; la otra mitad no tiene nada que decir, pero no calla. Robert Lee Frost.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Ayuda con Sensor de Temperatura con 16F876
« Respuesta #1 en: 14 de Diciembre de 2006, 02:22:20 »
Dale un vistazo a esto a ver si te sirve de ayuda: Temperatura y Luminosidad con un LM35a y una LDR (Conv. AD)

Un saludo.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Ernie-

  • PIC12
  • **
  • Mensajes: 56
Re: Ayuda con Sensor de Temperatura con 16F876
« Respuesta #2 en: 14 de Diciembre de 2006, 03:19:04 »
Dale un vistazo a esto a ver si te sirve de ayuda: Temperatura y Luminosidad con un LM35a y una LDR (Conv. AD)

Un saludo.


Gracias RedPic me ha servido de ayuda.. ahora investigaré para ver en que me falla a la hora de leer el puerto A

Saludos. =)
La mitad del mundo tiene algo que decir, pero no puede; la otra mitad no tiene nada que decir, pero no calla. Robert Lee Frost.

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: Ayuda con Sensor de Temperatura con 16F876
« Respuesta #3 en: 14 de Diciembre de 2006, 09:36:01 »
Hola ernie, en el código que pones no veo que leas el conversor A/D, después de la instrucción set_adc_channel(0); debes hacer la lectura del canal que acabas de seleccionar:

Un ejemplo del manual del ccs:

setup_adc(  ADC_CLOCK_INTERNAL  );
setup_adc_ports( ALL_ANALOG );
set_adc_channel(1);
while ( input(PIN_B0) ) {
   delay_ms( 5000 );
   value = read_adc();
   printf("A/D value = %2x\n\r", value);
}

El printf lo puedes cambiar por el lcd_putc(), lo más seguro es que despues de leer el conversor a/d se deba convertir el valor leído a formato bcd para ser mostrado en el lcd.

saludos.
Pereira - Colombia

Desconectado Ernie-

  • PIC12
  • **
  • Mensajes: 56
Re: Ayuda con Sensor de Temperatura con 16F876
« Respuesta #4 en: 16 de Diciembre de 2006, 13:27:20 »
Hola ernie, en el código que pones no veo que leas el conversor A/D, después de la instrucción set_adc_channel(0); debes hacer la lectura del canal que acabas de seleccionar: ...

Gracias por la observación dhmejia, revisado y actualizado ese código ahora ya lee el puerto A lo he tenido que adaptar para leer todas las temperaturas que me permite el LM35 y ciertamente a la hora de mostrar el valor por el LCD si que es cierto que no sale... creo que no hice bien la conversión o que me he equivocado en algo:

Retocando el código y probándolo he llegado a esto...

Código: [Seleccionar]
#include <16f876.h>
#device ADC=10
#use delay (clock=4000000)
#include <lcd3.c>
       
#byte porta=0x05
#byte portb=0x06
#byte portc=0x07

#byte tris_a=0x85
#byte tris_b=0x86
#byte tris_c=0x87

void main() {
    int16 value;
int16 temperatura1;
int16 a,b,x,z;

lcd_init();
    tris_a=0xFF;
    tris_b=0x00;
    tris_c=0x1F;             //puerto C como salida
    setup_adc(ADC_CLOCK_INTERNAL);   //Config del conversor A/D
    setup_adc_ports(ALL_ANALOG );

    while( TRUE ) {
                lcd_enviar(LCD_COMANDO, LCD_CLEAR);
lcd_enviar(LCD_COMANDO, LCD_HOME);

set_adc_channel(0);
    value=read_adc();

//T1
lcd_putc(49); //Mostrar el numero 1 (Temperatura 1)
lcd_gotoxy(2,1);
lcd_putc(0b00111101); //Simbolo =
lcd_gotoxy(3,1);

temperatura1=((17*value)/85)-55;

if(temperatura1==0&temperatura1>0){

a=temperatura1/10;
z=temperatura1%=10;
b=a/10;
x=a%=10;
x=x-1;x=~x; //Deshacer el complemento a 2
if(b==0&x>0){
lcd_putc(0); //volvemos a escribir
lcd_gotoxy(3,1);
lcd_putc(48+x); //volvemos a escribir
lcd_gotoxy(4,1);
delay_ms(2); //esperamos...
lcd_putc(48+z); //volvemos a escribir
lcd_gotoxy(5,1);
delay_ms(2); //esperamos...
lcd_putc(223); //volvemos a escribir
lcd_gotoxy(6,1);
delay_ms(2); //esperamos...
lcd_putc(67); //volvemos a escribir
lcd_gotoxy(7,1);

delay_ms(2000);
lcd_enviar(LCD_COMANDO, LCD_CLEAR); //borramos el lcd
lcd_enviar(LCD_COMANDO, LCD_HOME); //cursor al principio
}

else if(b==0&x==0){
lcd_putc(0); //volvemos a escribir
lcd_gotoxy(3,1);
delay_ms(2);
lcd_putc(48+z); //volvemos a escribir
lcd_gotoxy(4,1);
delay_ms(2); //esperamos...
lcd_putc(223); //volvemos a escribir
lcd_gotoxy(5,1);
delay_ms(2); //esperamos...
lcd_putc(67); //volvemos a escribir
lcd_gotoxy(6,1);
delay_ms(2000);
lcd_enviar(LCD_COMANDO, LCD_CLEAR); //borramos el lcd
lcd_enviar(LCD_COMANDO, LCD_HOME); //cursor al principio
}

else{
lcd_putc(0); //volvemos a escribir
lcd_gotoxy(3,1);
delay_ms(2); //esperamos...
lcd_putc(48+b); //escribimos en el LCD
lcd_gotoxy(4,1);    //posicionamos
delay_ms(2); //esperamos...
lcd_putc(48+x); //volvemos a escribir
lcd_gotoxy(5,1);
delay_ms(2); //esperamos...
lcd_putc(48+z); //volvemos a escribir
lcd_gotoxy(6,1);
delay_ms(2); //esperamos...
lcd_putc(223); //volvemos a escribir
lcd_gotoxy(7,1);
delay_ms(2); //esperamos...
lcd_putc(67); //volvemos a escribir
lcd_gotoxy(8,1);
delay_ms(2000); //volvemos a esperar
lcd_enviar(LCD_COMANDO, LCD_CLEAR); //borramos el lcd
lcd_enviar(LCD_COMANDO, LCD_HOME); //cursor al principio
    }
  }//Fin del if positivo

//El numero es negativo
else{
a=temperatura1/10;
z=temperatura1%=10;
b=a/10;
x=a%=10;
x=x-1;x=~x; //Deshacer el complemento a 2
if(b==0&x>0){
lcd_putc(0); //volvemos a escribir
lcd_gotoxy(3,1);
lcd_putc(48+x); //volvemos a escribir
lcd_gotoxy(4,1);
delay_ms(2); //esperamos...
lcd_putc(48+z); //volvemos a escribir
lcd_gotoxy(5,1);
delay_ms(2); //esperamos...
lcd_putc(223); //volvemos a escribir
lcd_gotoxy(6,1);
delay_ms(2); //esperamos...
lcd_putc(67); //volvemos a escribir
lcd_gotoxy(7,1);

delay_ms(2000);
lcd_enviar(LCD_COMANDO, LCD_CLEAR); //borramos el lcd
lcd_enviar(LCD_COMANDO, LCD_HOME); //cursor al principio
}

else if(b==0&x==0){
lcd_putc(0); //volvemos a escribir
lcd_gotoxy(3,1);
delay_ms(2);
lcd_putc(48+z); //volvemos a escribir
lcd_gotoxy(4,1);
delay_ms(2); //esperamos...
lcd_putc(223); //volvemos a escribir
lcd_gotoxy(5,1);
delay_ms(2); //esperamos...
lcd_putc(67); //volvemos a escribir
lcd_gotoxy(6,1);
delay_ms(2000);
lcd_enviar(LCD_COMANDO, LCD_CLEAR); //borramos el lcd
lcd_enviar(LCD_COMANDO, LCD_HOME); //cursor al principio
}

else{
lcd_putc(0); //volvemos a escribir
lcd_gotoxy(3,1);
delay_ms(2); //esperamos...
lcd_putc(48+b); //escribimos en el LCD
lcd_gotoxy(4,1);    //posicionamos
delay_ms(2); //esperamos...
lcd_putc(48+x); //volvemos a escribir
lcd_gotoxy(5,1);
delay_ms(2); //esperamos...
lcd_putc(48+z); //volvemos a escribir
lcd_gotoxy(6,1);
delay_ms(2); //esperamos...
lcd_putc(223); //volvemos a escribir
lcd_gotoxy(7,1);
delay_ms(2); //esperamos...
lcd_putc(67); //volvemos a escribir
lcd_gotoxy(8,1);
delay_ms(2000); //volvemos a esperar
lcd_enviar(LCD_COMANDO, LCD_CLEAR); //borramos el lcd
lcd_enviar(LCD_COMANDO, LCD_HOME); //cursor al principio
    }
    }//Fin del else
} //Fin del while
   } //Fin del main

¿En qué me puedo estar equivocando?  :shock:

Saludos y gracias por las ayudas :)
« Última modificación: 20 de Diciembre de 2006, 18:34:55 por Ernie- »
La mitad del mundo tiene algo que decir, pero no puede; la otra mitad no tiene nada que decir, pero no calla. Robert Lee Frost.

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Ayuda con Sensor de Temperatura con 16F876
« Respuesta #5 en: 21 de Diciembre de 2006, 16:00:21 »
Buenas no he visto a fondo tú código (me refiero al funcionamiento), sólo en la sintaxis, y tienes varios fallitos, por ejemplo en la condición de los if, tú pones lo siguiente:
Código: C
  1. if(b==0&x>0)
Donde se debe interpretar que en caso de que la variable 'b' sea cero y la variable 'x' sea mayor que cero, realice algo. Bien, te falta otro 'y' lógico, en C, las condiciones 'Y' se poneen dobles, ya que sino se interpreta como una sentencia AND, sería algo así:
Código: C
  1. if(b==0 && x>0)
Otra cosita, esta instrucción
Código: C
  1. z=temperatura1%=10;
¿Está bien? nunca había visto en lenguaje C, una instrucción asignando valores a dos variables a la vez, debes hacerlo paso a paso, algo así
Código: C
  1. z=temperatura1%10;

Veo que defines los registros de configuracón de los pines (registros TRIS), el compilador CCS trae ya funciones para manejar dichos registros:
Código: C
  1. set_tris_x(valor);
donde x es la letra del puerto a configurar.


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: Ayuda con Sensor de Temperatura con 16F876
« Respuesta #6 en: 21 de Diciembre de 2006, 18:38:05 »
No he hecho pruebas pero veo que envías al lcd un dato de 16 bits y realmente no se como se interprete, es posible que no tenga problemas pero sumado a las correcciones que te propone vszener yo declararía las variables a,b,x,z como int de 8 bits.

saludos.
Pereira - Colombia

Desconectado Ernie-

  • PIC12
  • **
  • Mensajes: 56
Re: Ayuda con Sensor de Temperatura con 16F876
« Respuesta #7 en: 22 de Diciembre de 2006, 01:22:56 »
Gracias chicos. Ya estoy aquí de nuevo, la cosa marcha pero me doy cada tropezón...

ya corregí algunos fallos como el de if(b==0&x>0) aunque según veo me da el mismo resultado de antes.
Por si acaso lo he dejado como me habéis indicado.

Lo de z=temperatura1%=10; también está bien...
esas instrucciones se deben a que para enviar el dato al LCD hay que enviar caracter por caracter debido a que un valor leido por el puerto A/D no se puede mandar directamente y había que descomponerlo...

Otra prueba que he realizado es la de cambiar los valores a int de 8 bits pero el resultado no está bien del todo.. salen unas cosas extrañísimas.

Otra cosa que me dí cuenta es que el programa era demasiado extenso, así que le quité lo de las temperaturas negativas ya que el proceso es el mismo, únicamente había que añadir el signo - al principio y desplazar los caracteres hacia la derecha:

Con todo esto llegué aquí:

Código: [Seleccionar]
#include <16f876.h>
#device ADC=10
#use delay (clock=4000000)
#include <lcd3.c>
       
#byte porta=0x05
#byte portb=0x06
#byte portc=0x07

#byte tris_a=0x85
#byte tris_b=0x86
#byte tris_c=0x87

void main() {
    int16 value;
int16 temp;
int16 a,b,x,z,i;

int16 laX;

lcd_init();

    tris_a=0xFF;
    tris_b=0x00;
    tris_c=0x1F;            

    setup_adc(ADC_CLOCK_INTERNAL);
    setup_adc_ports(ALL_ANALOG);

    while(TRUE) {

set_adc_channel(0);
    value=read_adc();

temp=((17*value)/85)-55;

//Test bits
//Si el bit de más peso es "1" entonces es negativo, de lo contrario es positivo
i=bit_test(temp,31);

//La temperatura es de menor de 0
if(i==1||i==0){ //comprobar el bit de más peso para empezar en una posicion X o en otra

switch(i)
{
  case 0: //el bit de mas peso es "0" (positivo)
                                  laX=4; //Empezar en la posicion 4 para no mostrar el signo "-"
  break;

  case 1: //el bit de mas peso es "1" (negativo)
          //Deshacer el complemento a 2
          temp=temp-1;
          temp=~temp;
          laX=5; //Empezar en la posicion 5 para mostrar el signo "-"
  break;
         }
 
//Cálculos
a=temp/10;
z=temp%=10;
b=a/10;
x=a%=10;

                lcd_enviar(LCD_COMANDO, LCD_CLEAR);

lcd_putc("T1=");
lcd_gotoxy(10,1);
lcd_putc("T2=");
lcd_gotoxy(1,2);
lcd_putc("T3=");
lcd_gotoxy(10,2);
lcd_putc("T4=");

if(b==0 && x>0){
lcd_gotoxy(4,1);
lcd_putc("-");
lcd_putc(0); //volvemos a escribir
lcd_gotoxy(laX,1);
lcd_putc(48+x); //volvemos a escribir
lcd_gotoxy(laX+1,1);
delay_ms(2); //esperamos...
lcd_putc(48+z); //volvemos a escribir
lcd_gotoxy(laX+2,1);
delay_ms(2); //esperamos...
lcd_putc(223); //volvemos a escribir
lcd_gotoxy(laX+3,1);
delay_ms(2); //esperamos...
lcd_putc(67); //volvemos a escribir

delay_ms(2000);
lcd_enviar(LCD_COMANDO, LCD_HOME); //cursor al principio
}

else if(b==0 && x==0){
lcd_gotoxy(4,1);
lcd_putc("-");
lcd_putc(0); //volvemos a escribir
lcd_gotoxy(laX,1);
delay_ms(2);
lcd_putc(48+z); //volvemos a escribir
lcd_gotoxy(laX+1,1);
delay_ms(2); //esperamos...
lcd_putc(223); //volvemos a escribir
lcd_gotoxy(laX+2,1);
delay_ms(2); //esperamos...
lcd_putc(67); //volvemos a escribir

delay_ms(2000);
lcd_enviar(LCD_COMANDO, LCD_HOME); //cursor al principio
}

else{
lcd_gotoxy(4,1);
lcd_putc("-");
lcd_putc(0); //volvemos a escribir
lcd_gotoxy(laX,1);
delay_ms(2); //esperamos...
lcd_putc(48+b); //escribimos en el LCD
lcd_gotoxy(laX+1,1);    //posicionamos
delay_ms(2); //esperamos...
lcd_putc(48+x); //volvemos a escribir
lcd_gotoxy(laX+2,1);
delay_ms(2); //esperamos...
lcd_putc(48+z); //volvemos a escribir
lcd_gotoxy(laX+3,1);
delay_ms(2); //esperamos...
lcd_putc(223); //volvemos a escribir
lcd_gotoxy(laX+4,1);
delay_ms(2); //esperamos...
lcd_putc(67); //volvemos a escribir

delay_ms(2000); //volvemos a esperar
lcd_enviar(LCD_COMANDO, LCD_HOME); //cursor al principio
    }
    }//Fin del else
} //Fin del while
   } //Fin del main

He hecho pruebas mostrando únicamente las temperaturas positivas y luego las negativas pero por separado y funciona a la perfección pero cuando voy a juntarlas.. no hay modo que haga nada bien.

Pretendo que a parte de hacer lo que hace sea capaz de leer los demás sensores pero eso lo haré más adelante. Aquí está el esquema del circuito hecho con el Proteus 6.3 y el fichero LCD3.C por si alguien puede echarme una mano.

¿Me ayudáis a salir del agujero en el que me he metido?

Saludos  :-)
« Última modificación: 28 de Diciembre de 2006, 04:13:52 por Ernie- »
La mitad del mundo tiene algo que decir, pero no puede; la otra mitad no tiene nada que decir, pero no calla. Robert Lee Frost.

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Ayuda con Sensor de Temperatura con 16F876
« Respuesta #8 en: 28 de Diciembre de 2006, 09:10:08 »
Sigo sin entender estas dos instrucciones:
Código: C
  1. z=temp%=10;
  2. x=a%=10;

Nunca e visto un código escrito en C (y creo que en ningún lenguaje que yo recuerde) que se pueda asignar dos valores sin ser separados por ;


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Ayuda con Sensor de Temperatura con 16F876
« Respuesta #9 en: 28 de Diciembre de 2006, 09:14:38 »
Sigo sin entender estas dos instrucciones:
Código: C
  1. z=temp%=10;
  2. x=a%=10;

Nunca e visto un código escrito en C (y creo que en ningún lenguaje que yo recuerde) que se pueda asignar dos valores sin ser separados por ;


Suerte!!! ;)

C# sí lo permite.

Ej:
Código: C
  1. a=b=3;
« Última modificación: 28 de Diciembre de 2006, 09:30:32 por maunix »
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Ernie-

  • PIC12
  • **
  • Mensajes: 56
Re: Ayuda con Sensor de Temperatura con 16F876
« Respuesta #10 en: 28 de Diciembre de 2006, 18:51:02 »
Bueno, sí que me faltó indicar en que lo estaba programando pero creo que no hace falta. Es que estoy haciéndolo en CCS, no se si eso dé problemas.  :? tampoco es que lleve tiempo con esto recien empiezo con PIC's.

Saludos y gracias
La mitad del mundo tiene algo que decir, pero no puede; la otra mitad no tiene nada que decir, pero no calla. Robert Lee Frost.

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Ayuda con Sensor de Temperatura con 16F876
« Respuesta #11 en: 28 de Diciembre de 2006, 20:17:44 »
Bueno, algo se aprende nuevo que en C# se puede hacer, pero la verdad no se si se usará mucho, de todas formas te aconsejo que lo descompongas en dos pasos y prueba a ver si te da fallos.


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado Ernie-

  • PIC12
  • **
  • Mensajes: 56
Re: Ayuda con Sensor de Temperatura con 16F876
« Respuesta #12 en: 29 de Diciembre de 2006, 07:21:38 »
Bueno, algo se aprende nuevo que en C# se puede hacer, pero la verdad no se si se usará mucho, de todas formas te aconsejo que lo descompongas en dos pasos y prueba a ver si te da fallos.


Suerte!!! ;)

Pues no funciona  :? me da el mismo efecto. Se me olvidó decir para que es eso tan raro que viste, realmente se puede hacer en C/C++/C#... lo que había usado son sentencias de asignación. Se utilizan para simplificar una expresión.

Código: [Seleccionar]
x=x*y sería lo mismo que
Código: [Seleccionar]
x=*y
De todos modos he probado haciéndolo paso por paso y no he podido.. me da el mismo resultado :(

Igualmente gracias, estoy poniendo mucho empeño a ver si saco algo bueno de esto.  :P
« Última modificación: 29 de Diciembre de 2006, 08:06:31 por Ernie- »
La mitad del mundo tiene algo que decir, pero no puede; la otra mitad no tiene nada que decir, pero no calla. Robert Lee Frost.

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Ayuda con Sensor de Temperatura con 16F876
« Respuesta #13 en: 29 de Diciembre de 2006, 08:45:37 »
Esto es una snetencia de asignación:
Código: C
  1. x=x*y

Que para optimizar el código se usa así:
Código: C
  1. x=*y

Pero si te das cuenta, sólo se le asigna un valor a una variable, en este caso a la variable x, esto e slo que tan raro ví (y sigo viendo vamos  :mrgreen: )
Código: C
  1. z=temp%=10;

Donde le asignas a la variable temp el módulo de dividir entre 10 y así mismo se lo asignas a z  :? , es decir, son varias sentencias de asignación en una sóla instrucción, ¿para que quieres asignarselo a z si ya el resultado lo tienes en temp?

Dices que los módulos por separado (negativo y positivo) te funcionan bien, viendo tú código, para entrar en dichos módulos son mediante instrucciones if que revisan los valores de las variables b y x, y la variable x, tal como lo tienes tú, se actualiza así:
Código: C
  1. x=a%=10;

Con esa 'doble asignación' que haces, ¿has probado en depurarlo paso a paso y ver el valor que toma x cuando se ejecuta la instrucción anterior, si es correcto el dato que dá o no?

Yo me reitero, no he visto una doble asignación hasta ahora (todos los días se aprende algo nuevo), aunque tampoco recomendaría mucho su uso, ya que no creo que te haga falta, hazlo como he dicho paso a paso.


Suerte!!! ;)

· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Ayuda con Sensor de Temperatura con 16F876
« Respuesta #14 en: 29 de Diciembre de 2006, 08:53:29 »
Vamos a ver, mirando tú código, ¿para que tienes está instrucción?
Código: C
  1. if(i==1||i==0){

Si la instrucción anterior: i=bit_test(temp,31); te va a dar un 0 o un 1, eso quiere decir que la snetencia if siempre sera verdadera. Aparte, creo que la instrucción bit_test(); dá un número de 8-bits, y tu tienes declarada la variable i como 16-bits (no creo que te dé muchos problemas esto, pero por si acaso asemeja el tamaño).

Revisa si las instrucciones if son capaces de comprobar datos de 16-bits, en todo caso los 16-bits sólo te sirven para la temperatura, los demás puedes ponerlos a 8-bits.

Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte


 

anything