Skocz do zawartości
SOYER

Podłaczenie czujników TMP36GT9Z

Pomocna odpowiedź

7 minut temu, SOYER napisał:

Jednak co za róznica czy odczyt=0 jest przed pętlą czy po zakończeniu obliczeń

A jaka jest różnica, czy najpierw posmarujesz bułkę masłem a potem ją zjesz - czy najpierw zjesz bułkę a potem zakąsisz masłem?

Być może Twoja konstrukcja będzie działać - to zależy od reszty programu. I może się tak zdarzyć, że resztę za rok sobie zmienisz i wtedy być może działać przestania.

A w informatyce nie ma miejsca na być może...

Spójrz: ja przygotowuję sobie zmienną poprzez jej wyzerowanie, potem coś do niej dodaję i na końcu odczytuję wynik. Ty dodajesz cząstkowe wyniki (do czego?) nie dbając o to, jaki jest stan początkowy. Pół biedy jeśli zmienna jest globalna lub statyczna - wtedy inicjalizowana jest zerem. Ale jeśli jest dynamiczna (co ma sens, bo nie powinna istnieć poza chwilą pomiaru) - w zmiennej może się znaleźć cokolwiek, i masz szansę 1:65536 że będzie to zero... a zerowanie zmiennej po dokonaniu obliczeń to właśnie zakąszanie bułki masłem 🙂

Przyzwyczaj się do pewnych zasad w programowaniu - pisząc tak jak Ci pokazałem nie narazisz się na różne przykre niespodzianki, a ktoś czytając Twój kod będzie od razu wiedział o co chodzi a nie zastanawiał się, do czego właściwie te wyniki pomiarów dodajesz.

 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Dokładnie jak piszesz. 

Wczoraj jak kominowałem z tym kodem to też pierwsze odczyty były z d... Maryny, dopiero później się zorientowałem, że zadeklarowałem zmienną globalną, a na dzień dobry nie ustawiłem jej na zero. 

Oczywiście w tym przypadku lepiej zrobić ją lokalną przed pętlą, od razu ustawiając ją na "0". 

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Ok, @marek1707na lini danych czujnika temperatury grzejniki, wpiąłem szeregowo rezystor 220 Om, oraz połączyłem tą linię z masą poprzez kondensator 470nF. Różnicy w skokach nie widzę, jedynie wyniki przeniosły się o kilka stopni w górę, co widać na drugim wykresie. Oczywiście nadal działa filtrowanie programowe na wszystkich trzech termometrach.

Czy takie przeniesienie odczytów w trochę inny zakres jest ok? Nadmienię, że teraz odczyty są zbliżone do tych z czujnika sterownika pieca, zamontowane go w prawie tym samym miejscu. 

Ten pik to czas wpięcia opornika i kondensatora. Oba wpięte 10 cm od wejścia Arduino. 

Screenshot_20190520-115949.jpg

Screenshot_20190520-120000.jpg

Edytowano przez SOYER

Udostępnij ten post


Link to post
Share on other sites

Może gdy patrzysz na te rysunki to dla Ciebie jest oczywiste co i kiedy. Ja nie rozumiem wykresów. Może przydałyby się jakieś strzałki oznaczone A, B, C z jakąś legendą?

No ale skupmy się tylko na tym co napisałeś o wzroście wyników. W czystych warunkach, gdy wejście ADC nie pobiera prądu to ani rezystor szeregowy ani kondensator równoległy nie powinny spowodować zmian wartości DC. Jeżeli tak się dzieje, to znaczy, że przez rezystor płynie jakiś prąd dając spadek napięcia. Jeżeli wyniki wzrosły to napięcie także wzrosło a to oznacza, że prąd wypływa z wejścia ADC w kierunku czujnika. Jeżeli pominiemy możliwy wpływ jakiegoś dziwnego kondensatora to wygląda mi to na włączony pullup na wejściu ADC. Zobaczmy: podciąganie ok. 50k do Vcc wraz z opornikiem 220R robią dzielnik dający ok. 20mV a to są 2 stopnie temperatury. Jakoś dziwnie pasuje... W każdym razie 20mV zmiany na 220R to prąd ok. 100uA - nawet da się zmierzyć. Poszukaj go.

A jeśli chcesz badać działanie układu RC to wyłącz wszelkie filtrowania cyfrowe i wtedy obserwuj zmiany. Nie musisz bawić się w porównywanie obrazków - to nie przedszkole. Wystarczy,, że Twój program będzie liczył jakąś statystykę z np. kilkuset ostatnich pomiarów i w sposób ilościowy pokazywał wyniki (odchylenie standardowe, wariancja?). Masz wtedy liczby pozwalające konkretnie ocenić jakość rozwiązań. Próbuj z różnymi wartościami: 220R, 1k, 5k1 i tak samo: 470nF, 2u2, 10uF itd. Dla usuwania 50Hz potrzebujesz filtra conajmniej 1k/10u, ale 1k da już zmianę o 10 stopni więc kluczowe jest znalezienie źródła tych dziwnych 100uA.

 

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites
Dnia 21.05.2019 o 12:26, marek1707 napisał:

 

Tak się zastanawiałem nad jeszcze jednym. Czujniki mam zasilane z przetwornicy, Arduino z osobnego zasilacza. Czy ten kondensator ma być między linią danych, a masą czujnika(z przetwornicy), czy do masy arduino? W sumie masy są i tak połączone... 

Udostępnij ten post


Link to post
Share on other sites

Ma filtrować sygnał, który widzi ADC - a ten jest wbudowany w krzem procesora i mierzy między wejściem Ax a masą procesora/Arduino. Kondensator filtra musi być zatem bezpośrednio między pinem analogowym a GND płytki komputerka. Tak samo do tej masy muszą być podłączone kable GND czujników.Zasilanie jest mniej krytyczne (bo czujniki mają dobry PSRR, pamiętasz?), ale dobrym zwyczajem byłoby zapodanie im najlepszego zasilania jakie możesz, a takie na pewno powstaje w liniowym stabilizatorze Arduino. Możesz dać nawet między Vcc Arduino a punktem rozejścia kabli Vcc na trzy czujniki rezystor 100R i wtedy już obowiązkowo kondensator przy każdym czujniku albo chociaż jeden w punkcie wspólnym (za opornikiem, po stronie czujników oczywiście) do masy.

Znalazłeś skąd płynie prąd?

Udostępnij ten post


Link to post
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »

×