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   39 / 39
(#) Bakman válasza dragon073 hozzászólására (») Dec 31, 2023 /
 
100 nF kondenzátor a táplábakra, nem az adatvezetékre. A nem használt vezetékeket ne kösd sehova, növeli a kapacitást az adatvonalon, ami káros (gyári ajánlás).

Ha ez sem segít, akkor kicsit másként kell kiépíteni. A szenzor oldalra egy kis mikrokontroller, amihez csak a DS18B20 csatlakozik. A kis kontroller kérdezgeti a hőmérő szenzort akkor, amikor a mester erre utasítja, majd RS485-ös adatvonalon (MAX483, MAX485) küldi vissza a mesternek az adatot. Az 5 V-os tápfeszültséget helyben kell előállítani, célszerű 10-12 V-ot felküldeni.

+12 V
GND
RS485 A+
RS485 A-

Négy ér elég a dologhoz.

szerk.:
Milyen hosszú kábelről van szó?
A hozzászólás módosítva: Dec 31, 2023
(#) Bakman válasza Bakman hozzászólására (») Dec 31, 2023 / 1
 
Ok, közben észrevettem a távolságot, első olvasatra elsiklottam felette.
(#) kiszebra hozzászólása Feb 2, 2024 /
 
Sziasztok!
A kínai vízhatlan tokok általában szoktak tartalmazni felhúzó ellenállást? Ùgy mérem, mintha benne lenne, de ez lehet magának az IC-nek is az ellenállása, azért kérdezem.

ds18b20.PNG
    
(#) Bakman válasza kiszebra hozzászólására (») Feb 2, 2024 / 1
 
Passzolok, de kideríthető. Adsz neki 5 V-ot, a jel és a GND közé kötsz egy 100 kΩ-os ellenállást. Ha a jel vezetéken közel nullát mérsz, akkor nincs felhúzó ellenállás benne. Ez utóbbi lenne egyébként is logikus. Egyrészt mindenki azt csinál a szenzorral, amit akar, másrészt öbbet is párhuzamosan lehet kötni és ha mindegyikben van felhúzó ellenállás, az eredő akár túl kicsi is lehet.
(#) kiszebra válasza Bakman hozzászólására (») Feb 7, 2024 /
 
Köszönöm a válszodat! Kicsit tovább gondolkodva, egyszerüen megmértem a helyén beforrasztva az ellenállássa együtt. Kb. annyit mértem, amennyi az általam beforraszott felhúzó, szóval gondonolom nincs a tokban ellenállás.
Azért merült fel a kérdés, mert azt produkálja, hogy néha fals értéket mér véletlenszerüen. 1-5 percenként egy hibás mérése van, teljesen random. Eddig 10kOhm volt a felhúzó, most csökkentettem 4,7kOhm-ra, de így is csinálja. Az interneten sok erre vonatkozó kérdés van, lehet, hogy a kínai IC-k a rosszak? Vagy már arra is gondoltam, hogy lehet a PIC-em idözítése nem elég pontos a belsö saját oszcillátorával és azért megy félre valami?
(#) Bakman válasza kiszebra hozzászólására (») Feb 7, 2024 /
 
A távolkeleti szenzorok tudnak ilyet, több ilyen hozzászólás született már ezen a fórumon is, ahol egyértelműen tettenérhető a gagyi IC. Ugyanazon áramkörben az eBay-es IC téveszt, míg a biztos forrásból származó nem.
Másrészt maga a kontroller is hibázhat, ezt oszcilloszkóppal és/vagy logikai analizátorral lehet kideríteni.
(#) Lamprologus válasza kiszebra hozzászólására (») Feb 7, 2024 /
 
Mekkora a PIC órajele, van-e megszakítás a programban... ?
Érdemes egy logikai analizátorral megnézni, hogy stimmelnek-e az időzítések.
(#) kiszebra válasza Lamprologus hozzászólására (») Feb 7, 2024 /
 
8MHz-en ketyeg a PIC és van megszakítás benne, egy két digites hétszegmeneses kijelzőt kapcsolgat. Lehet pont amiatt csúszik el a dolog?

Egyébként a szenzort kezelő rutint innen "loptam": Bővebben: Link
Ajánlom mindenkinek, aki PIC-re keres működő megoldást és nem zavarja ez a kis időnkénti félre mérés.
A hozzászólás módosítva: Feb 7, 2024
(#) dB_Thunder válasza kiszebra hozzászólására (») Feb 7, 2024 / 1
 
Amikor a DS-el kommunikálsz, kapcsold ki a megszakítást!
(#) kiszebra válasza dB_Thunder hozzászólására (») Feb 7, 2024 /
 
Ez egy nagyon jó ötlet! Kipróbálom, hogy minden DS-es függvény elején tiltom, végén újra engedem a megszakítást.
(#) Bakman válasza kiszebra hozzászólására (») Feb 7, 2024 /
 
Idézet:
„két digites hétszegmeneses kijelzőt kapcsolgat”
Ezt hogyan kell érteni? Mátrix meghajtás?
(#) asch válasza kiszebra hozzászólására (») Feb 8, 2024 / 1
 
Nézd meg, hogy a libed kezeli-e a CRC-t, és hogy nem ad-e hibajelzést, tehát a te kódod kezelné-e ha adna! C-ben ha mondjuk hibajelzést ad, de te azt ignorálod, akkor számolhatsz tovább hibás értékkel, pedig a lib tudta hogy az nem jó. Ha jön hibátlan CRC és mégis rossz a hőmérséklet érték, az rendkívül gyanús. Bár az is igaz, hogy a CRC csak egy bájtos, tehát időnként előfordulhat olyan is, hogy hibás kiolvasás mellett mégis jó a CRC! Ugye 1/256 valószínűséggel, ha teljesen véletlenszerű minden.

Ha a lib nem kezeli a CRC hibát, akkor érdemes megjavítani, vagy lecserélni egy olyanra, ami kezeli. (Én nem nézem meg a kódot most.)

A one wire protokoll időzítésében emlékeim szerint van olyan rész, aminél nagyon pontosan kell kis idő alatt reagálni (régebben megvalósítottam a protokollt, de az sem tökéletes, ezért nem ajánlgatom a kódomat), emiatt tényleg csak tiltott IRQ mellett tud helyesen működni szerintem is.
A hozzászólás módosítva: Feb 8, 2024
(#) kiszebra válasza Bakman hozzászólására (») Feb 8, 2024 /
 
Multiplexelve hajtok meg két szegmenst timerrel indított megszakítással. Nagyon örültem ennek a megoldásnak, itt olvastam a cikkek között. De sajnos úgy néz ki tényleg ez volt a hiba okozója. Minden függvény elején kikapcsolva a megszakítást tegnap nem volt hibás mérésem! Viszont így a kijelzöm meghajtását kell újragondolni, mert a DS18B20-nak többszáz ms-os várakozás is kellhet és addig áll a kijelzésem. Úgy látszik, van mit tanulni még egy ilyen egyszerü áramkör leprogramozásához is.

@asch
Ez a CRC kezeléses dolog nagyon jó ötlet. Pont ezen gondolkoztam, hogy hogyan lehet egy ilyen szenzort hülyebiztossá tenni és, láss csodát, ott van az adatlapban leírva. Köszönöm a tippet, utánaolvasok.
(#) Bakman válasza kiszebra hozzászólására (») Feb 8, 2024 / 1
 
Ha kellően rövid ideig tartod a megszakításban a programot és elég nagy az órajel frekvenciája, röhögve mennie kell. Két szegmens kb. gyerekjáték.
Idézet:
„többszáz ms-os várakozás is kellhet”

Mindössze át kell szervezni a programot. Kiadod a mérési parancsot a szenzornak és amíg az dolgozik (750 - 800 ms), mást csinálsz. Magyarán amíg a DS18B20 összelapátolja az eredményt, addig a program fut tovább, nem várakozik, és ezen idő alatt is mehet tovább a megszakítás.
(#) lalca válasza kiszebra hozzászólására (») Feb 8, 2024 / 1
 
Nem így működik a szenzor.
A mérés indítása és a kiolvasás 2 külön parancs. Közben azt csinálsz, amit akarsz.
Akár 1 perc múlva is kiolvashatod, a DS tárolja.
Megelőztél!
A hozzászólás módosítva: Feb 8, 2024
(#) Hp41C válasza kiszebra hozzászólására (») Feb 8, 2024 / 4
 
Szia!
-- Byte között engedélyezhető a megszakítás.
-- 1-Wire vonal kezelhető UART -tal is: AVR318 Dallas 1-Wire Protocol
(#) kiszebra válasza lalca hozzászólására (») Feb 8, 2024 /
 
Nagyon köszönöm mindkettőtöknek!
Átszervezem a programot és jelentkezek, mire jutottam.
(#) asch válasza Hp41C hozzászólására (») Feb 8, 2024 /
 
Wow, ezt az UART-os trükköt nem is ismertem, nagyon jó! Mindig tanul az ember valamit! Köszi!
(#) helektro válasza Hp41C hozzászólására (») Feb 8, 2024 / 1
 
Én így használom, UART-al. Az az egy nehézség van vele, hogy bitenként kell összerakni az adatot, viszont nem kell figyelni az időzítésre, azt az UART elintézi hardware-ből.
(#) glaci hozzászólása Aug 30, 2025 /
 

ds18b20

Sziasztok! Tudna valaki segíteni abban, hogy hogyan kell beállítani a DS18B20-t, hogy 9 bites konvertálással működjön?
(#) Bakman válasza glaci hozzászólására (») Aug 31, 2025 /
 
Ha a vonalon csak egy szenzor van:

Bus Reset
Skip ROM (0xCC)
write Scratchpad (0x4E)
send byte (tetszőleges)
send byte (tetszőleges)
send byte (0b00011111)
Várakozás (20 ms)
Bus Reset
Skip ROM (0xCC)
Copy Scratchpad (0x48)
Várakozás (2 ms)
(#) glaci válasza Bakman hozzászólására (») Aug 31, 2025 /
 
Szia! Köszönöm szépen! Most ez a szenzor, amíg át nem állítom a felbontást a szenzorban, mindig 9 bites felbontásban marad. Ugye?
(#) Bakman válasza glaci hozzászólására (») Aug 31, 2025 /
 
Igen. A Copy Scratchpad utasításra menti el a beállításokat a benne lévő EEPROM-ba. A tartalom automatikusan bekerül a "RAM"-ba bekapcsoláskor.

Apropó, elírtam. Az utolsó parancs után 20 ms szünetet kell tartani, mielőtt újra megszólítod a szenzort.
(#) glaci válasza Bakman hozzászólására (») Aug 31, 2025 /
 
Köszönöm szépen!
(#) glaci hozzászólása Szept 1, 2025 /
 

ds18b20

Sziasztok! Lehet buta a kérdésem, mégis felteszem.
A DS18B20 9 bites konverzió esetén is 16.0-val való osztás megadja a valós, 10-es számrendszerbeli értéket?
(#) Bakman válasza glaci hozzászólására (») Szept 1, 2025 /
 
Igen. Minegy, hogy mekkora felbontással dolgozik a szenzor, mindig 16 bites a mérés eredménye. A különbség annyi, hogy az alsó (LSB) 1, 2 vagy 3 bit nulla marad, felbontástól függően.
Következő: »»   39 / 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