Fórum témák
» Több friss téma |
meg az a 44h nem tudom mi akar ott benne lenni a READ_Scratchpad előtti sorban...
sajnos ez igy nemjo... :no:
a 44h = writeByte(CONVERT_T)
müxik!
nemtom hogy csináltam, de megy! asszem ez segitett: repeat 8 DS18b20.writeByte(term.hex(byte[a++], 2)) Dejoooooo! köszííííííííííííííí
Sziasztok!
Engem az érdekelne, hogy hogyan tudok MINUSZ [-] értéket mérni a DS18b20 -al?
de ez 0 *C fok alatt 4094.758 -at ad vissza. valaki tudja, hogy mi lehet a baj?
Valószínűleg az, hogy a számábrázolás eltér a két oldalon. Nem tudom, milyen nyelv, ránézésre Parallax; nincs doksid róla, hogyan ábrázolja a lebegőpontos számokat? Mert ha rossz helyen keresi a tizedespontot a bináris értékben, vagy az előjelet, akkor nem fogja rendesen konvertálni.
DS18B20-nál 2 byte a hőmérséklet, az alsó négy bit a tizedes-érték, a felső 5 pedig az előjel.
Igen, Parallax.
sajna nincs doksi, de azért megpróbálok utánnanézni, csak nem valami jol megy az Englishhhh.
Nem semmi ez a Parallax, meg a Propeller... A neten keresgéltem, töltöttem le adatlapot, megnéztem benne a FLOAT definícióját, nem sok, de IEEE754 szabvány szerinti. Mint az Omron PLC-k itt mellettem, így rögtön ki is próbáltam, hogy a DS18B20 által 0 °C alatt adott értékeket hogyan jeleníti meg lebegőpontosban. Nos, nem jól... de hát a bitek sem a szabványnak megfelelő pozícióban vannak, így nem csoda.
Mivel asm-en kívül nem írok PIC-re, "lemodelleztem", hogyan jönne ki a jó érték. Megpróbálom leírni, hátha segít. Nem böngésztem végig a Parallax meg a Propeller teljes szintaktikáját, meg "Cam Thompson's Float32" könyvtárának leírását, ezért nem állítom, hogy nincs benne szintaktikai vagy egyéb hiba... VAR BYTE i BYTE dummy1 BYTE temp1 BYTE temp2 OBJ hofok : "FloatMath" dummy2: "FloatMath" hofok := 0.0 dummy1 := 0 dummy2 := 0.0 ' tizedeseket tartalmazó alsó byte beolvas temp1 := ow.readByte ' felső byte beolvas, a kettő eltolása után ' temp2-ben csak egész helyiértékek lesznek + előjel temp2 := (temp1 >> 4) | (ow.readByte << 4) ' mellesleg ilyenkor kéne visszaküldeni neki egy RESET jelet, ' hogy lesz szíves abbahagyni a többi byte kiléptetését ' bejárjuk a kapott 8 bitet, helyiérték szerint növelve dummy1-et REPEAT i FROM 0 TO 7 IF (temp2 & (1 << i)) THEN dummy1 += 1 << i ' temp1<3:0> bitjeit lefordítjuk tizedesjegyekre ' negatív előjelet temp1<7> jelzi, ekkor a kettes komplemens ' visszaalakítása alapján az egészrészből kivonunk egyet, ' hozzáadjuk a tizedesjegyeket, majd kivonjuk belőle a pozitív ' érték lehetséges maximumát, jelen esetben 255.0-t, és kész REPEAT i FROM 0 TO 3 IF (temp1 & (1 << i)) dummy2 += hofok.FDiv(1.0, hofok.FFloat(1 << (4 - i))) ' itt az említett előjel-ellenőrzés, konvertálás IF (temp2 & 128) THEN dummy1 -= 1 dummy2 += hofok.FFloat(dummy1) dummy2 -= 255.0 ELSE dummy2 += hofok.FFloat(dummy1) hofok = dummy2 C-ben hiba nélkül megy, ha valakinek esetleg jó ez is, és van float támogatás: BYTE temp1; BYTE temp2; BYTE dummy1; float hofok = 0.0f; float dummy2 = 0.0f; int i; /* beolvasás temp1 és temp2-be, megvalósítástól függően */ temp2 = (temp1 >> 4) | (temp2 << 4); dummy1 = 0x00; for (i = 0; i <= 7; i++) { if (temp2 & (1 << i)) dummy1 += 1 << i; } for (i = 0; i <= 3; i++) { if (temp1 & (1 << i)) dummy2 += (float)(1.0f / (float)(1 << (4 - i))); } if (temp2 & 0x80) { dummy1 -= 1; dummy2 += (float)dummy1; dummy2 -= 255.0f; } else dummy2 += (float)dummy1; hofok = dummy2;>>>>>>>>>>>>>>>>>>
Kicsit böngészni kell, tabulátort nem tudtam beszúrni
... és hülye is vagyok már teljesen, így hajnalban.
Az első ciklus nem kell, a két beolvasott byte egymás felé léptetése után temp2-ben meg is van az egészek értéke. Csináltam egy bit-copy sorozatot feleslegesen.
helló!
totál rendes vagy, hogy utánnanéztél. köszi szépen, igy most már oké lesz!
Hello!
A DS digitális hőszenzorok nagyrésze 125 fokig mér. Én az oldalon lévő termosztátot szeretném elkészíteni, csak szeretném tudni, hogy mit csinálnak 125 fok felett. Én olyan környezetbe tenném, ahol mghaladhatja a hőmérséklet ezt a határt. Mit várhatok akkor ha mondjuk beálítok egy jelzőLEDet mondjuk 0-120C ig kellene égnie, de 125 fok fölé is mehet a hőmérséklet?
Sziasztok!
A DS1820-as szenzor vezetékének hossza befolyásolhatja a meérését, mert nekem lb 1,5m -es vezetéken van és úgy csinál mintha kontakthibás lenne. Egyszer nem mér máskor meg és van amikor meg pontatlan adatot küld. Szóval a vezeték hossza befolyásolhatja? Egyébként nem árnyékolt vezetéket használtam.
A mérés pontosságát aligha (vagy legalábbis elhanyagolhatóan) befolyásolja szerintem, az adatátvitelt viszont annál inkább, ha valami zavar ül a vezetékre. Közvetlenül a szenzorhoz kellene tenni egy 100 nF-os kondit a tápra, illetve a parazita táplálást el kell felejteni, ha az van. Amennyiben ez nem segít, lehet próbálkozni az árnyékolt kábellel.
Hát a kondis megoldást nem próbáltam, de előszedtem egy olyan vezetéket ami 2 eres és árnyékolt. A szenzor a földjét az árnyékolásról kapja, azaz az árnyékolás a föld. Ez jó megoldás? Amúgy igy se megy De legalább nem az árnyékolással van a gond?
Na ezt magyarázza meg nekem valaki légyszi!!! Ha lcd háttérvilágitása megy nincs semmi gond a szenzorokkal, amint kikapcsolom az egyik szenzor elkezd hulyeségeket küldeni, vagy van amikor nem is megy. Egyébként erről van szó.
Van egy olyan érzésem, hogy táp hibád van. Esetleg ligő-lógó vezeték az lcd-nél. Próbáld meg hidegíteni a szenzorok tápját, esetleg közvetlenül a stabic-hez kösd be.
Köszi! Tényleg a tápnál volt a hiba.
Igen, felcserélhető. A különbség a tokozásban rejlik, az S kicsit nyújtottabb.
Sziasztok
Köszönöm a választ, holnap kipróbálom.
Sziasztok,
Van egy USB <-> RS232 Compatible átalakítóm. Neten eléggé sok leírást találtam hogyan lehet sima sorosra portra rákötni a DS18S20-at, de USB-s soros átalakítóról nem találtam infót. Ezen a soros vonalon csak 4.8 V és 5 V között fesz van. Ami elvben elég a sensornak minden belenyúlás nélkül. Kérdésem az lenne ha fogom és rákötöm két egyenirányítóval ( RX,TX <-> DQ ) a hőmérőt és az rts-re vagy dtr-re a Vdd és GNDre GNDt akkor működni fog, vagy biztonsági szemszögből ajánlotok valami passzív alkatrész? ( Nem szeretném az USB-met kinyírni és hosszú távra tervezem a használatot. ) Illetve találtam egy ilyen kapcsolási rajzot most: http://elektroniikka.org/thermometer/images/ds9097e.gif Köszi, Pepe
Sziasztok!
DS1821+ szenzorral kapcsolatba lenne kérdésem. én az adatlapból az böngésztem ki hogy: egy kiolvasás igy nézhet ki 1.reset pulse 2.read temperature (AAH) 3.start convert T (EEH) 4.stop convert T (22h) 5.reset pulse 6.Read TH (A1h) 7.reset puls 8.Read TL (A2h) De lehet hogy nagyon rosszul gondolom?!
Üdv.
Nem. 1. RESET 2. MATCH_ROM vagy SKIP_ROM 3. START_CONVERSION 4. VÁRSZ (ha parazitában megy, akkor 2 sec-et) 5. RESET 6. MATCH_ROM vagy SKIP_ROM 7. READ_SCRATCHPAD 8. beolvasod a byte-okat, check CRC, stb. 9. GOTO 1 Imi.
Köszönöm a válaszod,de nekem ez a folyamat úgy tűnik hogy a ds1820-ra vonatkozik.A kővetkezőre jutottam ami nálam működik:
Reset start convert. 100 usec stop convert. reset read temperature És jön a 8 bites hőmérséklet.1 C-fokos pontossággal. Amit még mindig nem értek hogy az adatlap azt írja,hogy a szenzor nagy felbontásra is képes.105: “High Resolution Temperature Measurement with Dallas Direct-to-Digital Temperature Sensors”. De hogy?????
(DS1821) Úgy lehet nagyobb felbontást elérni, hogy kiolvasod a többi regiszterét is, nem csak a hőmérsékletet. A regiszterek között van egy olyan, ami megadja, hogy az adott hőmérsékletnél egy fokon belül hány számlálólépésre van szüksége a méréshez, egy másik meg megadja, hogy a mérésből még hány lépés lett volna, amikor megállt a mérés. A kettőből egy osztással lehet meghatározni a fokon belüli törtrészt. Én 0.1 fokra számoltam ez alapján vissza és teljesen jó lett.
Egyébként a folyamatot és a számolás pontos módját a "High-resolution Temperature Readings" fejezetben írja az adatlap is. Azt is írja, hogy folyamatos mérési módban nem használható, tehát egyszeri indított mérésekkel kell dolgozni ilyenkor.
Üdv.
Sorry, benéztem, a DS1821+-t nem ismerem Imi. |
Bejelentkezés
Hirdetés |