czujnik temperatury DS18B20 w delphi

0

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++

0

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)

0

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 ?

0

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.

0
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

0

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ół.

0

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ć.

0

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

user image
user image

wiec jak zostalo napisane nie przeginaj

ps.

dla DS1820 dephi znajduje mi 15 stron :)
dla DS1820 delphi 15,900, masz popsute google kamerok [diabel]

0

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

0

Ja bym jednaka poszukal bledu, no chyba ze twoje pole jest na rowniku (60 stopni !!!), moze szybkosc watkow ? Nie powinno byc roznicy.

0

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 ;)

0

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/

0

Oczywiście w uwadze zapomniałem o przecinku "ds18s20 to nie, program wymaga zmian"

0

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

0

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.

0

masz rację pisze tam że: "musisz użyć względnie małego rezystora podciągającego, ok. 2,2k. " umnie jest 1,5k .

0

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.

0

Tu masz dwa rozwiazania (ja na razie tyle widze)

  1. Przerobic funkcje dekodujaca na 12 bitowa

  2. 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).

0

reichel zapomniałeś o czasie analizy. ds18b20 ma 750ms a ds1820 tylko 200ms.

0

750 ale dla 12 bit dla 9bit 93.75 no coz troche trzeba przerobic ...

0

Zgadza się, dla 9 bitów 93.75ms więc przerobić i tak trzeba, poza tym jeszcze trzeba skonfigurować na 9 bitów :).

0

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ę .

0

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

0

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).

0

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ć

0

róznica czujników mi też sie tak pokazuje bo ten program jest pod 1820 a nie pod 18b20

0

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 :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1