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 

merjenje temperature s 0.1°C natančno
Pojdi na stran Prejšnja  1, 2, 3  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Merilna tehnika in senzorji
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Sergej
Član
Član



Pridružen-a: Tor 29 Avg 2006 19:43
Prispevkov: 280
Aktiv.: 1.22

PrispevekObjavljeno: Pet Nov 03, 2006 5:27 pm    Naslov sporočila:   Odgovori s citatom

Sicer že nekaj let ne spremljam več to podričje. Zame je še vedno 99% tehnika, 99,9% laboratorij in 99,99% teorija. Dopuščam možnost, da je bil na tem področju narejen velik korak naprej. Vendar sem vseeno skeptičen glede digitalnega multimetra razreda 0,02 - že zaradi kontaktov.
Sicer mi digitalci niso bili nikoli všeč. Mogoče zato, ker sem za pol metra dolgim displejem vedno našel sliko osla.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
arksi
Član
Član



Pridružen-a: Sre 03 Sep 2008 10:19
Prispevkov: 748
Aktiv.: 3.65
Kraj: Dolenjska

PrispevekObjavljeno: Tor Mar 06, 2012 10:21 pm    Naslov sporočila:   Odgovori s citatom

".....Čez nekaj let....."

Imam senzor DS18B20, ki ima 12 bitno vzorčenje temperature. Rad bi prikazal na LCD desetinke stopije celzija. Izmerjeno vrednost temperature DS18B20 prikažem na LCD, vendar kaže kar neko temp. cca 20 stopinj premalo.

Sem gledal datasheet, ampak nekako ne "pokapiram" kako pravilno prikazati temperaturo. Pri DS18S20 senzorju sem, po primerih od Vilkota S., samo izmerjeno vrednost delil z 2 in že sem imel temperaturo na pol stopinje natančno.

Poizkusil sem množiti izmerjeno vrednost z 0.0625, ampak ne kaže prave temperature.

Vem, da DS18X20 odstopajo za pol stopinje ali še več, ampak pustimo zdaj to.

Torej: kako pravilno prikazati stopinje in desetinke celzija. No, ali pa vsaj polovičke stopinje Wink.

LP
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
MarkoM
Član
Član



Pridružen-a: Tor 12 Sep 2006 15:29
Prispevkov: 2825
Aktiv.: 12.34
Kraj: Lovrenc na P.

PrispevekObjavljeno: Sre Mar 07, 2012 12:13 am    Naslov sporočila:   Odgovori s citatom

Karkoli delaš s tem senzorjem, ko ne boš dobil natančnosti temp. na desetinko. Prikažeš na zaslonu pa lahko na poljubno število decimalk.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
arksi
Član
Član



Pridružen-a: Sre 03 Sep 2008 10:19
Prispevkov: 748
Aktiv.: 3.65
Kraj: Dolenjska

PrispevekObjavljeno: Sre Mar 07, 2012 6:56 am    Naslov sporočila:   Odgovori s citatom

@MarkoM, vem kako je z natančnostjo........in po kakšnem postopku prikažem na LCD temperaturo na decimalko natančno? Tega mi nisi povedal.

Sprašujem ravno to, kakšen je prostopek pri DS18B20, da iz senzorja prikažem temperaturo na desetinko stopinje? Postopek branja temperature iz DS18B20 ni isti kot pri DS18S20. Iz DS18S20 znam na LCD prikazati temperaturo.

LP
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
xfce
Član
Član



Pridružen-a: Čet 28 Jul 2011 8:06
Prispevkov: 521
Aktiv.: 3.07

PrispevekObjavljeno: Sre Mar 07, 2012 8:31 am    Naslov sporočila:   Odgovori s citatom

V pdfju so primeri pretvorbe.

recimo:

Citiram:
0000 0001 1001 0001 +25.0625


Sam sem naredil tako, verjetno je še elegantnejši način. Zadnje štiri mesta pomenijo decimalko. V tem primeru je 0001, kar je desetiško 1, to pomnožim s 625 in dobim 625.

Citiram:
0001 1001

Srednja štiri mesta je pa ravno signed char, kar je 25.

To se pravi 25 + (625 * 0.0001) = 25.0625

Ampak je sigurno še lažja varijanta. Možno je, da lahko kar v floating point porineš zadevo. Ne vem.
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.36

PrispevekObjavljeno: Sre Mar 07, 2012 8:33 am    Naslov sporočila:   Odgovori s citatom

Postopek branja je enak, le rezultat je malce drugače podan. Poglej sliko 2 in tabelo 1 v obeh datasheetih...
_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
dule26
Član
Član



Pridružen-a: Tor 28 Sep 2010 7:30
Prispevkov: 26
Aktiv.: 0.14
Kraj: Murska Sobota

PrispevekObjavljeno: Sre Mar 07, 2012 11:18 am    Naslov sporočila:   Odgovori s citatom

Jaz bi naredil po naslednjem postopku.
Iz senzorja dobiš dva podatka: LS BYTE in MS BYTE, razvidno iz slike 2.
Nato podatke pretvoriš v celo število in decimalno število:
Programska koda bi lahko izgledala takole:
unsigned int celo;
unsigned int decimalno;

celo = ((LS_BYTE&0xF0>>4)) | ((MS_BYTE&0x07) << 4);
decimalno = ((LS_BYTE&0x08)*5000) + ((LS_BYTE&0x04)*2500) + ((LS_BYTE&0x02)*1250) + ((LS_BYTE&0x01)*625);

Na LCD izpišeš najprej celo, izpišeš piko in nato še decimalno število.
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.36

PrispevekObjavljeno: Sre Mar 07, 2012 11:27 am    Naslov sporočila:   Odgovori s citatom

unsigned?
Temperatura je lahko tudi negativna...

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



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Sre Mar 07, 2012 12:12 pm    Naslov sporočila:   Odgovori s citatom

Ahh...
Komplicirate!
Integer vrednost senzorja pretvoriš v float in jo deliš s 16.
Primer:
Vrenost binarno 0000 0001 1001 0001 = 401 desetiško, ko jo deli s 16 dobiš 25.0625.
Lahko pa 401 pomnožiš z 10 nakar deliš z 16, zaokrožiš rezultat in dobiš 251 desetink celzija, vrednost izpišeš na zaslon in postaviš decimalno piko.

LP GJ


Nazadnje urejal/a GJ Sre Mar 07, 2012 12:14 pm; skupaj popravljeno 1 krat
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.36

PrispevekObjavljeno: Sre Mar 07, 2012 12:14 pm    Naslov sporočila:   Odgovori s citatom

float? resno?
Laughing Razz

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



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Sre Mar 07, 2012 12:18 pm    Naslov sporočila:   Odgovori s citatom

gumby je napisal/a:
float? resno?
Laughing Razz

Zakaj pa ne?
Matematika s plavajočo vejico ti recimo na PIC16xxx vzame manj kot 512 code wordov.

LP GJ
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.36

PrispevekObjavljeno: Sre Mar 07, 2012 12:38 pm    Naslov sporočila:   Odgovori s citatom

Spodnji 4 biti predstavljajo decimalni del temperature v 1/16 stopinj. To cifro lahko množiš z 100 in deliš z 16 (ki je v celoštevilčni aritmetiki shift za 4 bite) in imaš rezulzat v stotinkah. Celi del temperature je pa tudi samo shift za 4 bite...
Ti se kar igraj z float, če hočeš... nihče ti ne brani.

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



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Sre Mar 07, 2012 12:44 pm    Naslov sporočila:   Odgovori s citatom

Kompliciraš...
No, če nimaš knjižnice s plavajočo vejico ali pa, da ti je procesorski čas zelo pomemben potem narediš takole:
1)Preveriš predznak temperature, če je negativen si predznak zapomniš, da ga kasneje izpišeš nakar vrednost temperature negiraš.
2)Pretvoriš najvišjih 8 bitov (pravzaprav 7, zadnji je vedno 0) v decimalno število in ga izpišeš na LCD.
Pretvorbo lahko narediš z deljenjem z deset, nakar izpišeš rezultat in ostanek deljenja ali pa uporabiš tabelo, ki ti preslika binarno vrednost byta v desetiško.
3)Za zadnje štiri bite torej decimalno mesto, lahko zopet vzameš 16 byte-no tabelo.
0 = 0 (0/16)
1 = 0 (1/16)
2 = 1 (2/16)
3 = 2 (3/16)
4 = 3 (4/16)
5 = 3 (5/16)
...
14 = 9 (14/16)
15 = 9 (15/16)
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
dule26
Član
Član



Pridružen-a: Tor 28 Sep 2010 7:30
Prispevkov: 26
Aktiv.: 0.14
Kraj: Murska Sobota

PrispevekObjavljeno: Sre Mar 07, 2012 12:52 pm    Naslov sporočila:   Odgovori s citatom

Citiram:
unsigned?
Temperatura je lahko tudi negativna...


Vem da je temeperatura lahko tudi negativna, podal sem samo primer, lahko pa samo preveriš predznak v podatku MS_BYTE in naprej delaš z unsigned, pač malo logike, kjer vse pretvoriš.

Citiram:
To cifro lahko množiš z 100 in deliš z 16 (ki je v celoštevilčni aritmetiki shift za 4 bite) in imaš rezulzat v stotinkah.


Zakaj pa nebi množil samo z 16 in bi dobil enak rezultat.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Sre Mar 07, 2012 1:49 pm    Naslov sporočila:   Odgovori s citatom

dule26 je napisal/a:
Zakaj pa nebi množil samo z 16 in bi dobil enak rezultat.

Zato ker je 100 /16 = 6.25!

LP GJ
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 -> Merilna tehnika in senzorji Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3  Naslednja
Stran 2 od 3

 
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: 7 dni


Powered by phpBB © 2001, 2005 phpBB Group