Sida 1 av 1

Dela upp tal för att skicka till display (PIC och C)

Postat: 17 september 2010, 21:41:38
av *L.R*
Jag ska minska storleken på några av variablerna sedan, är på teststadiet

AD-värdet är 10bitar så den kräver int

Den första fungerar inte i ihop med PIC och xlcd-dispen.

medans alternativ två fungerar perfekt. Det som skiljer är divisionen /1024*100 alt /10.24

Vad är anledningen?

Kod: Markera allt

unsigned int invarde;
unsigned int 100tal;
unsigned int 10tal;
unsigned int 1tal;
unsigned int temporary;


invarde = ADresultat();


temporary = invarde/1024*100;          //skriver om invarde i % 

100tal = temporary/100;
10tal = (temporary -100tal*100)/10;
1tal = temporary - 100tal*100-10tal*10;
Här kommer den enda ändringen

Kod: Markera allt


temporary = invarde/10.24;          //skriver om invarde i % , här med endast en räkneoperation

100tal = temporary/100;
10tal = (temporary -100tal*100)/10;
1tal = temporary - 100tal*100-10tal*10;

som sagt, varför fungerar inte alt1, men alt2 gör?

Re: Dela upp tal för att skicka till display (PIC och C)

Postat: 17 september 2010, 21:47:27
av Swech
Det har säkert med ordningen som beräkninge utförs på

Invarde kan vara 0 - 1023
Om du tar 1023 / 1024 så är svaret alltid mindre än 1.
Det blir avrundat 0
så tar du 0 * 100 = 0

prova att skriv invarde * 100 /1024 så kan det kanske funkar bättre

Swech

Re: Dela upp tal för att skicka till display (PIC och C)

Postat: 17 september 2010, 21:47:49
av victor_passe
Du kan testa att skriva
temporary = (invarde*100)/1024;
Eller
temporary = (invarde*100)>>10;

Sedan kan du optimera resten en hel del.

Re: Dela upp tal för att skicka till display (PIC och C)

Postat: 17 september 2010, 21:52:09
av *L.R*
skriver jag invarde*100 går jag över vad jag klarar i en unsigned int. drygt 65000 mot över 100 000

Re: Dela upp tal för att skicka till display (PIC och C)

Postat: 17 september 2010, 21:53:33
av *L.R*
victor_passe skrev:Du kan testa att skriva
temporary = (invarde*100)/1024;
Eller
temporary = (invarde*100)>>10;

Sedan kan du optimera resten en hel del.
Jag är helt ny på detta, så tar tacksamt emot tips på optimering

Re: Dela upp tal för att skicka till display (PIC och C)

Postat: 17 september 2010, 21:55:16
av Swech
Ta då (invarde * 25) / 256

Swech

Re: Dela upp tal för att skicka till display (PIC och C)

Postat: 17 september 2010, 21:57:27
av victor_passe

Kod: Markera allt

100tal = temporary/100;
10tal = (temporary -100tal*100)/10;
1tal = temporary - 100tal*100-10tal*10;
->

Kod: Markera allt

100tal = temporary/100;
temporary %= 100;
10tal = temporary/10;
temporary %= 10;
1tal = temporary;