Witam , chciałbym napisać aplikację odczytującą temperaturę z DS1820 , w Google znalazłem kilka programów w tym "Lämpömittari" wszytko po złożeniu i uruchomieniu pracuje poprawnie , temperatura jest odczytywana dobrze , teraz przydało by się stworzenie własnej aplikacji która odczyta dane z czujnika i je wyświetli . Znalazłem kilka artykułów ale żaden nie opisuje komunikacji miedzy tym czujnikiem a aplikacją napisaną w Delphi . Pozdrawiam Artur . P.S ewentualnie może jakiś kod w C++
nie wiem co wpisywales w google ale wpisanie: ds1820+delphi
daje wynik (i tysiace innych ... temat jest strasznie oklepany)
http://www.vss.co.nz/new/gadgets/onewire.htm
(przyklad, schemat i kod zrodlowy z wykresami w delphi)
Wszystko super , mam małe pytanko znalazłem na pańskiej stronie program Thermometer .
po uruchomieniu nie pokazuje temperatury , a przy próbie kompilacji wyswietla się okno z komunikatem i ikoną stopu :
"Project t.exe raised exception class EConverterror with message ''is not a valid floating point value'. Proces stopped. Use Step or Run to continue "
co się dzieje ?
kamerok nie przeginaj, dobra
http://boss.iele.polsl.gliwice.pl/pdf/Maxim/2793.pdf
Masz tu dokumentację, przeczytaj ją.
Resztę można znaleźć w google, wystarczy poszukać "DS1820 dephi" wyskoczyło ponad 15'000 stron. Sprawdziłeś chociaż pierwsze 5 podstron?
PS. pytasz o jeden częściej stosowanych czujników, więc jakim cudem nic nie możesz znaleźć sensownego?
http://grzesiek21.republika.pl/termo.htm
Jak nie ma gotowca to można go samemu napisać, pamiętaj że gotowce też piszą ludzie a nie ludzi piszą gotowce.
RR napisał(a)
kamerok nie przeginaj, dobra
http://boss.iele.polsl.gliwice.pl/pdf/Maxim/2793.pdf
Masz tu dokumentację, przeczytaj ją.
Resztę można znaleźć w google, wystarczy poszukać "DS1820 dephi" wyskoczyło ponad 15'000 stron. Sprawdziłeś chociaż pierwsze 5 podstron?PS. pytasz o jeden częściej stosowanych czujników, więc jakim cudem nic nie możesz znaleźć sensownego?
http://grzesiek21.republika.pl/termo.htm
Jak nie ma gotowca to można go samemu napisać, pamiętaj że gotowce też piszą ludzie a nie ludzi piszą gotowce.
pierwszy link , OK przynajmniej się dowiedziałem że +25°C to 00110010
ale drugi poco ? , otóż nie chce schematów jak złożyć układ , układ mam już złożony i działa na programie "Lämpömittari"problem w tym że nie bardzo wiem jak się zabrać za na pisanie programu . Z tego wszystkiego to potrafię otworzyć port i wysłać sygnał by zaświecił się LED. A z angielskim umnie cienko wiec cudów sie nie spodziewam , ale jak to mówią od czego jest english translator ;) .
A więc tak czy inaczej proszę o wyrozumiałość , a wydaje mi się że musze otworzyć port sprawdzić czy jest na nim czujnik , jeśli tak pobrać numer seryjny , poczym w odstępach czasowych np. 5 [s] pobierać temperaturę , a z tego co widzę tu :
http://boss.iele.polsl.gliwice.pl/pdf/Maxim/2793.pdf to nie takie łatwe . P.S. miejcie wyrozumiałość dla początkujących .
przeleciałem z grubsza pierwsze 10 stron
znalazłem parę w bascomie ale w delphi nie
aha nie 15000 a około 14500
A to nie jest przypadkiem czujnik 1-wire? Jeśli twój układ działa przez rs to linki masz wyżej, jak jednak to 1-wire to muszisz oprogramować cały protokół.
wg karty to 1-wire, ale jest o nim tyle, że kolejny wątek jest zupełnie zbędny.
Jak poznać metodę sterowania? -> wystarczy przeczytać to jak steruje się nim przy pomocy dowonego innego języka który jesteś w stanie zrozumieć (w tym również polskiego, c/c++ itd itd)
Gdzie znaleźć informację? -> w Internecie. Pierwsza z brzegu strona z forum, które można przekopać:
http://www.elektroda.pl/ => wpisz ds1820 i masz blisko 750 wyników, przekop a na pewno wiele rzeczy się dowiesz
Dodatkowo zapoznaj się z obsługą COM a informacji o nim znajdziesz mnóstwo i w ten sposób masz to co potrzebujesz.
Natomiast myśle, że nikt, kto dzisiaj na swoim kompie nie ma kodu w delphi na ten czyjnik specjalnie dla ciebie go nie napisze, żeby tobie to wyjaśnić. Natomiast ci co coś takiego mają mogą nie chcieć udostępnić, mogą nie korzystać z tego forum itd. Musisz sam poszukasz, poszperać.
Pewnie to funkcja StrToFloat co prawda u mnie nie ma tego bledu ale moze to byc problem . i , (to byl program pisany na szybko i ma wiele niedorobek ze statustem TODO)
A i nikt nie musi ci pisac gotowca ! bo sa !
http://www.vss.co.nz/downloads/ds1820.zip
plik xDS1820.pas
I to jest na COM (chociaz popatrzyles w kod zrodlowy)
i schematy sa takie same jak do Lämpömittari (inne diody schottkego)
http://www.elektroniikka.org/thermometer/?page=adapter
http://www.vss.co.nz/new/gadgets/onewire.htm
wiec jak zostalo napisane nie przeginaj
ps.
dla DS1820 dephi znajduje mi 15 stron :)
dla DS1820 delphi 15,900, masz popsute google kamerok [diabel]
ok , wielki dzięki za pomoc program http://www.vss.co.nz/downloads/ds1820.zip działa , pokazuje trochę inną temperaturę niż Lämpömittari , ale to pewnie wina diod schottkego .
a więc temat uważam za zamknięty chyba że ktoś jeszcze dorzuci coś fajnego
P.S.
Lämpömittari:
pokój 18,5 stopnia
na polu 23,50 stopnia
ds1820.exe
pokój 20,2500
na polu 60,2500
Ja bym jednaka poszukal bledu, no chyba ze twoje pole jest na rowniku (60 stopni !!!), moze szybkosc watkow ? Nie powinno byc roznicy.
aha zapomniał bym wyrzuciłem z uses : Chart, Series , TeeProcs, TeEngine bo akurat niemiałem tych komponentów zainstalowanych w delphi, chart jest do robienia wykresów , a reszta nie wiem może to tu sie robi jakieś zamieszanie w każdym bądź radzie program się skompilował , a ja nie potrzebuje wykresów , ale wyświetlnie prawidłowej temperatury a nie jakiejś z równika by się przydało ;)
Co do dziwnego odczytu to trudno powiedzieć dlaczego tak jest... gdzieś na elektrodzie kiedyś widziałem, że tam apliakcje podczas odczytu zrzerały nieźle czas procesora, ale osobiście nie wiem czy tak jest w tym przypadku i nie mogę tego sprawdzić. To może być problemem jeśli kod jest kiepski.
Diody schotkiego są obowiązkowe i wypada mieć dobre! Jak zauważyłeś zasilanie tego układu nie jest typowe, bo 1 i 3 są zwarte więc te diody mogą mieć krytyczne znaczenie.
Poza tym WAŻNE ds1820 i ds18s20 to dwa RÓŻNE układy i jeśli masz ds18s20 to nie program wypada zmian.
Diody zenera powinny być mocy ok. 500mW.
a tu jeszcze dodatek, skoro google masz uszkodzone to masz jeszcze ten link.
http://www.elektroda.net/dla_kompa/ds1820/
Oczywiście w uwadze zapomniałem o przecinku "ds18s20 to nie, program wymaga zmian"
ja mam "DS18B20" inną diodę schotkiego "IN5817" w sklepie nie mieli BAT85 , ale ta terz mieści się w granicach tolerencji układu , reszta części jest wzieta z tej strony : http://www.elektroda.net/dla_kompa/ds1820/ z pierwszego schematu , w "lampormitani" mam wybrany adatper "DS9097E" szukam cały czas informacji o tym układzie może wkrótce się z tym uporam
nie wiem czy te programy sobie z tym poradzą, ale być może nie... ds18b20 ma czas analizy max 750ms i różni się od ds1820. Programy mogą nie odczytywać poprawnie.
Poza tym mają odczyt 12bitów a nie 9.
Więcej informacji masz tutaj http://www.elektroda.pl/rtvforum/topic816435.html
PS. niech jakiś moderator zmieni temat na DS18B20, bo to różnica i to ogromna, to dwa zupełnie inne układy do pomiaru a nie zamienniki.
Aha dodam jeszcze, że z tego co doczytałem w pierwszych linijkach, które mam nadzieję że i ty przeczytasz, to wynika z nich że układ ten dużo oporniej działa ze schematu z diodami, bo wymaga większego podciągnięcia.
masz rację pisze tam że: "musisz użyć względnie małego rezystora podciągającego, ok. 2,2k. " umnie jest 1,5k .
kamerok u ciebie podciągnięcie jest lepsze, bo 2,2k to mniejsze niż 1,5k... natomiast problemy to nie tylko z tym mogą być. Jak 9 bitów to 9, a nie 12... Jak ci podam 9 cyfr i powiem że to numer telefonu to będzie to jasne, ale jak podam ci 12 cyfr i powiem że to numer telefonu, to dalej będziesz mi wierzył? Tak jest w tym przypadku. Program liczy na wynik 9 bitowy a dostaje 12. Zresztą załatw zwykły ds1820 i sprawdź na nim program.
PS. przeszę by moderator uwzględnił wcześniejszą moją uwagę odnośnie zmiany tematu.
Tu masz dwa rozwiazania (ja na razie tyle widze)
-
Przerobic funkcje dekodujaca na 12 bitowa
-
18b20 ma rejestr (eeprom) w ktorym mozna zapisac konfiguracje jak ma sie on zachowywac. W twoim przypadku wybralbym tak aby zachowywal sie jak 1820 (byl tylko 9bitow).
Jak to zrobic :) , domyslam sie ze nie masz praktyki postaraj sie to (jesli zamierzasz w tym siedziec dalej) zrobic sam, wydrukuj sobie notke katalogowa (monitor przynajmniej dla mnie nie jest jeszcze najlepszym rozwiazaniem, nie mozna z nim w wannie siedziec :) ). I poczytaj (potrzebujesz do pkt 2 tylko ustawic EEPROM i.e. skopiowac ze scratchpad
a jak zapisac to juz jest w kodzie).
reichel zapomniałeś o czasie analizy. ds18b20 ma 750ms a ds1820 tylko 200ms.
750 ale dla 12 bit dla 9bit 93.75 no coz troche trzeba przerobic ...
Zgadza się, dla 9 bitów 93.75ms więc przerobić i tak trzeba, poza tym jeszcze trzeba skonfigurować na 9 bitów :).
widzę że pięknie się zrobiło , EEPROM'ie nie będę nic programował poza tym nie wiem jak to sie robi , na pewno programator musi być i inne cuda , po prostu kupie sobie zwykłego ds1820 , podłacze go i zobaczę co się dzieje , jeśli zadziała to super , program już mam razem ze źródłami , zaczerpnę wiedzę ze źródeł i napisze jakiś własny program który odczytywał by więcej niż dwa czujniki (przynajmniej spróbuje) . Zabawa z DS'ami to rzeczywiście fajna sprawa dwa już zamontowałem w tunelach (tunel - sadzi się tam pomidory , ogórki ) i będę monitorował temperaturę .
Jaki programator? EEPROM jest w czujniku i programuje się go przez 1-wire, tylko trzeba sprawdzić co i jak. Jeśli zaś chodzi o mnie to faktycznie polecam kupić ds1820, będzie łatwiej. Poza tym wątek powinieneś umieścić gdzieś na forum związanym z elektroniką bardziej, choć tam pewnie dostałbyś już na starcie kosza, bo ten wątek poruszany był setki razy. Dobrze że tutaj moderatorzy są wyrozumialsi :P
Nie wiem czy to bedzie dzialac (bazuje na przykladzie bascomie ... gdzies sie jeszcze walal 18b20), poprobuj (na pewno w tych okolicach zmiany
jesli bazujesz na tym xds1820.pas
to wyglada, ze bedzie trzeba zmienic funkcje CalcTemperature na
function CalcTemperature: Single;
begin
result := (sp[spTempMSB] shl 8 or sp[spTempLSB])/ 16;
end;
oraz
fConvertDelay := 240;
na ?? 750 albo wiecej, doswiadczalnie dobierz
fConvertDelay := 800;
napisz co z tego wyszlo bo to pisze tak abys wiedzial gdzie mniej wiecej zaczac (nie ejstem pewien czy nie pomylilem czegos w CalcTemperature, posprawdzaj).
Działa !!! wielkie dzięki macie u mnie [browar]
P.S.
fConvertDelay
pozostawiłem na razie na 240 , na 1000 też śmiga
I pomyśleć taka głupota i nie pozwala w nocy spać
róznica czujników mi też sie tak pokazuje bo ten program jest pod 1820 a nie pod 18b20
Witam ponownie przypomniałem sobie po kilku latach że leży u mnie niedokończony DS18b20
zaglądałem ponownie do przykładowego demo ponieważ chcę sobie zrobić termostat na bazie interfejsu 1-Wire i delphi
wczytałem się w dokumentację ds'a jest procedura która resetuje ds'a by go zasilić w trybie pasożytniczym
i teraz mam problem bo reset następuje poprzez zmianę prędkości portu i wysłanie komunikatu "0xF0" i zmiana z powrotem na tą samą prędkość
wszystko było by dobrze gdyby nie to że podczas zmiany prędkości linia RTS zostaje załączona a ja chciałbym właśnie sterować tranzystorem poprzez linię RTS
czy jest możliwość wykonania procedury reset bez zmiany stanu na RTS bądź czy jest możliwość zmiany prędkości portu bez zmiany stanu linii RTS ?
załączam procedurę reset:
function TxSensorBus.Reset: Boolean;
var
dcb: TDCB;
ch: BYTE;
cb: DWORD;
begin
Result := GetCommState(fPortHandle, dcb);
if not Result then Exit;
dcb.BaudRate := CBR_14400;
Result := SetCommState(fPortHandle, dcb);
if not Result then Exit;
ch := $F0;
if WriteFile(fPortHandle, ch, 1, cb, nil) then
begin
ReadFile(fPortHandle, ch, 1, cb, nil);
Result := (ch <> $F0);
end;
dcb.BaudRate := CBR_115200;
SetCommState(fPortHandle, dcb);
end;
serdecznie prosił bym o pomoc :)