• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
DS18S20 - długi czas odczytywania temperatury
#8
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.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Wiadomości w tym wątku
DS18S20 - długi czas odczytywania temperatury - przez bullseye - 17-12-2017, 17:15
RE: DS18S20 - długi czas odczytywania temperatury - przez bullseye - 18-12-2017, 09:06
RE: DS18S20 - długi czas odczytywania temperatury - przez bullseye - 18-12-2017, 10:24
RE: DS18S20 - długi czas odczytywania temperatury - przez bullseye - 18-12-2017, 12:01
RE: DS18S20 - długi czas odczytywania temperatury - przez kaczakat - 02-02-2018, 19:08

Skocz do:


Przeglądający: 1 gości