Sei sulla pagina 1di 3

D:\Usuarios\Administrador\Desktop\Lectura Analgica PIC 16f877a.

martes, 25 de octubre de 2016 03:05 p.m.

//********************************************************************************************
****************
//
Procedimiento LECTURA_ANALOGICA(). A travez de ls ecuacin de la Recta que pasa por
dos puntos
//
por el teorma de los mnimos cuadrados. Ambas
son vlidas.
//********************************************************************************************
****************
//
METODO I: "ECUACIN DE UNA RECTA QUE PASA POR DOS PUNTOS"
//
Los datos corresponden a puntos en el plano X,Y de las variables tensin y AD.
//
Por cada valor de tensin del eje "x" tendr un valor correspondiente en el eje "y"
(ADC)
//
//
Ejemplo: Partiendo del circuito propuesto en este ejemplo (se mont un LM35 sobre
lazo 4-20mA)
//
se toma como valores los extremos 4 mA en el extremo inferior y 20mA en el extremo
supeperior.
//
//
POR LO TANTO: para una temperatura X1 se toma el AD correcpondiente transformado en
tensin
//
a) Temp.= -33.4000C
//
T(V)
= 1.00195 V (valor obtenido de la lectura del AD del PIC con LAZO
4-20mA incluido)
//
//
b) Temp
= 126.0000C
//
T(V)
= 50000000 V (valor obtenido de la lectura del AD del PIC con LAZO
4-20mA incluido)
//
// Ahora tenemos dos puntos para poder calcular la ecuacin de la pendiente de la recta
//
de la forma => (TENSIN;TEMPERATURA)
//
p1( 1.00195,-33.4)
//
p2( 5.00000,126.0)
//
// La ecuacin de la recta que une dos puntos en un eje de coordenadas X,Y es:
//
//
y-y1=((y2-y1)/(x2-x1))*(x-x1)
//
//
y2-y1
//
m = ----- = ; donde m es la pendiente de la recta que une los dos p
//
x2-x1
//
//
y2-y1
126.0
- -33.4
159.4
//
m = ----- = ------------------- = --------=
39.86943635022073
//
x2-x1
5.00000 - 1.00195
3.99805
//
//
//
y - (-33.4) = (39.86943635022073) * (x - 1.00195)
//
y + 33.4 = 39.86943635022073x - 39.94718175110366
//
y = 39,8849712428107x - 39.94718175110366 - 33.4
//
y = 39,8849712428107x - 73.34718175110366
//
// METODO II: TEOREMA DE MINIMOS CUADRADOS
//
La siguiente tabla sirve para obtener el valor de la pendiente y la abscisa o sea y =
mx + b
// segn el mtodo del TEOREMA DE MINIMOS CUADRADOS.
//
//
TENSIN (1)
TEMPERATURA (2)
//
5,00000
126,0C
//
4,88758
121,6C
//
4,64320
111,9C
//
4,39882
102,1C
//
4,15444
92,3C
//
3,91006
82,5C
//
3,66568
72,8C
//
3,42131
63,1C
//
3,17693
53,4C
//
2,93255
43,5C
//
2,68817
33,8C
//
2,44379
24,1C
//
2,19941
14,3C
//
1,95503
4,6C
-1-

D:\Usuarios\Administrador\Desktop\Lectura Analgica PIC 16f877a.c

martes, 25 de octubre de 2016 03:05 p.m.

//
1,71065
-5,2C
//
1,46627
-14,9C
//
1,22189
-24,7C
//
1,00195
-33,4C
//
// Corte ord = -73.4175512196 ;
Pendient = 39.8944329868
// sigma = 0.035626 ;
Coef. correl. = -1.000000
// sigmacorte ordenadas = 0.022779 ;
sigmapendiente = 0.0070394
//
//
Nota: Los clculos fueron obtenidos desde la pgina
//
-->> http://soft.ingenieria-industrial.net/regresion_lineal.php
//
//********************************************************************************************
****************
void lecturaEntradasAnalogicas_AD()
{
//

if(destellarDato)
if(banderaLecturaAnalogicaSensoresADC && (OPC[0]==0||OPC[0]==10))
{
pinMonitorLecturaAnalogica = FALSE;
// #bit
pinMonitorLecturaAnalogica = PORTA.4
set_adc_channel(ILT);
// ILT: (I)ndice (L)ectura
(T)emperaturas
delay_us(10);

//
SENADC[M] = (signed int16)(((39.8944329868*((5.0*read_adc())/1023)) 73.4175512196)*10);
//

SENADC[M] = ((((5.0*read_adc())/1024)*100)*10);
lecturaTemperaturas[ILT] = ((5.0/1023)*read_adc())*1000;
TMP=lecturaTemperaturas[(ILT*1)+0]/10;
MAX=rangoDeTemperaturas[(ILT*3)+1]/ 1;
MIN=rangoDeTemperaturas[(ILT*3)+2]/ 1;
if(ILT==0)
{ for(i=0;i<=31;i++)
alertasTemperaturas[i]=0;
contadorAlarmaTemperatura=0;
banderaAlarmaTemperatura = FALSE;
}
if(rangoDeTemperaturas[(ILT*3)]==1)
{ visualizarTemperaturaSensorActivo[(IVT*2)+0]=ILT+1;
visualizarTemperaturaSensorActivo[(IVT*2)+1]=TMP;
IVT++;
if( MAX >= TMP && TMP >= MIN)
{ pausa
}
else
{ alertasTemperaturas[Z+0] = ILT+1;
alertasTemperaturas[Z+1] = TMP ;
alertasTemperaturas[Z+2] = MAX ;
alertasTemperaturas[Z+3] = MIN ;
if(TMP > MAX)
pausa
if(TMP < MIN)
pausa
contadorAlarmaTemperatura++;
Z=Z+4;
}
}

//
//
//
//

conviertirNumeroEnCaracter(lecturaTemperaturas[M],&LECTURA,MODIFICAR);
if(M==0)
LECTURA[3]=",";
-2-

D:\Usuarios\Administrador\Desktop\Lectura Analgica PIC 16f877a.c

//

printf("\r Sensor: %d

martes, 25 de octubre de 2016 03:05 p.m.

Temperatura = %s

", (m+1), &LECTURA);

if(ILT<7)
ILT++;
else
{ for(i=(IVT*2);i<=15;i++)
visualizarTemperaturaSensorActivo[i]=0;
cantidadSensorActivo=IVT;
cantidadAlarmaTemperatura = contadorAlarmaTemperatura;
ILT=0;
IVT=0;
Z=0;
//
//

printf("\r");
printf("\r-------------------------------");
}
if(!ILT)
{ pinMonitorLecturaAnalogica=TRUE;
banderaLecturaAnalogicaSensoresADC = FALSE;
if(contadorVisualizarAlarmaTemperatura >= pausaVisualizarAlarmaTemperatura)
{ contadorVisualizarAlarmaTemperatura=0;
pausaVisualizarAlarmaTemperatura
=3;
if(((cantidadAlarmaTemperatura-1) > indiceVectorAlarma) &&
((cantidadAlarmaTemperatura-1)!=0xFF))
indiceVectorAlarma++;
else
indiceVectorAlarma=0;
}
}
}

-3-

Potrebbero piacerti anche