Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Wykorzystanie czunika DS18B20 w .NET

ryba191 07 Sty 2009 03:38 4479 4
  • #1 07 Sty 2009 03:38
    ryba191
    Poziom 2  

    Witam serdecznie!
    Mam nadzieje, ze nie pomyliłem na początek działów.
    Chciałbym wykorzystać czujnik DS18B20 we własnych aplikacjach w .NET (C# lub VB.NET). Pytanie moje brzmi: czy jest to możliwe, a jeżeli tak, to czy miał ktoś już z tym doświadczenie i mógłby się nim podzielić ??

    Niby schemat komunikacji z czujnikiem nie jest zbyt skomplikowany:
    1. Bus reset
    2. Skip ROM command 0xCC h
    3. Convert Temperature 0x44 h
    4. Wait approx. 750ms to conversion ends
    5. Bus reset
    6. Skip ROM command 0xCC h
    7. Read data 0xBE h
    8. Read Low and High byte from sensor
    (Źródło: http://bansky.net/blog/2007/10/one-wire-bus-and-micro-framework/)
    Ale sama implementacja już nie jest taka oczywista i tutaj mam problem.
    Zapewne gdzieś w sieci znajdują się biblioteki obsługujące czujkę i cały schemat komunikacji można pominąć i prostą funkcją odczytać temperaturę, ale ja takowej niestety nie znalazłem.
    Jedyne co udało mi się odnaleźć, to ten link: http://www.maxim-ic.com/products/ibutton/software/windowsdk/index.cfm
    Tutaj jest SDK, takie jak mi potrzeba (?)... ale niespecjalnie mogę sobie z nim poradzić.

    Z góry dziękuję za wszelką pomoc.

    0 4
  • #2 07 Sty 2009 11:18
    slomo
    Poziom 17  

    Po pierwsze jak zamierzasz podlaczyc czujnik do komputera?
    W zamieszczonym przez ciebie linku autor wykorzystuje osobna plytke z uC programowana w .Net MicroFramework wiec ten sposob raczej odpada.
    Mozesz wykonac\zakupic konwerter 1Wire\RS232(1Wire\USB) i do niego podpiac czujnik a aplikacja musialaby tylko odczytywac dane z portu szeregowego komputera.W takim przypadku nie musialbys sie martwic o transmisje na magistrali 1Wire.
    W tym SDK od Maxima powinny byc nawet jakies przyklady i API dla takiego konwertera (DS2480)
    Ewentualnie zostaje jeszcze podpiecie czujnika pod port rownolegly.
    pz

    0
  • #3 07 Sty 2009 11:58
    ryba191
    Poziom 2  

    Czujnik podłączony jest przez port szeregowy RS232 (bardziej szczegółowo to wykorzystuję do tego doświadczenia laptopa z przejściówka PCMCIA<-->RS232). W zamieszczonym linku faktycznie wykorzystana jest osobna płytka, ale chodziło mi tylko o przedstawienie schematu komunikacji z czujnikiem, który może trzeba by było zaimplementować.

    Co do MAXIMA: to przykłady faktycznie są, ale nie za bardzo chcą współgrać z DS18B20.

    Znalazłem lepszą (chyba) bibliotekę do obsługi 1-wire: http://sourceforge.net/projects/owdotnet/..

    Trochę powalczę z nią, jak coś się uda to napiszę, a może ktoś wcześniej się już nią bawił ?

    0
  • #4 09 Sty 2009 13:32
    ryba191
    Poziom 2  

    W końcu udało mi się coś odczytać ! :)

    Dla zainteresowanych podaje sposób w jaki udało mi się to uzyskać. Na początek podał moją konfigurację komputera:
    - WinXP sp3 PL
    - Visual Studio .NET 2005
    - Microsoft .NET Framework 1.1 oraz 2.0
    - złącze RS232 - fabrycznie w komputerze nie posiadam złącza RS232, więc użyłem przejściówki PCMCIA<-->RS232 (foto)
    - prosty układ z wykorzystaniem czujnika DS18B20 (schemat można znaleźć w tym dokumencie)
    - dołączone w projekcie VS referencje do biblioteki OneWireAPI.NET.dll (można ją ściągnąć ze strony MAXIM'a)
    - dodatkowo, aby powyższa biblioteka działała poprawnie należy doinstalować pakiet "Microsoft Visual J# Version 2.0 Redistributable Package" (można ściągnąć ze strony Microsoft'u)

    Poniżej podaje kod, który użyłem do odczytania temperatury (VB.NET):

    Code:

    Public Function odczytajTemperatureWDomu() As Double
            Dim adapter As Object = com.dalsemi.onewire.OneWireAccessProvider.getDefaultAdapter
            'obiekt reprezentujący domyślne urządzenie 1-wire
            Dim Tests As Object
            Dim wynik As Double
            Dim termometr As New com.dalsemi.onewire.container.OneWireContainer28(adapter, "1C00000089595028")
            'obiekt reprezentujący czujnik temperatury DS18B20 o ID "1C00000089595028"

            Try
                ' rozpoczęcie współpracy z urządzeniem
                adapter.beginExclusive(True)
                'ustawienie prędkości komunikacji z czujnikiem
                adapter.setSpeed(adapter.SPEED_REGULAR)
                'filtrowanie urządzeń 1-wire ze względu na ich typ, w tym przypadku są to urządzenia do pomiaru temperatury
                adapter.targetFamily(&H28)
                adapter.Reset()
                adapter.setSearchAllDevices()
                'zresetowanie lini 1-wire
                adapter.reset()
                'pominięcie komend wykonywanych na pamięci ROM




                adapter.putByte(204)
                'konwersja odczytanej temperatury przez czujnik do postaci cyfrowej
                adapter.putByte(68)
                'uśpienie wątku na okres 1s w celu umożliwienia konwersji
                System.Threading.Thread.Sleep(1000)
                'pominięcie komend wykonywanych na pamięci ROM
                adapter.reset()
                'odczytanie rezultatów konwersji z urządzenia
                Tests = termometr.readDevice
                'ustawienie rozdzielczości odczytu temperatury - tutaj 9-bitów (możliwość ustawienia na 9,10,11,12-bitów)
                termometr.setTemperatureResolution(9, Tests)
                'odczytanie temperatury z obiektu termometr i zapisanie w zmiennej wynik
                wynik = (Math.Round(termometr.getTemperature(Tests), 2))
                '"zamknięcie" transmisji
                adapter.endExclusive()
                Return wynik
            Catch ex As Exception
                'w przypadku nieprawidłowości w działaniu urządzenia zwracany jest wynik -99
                Return -99
            End Try
        End Function


    Mam nadzieję, że komuś się to przyda :)

    0
  • #5 26 Lut 2010 23:14
    fx57
    Poziom 9  

    Witam
    a znacie jakas biblioteke do obslugi w c#

    pozdro...

    0
  Szukaj w 5mln produktów