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

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
*L.R*
Inlägg: 61
Blev medlem: 30 mars 2008, 13:39:15
Ort: Norra sthlm

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

Inlägg 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?
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

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

Inlägg 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
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

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

Inlägg 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.
*L.R*
Inlägg: 61
Blev medlem: 30 mars 2008, 13:39:15
Ort: Norra sthlm

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

Inlägg av *L.R* »

skriver jag invarde*100 går jag över vad jag klarar i en unsigned int. drygt 65000 mot över 100 000
*L.R*
Inlägg: 61
Blev medlem: 30 mars 2008, 13:39:15
Ort: Norra sthlm

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

Inlägg 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
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

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

Inlägg av Swech »

Ta då (invarde * 25) / 256

Swech
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

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

Inlägg 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;
Skriv svar