Fórum témák
» Több friss téma |
Kondit ha nem teszel, bármikor előjöhet hiba. Ez alapvető dolog.
Sziasztok, azzal a kérdéssel fordulnék hozzátok hogy valaki nem e tud ds18b20 szenzorra olyan MikroC-ben megírt termosztát programot amit én fel tudnék használni és változtatni itt ott sajnos neten csak basic-est találtam meg lefordított hex-et. Egy motor műszerfalába kellene ezzel kapcsoltatnám a vízpumpát beálltható hőfokon és azért muszály hogy c-ben legyen mert már nagyon sok féle dolgot megcsináltam programügyileg a műszerben és működik is nem akarom csak ez miatt más nyelven előröl kezdeni az egészet.
Sziasztok
Holnap be kellene kábeleznem egy szenzórt de nem tudom mit tegyek be, a hely mindenféle vezetékek a környezetben és kb15-20m távolság a PIC illetve a DS között. Van esetleg valami olcsó de jó ötlet? Esetleg egy árnyékolt riasztosvezeték vagy esetleg UTP?
En mar sokmindent lattam, pl motorok mellet kihuzott mukodo I2C-t. Hiszek a csodakban.
SW szempontbol ha van CRC akkor jarhato a dolog, mert hiba eseten ujra lehet kerdezni az eszkozt. HW-esen nem tudom, en nem kozkaztatnam meg. Minimum valami differencialis buszt valasztanek.
unsigned int temp_fraction;
const unsigned short TEMP_RESOLUTION = 12; char *text = " 00.0"; unsigned temp; void Display_Temperature(unsigned int temp2write) { const unsigned short RES_SHIFT = 4; char temp_whole; // check if temperature is negative if (temp2write & 0x8000) { text[0] = '-'; temp2write = ~temp2write + 1; } // extract temp_whole temp_whole = temp2write >> RES_SHIFT ; // convert temp_whole to characters if (temp_whole/100) text[0] = temp_whole/100 + 48; else text[0] = ' '; text[1] = (temp_whole/10)%10 + 48; // Extract tens digit text[2] = temp_whole%10 + 48; // Extract ones digit // extract temp_fraction and convert it to unsigned int temp_fraction = temp2write << (4-RES_SHIFT); temp_fraction &= 0x000F; temp_fraction *= 625; // convert temp_fraction to characters text[4] = temp_fraction/1000 + 48; // Extract thousands digit // Display temperature on LCD Lcd_Out(1, 10, text); } void main() { INTCON = 0; // All interrupts disabled ANSEL = 0x04; // Pin RA2 is configured as an analog input TRISA = 0x04; ANSELH = 0; // Rest of pins are configured as digital ADCON1 = 0x82; // A/D voltage reference is VCC TRISA = 0xFF; // All port A pins are configured as inputs C1ON_bit = C2ON_bit = 0; // Disable comparators /////////////////////////// Lcd_Init(); // Initialize LCD Lcd_Cmd(_LCD_CLEAR); // CLEAR display Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off ///////////////////////// do { //--- perform temperature reading Ow_Reset(&PORTE, 2); // Onewire reset signal Ow_Write(&PORTE, 2, 0xCC); // Issue command SKIP_ROM Ow_Write(&PORTE, 2, 0x44); // Issue command CONVERT_T Delay_ms(750); Ow_Reset(&PORTE, 2); Ow_Write(&PORTE, 2, 0xCC); // Issue command SKIP_ROM Ow_Write(&PORTE, 2, 0xBE); // Issue command READ_SCRATCHPAD temp = Ow_Read(&PORTE, 2); temp = (Ow_Read(&PORTE, 2) << 8) + temp; //--- Format and display result on Lcd Display_Temperature(temp); // Print degree character, 'C' for Centigrades Lcd_Chr(1,15,223); // different LCD displays have different char code for degree // if you see greek alpha letter try typing 178 instead of 223 Lcd_Chr(1,16,'C'); } while(1); } // End main() Tessék remélem tudtam segíteni!! A hozzászólás módosítva: Jún 29, 2013
Sziasztok!
Egy elég félelmetes projektbe vágtam a fejem és akinek picit több tapasztalata van ds18b20-as érzékelők terén, attól kérnék egy kis segítséget. Szóval silók hőmérsékletét szeretném mérni vele, a silóba 24 mérési pont kell 3x8-as oszlopokban. Meg is írtam rá a kódot, csak nem igazán tudom, hogy stabil lesz-e. Mert legelőször próbapanelben raktam össze, csili-vilin működött. Utána csináltam egy nyákot hozzá+ a ds-eket 1 méteres vezetékekkel összefűztem. Mindjárt meg se nyikkant. Csökkentettem a felhúzó ellenállást 1,5K-ra, akkor megjavult. Itthon futtattam kb. 1-2óráig. Majd másnap ismét bekapcsoltam, de már a reset-re 0 jött, vagyis nincs eszköz, pedig 24 volt rajta, ebből 15 kábelen. A reset függvénybe beszúrtam +50 us késleltetést, meg is javult. Valószínű a kábel jelterjedési ideje miatt. Szóval a kérdésem az lenne, hogy szerintetek érdemes erőltetni a ds-eket? Gondolkoztam leválasztáson, de bidirekcionális optocsatolóról nem igen tudok, mivel a ds-ek 1 vezetéken beszélnek. A siló 14 méter mély, így ha a vezérlőt kb. 1,5 méter magasra teszem, akkor is a vezetékkel fel kell menni majd lemenni... Ez így legalább 40-50 méter, mert ugye 3 oszlopban kell mérni. Minden ötlet érdekelne, akár maszekban is.
A ds-ek táplábai mellett ott vannak a 100n..1µF-s kerámiák? Külön tápot kapnak, gondolom. Egyébként az időzítések beállításával lehet próbálkozni, elvileg mennie kellene.
Egyenlőre nem mindegyikhez tettem, csak minden oszlophoz egyet. De még ez csak próbakábel. Egyenlőre azt sem tudom, hogy a hüvelyes érzékelőket tegyem-e fel, vagy saját magam csináljak valami tokozatot neki. A tulaj nem akar masszív csövezést, csak egy "lelógó kábelt". Szóval még azt sem tudom, hogyan kellene elhelyezni. A táp közös a PIC tápjával, de természetesen nem parazita módban megy.
Idézet: Ezt úgy gondolod, hogy hasraütésre, míg jó nem lesz, vagy számoljam össze a vezetékhosszakat (CAT5 UTP-n fog menni), vagy számoljam ki a kábel időállandóját és minden várakozáshoz, legyen az read_bit write_bit... adjam hozzá? „Egyébként az időzítések beállításával lehet próbálkozni, elvileg mennie kellene.”
Én maradi vagyok, először próbálkozok, aztán számolok, ha végképp nem megy! Nézd meg milyen határértékek vannak és a legnagyobbakkal próbálkozz, ami még működhet. Ha a sebesség elég, akkor nem is kell gyorsítani.
Viszont érdemes lenne minden ds táplábához egy smd kerámiát beforrasztani. Ez csodákra képes, nem beszélve arról, hogy így helyes. Esetleg zsugorcsövezés jó lehet, "tokozatnak". Léteznek olyan műanyag csövek, amik megolvadnak a zsugórcsőben a rámelegítés közben, így vízhatlan lesz az egész. Önszabályzós fűtőkábeleknhez szoktak ilyeneket adni, igaz nagyobb átmérőben. Lehet, hogy bármilyen műanyagcső megfelelhet, ami erősen meglágyul 150C körül.
Én valami ilyenre gondoltam.ds18b20 kép
A 3 oszlopos érzékelőt külön indítsam el a vezérlő dobozból, vagy majd a siló tetején elosztom őket? Mert akkor párhuzamosan futó vezetékeket csinálok belőle, az is baj lehet. Elég az UTP keresztmetszete? Vagy esetleg fogjak össze több eret? Most úgy van, hogy narancsfehér +, narancs - , zöldfehér adat, többi GND-re lekötve(táp negatív), de csak a vezérlő doboz oldalt. A ds-eknél nem. Vagy ne kössem le őket, mert így csak kondenzátort csinálok belőle?
Én egy-egy csavart érpárat használnék a tápnak(narancs pár és a kék pár) és egy szálat az adatnak. A többi eret nem kötném be sehová.
Mérőpontoknál leágaztatnám röviden, ha lehet. Ha nem lehet röviden(max. 10cm), akkor az egész UTP kábelt elvinném a mérőpontig és onnan vezetném tovább akkor is, ha egy szakaszon oda-vissza dupla kábel lenne. Idézet: Úgy érted, hogy egy eret? Pl. zöld?„és egy szálat az adatnak” Valahogy így nézne ki(lásd melléklet). Azt elfelejtettem mondani, hogy a silóban kukorica, vagy gabona lesz.
Igen.
Nem lehetne akkor, 3 kimenettel, 3 külön kört létrehozni? Az érzékelőket pedig a kábelre rögzíteni valahogy közvetlenül? A hozzászólás módosítva: Aug 18, 2013
Dehogynem. Csak nem tudom, hogy hogyan fog beleférni a PIC memóriájába.
Mert most úgy van megírva, hogy van két tömb
Az LCD-re az atlag/4 van kiírva. Szóval 16f886-os PIC-et használok hitech C-ben írva a kód. Plusz most írom a modbus ascii protokollt a távoli lekérdezéshez. Így a programmemória kb 70%, az adatmemória viszont 85%-os kihasználtságon van. Idézet: „Az érzékelőket pedig a kábelre rögzíteni valahogy közvetlenül?” Jó lenne, csak félek, hogy a termény szétszaggatja töltés, vagy ürítés közben.
A memóriát nem nagyon érinti az egy kimeneteshez képest, ha ugyanazokkal a rutinokkal csak más kimenetre váltva egymás után olvasod ki a vonalakat.
A letépést csak védőcsővel lehetne megoldani.
A védőcső rendben is lenne, csak akkor meg nem fogja átvenni a takarmány hőmérsékletét a ds.
Most voltam kint a terepen, belenéztem a silóba, hát... 14 méter mély, 10 méter átmérőjű és gyakorlatilag semmi nincs, amihez rögzíteni lehetne, csak vagy az oldalfalhoz, de akkor az nagyon szélen van, vagy felülről leengedni, de akkor meg hogy védem meg a mechanikai sérüléstől? Ha fentről leengedek egy csövet és ahol az érzékelő van, oda egy T idomot tenni és kibújtatni az érzékelőt, az rendben lenne, csak akkor is rögzíteni kell a csövet, hogy ne táncoljon a silóban. Ráadásul az alja egy ürítési kúp, mint ahogy a teteje is kúpos.
Én valami ilyesmivel rögzíteném a csövet (lásd melléklet). sőt, ha nagyon biztosra akarsz menni, a szárakat beleragasztod a furatba. Van több ilyen termék, pl. ez is ilyen: betonragasztó. Viszont, a cső rögzítése eléggé ipari alpinista munkának tűnik.
Ha nem használtál még ilyen ragasztót, akkor pár jó tanács: első lépésként a furatok elkészítése, majd a ragasztás. Ha a keverőszárba beleköt a ragasztó, akkor nincs mese, másikat kell rátenni. A ragasztó 30 °C-on pár perc alatt megköt, tehát igyekezni kell vele. Ragasztó a furatba, amit előtte kiportalanítottál, bele a menetes szár és usgyi a következőhöz.
Igen, én is gondoltam ilyesmire, csak a siló nem beton, csak a lába.
A siló horganyzott acél, műanyag festékkel lekenve. Attól a bilincsezés nem lenne gond, csak azért 10 méter átmérőjű a siló, és legalább a sugár 1/3-ára be kellene engedni az érzékelőket, hogy helyes képet kapjak. Én először úgy gondoltam el, hogy végigengedni egy horganyzott acélcsövet méterenként egy hollandival és egy T idommal, a hollandinál bontható, a T idomnál kidugni az érzékelőt és menetes szárral, vagy köracéllal az oldalfaltól végigengedve fel a tetejéig. Az egyszer biztos, hogy alpinista munka. Másra nem merem bízni. Persze a NIVELCO-nak vannak ilyen több ponton mérő szenzorai, amik gyakorlatilag egy drótsodronyból állnak a végén egy nehezékkel és + 400 darab ezresért lehet is mosolyogni+ 200 darab ezres a feldolgozó egység.
Fogsz egy 15..20mm-es alucsövet, "hátulról" kifúrogatod ott, ahol az érzékelő kell legyen, odaragasztod az érzékelő íves fejét a szembelévő falra FBS-el és kész az érzékelő. A UTP simán elfér az érzékelő mögött. Kicsit ügyeskedni kell, de nem vészes szerintem. A 14m hossz nem semmi, ilyen hosszon mindenképpen kell valami, ami mechanikailag megvédi a kábelt és az érzékelőt, mert a bezúduló gabona szerintem még a csupasz UTP-t is eltépné! A hőfokot jól fogja mérni a csövön keresztül is, sőt.
És a cső nem fogja "átvinni" a hőt az egyik mérési pontból a másikba?
Amúgy jó ötletet adtál, csak akkor is valahogyan rögzíteni kellene a csövet, mert ugye nem rakhatom a siló oldalára, mert akkor az messze van a közepétől. A kábelen már gondolkodtam, hogy bele kellene rakjam beton flex csőbe, nagyon masszív, mégis hajlékony. Úgy érted az érzékelő elhelyezését, hogy gyakorlatilag a csőre hátulról egy kis ablakot vágni és odaragasztani a cső szembeni falára? Igen, ez már stabilnak tűnik, bár feltéve, ha sűrűn meg van erősítve, bilincsezve a cső. Visszakanyarodva a ds időzítés problémához, a reset parancsba beszúrtam + 20us késleltetést és láss csodát szépen müxik. A write, read_bit-hez hozzá sem nyúltam. A védelemről: Van valami ötletetek hogyan lehetne védeni a PIC lábát? Azért 50-60 méter kábel 24 ds18b20 nem semmi egy PIC-nek szerintem.
Biztosan elkeni kicsit, de elég messze lesznek egymástól a mérőpontok, nem nagyon zavarnak be egymásnak. Esetleg lehet savállóból, az nem vezeti annyira a hőt és sokkal erősebb is és jobban bírja a korróziót is (és dragább is).
Igen, úgy értettem a csőre ablak vágást. Örülök, hogy ilyen kis módosítással is működik, de majd a helyén! A PIC lábára tegyél egy diódát a Vdd felé katóddal, és a Vss felé anóddal. Sajnos a gyors Shotky diódáknak elég nagy kapacitásuk van, ezért valami 1N4148-at érdemes kipróbálni. A hozzászólás módosítva: Aug 20, 2013
Értettem. Köszönöm szépen az eddigi segítséget, mindent megfogadok, amit mondtál. Még egy utolsó kérdésem lenne. Érdemes-e optocsatolóval leválasztani az RS485 kimenetemet?
Vagyis még a max485 előtt, PIC után úgy, hogy a VDD-je a max485-nek és a PIC-nek is azonos(7805)? Szóval 1 db 7805 látná el a panelt 5v-al. Ha bután fogalmaztam, akkor csatolok egy kapcsolási rajzot.
Ha egy a táp, akkor nem érdemes, de léteznek olyan RS485 csatolók, amik leválsztottak, opto sem kell benne van minden az IC-ben. Ilyen a MAX1480BCPI. Igaz, nem tudom kapható-e!? Gabonánál a statikus feltöltődés előfordulhat, érdemes lehet a leválasztás távoli kommunikációnál.
Viszont nem árt össze is földelni valami módon, mert ha pl. el lesznek szigetelve a cuccok, de feltöltődik mondjuk 20kV-ra valamelyik, aztán átüt az optós leválasztó, az kellemetlen tud lenni. Én a földeket összekötném mondjuk 50-100k ellenállással. Így nem lesznek mereven összekötve a cuccok, viszont nem tud nagy statikus feltöltődés sem kialakulni közöttük.
Per pillanat úgy van a prototípus megcsinálva, hogy nincs optoleválasztás, viszont a GND az átalakítónak ki van vezetve egy soros 100ohmos ellenálláson keresztül mind a PIC-nél, mind a PC oldalt, ami RS232-re alakít. És ezek össze vannak kötve. Az UTP kábel úgy van bekötve, hogy 1-1 érpár van használva, vagyis A- narancsfehér narancs, B- zöldfehér zöld, GND-barnafehér barna.
Kékfehér kék, sehova. Ez így jó? Mármint nem gond, hogy elvileg a csavarás miatt lesz zavarérzéketlen az UTP és én nem ereket, hanem érpárokat használok? Ja, és a PC oldalt egy másik 12dc tápból van megcsinálva az átalakító 5v-ja. A hozzászólás módosítva: Aug 21, 2013
Szerintem nagyobb gond van a kiürítésnél ! A hatalmas mennyiségű gabonát alulról szokták "leengedni": na mikor a felakadt, összetömörödött több tonna gabona egyszer-egyszer megomlik, akkor szakít, tép mindent ( legalábbis az UTP kábelt simán! )!
A hozzászólás módosítva: Aug 21, 2013
Azzal tisztában vagyok, mivel az egyik szimmetrikus(RS485), a másik aszimmetrikus átvitel(RS232).
De én nem is az RS232-ről beszélek, hanem az RS485-ről. Vagyis a vezérlő panelből elindul egy UTP, ami RS485-ön kommunikál a PC-vel, de a PC előtt visszaalakítom RS232-re. És a vezérlő panel illetve a PC átalakítója között lévő kábelezést kérdeztem. A vezérlő valószínüleg nem a silóra lesz felszerelve, hanem egy picit távolabb van egy kis betonrész és oda gondoltam. Így a statikus feltöltődés nem érintené azt a részt, max a ds-eket. Elnézést, ha félreérthetően írtam valamit.
Hát igen, ettől félek én is. Ezért is gondolkodunk valami masszív szerelvényen, ami véd is, hőt is átad, legalább 8-10 méter hosszú, könnyű szerelni, és még egy ötös lottó szelvényt is nyerőre kitölt.
|
Bejelentkezés
Hirdetés |