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   3 / 39
(#) gustaw hozzászólása Feb 18, 2010 /
 
Sziasztok!

MikroC-ben brékelek ezekkel a DS18 hőmérőkkel, de egy DS1820-ason kívül mást nem bírtam életre kelteni. DS18B20-asom lenne egy pár, de így nem tudom őket használni. A program a gyári MikroC minta, tehát annak jónak kellene lennie, mégis a hőmérés nem megy és állandó 85C-ot mutat. Hiába turkáltam a különböző C-s fórumokat, nem jutottam dűlőre. Ha kiveszem a szenzort, mutatja a program szerint beállított felbontás értékét.
Feldobom mellékletben a .c forrást, hátha rájöttök, hol van elkenve a lekvár.
Köszi.

showtemp.c
    
(#) spetihun válasza gustaw hozzászólására (») Feb 18, 2010 /
 
olvass vissza kicsit ebben a topikban Link
(#) jym válasza gustaw hozzászólására (») Feb 18, 2010 /
 
Üdv.

"állandó 85C-ot mutat"

Ez lehet a probléma forrása

Imi.

A link halott...
(#) viktorka0011 válasza szilva hozzászólására (») Feb 18, 2010 /
 
Köszönöm a válaszod ,már csak azt nem értem hogy COUNT PER C és COUNT REMAIN értékéhez hogy jútok hozzá.???
(#) whalaky válasza gustaw hozzászólására (») Feb 18, 2010 /
 
Hali!
Igazán nagy külömbség nincs köztük, nekem mind a kettővel ment így
  1. onewire_reset();
  2. onewire_write(0xCC);
  3. onewire_write(0xBE);
  4. temp1 = onewire_read();
  5. temp2 = onewire_read();
  6. temp3 = make16(temp2, temp1);
  7.    
  8. //result = (float) temp3 / 2.0;   //Calculation for DS18S20 with 0.5 deg C resolution
  9. result = (float) temp3 / 16.0;  //Calculation for DS18B20 with 0.1 deg C resolution
(#) gustaw válasza whalaky hozzászólására (») Feb 19, 2010 /
 
whalaki, ez a make16 dolog számomra még ismeretlen. Mit is csinál konkrétan?
(#) szilva válasza gustaw hozzászólására (») Feb 19, 2010 /
 
Nyilván a két, egyenként 8 bites adatból csinál egy 16 biteset. Írhatnánk helyette valami ilyesmit is:
  1. temp3 = 256*temp2 + temp1;

vagy
  1. temp3 = (temp2<<8) + temp1;


Feltéve, hogy a temp2 a magasabb helyi értékű byte.
(#) szilva válasza viktorka0011 hozzászólására (») Feb 19, 2010 /
 
Ez is benne van az adatlap említett fejezetében.

Először ki kell olvasni a 8 bites hőmérséklet-regisztert. Ez az érték lesz az egyenlőségben a TEMP_READ. Ezután ki kell olvasni a 9 bites (!) számlálóértéket a "Read Counter" [A0h] paranccsal, ez lesz a COUNT_REMAIN. Legvégül ki kell adni a "Load Counter" [41h] parancsot, ami áttölti a 9 bites akkumulátort a számlálóregiszterbe, majd beolvasni ismét a számlálóregiszter értékét (9 bit!) a "Read Counter" [A0h] paranccsal. Ez a lgutolsó érték lesz a COUNT_PER_C.

Ha jól emlékszem, én még azzal kínlódtam egy sort, hogy minden parancs kiadása előtt RESET-tel kell indítani a kommunikációt. Mintha ezt az adatlap nem hangsúlyozná eléggé. Tehát nekem úgy nem ment, hogy RESET, majd egy utasítás, és ezután egy másik utasítás. A második utasítást már egyáltalán nem vette figyelembe.
(#) szilva válasza szilva hozzászólására (») Feb 19, 2010 /
 
Előkotortam az én LCD kijelzésű órámban futó hőmérőrutint, ez egy DS1821-ből olvassa ki a hőmérsékletet és 0.1C felbontással adja vissza (egy egészben a fokok tízszerese lesz).

  1. void thermo_read() {
  2.  
  3.  
  4.  
  5.   signed int16 temp, cnt_perc, cnt_remn;
  6.  
  7.  
  8.  
  9.   if ( touch_present() ) {
  10.  
  11.     touch_write_byte( 0xAA ); // read temp
  12.  
  13.     temp = touch_read_word( 8 );
  14.  
  15.   }
  16.  
  17.  
  18.  
  19.   if ( touch_present() ) {
  20.  
  21.     touch_write_byte( 0xA0 ); // read counter
  22.  
  23.     cnt_remn = touch_read_word( 9 );
  24.  
  25.   }
  26.  
  27.  
  28.  
  29.   if ( touch_present() ) touch_write_byte( 0x41 ); // load counter
  30.  
  31.  
  32.  
  33.   if ( touch_present() ) {
  34.  
  35.     touch_write_byte( 0xA0 ); // read counter
  36.  
  37.     cnt_perc = touch_read_word( 9 );
  38.  
  39.   }
  40.  
  41.  
  42.  
  43.   if (temp > 128) temp -= 256;
  44.  
  45.   temp *= 10;
  46.  
  47.   temperature = temp + 10 * (cnt_perc - cnt_remn) / cnt_perc - 5 ;
  48.  
  49.  
  50.  
  51.   if ( temperature < temperature_min ) temperature_min = temperature;
  52.  
  53.   if ( temperature > temperature_max ) temperature_max = temperature;
  54.  
  55.  
  56.  
  57. }
(#) viktorka0011 válasza szilva hozzászólására (») Feb 19, 2010 /
 
Nagyon köszönöm,sokat segítettél!!
(#) viktorka0011 válasza szilva hozzászólására (») Feb 21, 2010 /
 
Szia a kővetkező dolgot vettem észre!
A COUNT regiszter (9-bites!),amire fel is hívtad a figyelmem,de egy dolgot nem értek a 9.-biten nem történik változás(9-bitnél kisebb számok jönne)akkor mi szűkség van rá hogy 9-bites legyen!?
(#) szilva válasza viktorka0011 hozzászólására (») Feb 21, 2010 /
 
Az a hőmérséklettől függ, hogy az adott hőfokon egy Celsiuson belül hány lépés kell a méréshez. Lehet, hogy -55 vagy +125 C felé közelítve lenne olyan eset, amikor már szükség lenne a 9 bitre is.
(#) The_Saint hozzászólása Feb 24, 2010 /
 
Sziasztok!

van valakinek PIC-hez, bármilyenhez, asm forráskódja a DS18B20 thermo-sensor SearchROM commandhoz? Vagy ha valaki elmagyarázná nekem emberi nyelven, hogy hogy működik, még az is segítene...

Előre is köszi!

Üdv
The_Saint
(#) jym válasza The_Saint hozzászólására (») Feb 26, 2010 /
 
Üdv.

A gyártó is csak C nyelvű rutint appnote-oz, abból kell okosodnod.

Imi.
(#) viktorka0011 hozzászólása Máj 9, 2010 /
 
Sziasztok
Belefogtam egy hőmérő építésébe ds1821+szenzorral a kővetkező problémába akadtam egyszer-egyszer bekapcsoláskor nem reagál az érzékelő majd többszöri le és fel csatlakoztatás után feléled és minden működik.
Mi lehet a probléma?

lcd628.asm
    
(#) sampon válasza viktorka0011 hozzászólására (») Máj 11, 2010 /
 
Nézd át az időzítéseket, lehet hogy rövid a reset response impulzus! De athadtnál több infót mi jelzi a hőmérsékletet LCD stb...???
(#) viktorka0011 válasza sampon hozzászólására (») Máj 12, 2010 /
 
Szia
Egy 16x2-es lcd jelzi hőmérsékletet 16f628a Pic működteti az áramkőrt 4mhz kristállyal.A Busz egy 4,7k ellenállással van felhúzva.A többi a forrásból kiderül.
(#) sampon válasza viktorka0011 hozzászólására (») Máj 14, 2010 /
 
viktorka0011 ráadod a tápot és az lcd értelmetlenséget ír ki, és mikor leveszed, majd újra ráadod a tápot, akkor egyszercsak megjavul?
(#) viktorka0011 válasza sampon hozzászólására (») Máj 14, 2010 /
 
Majdnem egyszerűen felhúzva marad az adatvonal az az
folyamatosan 255 a kiolvasott érték,majd leveszem a tápot és visszaadom és minden működik hibátlanul!!
(#) sampon válasza viktorka0011 hozzászólására (») Máj 17, 2010 /
 
Hát az adatvonal alapesetben fel van húzva VDD-re a PIC húzza le GND-re a szenzort min 480 uS-ra, majd elengedi, és ezután a szenzor húzza le GND-re az adatvonalt 60-240 uS ig (reset response adatlap 11 oldal!). Ezután AAh parancs, amit a PIC küld a szenzornak (adatlap 12 oldal) és így tovább!!!
Az egyes parancsokhoz tartozó időket az adatlap 15 oldalán találod! A 10. oldalon van egy táblázat hogyan követik a parancsok egymást, ezt kéne követni és FONTOS az időzítés!!! MAjd az egész folyamatot ismételgetet pl. egy ciklusban!!!

Remélem érthető volt!

ds1821.pdf
    
(#) demcar hozzászólása Máj 31, 2010 /
 
Üdv, mindenkinek!

Szeretnék épiteni egy digitális hőmérőt, és ebben szeretném a hozzáértők segitségét kérni.
Van nekem itthon egy PIC16F628-as pic-em, egy PIC16F84-es pic-em, két darab DS18B20-as hőérzékelő szenzorom és egy 2*8-as kijelzőm, aminek a tipus: BC0802BYRNEH.
És és én ezekből az alkatrészekből szeretnék egy szobai hőmérőt késziten ami mutatja a kinti illetve a benti hőmérsékletet.
A baj az hogy semmi kapcsolásom semmi programom nincsen ami alapján eltudnám késziteni a hőmérőt.

A segitséget előre is köszönöm!
(#) atideath hozzászólása Jún 24, 2010 /
 
Sziasztok. Egy DS18B20-as szenzorral szenvedek de az istenért se tudom életre kelteni. PIC18F4550-essel szeretném az adatokat kinyerni belőle. Tud valaki adni hozzá nekem HITECH fordítóhoz valami használható kódot? Láttam itt többen is használnak valami DS18B20.c library-t. Valaki ezt közzé tudja tenni?

Köszönöm
(#) atgyuric hozzászólása Jún 25, 2010 /
 
Sziasztok.

Érdekes problémába futottam bele. Hőfokszabályzót építettem DS18B20 szenzorral. 12bites felbontással használom, szépen írja is a kijelző a hőmérsékleteket. 24.1, 24.2, 24.3 stb ahogy emelkedik a hőmérséklet, egészen 37.5 fokig. Ekkor megáll a növekedés és legközelebb 38 fokra ugrik fel. Kb annyi idő alatt mialatt 0.1 fokonként 5x kiírná a hőmérsékletet. 4 szenzort is kipróbáltam, mindegyik ezt csinálja. Fűtés kikapcsolás után viszont jól írja hőmérsékletet ahogy hűl lefele. 38, 37.9, 37.8 stb. Valakinek van vmi ötlete erre?
(#) gddr80 hozzászólása Júl 6, 2010 /
 
Sziasztok! A DS1821+ szenzort hogy lehet visszaállítani thermostat módból folyamatos hömérséklet módba? Próbáltam a 16x low-high resetelös módszert de nem sikerül a status regisztereket írni.

Köszönöm
(#) luxmanpower hozzászólása Aug 4, 2010 /
 
Hello! Szeretnék ezzel az 1-wire-s eszközzel készíteni egy hőmérőt. Eléggé kezdő vagyok a mikrovezérlők terén. Az első kérdésem az lenne hogy hogy lenne érdemes a késleltetéseket megoldani?(C nyelv, és WinAvr)
(#) Rumcájsz hozzászólása Aug 30, 2010 /
 
Egy adatvezetéken használ valaki 2 -vagy több- DS16B20-at? Valakinek volna egy mikroC programrészlete?
(#) jym válasza Rumcájsz hozzászólására (») Aug 30, 2010 /
 
Üdv!

MPLAB C18-ban van, át tudod írni. Ez kezel több eszközt is. PIC18 saját lábáról kb. 30 méter a max.

Imi.

ds18b20.zip
    
(#) Rumcájsz válasza jym hozzászólására (») Aug 30, 2010 /
 
Köszönöm, nagyon király!
(#) zoox hozzászólása Szept 12, 2010 /
 
Sziasztok!
DS18S20 szenzort akarok életre kelteni,de nem sok sikerrel eddig.Annyira jutottam hogy a inicializálni tudom,azaz a DQ vonalat lehuzza L-re a szenzor.Követem (#639049) jym kollega utasitásait de semmi válasz nincs.(vagy nem jól müködik a read rutinom vagy még a write sem.
- a reset után a bus-ra milyen sorrendben kell a biteket felrakni? pl:b'00110011' (0xCC) elöször a legkisssebb helyiértéküt és onnan felfelé (1.)1 (2.)1 (3.)0 (4.)0.......(8.)0
-ha küldök 1 byt-ot akkor(utasitást) a következö byt mehet azzonal vagy kell valami delay?
pl 00110011 11101110
gonolom a bus-ra 1100110001110111

"ha sok baromságot irtam bocsi még nem foglalkoztam 1 wire komunikációval korábban(majd most)"
(#) bbalazs_ válasza zoox hozzászólására (») Szept 12, 2010 /
 
Nezd meg az adatlapjat, az idozites esszencialis, hiszen ezen kivul nem sokmindennel lehetne operalni az 1wire buszon.
Következő: »»   3 / 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