Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

MikroC problem sa prikazom

[es] :: Elektronika :: Mikrokontroleri :: MikroC problem sa prikazom

[ Pregleda: 2367 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

powersz

Član broj: 245622
Poruke: 64
*.dynamic.isp.telekom.rs.



+2 Profil

icon MikroC problem sa prikazom02.11.2014. u 19:49 - pre 98 meseci
Pozdrav, imam problem sa prikazom vrednosti.
0.5 prikazuje kao 5e-1 dok 2.8 prikazuje kako treba.
Kako resiti ovaj problem?

Sledi primer koda:

Code:

double vrednost1=0.5;
double vrednost2=2.8;

char prikaz1[15];
char prikaz2[15];

FloatToStr(vrednost1, prikaz1);
FloatToStr(vrednost2, prikaz2);

//stampam na lcd
      Lcd_Out(1, 1,prikaz1);
      Lcd_Out(2, 5, prikaz2);

 
Odgovor na temu

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 5017
*.dynamic.isp.telekom.rs.

Sajt: yu3ma.net


+495 Profil

icon Re: MikroC problem sa prikazom03.11.2014. u 14:34 - pre 98 meseci
Probaj ovako, dodaj "F" iza brojeva:

double vrednost1=0.5F;
double vrednost2=2.8F;


Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8369 Profil

icon Re: MikroC problem sa prikazom03.11.2014. u 15:09 - pre 98 meseci
"Problem" je očigledno u funkciji FloatToStr().
Ako imaš source prepravi je, a ako nemaš možeš da napišeš svoju verziju, trivijalno je.
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4493

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+523 Profil

icon Re: MikroC problem sa prikazom03.11.2014. u 19:45 - pre 98 meseci
Za MikroC funkcije nema source koda, kao ni za ostale Mikro kompajlere
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

powersz

Član broj: 245622
Poruke: 64
*.dynamic.isp.telekom.rs.



+2 Profil

icon Re: MikroC problem sa prikazom03.11.2014. u 20:35 - pre 98 meseci
Hvala na odgovorima.

@mikikg, probao sam ali prijavljuje gresku.

@Odin D. nisam uspeo da nadjem source. Zaista nemam ideju kako da napravim funkciju. Nasao sam nekoliko primera na internetu ali ni jedan ne radi.
Bio bih jako zahvalan da neko napise neki hint ili kod pa da probam.
......
na njihovom forumu pronasao sam sledeci kod ali ne radi kako treba..

Code:
unsigned long temp;

temp = (unsigned long)temp_res * 5 * 1000 / 1024;
 
txt[0] = temp / 1000 + '0';
txt[1] = '.';
txt[2] = (temp / 100) % 10 + '0';
txt[3] = (temp / 10) % 10 + '0';
txt[4] = temp % 10 + '0';
txt[5] = '\0';

Lcd_Out(2,1,txt);


[Ovu poruku je menjao powersz dana 03.11.2014. u 22:13 GMT+1]
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8369 Profil

icon Re: MikroC problem sa prikazom03.11.2014. u 22:34 - pre 98 meseci
A šta tačno ne radi kako treba? - broj na ekranu je netačan; ništa se ne prikazuje na ekranu; broj je tačan, ali nije u formi koja tebi odgovara...?
Ne možemo popravljati kod ako ne znamo šta je kvar.

Što se tiče da sam pišeš svoju verziju funkcije FloatToStr, imaš dva moguća puta:
1. rješavaš problem za opšti slučaj, pokrivaš sve moguće vrednosti varijable i svu moguću decimalne preciznosti u okviru platforme na kojoj radiš;
2. brojevi koje hoćeš da prikazuješ na ekranu su iz nekog užeg skupa, znaš max broj decimalnih mjesta prije i poslije decimalne tačke, i pišeš rješenje koje pokriva isključivo te potrebe.

S obzirom da se radi o mikrokontroleru, 2. slučaj je obično smisleniji, jer štediš procesorsko vreme i memoriju.
Znači, daj neke konkretne specifikacije, pa da sklepamo neku funkciju.
 
Odgovor na temu

powersz

Član broj: 245622
Poruke: 64
*.dynamic.isp.telekom.rs.



+2 Profil

icon Re: MikroC problem sa prikazom03.11.2014. u 22:52 - pre 98 meseci
Ispisuje tacan broj ali nije u formi koja mi odgovara.
Na primer broj 0.5 ispisuje kao 5e-1
sve brojeve vece od 1 ispisuje kako treba


upravo sam probao funkciju
Code:

sprintf(zaprikaz, "%f.2",broj);

i dobio sam poruku da nema dovoljno rom memorije.
meni je potrebno da double broj koji moze da bude 0.1 0.2 0.3 0.4 itd(povecava se za 0.1) da se tako i prikaze kada pretvorim u string.
Radi se o sekundama koje teoretski mogu da budu od 0.1 do 999.9

[Ovu poruku je menjao powersz dana 04.11.2014. u 01:12 GMT+1]
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8369 Profil

icon Re: MikroC problem sa prikazom04.11.2014. u 14:03 - pre 98 meseci
Probaj ovu funkciju:

Code:
void FloatToString2(float mynumber, char cifra[]) {

    int i;

    // pretvaranje broja u znakove
    cifra[0] = (long)mynumber / 100 + '0';
    cifra[1] = ((long)mynumber / 10) % 10 + '0';
    cifra[2] = (long)mynumber % 10 + '0';
    cifra[3] = '.';
    cifra[4] = ((long)(mynumber * 10)) % 10 + '0';
    cifra[5] = '\0';

    // ukloni vodece nule ako ih ima
    while ((cifra[0] == '0') && (cifra[1] != '.')) {
        for (i = 0; i < 5 ; i++)
            cifra[i] = cifra[i+1];
    }

    return;
}


Ovo bi trebalo da ti formatira broj onako kako ti hoćeš.
Međutim, moguće je da ćeš povremeno imati problem sa decimalom.
U zavisnosti od interne reprezentacije brojeva u tvom CPU-u, zbog konačne tačnosti,
on ne može da prikaže sve moguće brojeve, već samo one koji mu se poklapaju sa
njegovim minimalnim inkrementom.
Npr. broj 123.7 može biti zapisan kao 123.699997, jer je to najpribližnije što se može postići u
tipu float sa preciznošću od 6 decimala.
Ova funkcija će ti od toga napraviti 123.6 umjesto 123.7.
No, to sve zavisi odakle dobijaš te svoje brojeve i kako radi float i zaokruživanje na tvojoj platformi,
što znači da možda u tvom slučaju i nećeš imati problema.
Ali eto, ako budeš imao slične probleme da znaš od čega je, pa da onda možeš da popravljaš (zaokruživanjem).
 
Odgovor na temu

powersz

Član broj: 245622
Poruke: 64
*.dynamic.isp.telekom.rs.



+2 Profil

icon Re: MikroC problem sa prikazom04.11.2014. u 23:49 - pre 98 meseci
Ova funkcija radi bas ono sto treba. Hvala puno na pomoci :)
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: MikroC problem sa prikazom

[ Pregleda: 2367 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.