Fórum témák
» Több friss téma |
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ő.
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.
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. Idézet: Na ezzel van a gond, több száz tonna termény fér egy ilyen silóba! „azokat rögzíteni kell valahogy”
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
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
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: Mire gondolsz? Az időzítésekre? Igen.„Szabályokat betartottad?” Idézet: Két érzékelő volt fenn, 1-1 méteres kábelekkel.„időnként kellhet feszszűrés a buszon” Idézet: Ez mit jelent? „erősített átjátszás”
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.
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" !
Azt megcsináltam benne, hogy a CRC ellenőrzés lefut. Csak szerintem nem ott ahol kellene. Ehhez látnod kellene a kódot.
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 ?!
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:
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.
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 ! )!
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: lehet? Hogyan számolom ki? x/F_CPU? „ms” Idézet: 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 while így is "megakasztja" a program futást” 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!
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. Idézet: 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" !„Számtalan kódot néztem a neten, de sehol nem láttam, hogy TIMER-t használnának a DS szenzorhoz.” 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
É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?
Megszületett az új kód. Nem áll le a program, ha lehúzom a szenzort és működik a CRC is.
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
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.
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.
É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
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.
Szia !
Idézet: 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. !„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?” Idézet: Hogyne lehetne tudni: ha egyszerre rajta vannak, akkor a lekérdezés szerinti legnagyobb prioritású szólal meg elsőnek ! „mert nem tudni, melyik eszköz szólal meg elsőnek” A hozzászólás módosítva: Szept 15, 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.
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.
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. 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 ?
Én az eredeti elképzelést akartam "automatizálni" !
|
Bejelentkezés
Hirdetés |