pan_kotek Poziom 17

Joined: 08 May 2004 Posts: 408
|
#1
01 Dec 2007 21:14 Jak podzielić wynik z ADC WinAVR i AtMega 128 |
|
|
|
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:
| Quote: |
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
|
|
EQU Poziom 8

Joined: 04 Mar 2006 Posts: 26
|
#4
03 Dec 2007 16:05 Re: Jak podzielić wynik z ADC WinAVR i AtMega 128 |
|
|
|
a mozna tez sprintfem wrzucic sfromatowany lancuch:
| Code: |
float adc;
unsigned char tmp[MAX];
adc = adc_result/1.0f;
sprintf(tmp,"%f2.2 [V]",adc); |
oczywiscie trzeba pamietac o:
| Code: |
| -Wl,-u,vfprintf -lprintf_flt -lm |
|
|