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] Jak zmienić czułość czujnika BH1750 przez MTreg?

parafka 24 Lis 2019 19:01 717 4
REKLAMA
  • #1 18298704
    parafka
    Poziom 20  
    Aktualnie mam na stole czujnik światła BH1750 i próbuję go podrasować.
    Standardowa obsługa I2C działa i ładnie można pobierać zmierzoną wartość.
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Na 11 stronie Datashet'a można jednak za pomocą bajtów MTreg przesunąć czułość układu, tak, że przy H-resolution mode2 można osiągnąć czułość na cyfrę 0,11 Lux.
    Dodałem dwa wiersze do programu z nadzieją, że to takie proste ale oczywiście nie zadziałało...

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Czy mógłby ktoś zerknąć na 11 stronę pdfa i podpowiedzieć, jak wrzucić do BH1750 te bajty od MTreg ?
    Z góry dziękuję.
  • REKLAMA
  • Pomocny post
    #2 18299887
    bart-projects
    Poziom 29  
    Nie trzeba nawet czytać strony jedenastej żeby się domyślić co jest grane :D

    Strona dziesiąta:
    Cytat:
    BH1750FVI is not able to accept plural command without stop condition. Please insert SP every 1 Opecode.


    To oznacza że nie ma tam typowego zwiększania adresu przy wydawaniu komend. Dlatego trzeba to zrobić tak i jest to wyraźnie napisane, że zmiana dwóch bajtów to dwa razy I2cstop. Czyli ustawiasz adres do zmiany np. H-byte, wpisujesz nową wartość i robisz I2cstop. Następnie znowu I2csatrt, adres L-byte, wysyłasz wartość i I2cstop.

    Zupełnie inną sprawą jest to, że czujnik potrzebuje czasu na dokonanie pomiaru np max 240ms. Nie możesz więc odczytywać od razu po wystartowaniu konwersji. Proponowałbym to zrobić tak jak przy DS18B20 - najpierw odczytać poprzednio wystartowaną konwersję i na końcu zadać mu wykonanie następnej. Potem sobie wrócić po wynik.
  • REKLAMA
  • #3 18301011
    parafka
    Poziom 20  
    Zrobiłem tak i
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    i działa ale nie przestawia się czułość(jak podmieniam wartość MTreg).
    Powiem więcej, gdy wpiszę jak w pdf wartość default 01000101 to przestaje czujnik reagować na zasłanianie -tego to już nie rozumiem... :not:
  • REKLAMA
  • #4 18301081
    bart-projects
    Poziom 29  
    Myślę, że czegoś nie zauważyłeś.
    Największa wartość dla Mtreg to 254 (Bin &B1111_1110)
    Natomiast ustawia się go dwoma rejestrami H i L
    Jednak po to by układ mógł rozróżnić co ustawiasz to ten H zaczyna się inaczej niż L
    Wpisując wartość do H bajt musi się zaczynać od &B01000_ ostatnie trzy z prawej (czyli młodsze bity) to mają być najstarsze bity dla Mtreg czyli bity 7, 6 i 5.
    Natomiast bajt L musi, a u Ciebie tak nie jest, zaczynać się od 011_ po czym ma być reszta bitów dla Mtreg czyli 4, 3, 2, 1 i 0

    Inaczej obrazuje to zapis : 01000_MT[7,6,5] i 011_MT[4,3,2,1,0] (strona piąta) ;)

    Więc maks to chyba zapis &B01000_111 i &B011_11110
  • #5 18301359
    parafka
    Poziom 20  
    Tak, tak masz rację.
    W między czasie też na to zwróciłem uwagę. Trochę myliły mnie zapisy ze strony 11 i myślałem, że trzeba dać 2 x 4znaki:
    ex) Procedure for changing target sensor sensitivity to 2 times.
    Please change Mtreg from ”0100_0101” ( default ) to ”1000_1010” ( default * 2 ).


    Wprowadziłem zmiany i okazało się, że przy max czułości czas potrzebny na opracowanie wartości w czujniku to 4x120ms. Mniej niż 450ms nie chce działać -przywiesza się odczyt. Załączyłem działający kod.

    Przykładowo;
    Przy Mtreg=69 otrzymuję Lux=4, a przy Mtreg=254 otrzymuję Lux=22
    Jeszcze nie wiem dlaczego tyle ale to już mniejszy problem -dojdę do tego.
    Ważne, że czułość wyraźnie zwiększyła się.
    Jeszcze raz stokrotne dzięki!
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
REKLAMA