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   14 / 39
(#) watt válasza Wudoou hozzászólására (») Aug 21, 2013 /
 
Az bajt okozhat, ha az RS485-öt nem csavartan viszed, de minden pudingnak van próbája.
A feltöltődés megtörténik a szondákon keresztül. Mindegy milyen messze van a vezérlő.
(#) watt válasza kissi hozzászólására (») Aug 21, 2013 /
 
Az érzékelők az utolsó verzió szerint saválló csövekbe kerülnek, azokat rögzíteni kell valahogy és akkor nem lesz gond.
(#) Wudoou válasza watt hozzászólására (») Aug 21, 2013 /
 
Akkor az lenne a végső megoldás(a halál ), ha saválló csőbe végigengedném az érzékelőket az ablakos megoldással, amit watt javasolt, a tetejére valami jó erősen odarögzítve drótsodrony, amivel a magasságot tudnám pozícionálni.
A kábel a ds-eknek UTP lenne, az erek: + narancsfehér narancs, adat zöld, - kékfehér kék.
A kábel benne lenne a csőben, így mechanikai védelmet is biztosítana.
Jó lenne leföldelni a csövet, vagy ha a cső drótsodronyon lenne felerősítve, akkor a drótsodronyt is elég lenne leföldelni. Húznék oda egy zöld-sárga vezetéket, és rákötném.
A csövet alulról is kikötném, szintén egy drótsodronnyal. Hátha így megúsznám a bilincsezést.
A 3 mérőkört megpróbálom 3 PIC lábra helyezni. A ds függvényeket módosítom, hogy kapjanak +1 argumentumot, ami pl. 0, 1, 2 lehet. Ezek mondanák meg, hogy melyik csatornát kellene mérni. A PIC lábára védelem szempontjából 2 1n4148-as.
Az RS485 UTP kábelen menne, akkor: narancsfehér-A, narancs-B, barnafehér-barna-GND soros 100ohmos ellenálláson keresztül.
Fúúú, na akkor ahogy a vak is mondta: majd meglátjuk, csak sose látta meg.
Ha valami kérdésem lenne, remélem még feltehetem. És nagyon köszönöm mindenkinek, főleg wattnak a sok segítséget.
(#) watt válasza Wudoou hozzászólására (») Aug 21, 2013 /
 
Ez így jól néz ki! Szívesen!
(#) kissi válasza watt hozzászólására (») Aug 21, 2013 /
 
Idézet:
„azokat rögzíteni kell valahogy”
Na ezzel van a gond, több száz tonna termény fér egy ilyen silóba!
(#) TavIR-AVR válasza Wudoou hozzászólására (») Aug 23, 2013 /
 
Igaz nem parazita módon tápláltad?
Szabályokat betartottad? (időnként kellhet feszszűrés a buszon, erősített átjátszás, ideális eset lenne a 1Wire HUB (DS2409 (?) chip)
Tippek/ötletek:
http://www.midondesign.com/Documents/1-WireApplicationGuide103.pdf
A hozzászólás módosítva: Aug 23, 2013
(#) TavIR-AVR válasza watt hozzászólására (») Aug 23, 2013 /
 
Amire _nagyon_ vigyázz:
Statikus feltöltődés hagyján. A gabonapor ha feltöltődik, ill porzik. Sőt, ha épp eltépi a kábelt és szikrát kap!

Tanulságos - cukorgyári robbanás statikus feltöltődés miatt:
http://www.youtube.com/watch?v=Jg7mLSG-Yws
(#) Wudoou válasza TavIR-AVR hozzászólására (») Aug 25, 2013 /
 
Természetesen nem parazita módon volt a táplálás. Nem tudom miért történt, de az átlagolásnál is megtörtént néha.
Idézet:
„Szabályokat betartottad?”
Mire gondolsz? Az időzítésekre? Igen.
Idézet:
„időnként kellhet feszszűrés a buszon”
Két érzékelő volt fenn, 1-1 méteres kábelekkel.
Idézet:
„erősített átjátszás”
Ez mit jelent?
(#) blackdog hozzászólása Szept 1, 2013 /
 
Sziasztok!

Ezen két leírás alapján összekalapáltam egy kódot:
Bővebben: Link
Bővebben: Link

Nincs még nagy rutinom se C se AVR programozásban, de ez működik kb. úgy ahogyan szeretném.
1-Wire haszálatára nem jó, de ez nekem nem is célom!

Mellékeltem a teljes kódot AS4 Projekt.

Véleményeteket szeretném kérni. Mit nem csináltam teljesen jól, mit kellene másként.
Amit még nem tudtam megoldani a kódban:
- CRC benne van, de nem tudom, hogyan dolgozzam fel
- Nem tudom, hogyan kezeljem, ha meghibásodik az érzékelő vagy nincs kapcsolat. Ilyenkor jelenleg leáll az egész AVR mert vár a konvertálás befejezésére.
Teszt környezet:
DS18S20+ , atmega168-20PU, 16 MHz orajel. 4 soros LCD

Várom az építő jellegű hozzászólásokat.
(#) kissi válasza blackdog hozzászólására (») Szept 1, 2013 /
 
Nem néztem meg, mit csináltál, de:
a CRC eredménye 0, ha minden OK, ellenkező esetben nem ( pl. rossz az érzékelő ) --> ez alapján dönthetsz a továbbiakról ! Ha nincs kapcsolat, akkor nincs 'present' jel ( kérés esetén nem húzza le '0'-ra a vonalat --> ezt is le tudod ellenőrizni! A kérdés után, ha bizonyos időn belül nem kapsz helyes választ, akkor rossz a kommunikáció, de várjon az AVR --> nincs "kék halál" !
(#) blackdog válasza kissi hozzászólására (») Szept 1, 2013 /
 
Azt megcsináltam benne, hogy a CRC ellenőrzés lefut. Csak szerintem nem ott ahol kellene. Ehhez látnod kellene a kódot.
(#) kissi válasza blackdog hozzászólására (») Szept 1, 2013 /
 
A bejövő adatokkal kellene megcsinálnod a CRC-t! Mit nem tudsz eldönteni: a megfelelő adatok berakását vagy a CRC rutinod működőképességét ?!
(#) blackdog válasza kissi hozzászólására (») Szept 1, 2013 /
 
A CRC működik épp most tesztelem. Ha hibás a CRC akkor működik a jelzés.

Most ezt bűvölöm:
  1. int x = 0;
  2.  
  3. therm_reset();
  4. therm_write_byte(THERM_CMD_SKIPROM);
  5. therm_write_byte(THERM_CMD_CONVERTTEMP);
  6.  
  7. //Wait until conversion is complete
  8. while(!therm_read_bit()) {x++;}


Elvileg itt áll meg az AVR, ha kihúzom a szenzort. Az x kb. 9600-10500 számol, ha minden jó. Arra gondoltam, hogy itt figyelem, ha 11000-ig nem jön válasz megszakítom a futást és hibát adok.
A CRC csak ez után van.
(#) kissi válasza blackdog hozzászólására (») Szept 1, 2013 /
 
A RESET-nél a DS ad egy present jelet, én már ezt is szoktam figyelni ( valameddig lehúzza a vonalat !), csak ezután van értelme lekérdezni... Ha itt blokkolni akarod a programodat, amíg nincs kész, akkor szerintem jó így, de sokkal célszerűbb lenne megszakításban mérni az időt és a főprogram időnként megnézné ( vagy fíx. idő után ráolvasna ) az "elkészülést" és kiolvasná az eredményt, aminél ellenőrizni kell a CRC-t ( ha a megszakításban mért idő meghalad egy értéket és nincs kész, akkor hibát kell jelezni, de én még nem találkoztam ilyen hibával, ha a jelenlétet jelezte ! )!
(#) blackdog válasza kissi hozzászólására (») Szept 1, 2013 /
 
A while így is "megakasztja" a program futást ezért gondoltam, hogy teljesen mindegy, hogy itt növelem egy változó értékét és hibával kilépek, ha meghaladott egy bizonyos értéket vagy még külön el indítok egy TIMER-t is és azt figyelem.
Az x szobahőmérsékleten átlag 9640-ig fut fel. Ez hány
Idézet:
„ms”
lehet? Hogyan számolom ki? x/F_CPU?
(#) kissi válasza blackdog hozzászólására (») Szept 1, 2013 /
 
Idézet:
„A while így is "megakasztja" a program futást”
Azért írtam, hogy ha itt blokkolni akarod a programodat... nem célszerű, inkább itt egy "szemafort" használj, amit a megszakítás kezel és így lehet közben mást is csinálni! Persze nem kötelező !
A 9640-nek megfelelő időérték attól függ, hogy a fordítód mit fordított ! Szerintem ha járatos vagy assemblerben, akkor megnézve ki tudod számolni, de valószínűleg egyszerűbb egy szimulációs szoftverrel megmérni!
(#) blackdog válasza kissi hozzászólására (») Szept 1, 2013 /
 
Számtalan kódot néztem a neten, de sehol nem láttam, hogy TIMER-t használnának a DS szenzorhoz.

Elvileg 16 MHz a processor sebessége. Ezért gondoltam, hogy 9640/F_CPU.
(#) kissi válasza blackdog hozzászólására (») Szept 1, 2013 /
 
Idézet:
„Számtalan kódot néztem a neten, de sehol nem láttam, hogy TIMER-t használnának a DS szenzorhoz.”
Nem kötelező, de így majdnem 1 másodpercig nem tudsz csinálni semmi mást ( az adatlap max. 750 ms-os konverziós időt ír ! ) ! Ha nincs más dolgod, csak pörgetni egy változót, akkor tedd azt, de ha esetleg reagálnod is kell valamire ( pl. egy gombnyomásra!), akkor ez alatt az idő alatt már néhány szteroidot szedő fickó igencsak be tud "pipulni" !
Nem ismerem az AVR-eket, de a képleted csak akkor jó, ha egy órajel alatt 1 utasítást megcsinál és a C fordítód a
  1. while(!therm_read_bit()) {x++;}
részt 1 gépi kódnak fordítaná ( ami kizárt, mert ki kell értékelni a bitet és ugrani is kell ! ) !
(#) potyo válasza blackdog hozzászólására (») Szept 1, 2013 /
 
Én ezt úgy szoktam, hogy másodpercenként indítom el a mérést és olvasom ki az eredményt. Nemrég mutattam egy kódot, itt Ha a CRC nem stimmel, akkor valami hiba történt, lehet olyat csinálni, hogy ha kétszer-háromszor egymás után CRC hiba van, akkor feltételezed, hogy eltűnt az eszköz a vonalról, vagy valami más gond van. Kérdés, mennyire kell gyakran mérni?
(#) blackdog hozzászólása Szept 1, 2013 /
 
Megszületett az új kód. Nem áll le a program, ha lehúzom a szenzort és működik a CRC is.
  1. uint16_t DS1820_read(uint8_t spad[]){
  2.  
  3. uint8_t i;
  4. uint16_t measure;
  5. uint16_t ret = 0;
  6. int x = 0;
  7.  
  8. therm_reset();
  9. therm_write_byte(THERM_CMD_SKIPROM);
  10. therm_write_byte(THERM_CMD_CONVERTTEMP);
  11.  
  12. //Wait until conversion is complete
  13. while(!therm_read_bit()) {
  14.  
  15.         x++;
  16.         if ( x >=11000 ) {
  17.         ret = 2002;
  18.         break;
  19.         }
  20. }
  21.  
  22. //Reset, skip ROM and send command to read Scratchpad
  23. therm_reset();
  24.  
  25. if (ret == 0 ) {
  26.  
  27.         therm_write_byte(THERM_CMD_SKIPROM);
  28.         therm_write_byte(THERM_CMD_RSCRATCHPAD);
  29.  
  30.         //Read Scratchpad
  31.         for ( i = 0;i < 9;i++) {
  32.                 spad[i]=therm_read_byte();
  33.         }
  34.         therm_reset();
  35.  
  36.         if ( crc8( &spad[0], 9 ) ) {
  37.                 // CRC FAIL    
  38.                 ret = 2001;
  39.                 return ret;
  40.         } else {
  41.                 // CRC Ok.
  42.         }
  43.  
  44.         measure = spad[0] | (spad[1] << 8);
  45.         measure &= (uint16_t)0xfffe;
  46.         measure <<= 3;
  47.         measure += ( 16 - spad[6] ) - 4;
  48.        
  49.         ret = measure;
  50. }
  51.  
  52. return ret;
  53. }


Tudom, hogy ennél sokkal szebb kódot is lehet írni, de nem vagyok C programozó csak ami innen-onnan rámragad.
A TIMER dolgon még elgondolkodom!
A hozzászólás módosítva: Szept 1, 2013
(#) janimester hozzászólása Szept 1, 2013 /
 
Abban esetleg nem tud segíteni valamelyikőtök hogy ha C-ben szintén egy timer időzítőt használó fordulatszámmérő progiban ha nincs bemenő jel ugorja át az adott programrészt a pic hogy ne álljon meg a programom? Mert kicsit összetett és több dolog is fut egyszerre és ha nincs jel akkor megáll a programom pár másodperc után.
(#) potyo válasza janimester hozzászólására (») Szept 1, 2013 /
 
Az nem jó, hogy beteszel egy olyan feltételt, hogy ha a mért érték x alatti, akkor ugorja át azt a részt? Igazából nemis értem a kérdést, ha a fordulatmérő programot sikerült megírni, akkor ez már annyira nem kellene, hogy nagy probléma legyen.
(#) watt válasza potyo hozzászólására (») Szept 1, 2013 /
 
Én azt nem értem, hogy ezt miért egy hőmérő topicban teszi fel.
A hozzászólás módosítva: Szept 1, 2013
(#) Wudoou hozzászólása Szept 15, 2013 /
 
Sziasztok!

Szerintetek meg lehet azt valahogyan oldani, hogy beazonosítani az egy buszra felfűzött ds18b20-as eszközöket úgy, hogy a sorrend is biztosított legyen?
Nekem az az eljárásom, hogy egyesével felhelyezem őket, egy C algoritmus meg addig vár, míg nem nyugtázom a csatlakozást, ekkor elmenti az új eszközt és növel egy számlálót.
Csak ezt nem lehet automatikusan? Az a baj, hogy van rá egy forráskódom,ami megkeresi az összes eszközt a buszon,de ez nem egzakt, mert nem tudni, melyik eszköz szólal meg elsőnek.
(#) kissi válasza Wudoou hozzászólására (») Szept 15, 2013 /
 
Szia !
Idézet:
„Nekem az az eljárásom, hogy egyesével felhelyezem őket, egy C algoritmus meg addig vár, míg nem nyugtázom a csatlakozást, ekkor elmenti az új eszközt és növel egy számlálót.
Csak ezt nem lehet automatikusan?”
Szerintem lehet... Írd át az algoritmust úgy, hogy ha pl. 10 másodpercig folyamatosan, biztonságosan érzékeli az új eszközt, akkor ezt fogadja el nyugtázásnak, stb. !
Idézet:
„mert nem tudni, melyik eszköz szólal meg elsőnek”
Hogyne lehetne tudni: ha egyszerre rajta vannak, akkor a lekérdezés szerinti legnagyobb prioritású szólal meg elsőnek !
A hozzászólás módosítva: Szept 15, 2013
(#) Wudoou válasza kissi hozzászólására (») Szept 16, 2013 /
 
Idézet:
„a lekérdezés szerinti legnagyobb prioritású szólal meg elsőnek”

Csak ha ezek fel vannak rakva egy kábelre akkor nekem tudnom kell már előre hogyan helyezkednek el.
Én azt szeretném megcsinálni, hogy pl. van egy buszon 10 eszköz és az inicializálás után kiderüljön, hogy ki hol van.
(#) potyo válasza Wudoou hozzászólására (») Szept 16, 2013 /
 
Hát ezt nem tudod megcsinálni másképp, mint hogy egyesével rakod fel, és mindig ami az új azonosító, az van az adott helyen. Vagy mondjuk mivel hőmérők, ha hozzájuk lehet férni, akkor pl. egy öngyújtóval alájuk melegítesz, és ami meleget jelez, az van az adott helyen.
(#) Wudoou válasza potyo hozzászólására (») Szept 16, 2013 /
 
Idézet:
„Hát ezt nem tudod megcsinálni másképp, mint hogy egyesével rakod fel, és mindig ami az új azonosító, az van az adott helyen.”

Igen, most is így van. Csak azt hittem van rá valami eljárás.
(#) kissi válasza Wudoou hozzászólására (») Szept 16, 2013 /
 
Idézet:
„Nekem az az eljárásom, hogy egyesével felhelyezem őket, egy C algoritmus meg addig vár, míg nem nyugtázom a csatlakozást, ekkor elmenti az új eszközt és növel egy számlálót.”


Idézet:
„Csak ha ezek fel vannak rakva egy kábelre akkor nekem tudnom kell már előre hogyan helyezkednek el.
Én azt szeretném megcsinálni, hogy pl. van egy buszon 10 eszköz és az inicializálás után kiderüljön, hogy ki hol van.”

Na most akkor ki kivel van ?
(#) kissi válasza kissi hozzászólására (») Szept 16, 2013 /
 
Én az eredeti elképzelést akartam "automatizálni" !
Következő: »»   14 / 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