Fórum témák

» Több friss téma
Fórum » DS18B20 hőmérő-szenzor
 
Témaindító: Korben, idő: Nov 16, 2005
Témakörök:
Lapozás: OK   2 / 39
(#) dpeti válasza maxpack hozzászólására (») Szept 9, 2007 /
 
hááát... így első blikkre:
a write byte ugyebár 1 byteot vár paraméterként...
te meg elküldesz neki 8 byteot...
darabold fel azt a 64 biites számot byteokra, és 8 sorban, 8 writebyteal küld el...

DS18B20.writeByte(28)
DS18B20.writeByte(34)
.
.
.
(#) dpeti válasza dpeti hozzászólására (») Szept 9, 2007 /
 
meg az a 44h nem tudom mi akar ott benne lenni a READ_Scratchpad előtti sorban...
(#) maxpack válasza dpeti hozzászólására (») Szept 9, 2007 /
 
sajnos ez igy nemjo... :no:

a 44h = writeByte(CONVERT_T)
(#) maxpack válasza maxpack hozzászólására (») Szept 9, 2007 /
 
müxik!
nemtom hogy csináltam, de megy!

asszem ez segitett:

repeat 8
DS18b20.writeByte(term.hex(byte[a++], 2))



Dejoooooo!

köszííííííííííííííí
(#) Korben hozzászólása Szept 9, 2007 /
 
Sziasztok!

Reset kell sőt 50usec-en belül ez a max!
(#) Korben hozzászólása Szept 9, 2007 /
 
A DS18B20-ra átalakított forrás érdekelne üdv
(#) zolizoli válasza maxpack hozzászólására (») Nov 28, 2007 /
 
Sziasztok!

Engem az érdekelne, hogy hogyan tudok MINUSZ [-] értéket mérni a DS18b20 -al?

  1. ...

  1. ow.writeByte(READ_SCRATCHPAD)

  1. temp2 := ow.readByte + ow.readByte << 8 ' read temperature

  1. temp2 := F.FDiv(F.FFloat(temp2), 16.0)


de ez 0 *C fok alatt 4094.758 -at ad vissza. valaki tudja, hogy mi lehet a baj?
(#) kobold válasza zolizoli hozzászólására (») Nov 28, 2007 /
 
Valószínűleg az, hogy a számábrázolás eltér a két oldalon. Nem tudom, milyen nyelv, ránézésre Parallax; nincs doksid róla, hogyan ábrázolja a lebegőpontos számokat? Mert ha rossz helyen keresi a tizedespontot a bináris értékben, vagy az előjelet, akkor nem fogja rendesen konvertálni.
DS18B20-nál 2 byte a hőmérséklet, az alsó négy bit a tizedes-érték, a felső 5 pedig az előjel.
(#) zolizoli válasza kobold hozzászólására (») Nov 28, 2007 /
 
Igen, Parallax.
sajna nincs doksi, de azért megpróbálok utánnanézni, csak nem valami jol megy az Englishhhh.
(#) kobold válasza zolizoli hozzászólására (») Nov 29, 2007 /
 
Nem semmi ez a Parallax, meg a Propeller... A neten keresgéltem, töltöttem le adatlapot, megnéztem benne a FLOAT definícióját, nem sok, de IEEE754 szabvány szerinti. Mint az Omron PLC-k itt mellettem, így rögtön ki is próbáltam, hogy a DS18B20 által 0 °C alatt adott értékeket hogyan jeleníti meg lebegőpontosban. Nos, nem jól... de hát a bitek sem a szabványnak megfelelő pozícióban vannak, így nem csoda.

Mivel asm-en kívül nem írok PIC-re, "lemodelleztem", hogyan jönne ki a jó érték. Megpróbálom leírni, hátha segít. Nem böngésztem végig a Parallax meg a Propeller teljes szintaktikáját, meg "Cam Thompson's Float32" könyvtárának leírását, ezért nem állítom, hogy nincs benne szintaktikai vagy egyéb hiba...

VAR
BYTE i
BYTE dummy1
BYTE temp1
BYTE temp2

OBJ
hofok : "FloatMath"
dummy2: "FloatMath"

hofok := 0.0
dummy1 := 0
dummy2 := 0.0
' tizedeseket tartalmazó alsó byte beolvas
temp1 := ow.readByte
' felső byte beolvas, a kettő eltolása után
' temp2-ben csak egész helyiértékek lesznek + előjel
temp2 := (temp1 >> 4) | (ow.readByte << 4)
' mellesleg ilyenkor kéne visszaküldeni neki egy RESET jelet,
' hogy lesz szíves abbahagyni a többi byte kiléptetését

' bejárjuk a kapott 8 bitet, helyiérték szerint növelve dummy1-et
REPEAT i FROM 0 TO 7
IF (temp2 & (1 << i)) THEN
dummy1 += 1 << i
' temp1<3:0> bitjeit lefordítjuk tizedesjegyekre
' negatív előjelet temp1<7> jelzi, ekkor a kettes komplemens
' visszaalakítása alapján az egészrészből kivonunk egyet,
' hozzáadjuk a tizedesjegyeket, majd kivonjuk belőle a pozitív
' érték lehetséges maximumát, jelen esetben 255.0-t, és kész
REPEAT i FROM 0 TO 3
IF (temp1 & (1 << i))
dummy2 += hofok.FDiv(1.0, hofok.FFloat(1 << (4 - i)))
' itt az említett előjel-ellenőrzés, konvertálás
IF (temp2 & 128) THEN
dummy1 -= 1
dummy2 += hofok.FFloat(dummy1)
dummy2 -= 255.0
ELSE
dummy2 += hofok.FFloat(dummy1)
hofok = dummy2



C-ben hiba nélkül megy, ha valakinek esetleg jó ez is, és van float támogatás:

BYTE temp1;
BYTE temp2;
BYTE dummy1;
float hofok = 0.0f;
float dummy2 = 0.0f;
int i;

/* beolvasás temp1 és temp2-be, megvalósítástól függően */

temp2 = (temp1 >> 4) | (temp2 << 4);
dummy1 = 0x00;
for (i = 0; i <= 7; i++) {
if (temp2 & (1 << i))
dummy1 += 1 << i;
}
for (i = 0; i <= 3; i++) {
if (temp1 & (1 << i))
dummy2 += (float)(1.0f / (float)(1 << (4 - i)));
}
if (temp2 & 0x80) {
dummy1 -= 1;
dummy2 += (float)dummy1;
dummy2 -= 255.0f;
}
else
dummy2 += (float)dummy1;
hofok = dummy2;>>>>>>>>>>>>>>>>>>
(#) kobold válasza kobold hozzászólására (») Nov 29, 2007 /
 
Kicsit böngészni kell, tabulátort nem tudtam beszúrni
(#) kobold válasza kobold hozzászólására (») Nov 29, 2007 /
 
... és hülye is vagyok már teljesen, így hajnalban.
Az első ciklus nem kell, a két beolvasott byte egymás felé léptetése után temp2-ben meg is van az egészek értéke. Csináltam egy bit-copy sorozatot feleslegesen.
(#) zolizoli válasza kobold hozzászólására (») Nov 30, 2007 /
 
helló!
totál rendes vagy, hogy utánnanéztél.
köszi szépen, igy most már oké lesz!
(#) tams hozzászólása Máj 11, 2008 /
 
Hello!
A DS digitális hőszenzorok nagyrésze 125 fokig mér.
Én az oldalon lévő termosztátot szeretném elkészíteni, csak szeretném tudni, hogy mit csinálnak 125 fok felett. Én olyan környezetbe tenném, ahol mghaladhatja a hőmérséklet ezt a határt. Mit várhatok akkor ha mondjuk beálítok egy jelzőLEDet mondjuk 0-120C ig kellene égnie, de 125 fok fölé is mehet a hőmérséklet?
(#) csonthulye hozzászólása Szept 20, 2008 /
 
Sziasztok!

A DS1820-as szenzor vezetékének hossza befolyásolhatja a meérését, mert nekem lb 1,5m -es vezetéken van és úgy csinál mintha kontakthibás lenne. Egyszer nem mér máskor meg és van amikor meg pontatlan adatot küld. Szóval a vezeték hossza befolyásolhatja? Egyébként nem árnyékolt vezetéket használtam.
(#) kobold válasza csonthulye hozzászólására (») Szept 20, 2008 /
 
A mérés pontosságát aligha (vagy legalábbis elhanyagolhatóan) befolyásolja szerintem, az adatátvitelt viszont annál inkább, ha valami zavar ül a vezetékre. Közvetlenül a szenzorhoz kellene tenni egy 100 nF-os kondit a tápra, illetve a parazita táplálást el kell felejteni, ha az van. Amennyiben ez nem segít, lehet próbálkozni az árnyékolt kábellel.
(#) csonthulye hozzászólása Szept 20, 2008 /
 
Hát a kondis megoldást nem próbáltam, de előszedtem egy olyan vezetéket ami 2 eres és árnyékolt. A szenzor a földjét az árnyékolásról kapja, azaz az árnyékolás a föld. Ez jó megoldás? Amúgy igy se megy De legalább nem az árnyékolással van a gond?
(#) csonthulye hozzászólása Szept 20, 2008 /
 
Na ezt magyarázza meg nekem valaki légyszi!!! Ha lcd háttérvilágitása megy nincs semmi gond a szenzorokkal, amint kikapcsolom az egyik szenzor elkezd hulyeségeket küldeni, vagy van amikor nem is megy. Egyébként erről van szó.
(#) vicsys válasza csonthulye hozzászólására (») Szept 20, 2008 /
 
Van egy olyan érzésem, hogy táp hibád van. Esetleg ligő-lógó vezeték az lcd-nél. Próbáld meg hidegíteni a szenzorok tápját, esetleg közvetlenül a stabic-hez kösd be.
(#) csonthulye válasza vicsys hozzászólására (») Szept 21, 2008 /
 
Köszi! Tényleg a tápnál volt a hiba.
(#) Thomm hozzászólása Aug 26, 2009 /
 
Sziasztok
Meg tudná mondani valaki hogy a program módositása nélkül felcserélhető a DS18s20 és a DS18b20? Mi a külömbség?
Köszönöm
(#) levy_k válasza Thomm hozzászólására (») Aug 26, 2009 /
 
Igen, felcserélhető. A különbség a tokozásban rejlik, az S kicsit nyújtottabb.
(#) petike válasza Thomm hozzászólására (») Aug 26, 2009 /
 
Szia!
Felcserélhető, de a DS18s20 csak 9 bit-es.
Ha a program a DS18b20 -at 9 bites módban használta, akkor nem kell módosítani.
(#) Thomm válasza levy_k hozzászólására (») Aug 26, 2009 /
 
Sziasztok
Köszönöm a választ, holnap kipróbálom.
(#) szekipepe hozzászólása Okt 6, 2009 /
 
Sziasztok,

Van egy USB <-> RS232 Compatible átalakítóm. Neten eléggé sok leírást találtam hogyan lehet sima sorosra portra rákötni a DS18S20-at, de USB-s soros átalakítóról nem találtam infót. Ezen a soros vonalon csak 4.8 V és 5 V között fesz van. Ami elvben elég a sensornak minden belenyúlás nélkül.

Kérdésem az lenne ha fogom és rákötöm két egyenirányítóval ( RX,TX <-> DQ ) a hőmérőt és az rts-re vagy dtr-re a Vdd és GNDre GNDt akkor működni fog, vagy biztonsági szemszögből ajánlotok valami passzív alkatrész? ( Nem szeretném az USB-met kinyírni és hosszú távra tervezem a használatot. )

Illetve találtam egy ilyen kapcsolási rajzot most:
http://elektroniikka.org/thermometer/images/ds9097e.gif

Köszi,
Pepe
(#) viktorka0011 hozzászólása Feb 9, 2010 /
 
Sziasztok!
DS1821+ szenzorral kapcsolatba lenne kérdésem.
én az adatlapból az böngésztem ki hogy:
egy kiolvasás igy nézhet ki
1.reset pulse
2.read temperature (AAH)
3.start convert T (EEH)
4.stop convert T (22h)

5.reset pulse
6.Read TH (A1h)
7.reset puls
8.Read TL (A2h)
De lehet hogy nagyon rosszul gondolom?!
(#) jym válasza viktorka0011 hozzászólására (») Feb 16, 2010 /
 
Üdv.

Nem.

1. RESET
2. MATCH_ROM vagy SKIP_ROM
3. START_CONVERSION
4. VÁRSZ (ha parazitában megy, akkor 2 sec-et)
5. RESET
6. MATCH_ROM vagy SKIP_ROM
7. READ_SCRATCHPAD
8. beolvasod a byte-okat, check CRC, stb.
9. GOTO 1

Imi.
(#) viktorka0011 válasza jym hozzászólására (») Feb 17, 2010 /
 
Köszönöm a válaszod,de nekem ez a folyamat úgy tűnik hogy a ds1820-ra vonatkozik.A kővetkezőre jutottam ami nálam működik:
Reset
start convert.
100 usec
stop convert.
reset
read temperature
És jön a 8 bites hőmérséklet.1 C-fokos pontossággal.
Amit még mindig nem értek hogy az adatlap azt írja,hogy a szenzor nagy felbontásra is képes.105: “High Resolution Temperature Measurement with Dallas Direct-to-Digital Temperature Sensors”.
De hogy?????
(#) szilva válasza viktorka0011 hozzászólására (») Feb 17, 2010 /
 
(DS1821) Úgy lehet nagyobb felbontást elérni, hogy kiolvasod a többi regiszterét is, nem csak a hőmérsékletet. A regiszterek között van egy olyan, ami megadja, hogy az adott hőmérsékletnél egy fokon belül hány számlálólépésre van szüksége a méréshez, egy másik meg megadja, hogy a mérésből még hány lépés lett volna, amikor megállt a mérés. A kettőből egy osztással lehet meghatározni a fokon belüli törtrészt. Én 0.1 fokra számoltam ez alapján vissza és teljesen jó lett.

Egyébként a folyamatot és a számolás pontos módját a "High-resolution Temperature Readings" fejezetben írja az adatlap is. Azt is írja, hogy folyamatos mérési módban nem használható, tehát egyszeri indított mérésekkel kell dolgozni ilyenkor.
(#) jym válasza viktorka0011 hozzászólására (») Feb 17, 2010 /
 
Üdv.

Sorry, benéztem, a DS1821+-t nem ismerem

Imi.
Következő: »»   2 / 39
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem