Liczba postów: 250
Liczba wątków: 0
Dołączył: Dec 2016
Reputacja:
48
Witam,
Wystarczy spojrzeć w notę katalogowa. Ta stoi, że max czas konwersji to 750 ms. Wątpię żeby dało się to skrócić przy takiej rozdzielczości.
Pozdrawiam,
Tomek
Liczba postów: 250
Liczba wątków: 0
Dołączył: Dec 2016
Reputacja:
48
Witam,
A jaki jest czas dla 12-tu bitów?
Pozdrawiam,
Tomek.
Liczba postów: 250
Liczba wątków: 0
Dołączył: Dec 2016
Reputacja:
48
Witam,
DS18s20 ma 9 bitów rozdzielczości
DS18b20 ma programowalne od 9 do 12.
W tytule wątku jest ten pierwszy.
Pozdrawiam,
Tomek.
Liczba postów: 2,436
Liczba wątków: 0
Dołączył: Oct 2017
Reputacja:
246
Witam
To jakiego czujnika użyjesz nie ma znaczenia, gdy chcesz maksymalnie często sprawdzać temp. algorytm powinien wyglądać tak:
1. Odczytujesz temperaturę.
2. Wysyłasz żądanie konwersji temperatury.
Przejrzyj przykład blinkwithoutdelay oraz przykład w DS WaitforConversion.
W setup wyłączasz oczekiwanie na konwersję sensors.setWaitForConversion(false); dalej dbasz o to sam by nie pytać czujnika o temperaturę szybciej niż po 750ms od wysłania żądania pomiaru sensors.requestTemperatures();.
Żeby pierwszy odczyt nie był wadliwy żądanie konwersji wysyłasz też przed wyłączeniem oczekiwania w setup. Po zakończeniu pomiaru on sobie siedzi w czujniku i czeka. Jeśli jest to 12bitów to może tam czekać już po 750ms, ale my to olewamy. Korzystamy z tego szkicu do migania LED, tam mamy taki pik co 1s. W tym piku odczytujemy "starą" temperaturę, wiek około 250ms i od razu wysyłamy żądanie pomiaru. Zaglądamy tu w kolejnym piku i tak w koło. Pętla główna programu przelatuje sobie 16mln razy na sekundę i sprawdza czy już, czy już, ale nie, jeszcze, a przelatując sprawdza co tam na pinach, co tam w rejestrach, co tam na UART, itd. I jest szansa że zauważy naciśnięcie przycisku i inne ważne dla użytkownika rzeczy.
Chcesz sprawdzać temperaturę 9bitową co 100ms, to po prostu zmieniasz pik na 100. Ale też nie wisisz tam 100ms tylko odczyt, żądanie pomiaru i wyjście, powrót za 100ms, odczyt, żądanie pomiaru idt.
Tak samo robimy z eliminacją drgań styków dla przycisku i żyjemy szczęśliwsi.
Jeśli byś chciał odczytywać temperaturę co 750ms i miał jakieś delay w pętli to mało prawdopodobne by normalne naciśnięcie przycisku trwające 5ms w ogóle zostało zauważone.
Jeśli potrzebujesz odczytywać temperaturę raz na 60s - robimy podobnie, z tym że wprowadzamy jakiś licznik, jeśli jest =59 to start konwersji, a za sekundę odczyt. Bez sensu byłoby odczytywać temperaturę sprzed minuty gdyby taki pik ustawić. W każdej piątej sekundzie? Warunek (licznik%5==0).
Chyba lepiej tak niż samemu sobie zawieszać program.
Pik można ustawić też na 100ms i robić różne ciekawe rzeczy, w pierwszym odczytać DS i zażądać pomiaru, w drugim wilgotność, w trzecim ciśnienie, w czwartym pomiar prędkości wiatru, w piątym pogadać z innym arduino, w szóstym wysłać dane na LCD, w siódmym na serwer, w ósmym na UART, w każdym parzystym zmienić stan led 13 i odcień linijki ws2812b. Robimy to w stałym ustalonym przez siebie rytmie.