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? 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 30 maja 2025, o 06:51


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
    Autor Wiadomość
    PostNapisane: 20 gru 2017, o 01:20 
    Offline
    Nowy

    Dołączył(a): 28 lis 2017
    Posty: 4
    Pomógł: 0

    Cześć!
    To mój pierwszy post na forum.
    Nie potrafię sobie poradzić z wyznaczeniem funkcji do obsługi pomiaru czujnika temperatury TMP36.
    Czujnik podłączam do ADC0.
    Używam ATmegi32.
    Wynik wyświetlam na wyświetlaczu OLED, korzystam z bibliotek Pana Mirka.
    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.


    Według wzoru do obliczania temperatury trzeba zastosować wzór:

    Temp in °C = [(Vout in mV) - 500] / 10

    Dziękuję za jakąkolwiek pomoc :)


    Edytowałam, bo dodałam wcześniej starszą wersję kodu.
    Dodam, że pomiar wynosi 71 stopni, a temperatura z czujnika 1-wire 24 stopnie.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 gru 2017, o 14:04 
    Offline
    Użytkownik

    Dołączył(a): 16 lis 2013
    Posty: 34
    Pomógł: 3

    We wzorze masz podane, że najpierw odejmujesz 500 a potem dzielisz lub mnożysz.
    Ty robisz odwrotnie definiując zmienną temperatura



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 gru 2017, o 16:07 
    Offline
    Nowy

    Dołączył(a): 28 lis 2017
    Posty: 4
    Pomógł: 0

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

    mnożę razy tysiąc żeby przejść na mV. Czy to złe podejście?
    W takim razie jak mogę zapisać to poprawnie?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 gru 2017, o 21:47 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Jakie masz źródło odniesienia? To co Ci podaje przetwornik ADC (GetTemperature) to nie są wolty, ADC zwraca wynik od 0 do 1023, gdzie 1023 to właśnie napięcie odniesienia.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 gru 2017, o 21:51 
    Offline
    Nowy

    Dołączył(a): 28 lis 2017
    Posty: 4
    Pomógł: 0

    Wybrałam źródło odniesienia 2,56V



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 gru 2017, o 21:54 
    Offline
    Użytkownik
    Avatar użytkownika

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

    W takim razie napięcie, które odczytujesz jest równe GetTemperature(0) * 2,56 / 1023, w miliwoltach - GetTemperature(0) * 2560 / 1023


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


    Wtedy nazwa funkcji byłaby adekwatna do tego co robi, bo tak funkcja GetTemperature wskazuje tylko wynik od pana przetwornika :D



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 gru 2017, o 22:06 
    Offline
    Nowy

    Dołączył(a): 28 lis 2017
    Posty: 4
    Pomógł: 0

    Dzięki, zaraz wypróbuję ;)

    ------------------------ [ Dodano po: 3 minutach ]

    Widzę, że użyłeś floata.
    A można do tego używać uint16_t lub któryś z tych typów? Zależy mi na pamięci.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 gru 2017, o 22:17 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Zamieniając poprostu float na uint16_t stracisz część ułamkową, pewnie da się obejść, np mnożąc przez 100 i potem dzieląc to na część ułamkową i całkowitą, jeżeli uważasz, że warto to proszę bardzo :)



    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: 8 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 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