PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
-
Erik_Lind
- Inlägg: 97
- Blev medlem: 2 maj 2005, 11:25:03
Inlägg
av Erik_Lind »
Jag skulle behöva göra följande uträkning utan att använda flyttal:
Jag misstänker att om man förstår sig på mattematik så borde det gå.
reg0 = 37758;
reg1 = 1;
svar = 3,2*(reg1+(reg0/65536))
--
Kod: Markera allt
#include <inttypes.h>
int main(void)
{
uint16_t reg0, reg1;
float result = 0;
reg0 = 37758;
reg1 = 1;
result = 3.2*((float)(reg1)+(float)(reg0)/65536.0);
printf("\r\n%6.5fns\r\n", result); // Svar 5.04365ns
}
-
karlstedt
- EF Sponsor
- Inlägg: 966
- Blev medlem: 14 oktober 2003, 16:55:23
- Ort: Lund
-
Kontakt:
Inlägg
av karlstedt »
fixed point är en användbar metod
-
Erik_Lind
- Inlägg: 97
- Blev medlem: 2 maj 2005, 11:25:03
Inlägg
av Erik_Lind »
Jo, jag tycker man hör det lite då och då.
Men jag har aldrig förstått mig på det där med fixed point.
-
sodjan
- EF Sponsor
- Inlägg: 43251
- Blev medlem: 10 maj 2005, 16:29:20
- Ort: Söderköping
Inlägg
av sodjan »
Att 65536 = 2^16 är ju en bra "hint" att det sannolikt
finns någon enkel "binär" metod att lösa det. I alla fall
divisionen (16 bit-shift till höger)
Men ofta ligger svaret på dessa frågor i förståelsen av var
datat kommer från. Någon slags givare eller tidmätning kanske ?
-
Erik_Lind
- Inlägg: 97
- Blev medlem: 2 maj 2005, 11:25:03
Inlägg
av Erik_Lind »
Jo, jag läser in en tid och får den i följande format:
----------
Register contents resulting value
Integer portion.Fractional portion
0x0001.ABCD 1.671096 (result of: 1+43981/65536)
-----------
där
reg0 = 0x0001
reg1 = 0xABCD
Sen har jag en klocka som ger mig en periodtid på 3.2us
Så talet ovan är alltså (1.671096 * 3,2 ) 5,3475ns
-
Icecap
- Inlägg: 26659
- Blev medlem: 10 januari 2005, 14:52:15
- Ort: Starup (Haderslev), Danmark
Inlägg
av Icecap »
3,2*(reg1+(reg0/65536)) = t i ns
Kan omskrivas till
(3200 * (reg1 * 65536 + reg0)) / 65536 = t i ps
3200 * 109517 = 3504544 / 65536 = 5347 ps = 5,347 ns
Bara heltal.....
-
Erik_Lind
- Inlägg: 97
- Blev medlem: 2 maj 2005, 11:25:03
Inlägg
av Erik_Lind »
Stort tack.
Det var precis så jag ville ha det.
/Erik