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



Teraz jest 25 wrz 2018, o 21:48


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 16 wrz 2018, o 20:04 
Offline
Użytkownik

Dołączył(a): 08 lut 2017
Posty: 58
Pomógł: 0

Witam

Mam problem z obsługą czujnika BME280. Korzystam z biblioteki znalezionej w necie.

pilk bme280.c

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


plik bme280.h

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


Przez kilka dni byłem przekonany, że wszystko działa, ale dzisiaj postanowiłem schłodzić czujnik poniżej 0 stopni Celsiusza i zamiast -1 czy ciut chłodniej, temperatura od razu wskoczyła na -28837

Ktoś pomoże gdzie jest błąd? Albo może ktoś ma sprawdzoną bibliotekę którą może się podzielić?



Ostatnio edytowano 16 wrz 2018, o 21:56 przez ammorapl, łącznie edytowano 1 raz

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

Dołączył(a): 26 mar 2018
Posty: 13
Pomógł: 2

https://github.com/BoschSensortec/BME280_driver



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 wrz 2018, o 20:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2014
Posty: 715
Lokalizacja: pod Warszawą
Pomógł: 52

Prawdopodobnie przekroczyłeś zakres którejś ze zmiennych do obliczania temperatury.
Uważaj na schładzanie zamrażaczem bo ja tak uszkodziłem BMP180 - przestał mierzyć ciśnienie...

_________________
Pomóżcie mi stanąć na nogi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 wrz 2018, o 21:14 
Offline
Użytkownik

Dołączył(a): 08 lut 2017
Posty: 58
Pomógł: 0

Też mi się to kojarzy z przekroczeniem wartości zmiennej, ale której?

------------------------ [ Dodano po: 25 minutach ]

kalani napisał(a):
https://github.com/BoschSensortec/BME280_driver


Mocno rozbudowana biblioteka napisana dla linuxa. Uruchamiałeś ją na AVR?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2018, o 09:13 
Offline
Nowy

Dołączył(a): 26 mar 2018
Posty: 13
Pomógł: 2

ammorapl napisał(a):
napisana dla linuxa


Nie, lib jest całkowicie oderwany od sprzętu. Jedyny styk ze sprzętem to deklaracja trzech callbacków, które realizują opóźnienie i komunikację.

ammorapl napisał(a):
Uruchamiałeś ją na AVR?


Tak, to żadna filozofia, wszystko jest opisane pod linkiem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 wrz 2018, o 10:55 
Offline
Użytkownik

Dołączył(a): 08 lut 2017
Posty: 58
Pomógł: 0

Znalazłem gdzie leży problem, ale nie wiem jak go rozwiązać. Zacząłem sobie wyświetlać wartości różnych zmiennych i wszystko się zgadzało do ostatniego momentu kiedy wyliczana jest wartość temperatury w stopniach celsiusza.

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


Problem polega na tym, że jeżeli zmienna T jest ujemna, to jej podzielenie daje błędny wynik.

przykładowo wartość T = 2357 daje wynik 23,57
ale jeżeli T = -2371 daje wynik -28860.4



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 wrz 2018, o 11:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2014
Posty: 715
Lokalizacja: pod Warszawą
Pomógł: 52

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

i po zawodach

_________________
Pomóżcie mi stanąć na nogi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 wrz 2018, o 23:09 
Offline
Użytkownik

Dołączył(a): 08 lut 2017
Posty: 58
Pomógł: 0

Niestety nic to nie daje. Co ciekawe, w ARDUINO ta zmienna jest właśnie typu int32_t, a kod z arduino działa prawidłowo. Tak wygląda funkcja obliczania temperatury.

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


Porównywałem wartości zmiennych odczytanych w ARDUINO z tymi z C i są identyczne do momentu podzielenia przez 100.

Ktoś ma jakieś pomysły dlaczego tak jest i jak to naprawić?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 wrz 2018, o 10:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2014
Posty: 715
Lokalizacja: pod Warszawą
Pomógł: 52

pewnie zmienną T zadeklarowaną jako float więc zmień to i będzie dobrze

_________________
Pomóżcie mi stanąć na nogi



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 2 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO