Hallo,

ik ben een stappenmotor op een verdeelkop van een freesbank aan het monteren.
aantal stappen per omwenteling is 36000
ik gebruik een 16F877A

nu ben ik aan het rekenen met float variabelen, maar krijg niet dezelfde uitkomsten als met mijn calculator.

mijn vraag is, hoe naukeurig is een PIC eigenlijk en op hoeveel plaatsen achter de komma mag ik vanuit gaan.

bvd Gerard

De nauwkeurigheid hangt natuurlijk af van welke floating point library je gebruikt. Geen enkele PIC kan uit zichzelf in floating point rekenen. In welke taal programmeer je?

ik programeer in Proton Pic basic

Floating point bewerkingen uitvoeren met een PIC, ik ben er eigenlijk niet zot van. De libraries vragen enorm veel geheugen alsook de berekeningen zelf. Probeer eens uit te leggen wat je probeert te bereiken en misschien kunnen we een andere oplossing vinden ;)

een uitleg wat de bedoeling is

op de freesbank een verdeling maken om bv. een tandwiel te frezen.
met bv. 170 tanden
de berekening is dan 36000 / 170 = 211.7647059 volgens mijn calculator
met de pic krijg ik 211.764709
verschil is 0.0000031
en dat 170 keer is 0.000527
ik zie nu dat ik dat wel kan verwaarlozen

ik ben gewoon nieuwsgierig hoe nauwkeurig die dingen zijn.

groet Gerard

Er zit heel veel meer speling in een freesbank dan bovenstaande dus lijkt me prima.

Dus het verschil is 0,0000031 en daar ben je niet tevreden mee? :)

misschien moet ik volgende keer IETSJE langer nadenken voordat ik jullie met mijn escapades lastig ga vallen.
toch allemaal bedankt voor de reacties.

Gerard

Op 26 december 2009 13:55:54 schreef Kais:
verschil is 0.0000031

Floating Point Math
The compiler can perform 32 x 32 bit IEEE 754 'Compliant' Floating Point calculations.

Een byte voor het exponent en drie voor de mantisse

En dat betekent dus een nauwkeurigheid van ongeveer 1: 2^-24.

Vaak kan je door slim met getallen om te springen dat hele floating point gedoe achterwege laten.

Als je niet in hele stappen, maar in 1/100000e van een stapje, dan heb je dus 3.600.000.000 ministappen per omwenteling. Deel dat door 170, en je hebt 21176470, en als het goed is, is dat ongeveer 2 decimalen achter de comma nauwkeuriger dan wat je eerst had. Ik moet nu weg. Geen tijd om het voor je te controleren....

Wat ik ook vaak doe als ik ga rekenen met floating points. Dingen vermenigvuldigen met 10^x en dan na de berekening weer delen.
Ik had gehoord dat bepaalde PIC's beter zijn met floating points?
Genaamd dsPIC?

Als je gaat rekenen met floating points heeft het schalen met 10^zoveel heel weinig nut. Je verliest ongeveer een half bitje aan nauwkeurigheid. Wat DACHT je voor nut te hebben van het schalen met 10^x ?

DSP, digital signal processing, heeft vaak met floating point getallen van doen, als je hardware hebt die daarvoor geschikt is, heeft die vaak floating point in hardware, dus kan je vaak "ongestraft" met floating point getallen werken.
(de "straf" op een attiny 2313 is een library die mee moet die groter is dan wat er in het chippie past. )

Op 28 december 2009 11:36:20 schreef HermanW:
Ik had gehoord dat bepaalde PIC's beter zijn met floating points?
Genaamd dsPIC?

Deze hebben extra registers, shifters en snellere extra rekeninstrukties en dubbele data fetch.

Zie bijv de datasheet van de dsPIC30F1010. Zie ook DS70046 en DS70157.