logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak uzyskać poprawną resztę z dzielenia w WinAVR dla AtMega 128?

pan_kotek 01 Gru 2007 20:14 2235 3
REKLAMA
  • #1 4541303
    pan_kotek
    Poziom 20  
    Posty: 561
    Pomógł: 12
    Ocena: 115
    Witam
    Mam problem z wysłaniem na LCD wyniku z ADC w postaci np
    3.51 V
    1)Najpierw chciałem w wyłuskać (3) i wysłać na LCD
    2)wysłać na LCD znak "."
    3)wyłuskać resztę (51) i wysłać

    część programu odpowiedzialna za podział i zamianę wyniku na ASCII wygląda tak:

    Cytat:

    int voltintpart[];//= {'0','0','0','\0'};
    char voltfractpart[];//= {'0','0','0','\0'};
    char voltintfull[];//= {'0','0','0','\0'};
    int intpart = 1;
    int fractpart = 1;
    int ADCresult = 1;

    ADCresult = 0x3FE;// nasza liczba z ADC np 1022
    intpart = ADCresult/205;//dzielimy żeby uzyskać wynik 4
    fractpart = ADCresult%205;//reszta z dzielenia

    itoa(intpart, voltintpart, 10);//zamiana na ASCII
    itoa(fractpart, voltfractpart, 10);
    itoa(ADCresult, voltintfull, 10);

    Wszystko jest prawie OK
    Dzieląc 1022/205 hex 0x3FE/0xCD mam 4.
    nie otrzymuję tylko reszty z dzielenia 1022 na 205,powinno być 98 a wychodzi 202 hex 0xCA.

    pracuję na WinAVR i VMLab jako debuger i obrerwacja danych ,stanów portów,wyników,zmiennych itp

    Czy jest jakiś inny sposób uzyskania reszty z dzielenia
  • REKLAMA
  • #2 4541347
    HIOB
    Poziom 17  
    Posty: 222
    Pomógł: 23
    Ocena: 1
    Witam!

    ... ja też czasami siedzę zbyt długo nad jakimś programem :)

    ((4 * 205) + 202) = 1022 ... :)

    Pewnie ze zmęczenia :)

    Pozdrawiam!
  • REKLAMA
  • #3 4541461
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    HIOB napisał:
    ...Pewnie ze zmęczenia :)

    Ja bym powiedział , że raczej z ... pewnych braków ;)
    
    fractpart = ( (ADCresult % 205) * 100 / 205)
    


    Piotrek
REKLAMA