www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

"Floating point"

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
juref
Član
Član



Pridružen-a: Tor 15 Dec 2009 11:45
Prispevkov: 226
Aktiv.: 1.20
Kraj: Črnomelj

PrispevekObjavljeno: Ned Jan 22, 2012 1:24 pm    Naslov sporočila:  "Floating point" Odgovori s citatom

Pozdravljeni!

Imam težavo in sicer bi rad izpisal število z decimalno piko. Izdelujem si volt meter ter sem ga usposobil ampak števila povprečim ter delim med sabo. potem vsako število posebej izpišem. Rad bi malo večjo natančnost.

Najlepša hvala za odgovore ter prijeten dan!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
RUros
Član
Član



Pridružen-a: Čet 09 Mar 2006 22:26
Prispevkov: 1031
Aktiv.: 4.39

PrispevekObjavljeno: Ned Jan 22, 2012 1:50 pm    Naslov sporočila:   Odgovori s citatom

In v čem točneje je težava ? Če te prav razumem narediš več meritev, katerih rezultate shraniš in iz tega izračunaš povprečno številko. In te številke ti ne gre izpisati ? Na kakšen način pa izpisuješ ? Če računaš vse s floati potem lahko s printf enostavno izpišeš float mar ne ? Je pa res da je računanje s floati zahteven zalogaj za mic.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
snow
Član
Član



Pridružen-a: Tor 27 Dec 2005 14:02
Prispevkov: 341
Aktiv.: 1.44
Kraj: Ljubljana || Velenje

PrispevekObjavljeno: Ned Jan 22, 2012 2:10 pm    Naslov sporočila:   Odgovori s citatom

Lepo pusti zadeve v int, jih seštej, množi z 10/100/1000 ter deli s številom vzorcev. Po možnosti naj bo število vzorcev večkratnik števila 2, če gre za mikrokontroler brez hardwarskega deljenja. Pri izpisu pa na ustreznem mestu prikaži decimalno vejico.

Bolje pa bi bilo, da bi bolj natančno predstavil svoj problem - število vzorcev, AD vrednosti, kaj te vrednosti pomenijo, itd.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jan
Član
Član



Pridružen-a: Sob 10 Jun 2006 14:19
Prispevkov: 313
Aktiv.: 1.35
Kraj: Dolenjska

PrispevekObjavljeno: Ned Jan 22, 2012 6:57 pm    Naslov sporočila:   Odgovori s citatom

Če programiraš v C-ju z avr-gcc lahko uporabiš printf funkcijo in delaš kar z floating point števili, namesto s celimi.
Res pa je printf malo požrešna glede velikosti programa.

lp
Jan
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.41

PrispevekObjavljeno: Ned Jan 22, 2012 7:00 pm    Naslov sporočila:   Odgovori s citatom

Integer namesto float, shift namesto deljenja.
Drugače boš par k flasha porabil samo za izračun in izpis Razz

Je pa treba malo mislit zraven...

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
S53DZ
Član
Član



Pridružen-a: Čet 28 Apr 2011 9:27
Prispevkov: 951
Aktiv.: 5.52
Kraj: Ljubljana

PrispevekObjavljeno: Ned Jan 22, 2012 7:47 pm    Naslov sporočila:   Odgovori s citatom

Delaš z integer v resoluciji x10 ali x100 ... potem pa cifre ustrezno izpišeš levo in desno od decimalke.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3360
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Ned Jan 22, 2012 11:36 pm    Naslov sporočila:   Odgovori s citatom

Ne vem, s kakšnim orodjem programiraš. Vsako ima svojo rešitev za tvoj problem.
V Bascomu bi to bilo tako:
Če imaš recimo napetost v Voltih v integer variabli in sicer tako, da imaš za 3.5V v variabli integer 35, potem enostavno preneseš vsebino integer variable v single variablo in jo potem izpišeš:

Koda:
dim napetosti as integer
dim napetost as single

napetosti = 35                   ' primer vsebine
napetost = napetosti          ' prenost v single variaglo
napetost = napetost / 10
print  napetost

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
juref
Član
Član



Pridružen-a: Tor 15 Dec 2009 11:45
Prispevkov: 226
Aktiv.: 1.20
Kraj: Črnomelj

PrispevekObjavljeno: Pon Jan 23, 2012 7:58 am    Naslov sporočila:   Odgovori s citatom

hvala na primeru. Programiram v C-ju, se bom pa potrudil probat tudi bascom-u

vilko je napisal/a:
Ne vem, s kakšnim orodjem programiraš. Vsako ima svojo rešitev za tvoj problem.
V Bascomu bi to bilo tako:
Če imaš recimo napetost v Voltih v integer variabli in sicer tako, da imaš za 3.5V v variabli integer 35, potem enostavno preneseš vsebino integer variable v single variablo in jo potem izpišeš:

Koda:
dim napetosti as integer
dim napetost as single

napetosti = 35                   ' primer vsebine
napetost = napetosti          ' prenost v single variaglo
napetost = napetost / 10
print  napetost
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
juref
Član
Član



Pridružen-a: Tor 15 Dec 2009 11:45
Prispevkov: 226
Aktiv.: 1.20
Kraj: Črnomelj

PrispevekObjavljeno: Pon Jan 23, 2012 8:00 am    Naslov sporočila:   Odgovori s citatom

hvala za vse odgovore. Zadevo sem enkrat rešil tako:

Koda:
//napetost=res1*0.0048828125*1000;         //0,0048828125 sem dobil z Vin/1024

   
      st1 = trunc(res1*0.0048875855*10);
      st2 = trunc(res1*0.0048875855*100) -10*st1;
      st3 = trunc(res1*0.0048875855*1000) - 100*st1 - 10*st2;
      st4 = trunc(res1*0.0048875855*10000) - 1000*st1 - 100*st2 - 10*st3;
      
      LCDWriteStringXY(0,0,"V= ");
      LCDWriteStringXY(4,0,".");
      LCDWriteIntXY(2,0,st1,2);
      LCDWriteIntXY(5,0,st2,1);
      LCDWriteIntXY(6,0,st3,1);
      LCDWriteStringXY(7,0,"V");


vendar zadeva ni preveč natančna... Po moje zaradi zaokrožitve (trunc funkcije)
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Pon Jan 23, 2012 8:18 am    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
juref
Član
Član



Pridružen-a: Tor 15 Dec 2009 11:45
Prispevkov: 226
Aktiv.: 1.20
Kraj: Črnomelj

PrispevekObjavljeno: Pon Jan 23, 2012 8:40 am    Naslov sporočila:   Odgovori s citatom

Kroko je napisal/a:
Namesto množenja
Koda:
res1*0.0048875855

raje uporabi
Koda:
Vin * res1>>10


se opravičujem ampak ne razumem Sad Vi ste mislili da bi pomnožil vhodno napetost (5V) z rezultatom ADC ter nato vse to "zašiftal" 10 mest na levo ?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Pon Jan 23, 2012 8:51 am    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
juref
Član
Član



Pridružen-a: Tor 15 Dec 2009 11:45
Prispevkov: 226
Aktiv.: 1.20
Kraj: Črnomelj

PrispevekObjavljeno: Pon Jan 23, 2012 8:56 am    Naslov sporočila:   Odgovori s citatom

Kroko je napisal/a:
Deljenje z 1024 je isto kot shift za 10 v desno.


super! tega pa nisem vedel Applause hvala lepa!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 493 dni


Powered by phpBB © 2001, 2005 phpBB Group