Consulta sobre MikroC y tablas de datos o "lookup tables"

#1
Un saludo para todos los foristas.

Tengo una pregunta, relacionada con MikroC, sobre como crear y asociar las tablas de datos.
como por ejemplo cuando estamos linearizando la respuesta de un termopar(termocouple) en donde, en algunos tramos de temperatura, la respuesta del termopar no es lineal y En dicho caso, se recurre a crear una tabla de valores, que sera asociada a la lectura recibida.
He tratado de buscar respuesta a esta pregunta en internet, en MikroElectronica, en los manuales de MikroC, en SanGoogle y SanYoutube, pero no he logrado obtener resultados.
Si alguien del foro conoce sobre este tema y me pudiera dar alguna explicación o ejemplo(s) para poder ver la manera de implementar este tipo de tablas o matrices (en MikroC) o me pudiera dirigir a algún sitio que aborde este tema o proponerme algún texto que me pueda clarificar sobre este sujeto, que me tiene hace un tiempo ya, pensando y haciendo pruebas pero no he logrado ningún resultado. :sick:
Desde ya muchas gracias a todos aquellos foristas por sus respuestas. :)
 
#2
¿De cuántos tramos estamos hablando? ¿El valor a procesar es entero o flotante? ¿Qué aspecto tiene la curva resultante? Es decir, ¿está compuesta de tramos rectos, o con curvas conocidas, o siempre se trata de valores discretos?
 
#3
Hola Joaquín;
Antes que nada recibe mis mas sinceros saludos. Me da mucho gusto tener noticias tuyas y espero que todo vaya por lo mejor para ti.
Bueno te comento, he estado pensando en una respuesta que me daba una PT100 la cual la variación es poca pero igual es perceptible en función de lo que se espera (adjunto una foto) de la respuesta que obtuve, ya de eso un buen de tiempo con un ensayo que realice. la otra foto es de la tabla de "R" de dicha PT100
PT100_Graph.jpg
Tabla de PT100
Table_PT100.jpg
Te adjunto tambien una tabla de los valores para los termocouples (en mi caso el tipo K, que es el que poseo)
Tabla de Termopar(Termocouple) que es el fichero que esta en PDF

Suponiendo que se tratara de enteros o de 2 cifras decimales maximo, Mi pregunta es cual seria el método o la dinámica de como hacer dicho proceso sin tener que pasar por un centenar de "Switch, Case0, Case1,...Case100". En donde al leer mi programa, YO quedaría mas enredado que espagueti en salsa de tomate a la napolitana.

Muchas gracias Joaquin por tu pronta respuesta.

Comentario:
Lei con mucho interes y segui todo el post, del capacimetro de un compañero forista al que tu ayudaste a depurar el código llevándolo a su mínima expresión. y me quedo bien claro que hay que evitar a toda costa y en la medida de lo posible los "float", para aligerar los programas.Una vez mas, felicitaciones y gracias.
 

Adjuntos

#4
Pero, si los puntos se ajustan a una recta -más o menos-, ya lo tienes resuelto, ¿no?

He tomado la primera página, y sale una curva entre -260 y 0 °C, a la que sigue una recta hasta los 240 °C:
Selección_082.png

La tabla de características del termopar es por si necesitas una precisión muy alta.

Primero debes elegir el tramo de temperaturas en los que sabes que va a funcionar el termopar. Luego miras a ver si la tabla de datos se puede reducir a tramos con funciones conocidas (fórmulas de regresiones lineales o polinominales.

Entonces puedes construir el switch/case según los tramos encontrados.

Si no... pues no te queda más remedio que meter toda la tabla con todos los datos en el programa, indexados por la temperatura y la columna que creo que marca el primer decimal de grado. Una tabla de dos dimensiones, entonces.
 
#5
Hola Joaquín.
En efecto para este ejemplo los valores en ese tramo son bastantes lineales y de cierta manera se puede llegar a un compromiso bastante aceptable.
Mi duda o consulta es como se hace para leer o manipular los datos que se encuentran en una tabla de valores.
Si tuvieses algún ejemplo(una parte de algún código comentado) o me pudieses referenciar a algún lugar para poder aprender a como crear, asociar y manipular dichas tablas.
Espero me disculpes pero mi fuerte no es tanto la programación, pero voy aprendiendo a medida que las interrogantes o problemas me surgen.
Muchas gracias por tu respuesta
 
#6
Código:
float tabla[2][10] = {
    { -6.42, -6.40, -6.34, -6.28, -6.20, -6.10, -5.81, -5.67, -5.22, -4.80 },
    { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 }
};

// Acceso a un elemento: recordar que los índices están basados en 0

float valor = tabla[0][1];          // valor almacenará el valor -6.40
 
#7
Muchas gracias Joaquín por tus explicaciones, Ejemplo mas claro que eso imposible, he logrado conseguir un par de documentos mas, y creo que lograre disipar mis dudas. que tengas un buen fin de semana.
 

Temas similares


Arriba