• Domingo 22 de Diciembre de 2024, 08:34

Autor Tema:  Como Realizar Esta Ecu. 1/x  (Leído 1760 veces)

lacoz

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Como Realizar Esta Ecu. 1/x
« en: Martes 13 de Julio de 2004, 04:47 »
0
Tengo que hacer 1/x donde x es un numero de 3 byte.
El problema es el siguiente:
   Tengo que convertir el periodo a frecuencia (1/x), donde x es el periodo en segundos para que me de en herz. X es un entero de 3 bytes en microsegundos (ej: 200) pero tendria que ser uno de punto flotante (ej: 0.0002) para que la ecuancion  1/0.0002 uSeg = 5000 herz.

No se me ocurre como hacerlo en asm para el pic 16f870.

Desde ya agradesco cualquier ayuda.

Setha

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Como Realizar Esta Ecu. 1/x
« Respuesta #1 en: Martes 13 de Julio de 2004, 19:01 »
0
La coma flotante en ensamblador es muy engorrosa de utilizar. Otra cosa es en lenguaje C.

En ensamblador yo sencillamente trabajo con enteros, realizando la operación 1000/Periodo y trabajo en kHz.

Por ejemplo para hallar la frecuencia correspondiente a 200 us, sería:

1000/200 = 5 kHz.

para valores muy grandes, divido por 1000 el período y trabajo en Hz. Por ejemplo para 200000 us (200 ms) sería 1000/200 = 5 Hz.

El programa se encarga de detectar los valores del Periodo para aplicar la fórmula correspondiente.

Setha.

oldkami

  • Miembro activo
  • **
  • Mensajes: 50
    • Ver Perfil
Re: Como Realizar Esta Ecu. 1/x
« Respuesta #2 en: Lunes 9 de Agosto de 2004, 23:03 »
0
puedes utilizar las "math Routines" de la pagina de microchip y copiar el codigo para realizar una division de un numero de 24 bits con uno de 16 bits (sin signo).

pero tendrias que convertir el numero de 3 bytes (200) a una palabra de 2 bytes almacenando el dato en hexadecimal. ej:

200 (3 bytes) -> 0x00C8 (HEX 2bytes)

generalmente el dato del periodo (T) se obtiene de  algún contador (TMR0 u otro), para obtener el dato de la frecuencia, estos contadores son de 8 o 16 bits, lo que permite hacer el calculo de la frecuencia con la formula:

F = 1/T

siendo T  es un valor entero  que varia entre 0 y 65535 (0xFFFF) donde cada unidad representa microsegundos (asumiendo un XTAL de 4Mhz y un preescaler  1:1) se puede "convertir" el calculo de frecuencia f=1/T de la siguiente forma:

F = 1/ (1e-6 Seg)* TMR0   es lo mismo que decir
F = 10 /(1e-5 Seg) *TMR0 y es lo mismo que decir
F = 1000000/TMR0

con los valores de ejemplo:

5000 = 1/(0.0002 Seg)  = 1000000 / 200uS

como 1 millon necesita al menos 20 bits para representarlo (0xF4240) se puede elegir alguna rutina de division de las "Math Routines" para colocar el numerador = 0xF4240 y el denominador = T (en microsegundos).

F= 0xF4240 / (T en uS)

Este metodo lo utilicé en un contador de Rpms y funciona bastante bien, yo elegi la rutina de division de 24bit/16bit sin signo, pero se puede elegir otra de acuerdo al mismo principio.