Sida 1 av 1
CC8e-demo headerfiler problem
Postat: 7 april 2006, 11:54:19
av tobbetabbe
Jag vill kunna utföra beräkningar med både 16 och/eller 32-bitars med decimaler.denna verkar enbart kunna räkna int.please help me!
Postat: 7 april 2006, 12:03:02
av sodjan
Fixed eller float ?
För övrigt kan man enkelt *tänka* sig ett komma var som helst...
Eller, säg att man vill hantera "meter med två decimaler", så räkna
med "centimeter" istället så slipper man decimalerna...
Min första tanke när någon börjar tala om decimaler i en PIC, är
att detta är inte helt genomtänkt...
Men, tillbaka till frågan, vad menar du med "verkar enbart kunna räkna int" ?
Vad säger dokumentationen ?
förklarar mer
Postat: 7 april 2006, 12:12:21
av tobbetabbe
enligt beräkningar på papper vill jag ha en kvot (för att få en linjär graf) men upptäckte att det inte gick dividera eftersom resultatet blir tex 1.00345 osv noggrannheten vill jag ska vara ca med 3 decimaler men undrar om det går att lägga till decimalet senare i utskrift till ascii strängen eller
Postat: 7 april 2006, 12:20:28
av tobbetabbe
jag ska uppskatta linjärt pulstiden exakt (efter 50 intern klocka)då innan nästa puls har kommit vilken pulstid denna har om den har ökat (från pulsgivare somska samplas)
ex ett beräkningsgången på problem:
105/102=1,029411
1,029411-1=0,029411
102+0,029411*50=103,47055
hur kan man utföra beräkningen utan decimaler,tacksam för svar att slippa detta
Postat: 7 april 2006, 12:21:27
av sodjan
OK, det hela beror ju även mycket på vad din "kvot" representerar.
Och vad täljaren och nämnaren representerar...
Hur som helst, jag vet i princip inget om ditt verktyg vad det nu hette,
det var bara en liten kommentar kring representation av verkliga
värden i PIC kod i allmänhet...
pulstid
Postat: 7 april 2006, 12:25:48
av tobbetabbe
2 avlästa pulstider mellan flankerna men för att det ska stämmaöverens med den faktiska samplingstillfället så kan den inträffa mitt emellan två flanker.eftersom man inte vet värdet förrän nästa puls har inkommit har jag tänkt beräkna"uppskatta" värdet vad det skulle vara vid den tidpunkten
se exempel tidigare
Postat: 7 april 2006, 12:47:28
av sodjan
He, du han imellan med ett inlägg till...
> efter 50 intern klocka
Osäker på vad som avses med "50 intern klocka".
> vilken pulstid denna har
Inom vilket intervall ? min/max pulstid ? Med vilken upplösning ?
> 105/102=1,029411
Vad är "105" och "102" ??
> hur kan man utföra beräkningen utan decimaler...
T.ex genom att "skala upp" värderna :
105000/102 = 1029
1029-1000 = 29
102000 + 29x50 = 103450
Sätt ditt ett komma (om det behövs) : 103,450
Postat: 7 april 2006, 13:01:57
av tobbetabbe
bra ide att att skala upp! de tal jag gav som exempel är bara tagna ur luften.de verkliga värdena kan vara från 0 till 65535 (FFFF timerområde)
hoppas man då kan slänga in ett decimaltecken efteråt. pulstiden är då 48 MHz klocka 20nS*antal interna pulser tex 205 interna pulser som referens
Postat: 7 april 2006, 13:49:04
av bearing
Om du skriver funktionen som omvandlar talet till ASCII själv kan du slänga in decimaltecknet där det ska vara.
Postat: 7 april 2006, 17:05:28
av sodjan
> de verkliga värdena kan vara från 0 till 65535 (FFFF timerområde)
Och vad gör du om pulsen är > 65535 ?
Hur kommer det sig att maxvärdet på den externa pulsen råkar ligga
så exakt på timerns maxvärde ? Verkar lite osannolikt.
Postat: 7 april 2006, 18:16:27
av Henrik
CC8E kan räkna flyttal, antal bitar skiljer från vilken betalversion du använder. Så antagligen blir detta inlägg en stor parantes. CC8E's flyttalsarkitektur är inte samma som mplabs, kanske är det detta du haft problem med. Det finns ett makro någonstans (i manualen till CC8E om jag kommer ihåg rätt) som omvandlar sinsemellan, som man kan använda under debuggning i mplab.