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

Arduino Nano Sense BLE oraz DS18B20, nie działa

27 Mar 2020 00:48 282 11
  • Poziom 6  
    Witajcie,

    Problem dotyczy chyba samego Nano Sense albo jednego z libów do obsługi czujnika. Mianowicie, nie działają, wskazuje -127, nie wyszukuje czujników DS18B20 (https://botland.com.pl/en/waterproof-probes/1713-waterproof-probe-with-temperature-sensor-ds18b20-1m-5903351242226.html)

    Pierw przeprowadziłem test na UNO, podłączyłem jak poniżej:

    Czarny -> GDN
    Czerwony -> 3V
    Zółty - D2

    Dwa ostatnie spięte rezystorem 2k2 (mniejszy niż zalecany 4k7 ze względu na niższe zasilanie niż 5V). Program testowy z przykładów i wszystko pięknie działa:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Następnie, zmieniam boarda na Arduino Nano Sense BLE. Zasilanie 3.3V, reszta podłączenia pozostaje identyczna, nawet nierozłączona. W Nano podłączam sygnał również pod D2 i... ECHO, -127 i nic. Próbowałem pod każdym z innych pinów, zasilanie jest OK, mierzyłem. Coś czuję że problem leży w libach..

    Co do zasilania, próbowałem zasilać z NANO pinem 3.3V (wyjście), a na wejściu USB z kompa. Drugi sposób z zasilacza, podpięte pod 3.3V ze stabilizatorem, oraz masa zasilacza i NANO spięte. Nadal nic.

    Jakaś pomoc, sugestie? Tematów kilka jest na necie, nikt nigdy zagadki nie rozwiązał. Pozdrawiam
  • Pomocny post
    Poziom 32  
    Jesteś jednym z pionierów bo sprzęt drogi i mało popularny, więc sam musisz sprawdzić co się dzieje. Pierwsze co bym sprawdził, czy piny IO działa OK - miganie LED, potem kup sobie jakiś analizator Saleae (klony na Allegro kilkadziesiąt PLN), w programie Saleae Logic masz dekoder 1-Wire, możesz podejrzeć co się dzieje na magistrali, czy to Arduino nie wysyła, czy DS nie odbiera, czy Arduino nie odczytuje odpowiedzi.
  • Poziom 6  
    Dzięki za odpowiedź, niestety brak czasu na takie analizy, mam 2 dni na skończenie projektu, a obecna sytuacja w kraju opóźnia wszystkie wysyłki, więc jestem trochę w słabej sytuacji. Na pewno przeanalizuję to jak będę miał możliwość, na razie szukam jakiś podpowiedzi, pomysłów, bo moje się skończyły.

    Same piny testowałem, mam pod NANO SENSE BLE podłączony moduł GSM, serię diód, nadajnik/odbiornik IR i masę innych sprzętów.

    P.S. Nie polecam tego boarda, męczę się z nim niesamowicie, wiele rzeczy wymaga przeróbek. Swoją droga, problem istnieje także na Nano Every i Nano IoT, gdyż 2 takie same tematy znalazłem związane z boardami z serii Nano.
  • Pomocny post
    Poziom 32  
    Może masz jakiś lewy DS18B20, spróbuj użyć konwertera poziomów logicznych, zasilasz DS normalnie z 5V, podciąganie ~2k podłączasz po stronie niskiej, ~5k po stronie wysokiej, GND wspólne. No i popatrz na zwykłym UNO/NANO 5V czy odczyty są racjonalne. Kupiłem kiedyś kilka DS, które zachowywały się bardzo dziwnie, odczyty skakały po pół stopnia co 1s, a powinny zmieniać się łagodnie, w stałej temperaturze oscylować wokół jakieś wartość po 1 dziesiątce w powietrzu, a w wodzie jeszcze wolniej. Generalnie to jak używam logiki 3.3V to też tak zasilam DS i do tego napięcia podciągam linię danych i działa OK, ale może masz jakiś dziwny egzemplarz albo coś pomieszałeś.
    Druga sprawa to ten GPIO2 to linia SDA1 I2C (użycie jakiejkolwiek podłączonej na płytce do wbudowanych peryferii to nie jest dobry pomysł), na płytce jest też pin D2=GPIO39. W ESP jest tak, że jak używasz oznaczeń pinów D1, D2 to są to piny opisane na płytce D1, D2, ale wpisanie 2 to oznacza użycie pinu D4. Jak znalazłem sobie jakąś płytkę ESP, do której nie byłem pewien co gdzie jest to właśnie brałem LED i podpinałem pod pin, wgrywałem mruganie co 1s, potem co 100ms i tak lokalizowałem co gdzie jest.
    W katalogu Arduino, tam gdzie są instalowane core nowych płytek powinieneś znaleźć swoją i zajrzeć do pliku pins_arduino.h, np. dla ESP to wygląda tak:
    Cytat:
    #define LED_BUILTIN 16

    static const uint8_t D0 = 16;
    static const uint8_t D1 = 5;
    static const uint8_t D2 = 4;
    static const uint8_t D3 = 0;
    static const uint8_t D4 = 2;
    static const uint8_t D5 = 14;
    static const uint8_t D6 = 12;
    static const uint8_t D7 = 13;
    static const uint8_t D8 = 15;
    static const uint8_t D9 = 3;
    static const uint8_t D10 = 1;
  • Poziom 6  
    Kwestie napięcia weryfikowałem tak piszesz już wcześniej na UNO. Tam odczyty w ogóle są - i wykrywa urządzenia, na NANO nie wykrywa. Na każdym z czujników taki sam. Wynalazłem też standardowy DS18B20 (nie na przewodzie, na nóżkach) i też działa na UNO, zarówno pod 5V jak i 3V jak i z zewnętrznym zasilaniem.

    U mnie akurat wpisanie 2 skutkuje miganiem diody podpiętej pod D2. Sam pins_arduino.h wygląda z kolei tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    A varian.cpp tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Tutaj jeszcze taka rozpiska: https://www.mouser.com/catalog/specsheets/Arduino_06052019_ABX00035.pdf
    I taka: https://content.arduino.cc/assets/Pinout-NANOsense_latest.pdf
  • Pomocny post
    Poziom 32  
    Jedyne co mi jeszcze przychodzi do głowy to sprawdzenie co się dzieje na magistrali, a skoro nie masz do niego dostępu to może znajdziesz jakiś sniffer onewire w necie - szukaj 1-wire sniffer/analyzer.
    Możesz sprawdzić również inne biblioteki, są co najmniej trzy różne do DS i kilka ogólnych do onewire.
  • Poziom 6  
    Poszukam sniffera, a co do libów, to jak pisałem w pierwszym poście. Sprawdziłem wszystkie, nawet takie o których ktoś już dawno zapomniał, że istnieją. Dzięki za podpowiedzi, mam ochotę potraktować tego boarda młotkiem, bo jak na razie nie nadaje się do niczego niż do zbudowania sterownika led i podświetlenia sobie wejścia do piwnicy, żeby jak najrzadziej musieć na niego patrzeć. Walczę generalnie z tym boardem od 5 dni. Jak rozwiążę jeden problem to pojawia się drugi. Eh, ciężkie życie, marny los.
  • Pomocny post
    Specjalista - ESP32, ESP8266
    Arduinowa biblioteka OneWire nie będzie poprawnie chodziła z Nano Sense BLE. Problem był zgłaszany już kilka miesięcy temu i dopóki autor tej biblioteki nie uwzględni obsługi tej płytki w swoim kodzie, pozostaje raczej samodzielna implementacja protokołu OneWire.

    Arduino HAL dla Nano Sense BLE oparte jest na Mbed OS, więc można też spróbować zaadoptować rozwiązania dedykowane dla tego RTOS (są dostępne kody źródłowe):
    https://os.mbed.com/teams/Maxim-Integrated/code/OneWire/
    https://os.mbed.com/teams/Maxim-Integrated/code/OneWire/docs/tip/classOneWire_1_1DS18B20.html

    Wizzyz napisał:
    mam ochotę potraktować tego boarda młotkiem, bo jak na razie nie nadaje się do niczego niż do zbudowania sterownika led i podświetlenia sobie wejścia do piwnicy, żeby jak najrzadziej musieć na niego patrzeć.

    Ta płytka dużo lepiej nadaje się do programowania z użyciem Mbed OS niż Arduino HAL, więc nie jest taka zła ;)
  • Poziom 6  
    Dzięki za info, przynajmniej nie muszę dalej się męczyć. Jeden dzień to za mało na szybką analizę i adaptację. Chyba będę musiał podłączyć 3 niezależne czujniki temp. i to jakoś oprogramować, aby osiągnąć to co chcę. Posiedzę nad tym jak skończę projekt.
  • Poziom 32  
    Już nie pamiętam dokładnie, ale zmniejszyłem czasy w funkcji w1_bit_io zamieniając na funkcje delayMicroseconds(), no właśnie wtedy przydaje się analizator, bo pauza miała być na 14us a była ponad 25. I tak jest w okolicy 20, ale już działa z Atmegą. Tobie pozostają inne czujniki lub wykonanie kilka delikatnych prób po parę us w dół i w górę. Nie sprawdzałem wszystkich impulsów, po prostu jak zaczęło działać to zacząłem się bawić czymś innym, a w razie błędów i tak wyłapie to CRC. Niestety jeśli jest jeden rdzeń i co np. 10us na kilka us uC przerywa wszystko by zrobić coś np. z BT przerwaniem z wyższym priorytetem to każda taka biblioteka będzie generować błędy.
    Na ESP8266 działa normalnie 45+14us, ale również to zmniejszone. Co kilkadziesiąt odczytów trafia się jakiś z błędem CRC i po prostu go trzeba odrzucić, wziąć kolejny.