logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Bascom-kilka czujników DS18B20 i odczyt adresów

melon 16 Lis 2008 18:37 4980 6
REKLAMA
  • #1 5746697
    melon
    Poziom 26  
    Witam
    Mam pytanie:
    Na jakiej zasadzie bascom przypisuje do zmiennej tablicowej identyfikator kilku czujników DS18b20 podpiętych do jednego portu?
    Przykładowo mamy cztery czujniki.
    W poniższym przykładzie

    
    Dim Dsid1(8) As Byte
    Dim Dsid2(8) As Byte
    Dim Dsid3(8) As Byte
    Dim Dsid4(8) As Byte
    
    Dsid1(1) = 1wsearchfirst()                                 
    Dsid2(1) = 1wsearchnext()                                   
    Dsid3(1) = 1wsearchnext()                                  
    Dsid4(1) = 1wsearchnext()
    


    pod Dsid(1),Dsid2(1),Dsid3(1),Dsid4(1) zostaną wpisane identyfikatory czterech kolejno znalezionych czujników
    Załóżmy że czujnik o identyfikatorze Dsid3(1) ulega awarii i trzeba go wymienić, podpinamy nowy i prawdopodobnie identyfikator jego nie znajdzie się już w zmiennej Dsid3(1).
    Trzeba będzie zmienić kod lub pozamieniać miejscami czujniki żeby np wskazania na LCD pokrywały się z rzeczywistością.

    Czy program napisany w ten sposób za każdym razem po uruchomieniu przypisze te same czujniki kolejno pod Dsid(1),Dsid2(1),Dsid3(1),Dsid4(1) ?
    Chodzi o to żeby po resecie programu czujnik mierzący temperaturę na piecu CO nie został zastąpiony czujnikiem który jest za oknem.
  • REKLAMA
  • #2 5747492
    kedzi1
    Poziom 18  
    Drogi Kolego, jeżeli zależy Ci na tym aby kolejność czujników była zawsze jednoznaczna, nawet w przypadku awarii to pozostaje tylko aby rejestracja czujników w systemie była jednorazowa. Numery czujników należało by przechowywać w pamięci nieulotnej. Jak sam zauważyłeś nie ma sposobu aby robić to dynamicznie przy każdorazowym załączeniu urządzenia. Każdy czujnik posiada niepowtarzalny numer. Rejestracja czujników przez przytoczoną przez Ciebie procedurę będzie odbywać się w kolejności zależnej od tych numerów. Wymieniając jeden z czujników nie mamy wiedzy o jego numerze i miejsce jakie zajmie w tabeli nowy czujnik jest zupełnie przypadkowe.

    Rozwiązaniem na ten kłopot jest zazwyczaj jednorazowa, kontrolowana rejestracja czujników. Dołącza się wtedy pojedynczo czujniki do urządzenia, które zapamiętuje numery w kolejności ustalonej przez nas. Innym rozwiązaniem może być zapis własnych numerów w dodatkowej pamięci nieulotnej jaką posiadają te czujniki. Kłopot to numeracja np. w zewnętrznym urządzeniu, a zaletą jest w przypadku urządzenia komercyjnego łatwość i szybkość serwisowania. Mamy przygotowany zestaw czujników z zapisanymi numerami od 1 do np. 4 i wiemy że czujnik na kotle to ten z 3, wymieniamy go na taki z 3 i mamy 100% pewności że kolejność będzie OK.
  • REKLAMA
  • #3 5748190
    melon
    Poziom 26  
    No właśnie, też myślałem o jednorazowej rejestracji.
    Odczytałem nawet numery ID moich czujników tylko nie wiem jak połączyć to z komendą 1wverify.
    Przykładowe ID 2500143500001187
  • REKLAMA
  • #4 5748231
    dawid512
    Poziom 32  
    melon napisał:
    No właśnie, też myślałem o jednorazowej rejestracji.
    Odczytałem nawet numery ID moich czujników tylko nie wiem jak połączyć to z komendą 1wverify.
    Przykładowe ID 2500143500001187


    Np. tak
    1wverify Dsid4(1)
    jeżeli urządzenie o podanym adresie ID odpowiada to zmienna err zwraca 0 jeżeli nie to 1. A wszystko w helpie opisane...
  • REKLAMA
  • #5 5748244
    melon
    Poziom 26  
    dawid512 napisał:

    Np. tak
    1wverify Dsid4(1)
    jeżeli urządzenie o podanym adresie ID odpowiada to zmienna err zwraca 0 jeżeli nie to 1. A wszystko w helpie opisane...


    Zgadza się z tym że ja już nie chę korzystać z każdorazowego odczytu adresów czujników tylko wpisac je na stałe np do tablicy w programie i nie korzystać już z komend
    
    Dsid1(1) = 1wsearchfirst()                                  
    Dsid2(1) = 1wsearchnext()                                    
    Dsid3(1) = 1wsearchnext()                                  
    Dsid4(1) = 1wsearchnext() 
    


    mam odczytane i zapisane na kartce 4 identyfikatory, jak je wprowadzić do programu na stałe.
  • #6 5748281
    dawid512
    Poziom 32  
    Tak jak wprowadza się dane do tablicy...
  • #7 5748400
    melon
    Poziom 26  
    to może żeby nie gmatwać wątku

    mam odczytane ID czujnika przy pomocy kodu

    
    Dsid1(1) = 1wsearchfirst() 
    For B = 1 To 8
     Lcd Hex(dsid1(b))
     Next
    


    ID to np 283CDA65010000D7

    jak zmodyfikować odczyt temperatury

    
       
       1wreset
       1wwrite &HCC
       1wwrite &H44
       waitms 600
       1wreset
       1wwrite &H55
       1wverify Dsid1(1)                                           
       1wwrite &HBE
       temp = 1wread(2)
    
    


    żeby więcej już nie kożystać z

    
    Dsid1(1) = 1wsearchfirst()  
    
REKLAMA