Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 25 maja 2025, o 05:26


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
    Autor Wiadomość
    PostNapisane: 16 sty 2021, o 11:52 
    Offline
    Użytkownik

    Dołączył(a): 09 sty 2021
    Posty: 66
    Pomógł: 0

    Witam, próbuję zrobić termometr z ATmegi32A-PU i czujnika temperatury TMP36. Mam problem przy uśrednianiu wartości ADC. Mój sposób polega na tym, że do 6 elementowej tablicy zapisuję kolejne wartości ADC, potem je sumuje i dzielę przez 6. Niestety po tych działaniach wartość temperatury nie uśrednia mi się poprawnie, bo na LCD pokazują się bardzo duże i dodatkowo ujemne wartości. Czy mój pomysł jest dobry, a jeżeli tak to gdzie jest błąd w jego realizacji i co mam zmienić w kodzie? Czy może lepiej byłoby zbierać wyniki z ADC w przerwaniu timera, np. co 10ms, a potem w pętli głównej go uśredniać?

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 sty 2021, o 15:22 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2015
    Posty: 190
    Pomógł: 11

    Spróbuj wyczyścić buffor values[] po uśrednianiu. Np. funkcja memset(values, '0', 6);



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 sty 2021, o 16:31 
    Offline
    Użytkownik

    Dołączył(a): 09 sty 2021
    Posty: 66
    Pomógł: 0

    Hmm, nie działa :(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 sty 2021, o 10:16 
    Offline
    Użytkownik

    Dołączył(a): 07 gru 2013
    Posty: 90
    Pomógł: 6

    zamiast values[counter] = ADC; nie powinno być values[counter] = ADCW;



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 sty 2021, o 11:44 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2015
    Posty: 190
    Pomógł: 11

    jony15 napisał(a):
    zamiast values[counter] = ADC; nie powinno być values[counter] = ADCW;

    ADC i ADCW dają tę samą funkcjonalność, łączą rejestry ADCL i ADCH. Odrębne nazwy powstały na potrzeby wykorzystania w asemblerze. Bowiem asembler obsługuje tylko ADCW.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 sty 2021, o 12:47 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 03 lip 2017
    Posty: 140
    Pomógł: 6

    Proponuję zacząć od początku. Czy adc w ogóle mierzy co powinien (wystarczy dotknąć raz do masy raz do vcc i odpowiedź powinna przyjść sama :D) oraz czy funkcją LCD_WriteText w ogóle możesz wyświetlać liczby ;)?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 sty 2021, o 14:16 
    Offline
    Użytkownik

    Dołączył(a): 09 sty 2021
    Posty: 66
    Pomógł: 0

    DarkMajster napisał(a):
    Proponuję zacząć od początku. Czy adc w ogóle mierzy co powinien (wystarczy dotknąć raz do masy raz do vcc i odpowiedź powinna przyjść sama :D)


    Tak, ADC na pewno liczy to co powinno liczyć (sprawdzałem). Co do funkcji "LCD_WriteText()" to nie może ona wyświetlać liczb dlatego używam tutaj funkcji "itoa()". Próbowałem też użyć "średniej ciągniętej" tak jak tutaj. Zrobiłem dokładnie tak samo jak autor i dalej wyświetla mi się zaniżona wartość temperatury. Zerknie ktoś gdzie tu jest błąd? To rozwiązanie musi być dobre. Nie wiem dlaczego, ale jak chcę wyświetlić wartość ADC obliczoną ze średniej to nic się nie pokazuje.

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 sty 2021, o 16:10 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2015
    Posty: 190
    Pomógł: 11

    antosV10 napisał(a):
    bo na LCD pokazują się bardzo duże i dodatkowo ujemne wartości.

    Konkretnie jakie to wartości?

    Przetestowałem algorytm "na szybko" u siebie. Poniżej wynik pomiarów i kod testujący:

    U[V] | T[°C]
    0.0000 -50.000
    0.2050 -29.500
    0.4045 -9.250
    0.7010 +21.750
    1.0000 +52.250
    1.4002 +93.750

    Obrazek

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Błąd pomiaru TMP36 jest na poziomie około ±2°C. Wynika z tego, że przy napięciu z czujnika Vout = 1.0000V, wartość temperatury powinna mieścić się w przedziale od +48.000 do +52.000°C



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 sty 2021, o 21:55 
    Offline
    Użytkownik

    Dołączył(a): 09 sty 2021
    Posty: 66
    Pomógł: 0

    No więc temperatury zgadzają się u mnie z napięciem i wyglądają podobnie tak jak napisałeś. Dlaczego tylko te liczby po przecinku to tylko 0, 2, 5, 7, 9.
    Chciałbym po prostu, żeby pojawiały się też inne wartości, np. 6, 3, 1 itd... Próbowałem też napisać program od nowa, ale znowu się zatrzymałem na mierzeniu średniej innym sposobem, który przedstawiał Pan Kardaś w jednym swoich odcinków dotyczących ADC. Średnia krocząca też mi nie działa.

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO