Ads_700x200

tme

poniedziałek, 15 lipca 2013

PC pomiar temperatury DS18B20 - FT232R + Delphi

Witam, 

Uwaga! Kolejny projekt z serii ARCHEO X ;) Zacząłem ostatnio usilnie pracować nad podłączeniem dowolnej ilości czujników temperatury DS18x20 bezpośrednio do komputera PC pod Windowsem. Oczywiście sposobów jest sporo - jako pierwszy rzucił się w oczy najprostszy schemacik: 



Jest OK - no ale kto dzisiaj posiada zwykły port COM? Ja nie posiadam, więc oczywiście potrzebowałem w jakiś sposób podłączyć się do swojej ulubionej przejścióweczki na znanym układzie FTDI o symbolu FT232R. 

Jednak do niej nie można się tak podłączyć jak na schemacie powyżej, trzeba zrobić sobie mały buforek na 2 tranzystorkach - w sumie proste jak drut





To teraz połączmy to do tzw. kupy i napiszmy sobie program na PC do odczytywania temperatury. Ponieważ z takiego programu będę częściej korzystał, to postanowiłem wręcz zrobić sobie komponent do Delphi, żeby za każdym razem wygodnie sobie z niego korzystać



No i teraz napisanie dowolnej aplikacji to już żaden problem, poniżej taka najprostsza z możliwych testowych



Program, jak widać napisany w Delphi 2006, w którym programuję już od wielu lat (dlatego akurat w Delphi) 
Poniżej link do filmiku prezentującego działanie programu oraz proces powstawania jakiegoś najprostszego programu w Delphi do testowania tego komponentu



Program do pobrania na dole artykułu. To tylko wersja testowa, ale zamierzam ją dalej rozwinąć do jakiegoś fajnego loggera. Tyle tylko, że nie w postaci takich dziwacznych (sorki za wyrażenie) "kobył" jak ten program jakiś tam "Lampamarti", bo to przerost formy nad treścią - przynajmniej jak dla mnie. Trzeba się przeklikać przez tysiące jakichś durnych opcji, żeby to uruchomić. 

Zapomniałbym - do działania programu potrzebny jest oczywiście specjalny driver pod odpowiednią wersję Windows. Na wszelki wypadek zamieszczam też te drivery. Po nazwach dojdziecie, który jest pod jaki Windows. Źródeł programu na PC nie mogę udostępniać.




;)

13 komentarzy:

  1. Odpowiedzi
    1. Dzięki za uwagę, ale nie działał tylko ten na obrazku, pod spodem działał na napisie... Nie mniej jednak już poprawiłem także link na ikonce.

      Usuń
  2. Mirku,
    Trochę to pachnie 3 książką, interakcja komputera z AVR??

    OdpowiedzUsuń
  3. Mam pytanie, czy testowałeś działanie układu przy podłączeniu 2 przewodowym zasilanie parasite?
    U mnie zachowuje się to dziwnie wykrywa sensory, poprawnie odczytuje ich numery seryjne i są poprawne, jednak temperatura to już herezja.
    Przy podłączeniu jednego czujnika (DS18B20) pokazuje 127,9C a przy podłączonych dwóch po 85,0C i nie reagują w żadnym z przypadków na zmiany temperatury. Czujniki są sprawne przy podłączeniu do atmegi8 poprawnie działają zarówno w trybie 2 jak i 3 przewodowym, natomiast z tą przejściówką poprawną temperaturę pokazuje tylko przy podłączeniu 3 przewodami chodzi o rozłączne zasilanie w trybie parasite vdd łącze do gnd wg datasheet'a coby niedomówień nie było.
    Co jest przyczyną takiego zachowania ? czy w trybie parasite aplikacja zachowuje odpowiednie stany przez odpowiedni czas na magistrali w tym trybie zasilania DS nie informuje o trwającej konwersji jak się to ma w przypadku połączenia 3 przewodami.
    I taka ciekawostka takie same herezje z temperaturą pokazuje jeśli nóżki Vdd układu DS pozostawimy nigdzie niepodłączone - w powietrzu, natomiast numer seryjny układu odczytuje poprawnie nawet przy takim nietypowym podłączeniu.
    I jedna uwaga do programu, przydałby się przycisk ponownego przeszukania magistrali trochę denerwuje wyłączanie programu i ponowne go włączanie przy dołożeniu/usunięciu czujnika.
    I jeszcze chyba błąd w aplikacji choć może nikt tego nie zauważy, podłączony DS1990A pokazuje jako DS1820

    OdpowiedzUsuń
    Odpowiedzi
    1. Zmniejsz rezystor R1 z 4,7K do wartości 2,2K albo nawet 1,5K to powinno działać i w trybie parasite

      to że program nie rozpoznaje innych układów 1wire ;) to normalne ... to było pisane dość dawno i tak na próbę

      ale temperatury odczytywał poprawnie jak widać na załączonym obrazku

      Może masz coś nie tak z magistralą 1wire ? ale ok sprawdź z tym mniejszym rezystorem R1

      Usuń
    2. Z 2k2 nie działa ale 1k5 już poprawnie pokazuje mam nadzieję że nie upali czujników po dłuższym użytkowaniu, natomiast ten przycisk ponownego przeszukania magistrali by się przydał ;)

      Usuń
    3. Nie upali nie upali - spokojnie hyhyhy

      masz po prostu pewnie jakiś bardzo zły przewód albo może za długi ? ... ile metrów ?

      a co do programu to za jakiś czas będzie się mocno rozwijał chociaż w nieco innej wersji ;)

      Usuń
    4. Przewód mam 3cm no może 2,5cm a w zasadzie to na stykówce testuje zanim płytkę wyfrezuje coby ewentualnie uwzględnić jakieś przeróbki przed lutowaniem a z drugiej strony to ciekawe czy mi to na 80m poleci najwyżej zasilę od drugiej strony lokalnie 5V na 3 nóżkę DS.
      I tak przy okazji to nie wina programu przed chwilą sprawdzałem na Lämpömittari i też się tak zachowuje tu raczej jest wina elektroniki w dataschecie znalazłem: If the bus is pulled low, the master knows that it must supply the strong pullup on the 1-Wire bus during temperature conversions. a na schemacie pod tym opisem tranzystor podciągający którego nie ma przy tym adapterze z drugiej strony to ciekawe że mega8 radzi sobie z tym bez tego tranzystora. A i notę mam od Maxima 101207 widzę że jest ich kilka i się różnią zawartością. Ten opis w dziale Zasilanie DS18B20 na 6 stronie. I pewnie podczas długiej konwersji kończy się prąd w DS'ie i stąd te jaja, ciekawe czy jakby go przestawić na 9-bitów to też by się tak zachowywał przy 9 bitach czas konwersji jest 8 razy mniejszy może by starczyło prądu.

      Usuń
    5. Ciekawość zaspokojona 9 bitów nie pomogło musi popracować na R1=1k5 mam nadzieję że większy prąd płynący przez czujnik nie będzie go podgrzewał.

      Usuń
    6. Ale jeszcze raz ci powtórzę, że rezystor to mógłby być i 800R i nic by się ze scalakiem nie stało. Przy bardzo długich magistralach na skrętce i takie nawet podciąganie stosowałem.

      Usuń
  4. Mirku niestety program źle odczytuje temperaturę z czujnika DS 1820 bez b wartość powinna być ok 24 a jest 1

    OdpowiedzUsuń
    Odpowiedzi
    1. Wydaje mi się, że testowałem również z DS1820 ... ale teraz po takim czasie to sorki ale głowy nie dam. A teraz nie mam jak wrócić na razie, ze względu na czas do tego akurat kodu.

      Usuń