TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: quirogaareal en 24 de Agosto de 2006, 07:45:01

Título: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: quirogaareal en 24 de Agosto de 2006, 07:45:01
Hola Gente:

Tengo un problema. Necesito hacer un medidorde temperatura con termocupla J , pero en este caso No podre envia el valor de temperatura a un lcd 2x16 , sino para que sea visto por los operarios, debe ser visto en display de 7 segmentos, .
Yo puse un lcd 2x1 por el momento para ver los valores y de ahí mandarlos y compararlos con los de 7 seg.
Pero que pasa , uso el saa1064 en modo dinamico, y este toma los digitos en forma individual ya que medire temperaturas de valores como 300.5 , 300.6, 320.2   etc, para lo cual cree una matriz de de numeros con punto para el 7 seg, pero el problema radica en el envio individual de los decimales, las unidades las decenas y las centenas. No se me ocurre como hacer eso.

#include <16f876.h>               //pic a utilizar
#device *=16
#device adc=8
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT,NOCPD, NOWRT,NODEBUG                  //No Debug mode for ICD
#use delay (clock=4000000)            //Fosc=4Mhz
#define SAA1064_DINAMICO            //trabajar en modo dinamico el saa1064
#define SAA1064_SCL PIN_C3            //definicion de pines...
#define SAA1064_SDA PIN_C4         //...de manejo del saa1064
#define use_portb_lcd TRUE
#include <vs_saa1064M.c>
#include <lcd.c> //libreria para lcd


///PROGRAMA
void main(void)
{
   //setup_oscillator(OSC_4MHZ);         //configuracion del oscilador interno a 4MHz

char tab7segCONPUNTO[10]={0xBF,0x86,0xDB,0xCF,0xE7,0xED,0xFD,0x87,0xFF,0xE7};//7seg hex 0-9
char tab7seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67}; //7seg hex 0-9 con punto
char decimal, unidad, decena, centena,t1,t2,t3,t4,lm35;


lcd_init( ); //inicializamos lcd
lcd_putc("  Medidor de \n  temperatura");
delay_ms(1000);
lcd_putc("\f");



setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);



set_adc_channel(0);//seteo y lectura de termocupla 1
delay_ms(100);
t1=read_adc();
lcd_gotoxy(1,1);
printf(lcd_putc,"t1%d ",t1);



saa1064_init(0x76);               //inicializo saa1064 conectado a Vcc D1
saa1064_conf(0b01000001);         //12mA & NO parpadeo & Dinamico
saa1064_putc(centena,decena,unidad,decimal);   //HOLA
delay_ms(1000);
saa1064_stop();

set_adc_channel(1);//seteo y lectura de termocupla 2
delay_ms(100);
t2=read_adc();
lcd_gotoxy(8,1);
printf(lcd_putc,"t2%d ",t2);


set_adc_channel(2);//seteo y lectura de termocupla 3
delay_ms(100);
t3=read_adc();
lcd_gotoxy(1,2);
printf(lcd_putc,"t3%d ",t3);

set_adc_channel(3);//seteo y lectura de termocupla 4
delay_ms(100);
t4=read_adc();
lcd_gotoxy(8,2);
printf(lcd_putc,"t4%d ",t4);



set_adc_channel(4);//seteo y lectura de lm35
delay_ms(100);
lm35=read_adc();

///////////////////////////////////////////////////////////////////////////////////////////
///                                 ///
///   Bits de control:    X C6 C5 C4 C3 C2 C1 C0               ///
///   ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨                        ///
///      C0=0   modo estatico->digitos 1 y 2               ///
///      C0=1   modo dinamico->digitos 1&3 y 2&4 alternativamente      ///
///      C1=0/1   digitos 1&3 no parpadep/parpadeo            ///
///      C2=0/1   digitos 2&4 no parpadep/parpadeo            ///
///      C3=1   test segmentos                     ///
///      C4=1   +3mA de salida                     ///
///      C5=1   +6mA de salida                     ///
///      C6=1   +12mA de salida                     ///
///////////////////////////////////////////////////////////////////////////////////////////

saa1064_init(0x76);               //inicializo saa1064 conectado a Vcc D1
saa1064_conf(0b01000001);         //12mA & NO parpadeo & Dinamico
saa1064_putc(centena,decena,unidad,decimal);   //HOLA
delay_ms(1000);
saa1064_stop();




saa1064_init(0x70);               //inicializo saa1064 conectado a GND D4
saa1064_conf(0b01000001);         //12mA & NO parpadeo & Dinamico
saa1064_putc(0x73,0x30,0x39,0x86);   //PIC!
delay_ms(1000);
saa1064_stop();                  //paro el saa1064 conectado a GND
}
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: quirogaareal en 27 de Agosto de 2006, 15:37:25
Me autorespondo:

Ya encontre la forma de desglosar el numero asi solo obtengo los enteros. Lo hago atravez de divisiones y enteros, pero me gustaria saber si en ccs hay alguna instruccion que te separe la parte entera de la decimal.

Yo hice esto:
supongo que tengo el valor 1023 entregado por el conversor
conversor de 10 bits .
t1=read_adc()

Tentero=t1/1000 ;   1023/1000= 1.023    pero como es entero sol me queda 1
Tdecimal=(float)T1/1000;   aca si esta el 1.023

T2entero=(10*Tdecimal)-(10*Tentero);  seria  (10*1.023 )-(10*1)=0.23 obtengo el 0 al ser entero
 T2decimal=(float)(10*Tdecimal)-(10*Tentero);aca si esta almacenado 0.23

T3entero=(10*T2decimal)-(10*T2entero);  seria  (10*0.23 )-(10*0)=2.3 obtengo el 2 al ser entero
 T3decimal=(float)(10*T2decimal)-(10*T2entero);aca si esta almacenado 2.3

T4entero=(10*T3decimal)-(10*T3entero);  seria  (10*2.3 )-(10*2)=2.3 obtengo el 3 al ser entero
 

asi lo resovi.

pero como mencione mas arriba conoce alguien  si en ccs hay alguna instruccion que te separe la parte entera de la decimal.

gracias muchachos
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: RedPic en 27 de Agosto de 2006, 15:57:19
Para quedarte con la parte entera de un float solo debes calificar la operacion:

Código: C
  1. int16 i;
  2. float f1,f2,pd;
  3.  
  4. i = (int16) f1 / f2;
  5. pd= (float) (f1 / f2) - i;

Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: jfh900 en 27 de Agosto de 2006, 19:15:48
Esto es un pequeño truco para separar los dígitos en "C". Primero los convertimos a texto y lo guardamos en una cadena:

sprintf(cCadena,"%f",Variable);

y seguidamente tomamos cada valor y lo visualizamos con:

Digito = cCadena[Posicion];

Donde posición es la posición del dígito dentro de la cadena.

Si la tabla de visualización es en ASCCI, pues solamente hace falta aplicar el valor obtenido en Digito sobre la tabla y el resultado llevarlo al display.

Si por el contrario necesita el número lo convertimos de la siguiente forma:

Digito = cCadena[Posicion]-'0';

Un saludo
Título: MEDIDOR DE TEMPERATURA CON TERMOCUPLA K
Publicado por: quirogaareal en 22 de Septiembre de 2006, 08:24:54
Hola Muchachos :

Estoy haciendo un medidor de termocuplas con termoculas K como saben exiten tablas o ecuaciones que lineatilan aproximadamente los valores en las curvas de las termpciplas .
Estas ecuaciones para que no hayan tantas e innecesarias multiplicaciones se las coloca de otra forma ahí entonces ocupan menos memoria , algunos te sugieren que uses hasta el exponencial 4 pero no mide con precision asi que hay que poner la ecuación completa  y realmente mide con bastante precision .
Yo lo verifique con una termocupla tipo j y anduvo de 10, ………peeeeeero cuando me pase a la termocupla tipo K la ecuación es demasiado comleja y la empece a partir para que no me diera expresión too complex (dado que la necesito entera), en ese momento me salio out of room.  Estoy usando un 16f876 que tiene bastante memoria.

RESUMIENDO

¿  Como podria hacer para que entren esas expresiones en la capacidad de memoria que posee el pic?  :-/

CODIGO


#include <16f876.h>               //pic a utilizar
#device *=16
#device adc=10
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT,NOCPD, NOWRT,NODEBUG                  //No Debug mode for ICD
#use delay (clock=4000000)            //Fosc=4Mhz
#define SAA1064_DINAMICO            //trabajar en modo dinamico el saa1064
#define SAA1064_SCL PIN_C3            //definicion de pines...
#define SAA1064_SDA PIN_C4         //...de manejo del saa1064
#define use_portb_lcd TRUE
#include <vs_saa1064M.c>
#include <lcd.c> //libreria para lcd
#include<stdlib.h>
#include<math.h>

void nro_a_BCD();
void imprime_BCD();
void lineal();
void muestra_en_display();



int16 decimal, unidad, decena, centena,t1=0;//,t1entc,t1entd,t1entu,t1entdec;
float lm35,temperatura=0,linealizacion,V,T,v1,Vcompensado,exponente;//t1c,t1d,t1u,t1dec,
int32 temp;//esta variable se usa para la conversion y en main x10
//range: 0.000, 1372.000, The coefficients
//* are in units of °C and mV and are listed in the order of constant
//* term up to the highest order
//formula tipo: E = sum(i=0 to n) c_i t^i + a0 exp(a1 (t - a2)^2).

/*

//0ºa a 500 ºc - 0.000 to 20.644mv
//500ºc a 1372 ºc    20.644 to 54.886
//formula tipo:   t_90 = d_0 + d_1*E + d_2*E^2 + ...+ d_n*E^n,

*/

///PROGRAMA
void main(void)
{
float p1,p2,p3,p4,p5,p6,p7,p8,p9;
float c1=-0.176004136860E-01,c2= 0.389212049750E-01,c3=0.185587700320E-04,c4=-0.994575928740E-07,c5= 0.318409457190E-09,c6= -0.560728448890E-12,c7= 0.560750590590E-15,c8=-0.320207200030E-18,c9=0.971511471520E-22,c10=-0.121047212750E-25;
float ex0 =0.118597600000, ex1 =-0.118343200000E-03, ex2=0.126968600000E+03;
lcd_init( ); //inicializamos lcd
lcd_putc("  Medidor de \n  temperatura");
delay_ms(1000);
lcd_putc("\f");

setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);

while (true)

{

///////////////////////////////////////////////////////////////////////////////////////////
///                                 ///
///   Bits de control:    X C6 C5 C4 C3 C2 C1 C0               ///
///   ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨                        ///
///      C0=0   modo estatico->digitos 1 y 2               ///
///      C0=1   modo dinamico->digitos 1&3 y 2&4 alternativamente      ///
///      C1=0/1   digitos 1&3 no parpadep/parpadeo            ///
///      C2=0/1   digitos 2&4 no parpadep/parpadeo            ///
///      C3=1   test segmentos                     ///
///      C4=1   +3mA de salida                     ///
///      C5=1   +6mA de salida                     ///
///      C6=1   +12mA de salida                     ///
///////////////////////////////////////////////////////////////////////////////////////////



///////////////////////////////////////
///                                 ///
///   LM35 TEMPERATURA DE REFERENCIA///
///                                 ///
///////////////////////////////////////


saa1064_init(0x76);               //inicializo saa1064 conectado a Vcc D1
saa1064_conf(0b01000111);         //12mA & parpadeo & Dinamico
saa1064_putc(0X77,0X79,0X71,0x63);//(R,E,F,CENTIGRADO);   //T1 titilando
delay_ms(100);
saa1064_stop();

set_adc_channel(4);//seteo y lectura de lm35
delay_ms(50);
t1=read_adc();

temperatura=(float)t1*0.0048828125*100*0.3333333333333333333333333333;//t1 valor digital de la tension
T=temperatura;
temp=T*10;//multiplico el valor de temperatura pra que aparezca como entero
exponente=ex0*exp(ex1*((T-ex2)*(T-ex2)));
T =(float) Vcompensado * (a1+ Vcompensado* (a2 +Vcompensado*(a3+Vcompensado*(a4+Vcompensado*(a5+Vcompensado*(a6+Vcompensado*(a7+Vcompensado*((a8+Vcompensado*(a9))))))))));

V1=(float)(c1*T+exponente)+(c2*T*exp(2)+exponente);//+(c4*p3+exponente)+(c5*p4+exponente)+(c6* p5+exponente)+(c7*p6+exponente)+(c8*p7+exponente)+(c9*p8+exponente);
V1=(float)v1+(c3* T*exp(3) +exponente)+(c4*T*exp(4)+exponente);//+(c7*p6+exponente)+(c8*p7+exponente)+(c9*p8+exponente);
v1=(float)v1+(c5*T*exp(5)+exponente)+(c6*T*exp(6)+exponente);
v1=(float)v1+(c7*T*exp(7)+exponente)+(c8*T*exp(8)+exponente);
v1=(float)v1+(c9*T*exp(9)+exponente);
printf(lcd_putc,"V1 %9f",V1);
nro_a_BCD();
imprime_BCD();

/***********FIN LM35 TEMPERATURA DE REFERENCIA*************************/


///////////////////////////////////////
///                                 ///
///   1era termocupla               ///
///                                 ///
///////////////////////////////////////

saa1064_init(0x76);               //inicializo saa1064 conectado a Vcc D1
saa1064_conf(0b01000111);         //12mA & parpadeo & Dinamico
saa1064_putc(0x78,0x06,0x00,0x00);   //T1 titilando
delay_ms(500);
saa1064_stop();

set_adc_channel(0);//seteo y lectura de termocupla1
delay_ms(70);
t1=read_adc();


//V=(float)t1*0.0048828125*10;//es x 10 para simular 50 mv como 50 Voltios
V=(float)t1*0.0048828125*10;
Vcompensado=(float)V+V1;
lineal();
muestra_en_display();
nro_a_BCD();
imprime_BCD();


/***********FIN 1era termocupla*************************/



}
}
/*************************************************************/
///////////////////////////////////////
///                                 ///
///    FIN MAIN                     ///
///                                 ///
///////////////////////////////////////




///////////////////////////////////////////////////
///                                            ////
///FUNCION DESGLOSA EL VALOR Y CONVIERTE A BCD ///
///                                           ////
/////////////////////////////////////////////////
/*
/**************************************/

void nro_a_BCD()

{
char tab7segCONPUNTO[10]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xE7};//7seg hex 0-9
char         tab7seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67}; //7seg hex 0-9 con punto
int tempBCD[5];

itoa(temp,10, tempBCD);
// tempBCD[0]=decimal T
// tempBCD[1]=unidad T
// tempBCD[2]=decena T
// tempBCD[3]=centena T
if (temp<1000)//entra aca si el valor e menor a 100ºc
{
if (temp<100)//entra aca si el valor e menor a 10ºc
{
decimal=tab7seg[tempBCD[1]-48];//Aqui se resta 48 porque me imprime el valoer en ascii del caracter
unidad=tab7segCONPUNTO[tempBCD[0]-48];//por ej  0 es =48 1=49 y asi.....
decena=0x00;//mando la centena al saa1064
centena=0x00;//mando la centena al saa1064
}
else
{
decimal=tab7seg[tempBCD[2]-48];
unidad=tab7segCONPUNTO[tempBCD[1]-48];
decena=tab7seg[tempBCD[0]-48];//mando la centena al saa1064
centena=0x00;//mando la centena al saa1064
}
}
else//entra aca si el valor e ssuperior a 100ºc
{
decimal=tab7seg[tempBCD[3]-48];
unidad=tab7segCONPUNTO[tempBCD[2]-48];
decena=tab7seg[tempBCD[1]-48];//mando la centena al saa1064
centena=tab7seg[tempBCD[0]-48];//mando la centena al saa1064
}
}



///////////////////////////////////////////////////
///                                            ////
///FUNCION ENVIA EL NRO AL BCD                 ///
///                                           ////
/////////////////////////////////////////////////
void imprime_BCD()
{
saa1064_init(0x76);               //inicializo saa1064 conectado a Vcc D1
saa1064_conf(0b01000001);         //12mA & NO parpadeo & Dinamico
saa1064_putc(centena,decena,unidad,decimal);   //HOLA
delay_ms(4000);
saa1064_stop();
}
/***********FIN FUNCION ENVIA EL NRO AL BCD*********************************************/



///////////////////////////////////////////////////
///                                            ////
///FUNCION LINEALIZA EL VALOR DE TEMP Y VOLTAJE ///
///                                           ////
/////////////////////////////////////////////////

void lineal()
{
float a1=2.508355E+01  ,a2=7.860106E-02  ,a3=-2.503131E-01  ,a4=8.315270E-02  ,a5=-1.228034E-02  ,a6=9.804036E-04 ,a7=-4.413030E-05  ,a8=1.057734E-06  ,a9=-1.052755E-08 ;
//0ºa a 500 ºc - 0.000 to 20.644mv
float a11=-1.318058E+02 ,a12=4.830222E+01  ,a13=-1.646031E+00  ,a14=5.464731E-02  ,a15=-9.650715E-04  ,a16=8.802193E-06  ,a17=-3.110810E-08 ;
//500ºc a 1372 ºc    20.644 to 54.886
//formula tipo:   t_90 = d_0 + d_1*E + d_2*E^2 + ...+ d_n*E^n,

if(Vcompensado<20.6)
   {
   T =(float) Vcompensado * (a1+ Vcompensado* (a2 +Vcompensado*(a3+Vcompensado*(a4+Vcompensado*(a5+Vcompensado*(a6+Vcompensado*(a7+Vcompensado*((a8+Vcompensado*(a9))))))))));
   }

else
   {
   T =(float) Vcompensado * (a11+ Vcompensado* (a12 +Vcompensado*(a13+Vcompensado*(a14+Vcompensado*(a15+Vcompensado*(a16+Vcompensado*(a17)))))));
   }

temp=T*10;//multiplico el valor de temperatura pra que aparezca como entero

}


///////////////////////////////////////////////////
///                                            ////
///FUNCION muestra_en_display IMPRIME EN LCD   ///
///                                           ////
/////////////////////////////////////////////////

void muestra_en_display()
{
lcd_gotoxy(1,1);
printf(lcd_putc,"V %f",T);
lcd_gotoxy(1,2);
printf(lcd_putc,"mV %f",Vcompensado);
}
Título: MEDIDOR DE TEMPERATURA CON TERMOCUPLA K
Publicado por: quirogaareal en 22 de Septiembre de 2006, 08:26:23
Hola Muchachos :

Estoy haciendo un medidor de termocuplas con termoculas K como saben exiten tablas o ecuaciones que lineatilan aproximadamente los valores en las curvas de las termpciplas .
Estas ecuaciones para que no hayan tantas e innecesarias multiplicaciones se las coloca de otra forma ahí entonces ocupan menos memoria , algunos te sugieren que uses hasta el exponencial 4 pero no mide con precision asi que hay que poner la ecuación completa  y realmente mide con bastante precision .
Yo lo verifique con una termocupla tipo j y anduvo de 10, ………peeeeeero cuando me pase a la termocupla tipo K la ecuación es demasiado comleja y la empece a partir para que no me diera expresión too complex (dado que la necesito entera), en ese momento me salio out of room.  Estoy usando un 16f876 que tiene bastante memoria.

RESUMIENDO

¿  Como podria hacer para que entren esas expresiones en la capacidad de memoria que posee el pic?  :-/

CODIGO


#include <16f876.h>               //pic a utilizar
#device *=16
#device adc=10
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT,NOCPD, NOWRT,NODEBUG                  //No Debug mode for ICD
#use delay (clock=4000000)            //Fosc=4Mhz
#define SAA1064_DINAMICO            //trabajar en modo dinamico el saa1064
#define SAA1064_SCL PIN_C3            //definicion de pines...
#define SAA1064_SDA PIN_C4         //...de manejo del saa1064
#define use_portb_lcd TRUE
#include <vs_saa1064M.c>
#include <lcd.c> //libreria para lcd
#include<stdlib.h>
#include<math.h>

void nro_a_BCD();
void imprime_BCD();
void lineal();
void muestra_en_display();



int16 decimal, unidad, decena, centena,t1=0;//,t1entc,t1entd,t1entu,t1entdec;
float lm35,temperatura=0,linealizacion,V,T,v1,Vcompensado,exponente;//t1c,t1d,t1u,t1dec,
int32 temp;//esta variable se usa para la conversion y en main x10
//range: 0.000, 1372.000, The coefficients
//* are in units of °C and mV and are listed in the order of constant
//* term up to the highest order
//formula tipo: E = sum(i=0 to n) c_i t^i + a0 exp(a1 (t - a2)^2).

/*

//0ºa a 500 ºc - 0.000 to 20.644mv
//500ºc a 1372 ºc    20.644 to 54.886
//formula tipo:   t_90 = d_0 + d_1*E + d_2*E^2 + ...+ d_n*E^n,

*/

///PROGRAMA
void main(void)
{
float p1,p2,p3,p4,p5,p6,p7,p8,p9;
float c1=-0.176004136860E-01,c2= 0.389212049750E-01,c3=0.185587700320E-04,c4=-0.994575928740E-07,c5= 0.318409457190E-09,c6= -0.560728448890E-12,c7= 0.560750590590E-15,c8=-0.320207200030E-18,c9=0.971511471520E-22,c10=-0.121047212750E-25;
float ex0 =0.118597600000, ex1 =-0.118343200000E-03, ex2=0.126968600000E+03;
lcd_init( ); //inicializamos lcd
lcd_putc("  Medidor de \n  temperatura");
delay_ms(1000);
lcd_putc("\f");

setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);

while (true)

{

///////////////////////////////////////////////////////////////////////////////////////////
///                                 ///
///   Bits de control:    X C6 C5 C4 C3 C2 C1 C0               ///
///   ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨                        ///
///      C0=0   modo estatico->digitos 1 y 2               ///
///      C0=1   modo dinamico->digitos 1&3 y 2&4 alternativamente      ///
///      C1=0/1   digitos 1&3 no parpadep/parpadeo            ///
///      C2=0/1   digitos 2&4 no parpadep/parpadeo            ///
///      C3=1   test segmentos                     ///
///      C4=1   +3mA de salida                     ///
///      C5=1   +6mA de salida                     ///
///      C6=1   +12mA de salida                     ///
///////////////////////////////////////////////////////////////////////////////////////////



///////////////////////////////////////
///                                 ///
///   LM35 TEMPERATURA DE REFERENCIA///
///                                 ///
///////////////////////////////////////


saa1064_init(0x76);               //inicializo saa1064 conectado a Vcc D1
saa1064_conf(0b01000111);         //12mA & parpadeo & Dinamico
saa1064_putc(0X77,0X79,0X71,0x63);//(R,E,F,CENTIGRADO);   //T1 titilando
delay_ms(100);
saa1064_stop();

set_adc_channel(4);//seteo y lectura de lm35
delay_ms(50);
t1=read_adc();

temperatura=(float)t1*0.0048828125*100*0.3333333333333333333333333333;//t1 valor digital de la tension
T=temperatura;
temp=T*10;//multiplico el valor de temperatura pra que aparezca como entero
exponente=ex0*exp(ex1*((T-ex2)*(T-ex2)));
T =(float) Vcompensado * (a1+ Vcompensado* (a2 +Vcompensado*(a3+Vcompensado*(a4+Vcompensado*(a5+Vcompensado*(a6+Vcompensado*(a7+Vcompensado*((a8+Vcompensado*(a9))))))))));

V1=(float)(c1*T+exponente)+(c2*T*exp(2)+exponente);//+(c4*p3+exponente)+(c5*p4+exponente)+(c6* p5+exponente)+(c7*p6+exponente)+(c8*p7+exponente)+(c9*p8+exponente);
V1=(float)v1+(c3* T*exp(3) +exponente)+(c4*T*exp(4)+exponente);//+(c7*p6+exponente)+(c8*p7+exponente)+(c9*p8+exponente);
v1=(float)v1+(c5*T*exp(5)+exponente)+(c6*T*exp(6)+exponente);
v1=(float)v1+(c7*T*exp(7)+exponente)+(c8*T*exp(8)+exponente);
v1=(float)v1+(c9*T*exp(9)+exponente);
printf(lcd_putc,"V1 %9f",V1);
nro_a_BCD();
imprime_BCD();

/***********FIN LM35 TEMPERATURA DE REFERENCIA*************************/


///////////////////////////////////////
///                                 ///
///   1era termocupla               ///
///                                 ///
///////////////////////////////////////

saa1064_init(0x76);               //inicializo saa1064 conectado a Vcc D1
saa1064_conf(0b01000111);         //12mA & parpadeo & Dinamico
saa1064_putc(0x78,0x06,0x00,0x00);   //T1 titilando
delay_ms(500);
saa1064_stop();

set_adc_channel(0);//seteo y lectura de termocupla1
delay_ms(70);
t1=read_adc();


//V=(float)t1*0.0048828125*10;//es x 10 para simular 50 mv como 50 Voltios
V=(float)t1*0.0048828125*10;
Vcompensado=(float)V+V1;
lineal();
muestra_en_display();
nro_a_BCD();
imprime_BCD();


/***********FIN 1era termocupla*************************/



}
}
/*************************************************************/
///////////////////////////////////////
///                                 ///
///    FIN MAIN                     ///
///                                 ///
///////////////////////////////////////




///////////////////////////////////////////////////
///                                            ////
///FUNCION DESGLOSA EL VALOR Y CONVIERTE A BCD ///
///                                           ////
/////////////////////////////////////////////////
/*
/**************************************/

void nro_a_BCD()

{
char tab7segCONPUNTO[10]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xE7};//7seg hex 0-9
char         tab7seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67}; //7seg hex 0-9 con punto
int tempBCD[5];

itoa(temp,10, tempBCD);
// tempBCD[0]=decimal T
// tempBCD[1]=unidad T
// tempBCD[2]=decena T
// tempBCD[3]=centena T
if (temp<1000)//entra aca si el valor e menor a 100ºc
{
if (temp<100)//entra aca si el valor e menor a 10ºc
{
decimal=tab7seg[tempBCD[1]-48];//Aqui se resta 48 porque me imprime el valoer en ascii del caracter
unidad=tab7segCONPUNTO[tempBCD[0]-48];//por ej  0 es =48 1=49 y asi.....
decena=0x00;//mando la centena al saa1064
centena=0x00;//mando la centena al saa1064
}
else
{
decimal=tab7seg[tempBCD[2]-48];
unidad=tab7segCONPUNTO[tempBCD[1]-48];
decena=tab7seg[tempBCD[0]-48];//mando la centena al saa1064
centena=0x00;//mando la centena al saa1064
}
}
else//entra aca si el valor e ssuperior a 100ºc
{
decimal=tab7seg[tempBCD[3]-48];
unidad=tab7segCONPUNTO[tempBCD[2]-48];
decena=tab7seg[tempBCD[1]-48];//mando la centena al saa1064
centena=tab7seg[tempBCD[0]-48];//mando la centena al saa1064
}
}



///////////////////////////////////////////////////
///                                            ////
///FUNCION ENVIA EL NRO AL BCD                 ///
///                                           ////
/////////////////////////////////////////////////
void imprime_BCD()
{
saa1064_init(0x76);               //inicializo saa1064 conectado a Vcc D1
saa1064_conf(0b01000001);         //12mA & NO parpadeo & Dinamico
saa1064_putc(centena,decena,unidad,decimal);   //HOLA
delay_ms(4000);
saa1064_stop();
}
/***********FIN FUNCION ENVIA EL NRO AL BCD*********************************************/



///////////////////////////////////////////////////
///                                            ////
///FUNCION LINEALIZA EL VALOR DE TEMP Y VOLTAJE ///
///                                           ////
/////////////////////////////////////////////////

void lineal()
{
float a1=2.508355E+01  ,a2=7.860106E-02  ,a3=-2.503131E-01  ,a4=8.315270E-02  ,a5=-1.228034E-02  ,a6=9.804036E-04 ,a7=-4.413030E-05  ,a8=1.057734E-06  ,a9=-1.052755E-08 ;
//0ºa a 500 ºc - 0.000 to 20.644mv
float a11=-1.318058E+02 ,a12=4.830222E+01  ,a13=-1.646031E+00  ,a14=5.464731E-02  ,a15=-9.650715E-04  ,a16=8.802193E-06  ,a17=-3.110810E-08 ;
//500ºc a 1372 ºc    20.644 to 54.886
//formula tipo:   t_90 = d_0 + d_1*E + d_2*E^2 + ...+ d_n*E^n,

if(Vcompensado<20.6)
   {
   T =(float) Vcompensado * (a1+ Vcompensado* (a2 +Vcompensado*(a3+Vcompensado*(a4+Vcompensado*(a5+Vcompensado*(a6+Vcompensado*(a7+Vcompensado*((a8+Vcompensado*(a9))))))))));
   }

else
   {
   T =(float) Vcompensado * (a11+ Vcompensado* (a12 +Vcompensado*(a13+Vcompensado*(a14+Vcompensado*(a15+Vcompensado*(a16+Vcompensado*(a17)))))));
   }

temp=T*10;//multiplico el valor de temperatura pra que aparezca como entero

}


///////////////////////////////////////////////////
///                                            ////
///FUNCION muestra_en_display IMPRIME EN LCD   ///
///                                           ////
/////////////////////////////////////////////////

void muestra_en_display()
{
lcd_gotoxy(1,1);
printf(lcd_putc,"V %f",T);
lcd_gotoxy(1,2);
printf(lcd_putc,"mV %f",Vcompensado);
}
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: quirogaareal en 24 de Septiembre de 2006, 12:42:45
Realmente parece que hubiera muy poca gente en experiencia en este tema :? dada la escaces de respuestas .
Sin embargo me autorespondo 8) asi soy de utilidad para el foro que me enseña cosas nuevas dia a dia. :)



#include <16f876.h>               //pic a utilizar
#device *=16
#device adc=10
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT,NOCPD, NOWRT,NODEBUG                  //No Debug mode for ICD
#use delay (clock=4000000)            //Fosc=4Mhz
#define SAA1064_DINAMICO            //trabajar en modo dinamico el saa1064
#define SAA1064_SCL PIN_C3            //definicion de pines...
#define SAA1064_SDA PIN_C4         //...de manejo del saa1064
#define use_portb_lcd TRUE
#include <vs_saa1064M.c>
#include <lcd.c> //libreria para lcd
#include<stdlib.h>
#include<math.h>

void nro_a_BCD();
void imprime_BCD();
void lineal();
void muestra_en_display();



int16 decimal, unidad, decena, centena,t1=0;//,t1entc,t1entd,t1entu,t1entdec;
float lm35,temperatura=0,linealizacion,V,v1,Vcompensado,exponente;//t1c,t1d,t1u,t1dec,
float T;
int32 temp;//esta variable se usa para la conversion y en main x10
//range: 0.000, 1372.000, The coefficients
//* are in units of °C and mV and are listed in the order of constant
//* term up to the highest order
//formula tipo: E = sum(i=0 to n) c_i t^i + a0 exp(a1 (t - a2)^2).

/*

//0ºa a 500 ºc - 0.000 to 20.644mv
//500ºc a 1372 ºc    20.644 to 54.886
//formula tipo:   t_90 = d_0 + d_1*E + d_2*E^2 + ...+ d_n*E^n,

*/

///PROGRAMA
void main(void)
{
int i;
//float c1=-0.176004136860E-01,c2= 0.389212049750E-01,c3=0.185587700320E-04,c4=-0.994575928740E-07,c5= 0.318409457190E-09,c6= -0.560728448890E-12,c7= 0.560750590590E-15,c8=-0.320207200030E-18,c9=0.971511471520E-22,c10=-0.121047212750E-25;
float ex0 =0.118597600000, ex1 =-0.118343200000E-03, ex2=0.126968600000E+03;
float coef[10]={-0.176004136860E-01, 0.389212049750E-01,0.185587700320E-04,-0.994575928740E-07,0.318409457190E-09,-0.560728448890E-12,0.560750590590E-15,-0.320207200030E-18,0.971511471520E-22,-0.121047212750E-25};
lcd_init( ); //inicializamos lcd
lcd_putc("  Medidor de \n  temperatura");
delay_ms(1000);
lcd_putc("\f");

setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);

while (true)

{

///////////////////////////////////////////////////////////////////////////////////////////
///                                 ///
///   Bits de control:    X C6 C5 C4 C3 C2 C1 C0               ///
///   ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨                        ///
///      C0=0   modo estatico->digitos 1 y 2               ///
///      C0=1   modo dinamico->digitos 1&3 y 2&4 alternativamente      ///
///      C1=0/1   digitos 1&3 no parpadep/parpadeo            ///
///      C2=0/1   digitos 2&4 no parpadep/parpadeo            ///
///      C3=1   test segmentos                     ///
///      C4=1   +3mA de salida                     ///
///      C5=1   +6mA de salida                     ///
///      C6=1   +12mA de salida                     ///
///////////////////////////////////////////////////////////////////////////////////////////



///////////////////////////////////////
///                                 ///
///   LM35 TEMPERATURA DE REFERENCIA///
///                                 ///
///////////////////////////////////////


saa1064_init(0x76);               //inicializo saa1064 conectado a Vcc D1
saa1064_conf(0b01000111);         //12mA & parpadeo & Dinamico
saa1064_putc(0X77,0X79,0X71,0x63);//(R,E,F,CENTIGRADO);   //T1 titilando
delay_ms(100);
saa1064_stop();

set_adc_channel(4);//seteo y lectura de lm35
delay_ms(50);
t1=read_adc();

temperatura=(float)t1*0.0048828125*100*0.3333333333333333333333333333;//t1 valor digital de la tension
T=temperatura;
temp=T*10;//multiplico el valor de temperatura pra que aparezca como entero
exponente=ex0*exp(ex1*((T-ex2)*(T-ex2)));




v1=0;
for(i=0; i<10; i++)
{
 v1=(float)(v1+(coef*(pow(T,i))));
}
v1=(float)(v1+exponente);


lcd_putc("\f");
printf(lcd_putc,"V1 %f",V1);
delay_ms(100);
nro_a_BCD();
imprime_BCD();

/***********FIN LM35 TEMPERATURA DE REFERENCIA*************************/


///////////////////////////////////////
///                                 ///
///   1era termocupla               ///
///                                 ///
///////////////////////////////////////

saa1064_init(0x76);               //inicializo saa1064 conectado a Vcc D1
saa1064_conf(0b01000111);         //12mA & parpadeo & Dinamico
saa1064_putc(0x78,0x06,0x00,0x00);   //T1 titilando
delay_ms(100);
saa1064_stop();

set_adc_channel(0);//seteo y lectura de termocupla1
delay_ms(70);
t1=read_adc();

V=(float)t1*0.0048828125*10;//es x 10 para simular 50 mv como 50 Voltios
Vcompensado=(float)V+V1;
lineal();
muestra_en_display();
nro_a_BCD();
imprime_BCD();


/***********FIN 1era termocupla*************************/



}
}
/*************************************************************/
///////////////////////////////////////
///                                 ///
///    FIN MAIN                     ///
///                                 ///
///////////////////////////////////////




///////////////////////////////////////////////////
///                                            ////
///FUNCION DESGLOSA EL VALOR Y CONVIERTE A BCD ///
///                                           ////
/////////////////////////////////////////////////
/*
/**************************************/

void nro_a_BCD()

{
char tab7segCONPUNTO[10]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xE7};//7seg hex 0-9
char         tab7seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67}; //7seg hex 0-9 con punto
int tempBCD[5];

itoa(temp,10, tempBCD);
// tempBCD[0]=decimal T
// tempBCD[1]=unidad T
// tempBCD[2]=decena T
// tempBCD[3]=centena T

if (temp<10000)//entra aca si el valor e mayor a 1000ºc
{

if (temp<1000)//entra aca si el valor e menor a 100ºc
{
if (temp<100)//entra aca si el valor e menor a 10ºc
{
decimal=tab7seg[tempBCD[1]-48];//Aqui se resta 48 porque me imprime el valoer en ascii del caracter
unidad=tab7segCONPUNTO[tempBCD[0]-48];//por ej  0 es =48 1=49 y asi.....
decena=0x00;//mando la centena al saa1064
centena=0x00;//mando la centena al saa1064
}
else
{
decimal=tab7seg[tempBCD[2]-48];
unidad=tab7segCONPUNTO[tempBCD[1]-48];
decena=tab7seg[tempBCD[0]-48];//mando la centena al saa1064
centena=0x00;//mando la centena al saa1064
}
}
else//entra aca si el valor e ssuperior a 100ºc
{
decimal=tab7seg[tempBCD[3]-48];
unidad=tab7segCONPUNTO[tempBCD[2]-48];
decena=tab7seg[tempBCD[1]-48];//mando la centena al saa1064
centena=tab7seg[tempBCD[0]-48];//mando la centena al saa1064
}
}
else//entra aca si el valor e ssuperior a 100ºc
{
decimal=tab7seg[tempBCD[3]-48];
unidad=tab7seg[tempBCD[2]-48];
decena=tab7seg[tempBCD[1]-48];//mando la centena al saa1064
centena=tab7seg[tempBCD[0]-48];//mando la centena al saa1064
}

}



///////////////////////////////////////////////////
///                                            ////
///FUNCION ENVIA EL NRO AL BCD                 ///
///                                           ////
/////////////////////////////////////////////////
void imprime_BCD()
{
saa1064_init(0x76);               //inicializo saa1064 conectado a Vcc D1
saa1064_conf(0b01000001);         //12mA & NO parpadeo & Dinamico
saa1064_putc(centena,decena,unidad,decimal);   //HOLA
delay_ms(4000);
saa1064_stop();
}
/***********FIN FUNCION ENVIA EL NRO AL BCD*********************************************/



///////////////////////////////////////////////////
///                                            ////
///FUNCION LINEALIZA EL VALOR DE TEMP Y VOLTAJE ///
///                                           ////
/////////////////////////////////////////////////

void lineal()
{
float a1=2.508355E+01  ,a2=7.860106E-02  ,a3=-2.503131E-01  ,a4=8.315270E-02  ,a5=-1.228034E-02  ,a6=9.804036E-04 ,a7=-4.413030E-05  ,a8=1.057734E-06  ,a9=-1.052755E-08 ;
//0ºa a 500 ºc - 0.000 to 20.644mv
float a11=-1.318058E+02 ,a12=4.830222E+01  ,a13=-1.646031E+00  ,a14=5.464731E-02  ,a15=-9.650715E-04  ,a16=8.802193E-06  ,a17=-3.110810E-08 ;
//500ºc a 1372 ºc    20.644 to 54.886
//formula tipo:   t_90 = d_0 + d_1*E + d_2*E^2 + ...+ d_n*E^n,

if(Vcompensado<20.6)
   {
   T =(float) Vcompensado * (a1+ Vcompensado* (a2 +Vcompensado*(a3+Vcompensado*(a4+Vcompensado*(a5+Vcompensado*(a6+Vcompensado*(a7+Vcompensado*((a8+Vcompensado*(a9))))))))));
   }

else if(Vcompensado>20.6)
   {

  T=(float)(a11 + Vcompensado*(a12+Vcompensado*(a13+Vcompensado*(a14+Vcompensado*(a15+Vcompensado*(a16+Vcompensado*(a17)))))));
   
   }

temp=T*10;//multiplico el valor de temperatura para que aparezca como entero

}


///////////////////////////////////////////////////
///                                            ////
///FUNCION muestra_en_display IMPRIME EN LCD   ///
///                                           ////
/////////////////////////////////////////////////

void muestra_en_display()
{
lcd_putc("\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"V %f",T);
lcd_gotoxy(1,2);
printf(lcd_putc,"mVc%2.2fmVsc%f2.2.",Vcompensado,V);
}
 :mrgreen:
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: quirogaareal en 09 de Noviembre de 2006, 08:23:58
Hola muchachos aca les pongo la version final del programa medicion de temperaturas con termocupla .  el hardware funciona bien . en este caso es para el tipo de termocuplas tipo K .  Y aca se usaran para medir temperaturas de hornos de coccion de ceramicos.


///////////////////////////////////////////////////////////////////////////////////////////
///           TERMOCUPLA k - 4/11/06
///////////////////////////////////////////////////////////////////////
///   Bits de control:    X C6 C5 C4 C3 C2 C1 C0               ///
///   ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨                        ///
///      C0=0   modo estatico->digitos 1 y 2               ///
///      C0=1   modo dinamico->digitos 1&3 y 2&4 alternativamente      ///
///      C1=0/1   digitos 1&3 no parpadep/parpadeo            ///
///      C2=0/1   digitos 2&4 no parpadep/parpadeo            ///
///      C3=1   test segmentos                     ///
///      C4=1   +3mA de salida                     ///
///      C5=1   +6mA de salida                     ///
///      C6=1   +12mA de salida                     ///
///////////////////////////////////////////////////////////////////////////////////////////


#include <16f876.h>               //pic a utilizar
#device *=16
#device adc=10
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT,NOCPD, NOWRT,NODEBUG                  //No Debug mode for ICD
#use delay (clock=4000000)            //Fosc=4Mhz
#define SAA1064_DINAMICO            //trabajar en modo dinamico el saa1064
#define SAA1064_SCL PIN_C3            //definicion de pines...
#define SAA1064_SDA PIN_C4         //...de manejo del saa1064
#include <vs_saa1064M.c>
#include<stdlib.h>//PARA itoa(temp,10, tempBCD);
#include<math.h>//PARA EL POW

void lineal();
void nro_a_BCD();
int32 temp,a=0;//esta variable se usa para la conversion y en main x10 y la A es para la cantidad de adquisiciones
float Vcompensado,T;
main()
{
int i;
float ex0 =0.118597600000, ex1 =-0.118343200000E-03, ex2=0.126968600000E+03,exponente;
float coef[10]={-0.176004136860E-01, 0.389212049750E-01,0.185587700320E-04,-0.994575928740E-07,0.318409457190E-09,-0.560728448890E-12,0.560750590590E-15,-0.320207200030E-18,0.971511471520E-22,-0.121047212750E-25};
float temperatura=0,linealizacion,V,v1;//t1c,t1d,t1u,t1dec,
int16 t1=0,cont=0,contT1=0;


setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);


while (true)

{


///////////////////////////////////////
///                                 ///
///   LM35 TEMPERATURA DE REFERENCIA///
///                                 ///
///////////////////////////////////////


saa1064_init(0x76);               //inicializo saa1064 conectado a Vcc D1
saa1064_conf(0b01110111);         //21mA & prendidos los 4 display & Dinamico
//saa1064_putc(0X79,0X77,0Xc6,0x8e);//(R,E,F,CENTIGRADO);   //T1 titilando
saa1064_stop();
delay_ms(10);

set_adc_channel(1);//seteo y lectura de lm35
delay_ms(10);
t1=read_adc();
delay_ms(10);
temperatura=(float)t1*0.0048828125*100*0.22;//t1 valor digital de la tension esta calculado para que sea de 0 a 100º y 0.22 es la inversa de la ganancia del A.O.
T=temperatura;
temp=T*10;//multiplico el valor de temperatura pra que aparezca como entero

exponente=ex0*exp(ex1*((T-ex2)*(T-ex2)));

v1=0;
for(i=0; i<10; i++)
{
 v1=(float)(v1+(coef*(pow(T,i))));
}
v1=(float)(v1+exponente);
//nro_a_BCD();

///////////////////////////////////////
///                                 ///
///   1era termocupla               ///
///                                 ///
///////////////////////////////////////

saa1064_init(0x76);               //inicializo saa1064 conectado a Vcc D1
saa1064_conf(0b01110111);         //21mA & prendidos los 4 display & Dinamico
//saa1064_putc(0x06,0x78,0x00,0x00);   //T1 titilando
saa1064_stop();


delay_ms(10);
set_adc_channel(0);//seteo y lectura de termocupla1
delay_ms(10);
t1=read_adc();
delay_ms(10);

V=(float)t1*0.0048828125*10;//es x 10 para simular 50 mv como 50 Voltios
Vcompensado=(float)(V+V1);
lineal();

a=temp+a;

if(cont==8)
{

    temp=a/9;
    nro_a_BCD();
    cont=0;
    a=0;
}

else

{
cont=cont+1;
}








/***********FIN 1era termocupla*************************/
//*****************************************************************************
}
}
/*************************************************************/
//////////////////////////////////////////
///                  ///
///    FIN MAIN                    ///
///                                 ///
//////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////
///esta funcion solo toma el numero y lo separa en
///unidades decenas cententenas etc, para
///que pueda ser visualizado en un display de 4
///bcd's de 7 seg. Un detalle ya que por distraccion armamos parte del hard mal
///tuvimos que adaptar los vectores de valor por soft asi que presten atencion a este detalle
//////////////////////////////////////////////////////////////////////////////////////////////////////////


void nro_a_BCD()

{

char tab7segCONPUNTO[10]={0xFD,0x61,0xDB,0xF3,0x67,0xB7,0xBF,0xE1,0xFF,0xF7};// 7seg hex 0-9 con punto (3ER Y 4TO DISPLAY)
char         tab7seg[10]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6}; //7seg hex 0-9 7seg hex 0-9 con punto (3ER Y 4TO DISPLAY)
char tab7segCONPUNTOOTRO[10]={0xBF,0x86,0xDD,0xCF,0xE6,0xEB,0xFB,0x87,0xFF,0xEF};// 7seg hex 0-9 con punto (1ER Y 2TO DISPLAY)
char         tab7segOTRO[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //7seg hex 0-9 (1ER Y 2TO DISPLAY)
int tempBCD[5];
int16 decimal, unidad, decena, centena,t1=0;

itoa(temp,10, tempBCD);

if (temp<10000)//entra aca si el valor e mayor a 1000ºc
{
if (temp<1000)//entra aca si el valor e menor a 100ºc
{
if (temp<100)//entra aca si el valor e menor a 10ºc
{
decimal=tab7seg[tempBCD[1]-48];//Aqui se resta 48 porque me imprime el valoer en ascii del caracter
unidad=tab7segCONPUNTO[tempBCD[0]-48];//por ej  0 es =48 1=49 y asi.....
decena=0x00;//mando la centena al saa1064
centena=0x00;//mando la centena al saa1064
}
else
{
decimal=tab7seg[tempBCD[2]-48];
unidad=tab7segCONPUNTO[tempBCD[1]-48];
decena=tab7segOTRO[tempBCD[0]-48];//mando la centena al saa1064
centena=0x00;//mando la centena al saa1064
}
}
else//entra aca si el valor e ssuperior a 100ºc
{
decimal=tab7seg[tempBCD[3]-48];
unidad=tab7segCONPUNTO[tempBCD[2]-48];
decena=tab7segOTRO[tempBCD[1]-48];//mando la centena al saa1064
centena=tab7segOTRO[tempBCD[0]-48];//mando la centena al saa1064
}
}
else//entra aca si el valor e ssuperior a 100ºc
{
decimal=tab7seg[tempBCD[3]-48];
unidad=tab7seg[tempBCD[2]-48];
decena=tab7segOTRO[tempBCD[1]-48];//mando la centena al saa1064
centena=tab7segOTRO[tempBCD[0]-48];//mando la centena al saa1064
}



///////////////////////////////////////////////////
///                                            ////
///FUNCION IMPRIME EL NRO EN LOS 7SEG                 ///
///                                           ////
/////////////////////////////////////////////////

saa1064_init(0x76);               //inicializo saa1064 conectado a Vcc D1
saa1064_conf(0b01110111);         //21mA & prendidos los 4 display & Dinamico
saa1064_putc(decena,centena,decimal,unidad);
delay_ms(10);
saa1064_stop();

}



/***********FIN FUNCION ENVIA EL NRO AL BCD*********************************************/


///////////////////////////////////////////////////
///                                            ////
///FUNCION LINEALIZA EL VALOR DE TEMP Y VOLTAJE ///
///                                           ////
/////////////////////////////////////////////////

void lineal()
{
float a1=2.508355E+01  ,a2=7.860106E-02  ,a3=-2.503131E-01  ,a4=8.315270E-02  ,a5=-1.228034E-02  ,a6=9.804036E-04 ,a7=-4.413030E-05  ,a8=1.057734E-06  ,a9=-1.052755E-08 ;
//0ºa a 500 ºc - 0.000 to 20.644mv
float a11=-1.318058E+02 ,a12=4.830222E+01  ,a13=-1.646031E+00  ,a14=5.464731E-02  ,a15=-9.650715E-04  ,a16=8.802193E-06  ,a17=-3.110810E-08 ;
//500ºc a 1372 ºc    20.644 to 54.886
//formula tipo:   t_90 = d_0 + d_1*E + d_2*E^2 + ...+ d_n*E^n,

if(Vcompensado<20.6)
   {
   T =(float) Vcompensado * (a1+ Vcompensado* (a2 +Vcompensado*(a3+Vcompensado*(a4+Vcompensado*(a5+Vcompensado*(a6+Vcompensado*(a7+Vcompensado*((a8+Vcompensado*(a9))))))))));
   }

else if(Vcompensado>20.6)
   {

  T=(float)(a11 + Vcompensado*(a12+Vcompensado*(a13+Vcompensado*(a14+Vcompensado*(a15+Vcompensado*(a16+Vcompensado*(a17)))))));

   }

temp=T*10;//multiplico el valor de temperatura para que aparezca como entero

}


Espero que les sirva


Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: electronando en 01 de Diciembre de 2006, 00:11:24
no era mas sencillo linealizar esta termocupla lo q se es que la linelizacion es por tramos , popr ejemlo de 20 a 200 grados q tenga una pendiente y trabajas mas facil y si te pasas en otro rango de temperatura le aplicas la otra pendiente tambien estaba en un tiempo hacer esto q tu al final encontre en un libro de instrumenmtacion unas tablas para valores de termocuplas y me di con la sorpresa de la gran linealidad de la cuestion asi q tu codigo esta DE BUENA PINTA CON TODAS LAS DE LA LEY PERO EN CUANTO TIEMPO SE PROCESARA TANTA INFORMACION , NO ES UNA CRITICA SOLO UNA OPINION Y TE FELICITO PUES ESTE PROGRAMA PUEDE SERVIRTE EN CASO Q USES UN DSP O LA MISMA COMPU EXITOS. :-/
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: quirogaareal en 02 de Diciembre de 2006, 09:19:47
Hola Electronando:

Mira en realidad me llevo mucho tiempo encontrar informacion que me fuera de utilidad , hsta que al final encontre las tablas que vos mencionas y como alternativa las ecuaciones con las cuales linealizas la curva de las termocuplas y eso use, sino te he entedido mal eso es lo que me sugieres y eso es lo que esta hecho ...y no, no lo tu intencion es de mejorar asi que es bienvenida tu critica o sugerencia (como quieras llamarlo) todo sea por aprender mas y mejorar nuestros conocimientos.

Aca te adjunto de donde saque la ecuaciones ..Espero que te sea de utilidad 
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: luarken en 04 de Marzo de 2008, 02:27:10
esta muy interesante tu proyecto


en que realisaste la programacion>??? q programa

tienes los diagramas???

Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: quirogaareal en 04 de Marzo de 2008, 08:27:35
Hola :

Mira ese proyecto no fue continuado dado que la empresa no lo quizo asi , asi qeu no hay esquemas ni nada mas conrespecto a programacion de lo que esta publicado

Saludos
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: quirogaareal en 04 de Marzo de 2008, 08:50:17
Hola :
Perdon me confundi de proyecto , aca esta.


Saludos desde Cordoba Argentina
primera parte
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: quirogaareal en 04 de Marzo de 2008, 08:51:00
2da
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: quirogaareal en 04 de Marzo de 2008, 08:51:38
3era
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: quirogaareal en 04 de Marzo de 2008, 08:52:56
4ta

tambien busca en internet la nota de aplicacion an43 te va a ser de mucha ayuda
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: luarken en 05 de Marzo de 2008, 04:21:13
gracias quirogaareal

en que haces la complilacion de  los archivos c???

para que no fallen las librerias?? y el codigo de tu programa!!!!!!


en que parte estas conectando la termocopla?? tipo k

gracias
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: quirogaareal en 05 de Marzo de 2008, 09:02:02
Hola :

mira las librerias tendrias que descargarlas del foro

#include <vs_saa1064M.c>  /esta buscala en los ejemplitos de vzener
#include <lcd.c> //libreria para lcd/ esta usa el buscador del foro y cambiala por una llamada flex lcd / lee porque esta tienes que modificarla de acuerdo a tu circuito.
#include<stdlib.h>//PARA itoa(temp,10, tempBCD);//estas estan disponibles en el mismo ccs
#include<math.h>//PARA EL POW//estas estan disponibles en el mismo ccs


yo programo en lenguage c ( ccs 4.065)

http://www.todopic.com.ar/foros/index.php?topic=4728.msg37279#msg37279

ahi estan las librerias saa1064- de paso en esa pagina estan unos excelentes ejemplos que podrian serte de mucha utilidad
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: MGLSOFT en 05 de Marzo de 2008, 09:25:21
Hola.
podrias subir una imagen del esquema del circuito que utilizas para acondicionar la señal??
Estoy por utilizar una termocupla (al menos evaluando hacerlo) y quiero ver cuanto de complejo es hacerlo.

Gracias
 :mrgreen:
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: quirogaareal en 05 de Marzo de 2008, 12:40:24
Hola MGLSOFT:

mira descargate los 4 archivos que adjunte arriba , en la carpeta que dice temperatura esta el achivo  esta en Orcad. una salvedad abri el orcad 1ero y desde ahi el archivo de otro modo por lo menos a mi no me funciona.
En lo que es la raiz de lo que descomprimas esta un archivo de proteus que en su momento use para simular

Saludos desde Cordoba

Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: MGLSOFT en 05 de Marzo de 2008, 15:20:22
Muchas gracias!!
Lo veo y te comento como fue.
Es para una tipo J o K??
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: quirogaareal en 05 de Marzo de 2008, 16:24:50
Hola MGLSOFT:

tipo k, por la formula de linealizacion

Saludos
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: Javicho en 02 de Abril de 2008, 14:11:04
Hola quirogaareal:

Probé el circuito que adjuntaste pero obtengo un ruido de 40mV y a 60Hz en la salida del Opamp, mi pregunta es: asi como está el diagrama usaste el medidor de temperatura con termocupla? o usaste algún filtro adicional que no está en el diagrama? lo que sucede es que cuando toco con los dedos el cable de la termocupla se induce mas ruido. En los equipos comerciales al tocar el cable de la termocupla la lectura de la temperatura permanece invariable pero en este sistema veo en el osciloscopio que la señal se malogra y me imagino que la lectura en los displays tambien cambiará.

Has probado esto? o aplicas algún tipo de filtro digital por software?

Javicho.
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: quirogaareal en 02 de Abril de 2008, 19:32:33
Hola Javincho:

Mira la verdad no me acuerdo bien , creo que fue por soft ignorando ciertos valores y tomando los que siguen a partir de ese(me refiero a los que convierte el conversor),   despues tenia saltos en los valores de temperatura , a altas temperaturas , lo que hice fue tomar 6 adquisiciones y promediarlas , si mal no recuerdo en la hoja del op107 hay un circuito muy bueno para adaptar a termocupla , revisalo.


Saludos desde Cordoba
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: Javicho en 02 de Abril de 2008, 20:05:57
Gracias por responder quirogaareal, dices:

.. por soft ignorando ciertos valores y tomando los que siguen a partir de ese(me refiero a los que convierte el conversor) ..

te refieres a que tu rutina del conversor y luego de un procesamiento para obtener la temperatura te quedaba un registro como 1487 y tu temperatura a mostrar era "148ºC" algo asi?
si es asi pues me parece bien es lo que tambien pienso hacer.

Tambien dices ... despues tenia saltos en los valores de temperatura , a altas temperaturas ...

osea te refieres que "solo" a altas temperaturas los valores no correspondian a lo real o en el display te salia: 320º, 324º, 325º, 328º, 329º algo asi?

Probé el circuito del datasheet del OP177 y me sale mucho mas ruido que con tu circuito, lo que pasa es que los circuitos que ponen los fabricantes en sus datasheets son usando unas fuentes de alta precisión y estabilidad, pero en fin, mi duda es la siguiente ... quiero saber si el valor de temperatura que te salia en el display variaba y en cuantos grados? o era totalmente estable en cualquier rango?

El circuito final que usaste es el mismo que el del archivo adjunto que dejaste o llegaste a colocar algun filtro adicional?

Gracias nuevamente por responder y disculpa tantas interrogantes.

Javicho.
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: quirogaareal en 03 de Abril de 2008, 01:04:04
Mira en realidad  oscilaba en valores+- alrededor del valor real no es que se iba demasiado , para hacerlo ver mas estable era que tomaba varias temperaturas y y las promediaba, creo que oscilaba en +-3ºC , el circuito que use es ese que esta ahi sin modificaciones , si mal no recuerdo chaly29 uno de los grandes maestros de este foro publico un circioto qque trata sobre termocuplas y hace un tratamiento mucho mejor que el que hice yo ..con respecto al ruido , sinceramente no recuerdo  en que parte  de este foro estaba , pero se que esta , busca su nick y enviale un mensaje a ver si  te indica algo con respecto a este tema .
Lo que comentaste es acomo dices en la 1era parte ignore los valores que consideraba ruido y use el resto.

Saludos
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: Javicho en 03 de Abril de 2008, 02:56:50
Hola quirogaareal, gracias por los datos, si vi por la web los circuitos de chaly29, lo que pasa es que probé una bobina y anduvo muy bien, pero queria ver si habia ora forma de eliminar el ruido sin usar bobinas como lo usan los circuitos de chaly29. Le coloqué un capacitor de 10uF con respecto a tierra en el lado negativo de la termocupla y eso mejoró bastante.

La termocupla que tengo la estoy conectando cerca a una resistencia calentadora a 220VAC y como está cerca la termocupla mañana probaré si se mete el ruido o no al activar la resistencia, ojalá permanezca la lectura estable.

Si alguien mas conoce algún otro método de atenuar el ruido les agradeceré sus comentarios, o alguna forma lo mas simple posible en todo caso de fabricar la bobina, no se de cuantos mH o uH usa exactamente chaly29.

Javicho.
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: Javicho en 07 de Abril de 2008, 20:45:44
Saludos:

Tengo un problema con este tema, el asunto es el siguiente: armé el circuito del amigo quirogaareal pero antes para calibrar el offset puse las lineas donde va la termocupla T+ y T- a GND y ajusté el potenciómetro de offset de 20K hasta obtener 0v en la salida. Luego simulé con unas resistencias y un potenciómetro la termocupla dandole voltajes en los bornes T+ y T- a traves de dichas R's voltajes hasta un maximo de 30mV aprox y efectivamente la ganancia cumple con excelente precisión.

Una vez que verifiqué que tanto el offset y la ganancia están pefectamente calibrados coloqué la termocupla J y al calentarla los voltajes suben conforme aumenta la temperatura, hasta ahi todo bien. Estoy usando un equipo supuestamente calibrado al que le conecto otra termocupla J para verificar y los voltajes que mi circuito no se contrastan con los que dice el equipo.

Por ejemplo, cuando el equipo marca 108ºC, el voltaje de salida del amplificador muestra 548mV (ojo en mi caso mi ganancia es 178.5) entonces el voltaje en la termocupla es de 548mV/178.5 = 3.07mV que según tabla corresponde a 59ºC aprox, claro que a esto tengo que sumarle la temperatura de juntura que es la temperatura ambiente aproximadamente de 28ºC, entonces mi ckto registra 59º+28º = 87ºC, lo cual es un valor muy lejano de los 108ºC que marca el equipo. Mi pregunta es, donde esta el error?

Alguien ha verificado con algun equipo este circuito o algún otro? Me extraña mucho esto porque el circuito es tan simple que lo unico que hace es darle una ganancia G al voltaje que entra, no hace nada mas que eso pero aun asi no me cumple con lo que el equipo dice, a menos que este equipo no este bien calibrado. Espero sus comentarios.

Javicho.
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: quirogaareal en 07 de Abril de 2008, 21:58:33
Hola Javincho:

Mira es muy posible que el problema lo tengas en el soft fijate bien en la formula de linealizacion que tenes en el soft quiza ahi este el problema.

saludos dese Cordoba Argentina
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: Javicho en 08 de Abril de 2008, 02:12:57
Hola quirogaareal, no es el soft porque aun no he conectado ningún pic. Antes de hacer algun soft lo que hago primero es probar bien la parte hardware y una vez que esto funciona al 100% recien le hago el soft, porque si el circuito no trabaja como debe, peor será con soft.

Lo que estoy haciendo es algo muy simple, solo he conectado la termocupla al opamp de ganancia G=178.5 (puede ser G=100 o cualquier valor por ahi, por el momento eso no es importante), entonces a la salida tengo Vo = Vtermocupla * G y cuando lo comparo con un equipo que tiene conectado otra termocupla muy cerca a la que estoy usando en mi circuito resulta que Vo no se contrasta en absoluto con el del equipo de referencia.

Quisiera saber que equipo has tomado de referencia para cerciorarte que la temperatura que tu pic saca por el display es la correcta?

Javicho.
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: Javicho en 08 de Abril de 2008, 13:07:30
Me acabo de dar cuenta de un error garrafal, acabo de cambiar la termocupla de mi circuito a la del equipo y resulta que mientras que en la termocupla del equipo marcaba 215º al colocar la otra termocupla (la que venia usando) marca 168º algo por ahi, parece que me vendieron una tarmocupla tipo K y no J que es la que tengo que usar y la que usa el equuipo de comprobación.

Mas de 1 semana perdida, ni modo, voy a cambiarla y luego comentaré los resultados. Gracias a todos por escuchar. Bueno espero solo sea ese el problema, aunque luego viene el ruido, el soft, compensación, etc etc.

Javicho.
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: Javicho en 10 de Abril de 2008, 17:33:17
Bueno luego de cambiar la termocupla por una tipo J los voltajes van bien, ahora el problema está en el cálculo de la Temperatura, queria usar la siguiente fórmula:

T = a0 + a1*v + a2*v^2 + ... + an*v^n
Donde V está en uV y T en ºC y las constantes son:
a0=0
a1=1.978425E–2
a2=–2.001204E–7
a3=1.036969E–11
a4=–2.549687E–16
a5=3.585153E–21
a6=–5.344285E–26
a7=5.099890E–31

Esta fórmula funciona bien siempre que se usen por lo menos 6 términos porque si usan menos de 6 terminos la temperatura no corresponde y su diferencia es grande, y mi problema viene justamente aquí, yo programo solo en asembler y mis rutinas de operaciones máximo llego hasta 24bits pero estas constantes me complican los cálculos, alguien me podrá facilitar subrutinas matematicas como para operar estas constantes mas facilmente?

Me parece que en C si se pueden operar constantes de este tipo (por ejemplo 4.026E-13). Si no encuentro la forma tendré que vaciar toda la tabla al programa, no me queda otra. Esperaré alguna respuesta. Saludos.

Javicho.
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: KALLITOS en 13 de Noviembre de 2008, 13:33:14
Hola muchachos, estoy recopilando información para trabajar con termocuplas, especificamente tipo J, descargué los archivos de quirogaareal pero la version de proteus que tengo no puede abrir el circuito para evaluar su implementación, alguien lo podría colgar como imagen?

Javicho cuentame como te fue, usaste el circuito de quirogaareal o de Chaly; quedó el proyecto??

Adicionalmente logré destapar un medidor de temperatura que acepta muchos sensores (termocuplas tipo J, K, PT100), y observé que utiliza un convertidor de voltaje a frecuencia KA331 (http://www.fairchildsemi.com/ds/KA/KA331.pdf).

Alguien cuenta mas información?

saludos.
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: totuer en 19 de Enero de 2009, 10:31:29
Hola gente
Me agrego a la discucion yo construi un equipo usando el circuito basico de charly29 y anda de mil marillas, le agregue protecciones zener a las salidas del op07 para que no sobrepase los 5 volt al micro y lo complete con lo que dice la hoja de datos para poder modificar el cero y la ganancia con dos potes, anda diez puntos. Al tocar la termocupla no varia la temperatura en grados centigrados, en decimas de grado, solo algunas, pero no seria recomendable mostrar decimas porque si miras los libros de control y las paginas de los fabricantes no recomiendan presiciones de mas del 4-5 %, con lo cual solo calibrando muy bien cero y ganancia de forma iterativa y haciendo una curva empirica para correjir asimetrias del amplificador y termocupla hermanados lo lograrias, despues de todo ese laburo es evidente que si cambias la termocupla va a indicar cualquier cosa. En mi experiencia mucho mucho cuidado con las resistencias que uses, las de carbon cuando varia su temperatura se mueven y te camnbian toda la calibracion asi que a gastar y comprar al 1%.
Lei por ahi que tenia que ver con el uso en un horno de cerámica cuidado que para medir la temperatura del aire hay que protejerla a la termocupla sino terminas midiendo radiacion incidente mas aire que es lo común.
Espero no aburrir y aportar algo Saludos desde San Justo.
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: jorge48 en 26 de Enero de 2009, 15:04:39
Hola Totuer: Hace poco que encontré este foro y quería comentarte que estoy empezando con las PICs y tengo la intención de
hacer un medidor como el que estás haciendo vos. Leí el AN844 de Microchip donde se refiere a la lectura de tablas pivote para
las correcciones de los desvíos de las termocuplas. No tengo mucha idea de como programar esto en C (estoy usando el WIZ C), talvez vos sepas.
Tengo el Proteus como para simular los circuitos, ¿podrías enviarme el tuyo para probarlo?

                                                                                                                                   Muchas gracias, Jorge

                                                                                                                                   jtubio1@yahoo.com.ar
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: totuer en 03 de Febrero de 2009, 12:50:15
Hola Jorje48:
No leí esa An pero te cuento que yo no uso la ecuacoón característica de la termocupla sino que luego de amplificarla cosntruyo una própia, establesco un voltaje de offset (corriendo el cero del op07 con un puente divisor desbalanceado mas un pote) y fijo el sensor a una temperatura de calibración, ajusto la ganancia para llegar al valor que desee de tensión para esa temperatura y recalibro el cero y de nuevo la salida. con esos dos puntos calibrados y un termometro de precisicion de 300 celcius construyo una curva de respuesta (curva caracteística de termocupla mas amp de instrumentacion, con excel y linea de tendencia) que será en extremo parecida para todos lo pares termocupla AI.
Luego de todo eso para cambiar de termocupla o de AI deberas recalibrar solo cero y ganancia, porque la curva ha de ser muy paracida, ya que solo se ve modificada por la temp ambiente (deriva de AI) y el material de la termocupla.
Espero haber sido útil.
Intentaré leer la AN que me mencionas haber si hay algo mas sencillo que lo que yo hago, pero si bién es complicado es muy preciso.
Saludos desde San Justo
Totuer
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: jorge48 en 06 de Febrero de 2009, 15:33:37
Hola Totuer: Gracias por tu respuesta, pero para ser honesto, como estoy empezando con esto tipo autodidacta..... se me complicó.  :? Mi idea es ir practicando código e ir probando en el Proteus los circuitos. Ahora, para seguir complicándome la vida, se me ocurrió (no se como hacerlo), pedir la lectura máxima ó mínima de una medición.
A ver si me explico: tengo un termómetro con termocupla y leo la temperatura por la pantalla LCD. De repente oprimo un pulsador y la lectura se conmuta al valor máximo ó mínimo alcanzado.... Obviamente no se como programarlo ¿quién podrá ayudarme?


                                                                                                                              Muchas gracias, Jorge :?
Título: Re: AYUDA CON EL SAA1064 Y MEDIDOR DE TEMPERATURA CON TERMOCUPLA
Publicado por: totuer en 23 de Marzo de 2009, 12:13:24
Hola Jorge48
No es dificil solo debes medir, por ejemplo cada 1 segundo , almacenar en la eeprom y luego poner una sentencia condicional (IF) que diga que si la nueva temperatura medida el superior a la guardada gurde la nueva, lo podes hacer para maxima y minima con dos posisciones de la eeprom diferentes, encima por mas que apagues y desenchufes te quedan guardadas por maas de 40 años, Ja si tequedan ganas de mirar dentro de 40 años.
Disculpa la demora en la respuesta pero estaba de vacaiones 8) 8) Totuer