Operaciones en ensamblador

Hola:

Me estoy haciendo para el coche, que es un poco antiguo, un ordenador de viaje, creo que los llaman así, con un PIC 16F877A y una pantalla LCD.

Todo empezó con un problema, que tuve, con los frenos delanteros, que no recuperaban bien y las pastillas no volvían bien a su posición de reposo, con lo que se calentaban demasiado, cambie las pastillas y alguna cosa mas, pero como no me fiaba demasiado, me hice unos sensores de temperatura, con unos LM35, y los coloque en cada pastilla, con lo que me voy enterando en cada instante de si la temperatura es normal o demasiado alta. Posteriormente me quede, sin avisar, sin batería, con lo que añadí al ordenador, otro circuito para controlar la tensión de batería. Como el PIC estaba desaprovechado, le puse también temperatura exterior y interior, y un medidor de combustible, en litros, para que no fuese el típico de aguja 1/2 deposito 1/4 etc. Y según se me van ocurriendo funcionalidaes, se las pienso ir incorporando.

Como ya tengo la medida en litros que llevo en el deposito y sabiendo lo que gasta el coche cada 100 Km, puedo calcular la autonomía en Km que tengo con el combustible que llevo, esto se puede afinar mas sabiendo el gasto instantáneo de combustible, pero de momento me conformo con saber este dato, a grosso modo. Y aquí tengo el problema con una simple regla de tres lo podría hallar, pero no se como haderlo con el PIC, al multiplicar los litros que tengo en el deposito por 100 ( para después dividirlo por el consumo medio), en algunos casos me paso de 255, que es lo máximo que puedo almacenar en un Byte, san google me ha informado que puedo hacer la multiplicación y almacenarla en dos Bytes, pero como se dividen esos dos Bytes por el Byte del consumo medio, que este siempre será un Byte, mi coche no gasta mas de 11 litros cada 100 en las peores condiciones, que se puede meter perfectamente en un Byte.

Lo estoy programando en ensamblador, no conozco, otra forma, supongo que en C, se podría hacer, pero no es el momento de aprender a programar en C. Alguien me echa una mano o me da alguna idea. Gracias.

Saludos

Reply to
Jeronimo
Loading thread data ...

"Jeronimo" escribió en el mensaje news:q004i.4196287$ snipped-for-privacy@telenews.teleline.es...

Suponiendo que la resolucion en la lectura del tanque es 1 litro, la resolucion en la autonomia sera casi 10Km, sumado a el error en la lectura del combustible mas el hecho que el consumo real sera solo 'parecido' al promedio, podemos presentar la lectura de la automia como dos digitos seguidos de un cero fijo.

La autonomia (en 'decenas' de Km) seria: Auton = Litros_tanque*10/Consumo

Se hace esta trampa, en lugar de multiplicar por 10 y dividir por el consumo, se hace: q = (10/consumo)*256

q = 10/11*256 = 233

Si por ejemplo, una medicion mas fina del consumo medio te da 10.8 litros @100Km la constante q redondeada al entero mas proximo es:

q = (10/10.8)*256 = 237

Y ahora que? Pues bien, si usas la rutina de libreria MUL8x8 y haces:

ByteH, ByteL = Litros_tanque * 233

entonces en ByteH tienes directamente el resultado (en decenas de Km) y si ByteL es mayor que 127 le sumas 1 a ByteH (el redondeo).

Si la resolucion en combustible fuera menor de un litro, el algoritmo es similar, es decir, transformar A = B/C en A' = B* (2^n /C) , y despues de multiplicar hacer un desplazamiento (o eliminar bytes), solo que para eso vas a tener que usar una multiplicacion de 16 bits.

Eduardo.

Reply to
Eduardo

Buenas, Primero disculpa por no responder a tu pregunta (... yo lo haría en C), pero... ¿como mides el consumo de combustible? Saludos.

Reply to
Fleming

Hola: Gracias por tu respuesta, Eduardo. Lo voy a solucionar como dices, mientras mis medios de obtener los datos sean tan rudimentarios, los resultados también lo serán, pero por el momento me valen. Solo una aclaración cuando te refieres a librería MUL8x8, supongo que vale cualquiera que me multiplique dos Bytes y el resultado me lo entregue en dos Bytes, ByteH, ¿siempre es así?.

En respuesta a Fleming, de momento la medida del consumo es el calculo en tantos litros por Km, creo que los ordenadores de los coches, lo hacen con hilo radiante, midiendo el volumen de aire aspirado y calculando el consumo instantáneo, mas adelante, intentare hacerlo así, pero de momento me vale de está forma, aunque sea un poco chapucero.

Saludos.

"Jeronimo" escribió en el mensaje news:q004i.4196287$ snipped-for-privacy@telenews.teleline.es...

Reply to
Jeronimo

vale

dos

Si.

Reply to
Eduardo

Si.

Reply to
Jeronimo

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.