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



Teraz jest 10 maja 2026, o 15:31


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
PostNapisane: 12 kwi 2026, o 15:23 
Offline
Użytkownik

Dołączył(a): 12 kwi 2012
Posty: 115
Pomógł: 0

Mam kłopot z pomiarem wilgotności czujką BME280 (na I2C i ATmega168P). Korzystam z bibliotek Mirka ( MK_PRESSURE_HUMIDITY i MK_I2C). Czujka działa lecz mierzy wilgotność w dziwny sposób.
To znaczy mierzy ją na poziomie 83%. Gdy wystawię ją na delikatne słońce (przez szybę, firanę, z odległości 0,5m) to wilgotność spada do około 49%.
Oczywiście przy okazji rośnie temperatura o jakieś 3 stopnie.

Mam też inną czujkę tj. BME680 i odpalony program na STM32... Ta pokazuje około 44% co jest zgodne z higrometrem mechanicznym który posiadam.

Moje pytanie brzmi: czy mam źle skonfigurowaną bibliotekę (w tej chwili tryb Normal), czy uszkodzoną czujkę? Oczywiście program z biblioteką wykrywa BME280.
A może jest jakiś niuans do ustawienia dla tej czujki / biblioteki? Może coś zmieni tryb Forced? Ale dla niego trzeba chyba dodać jakiegoś delay-a.
Ma może ktoś doświadczenie w użytkowaniu tej czujki?

------------------------ [ Dodano po: 31 minutach ]

Zmiana na BME280_FORCED_MODE spowodowała to że wilgotność stanęła na 81,92% i nie reaguje. Chyba nie tędy droga.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 kwi 2026, o 17:05 
Offline
Użytkownik

Dołączył(a): 12 kwi 2012
Posty: 115
Pomógł: 0

Okazało się niestety że trafiłem na trefną czujkę. Drugi egzemplarz pokazuje dobrze wszystkie parametry. Przy okazji wyszła mi dziwna sytuacja. Biblioteka MK_PRESSURE_HUMIDITY wraz z MK_I2C gdy uruchomiłem przykład z biblioteki i odłączę czujkę BME280 wyświetla informację że jest podłączone BME280 a powinno zasygnalizować brak czujki.
Konfiguracja bibliotek to:
w mk_preasure_cfg.h:
#define USE_BME_BMP_280 1

w mk_i2c.h:
#define USE_TIMEOUTS 1
#define I2C_MODE 0
#define USE_SOFT_I2C 0

przy wyłączonym timeouts (0) program wpada w nieskończoną pętlę.

Pewnie popełniam jakiś błąd ale nie potrafię go znaleźć (zdebugować).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 kwi 2026, o 18:34 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27460
Lokalizacja: Szczecin
Pomógł: 1045

andrzej381 napisał(a):
przy wyłączonym timeouts (0) program wpada w nieskończoną pętlę.

Pewnie popełniam jakiś błąd ale nie potrafię go znaleźć (zdebugować).


Nie ma co debugować - gdy nie ma podłączonej czujki ma wpadać w nieskończoną pętlę - tak się robi w 90% projektów - Pomyśl sobie robisz czujnik wilgotności - nie ma czujki to jaki jest sens żeby działał? tu jest sytuacja zero jedynkowa ... co to da że będzie pokazywał że brak czujki skoro i tak wiesz że nie ma bo nie pokazuje pomiaru i jest zawieszony?

Biblioteka wprawdzie pozwala żeby to zmienić ale to jest zbytek po przełączeniu tej konfiguracji trzeba podstawić własnego callbacka jak to wynika z biblioteki - na pewno nic nie podstawiasz to i nic nie pokazuje dlatego tak jest. Ja tam bym nie kombinował ;) jak ci już działa czujniczek to znaczy że jest ok - jak odłączasz go dla testu i się zawiesza - też jest ok ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 kwi 2026, o 20:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 mar 2015
Posty: 332
Lokalizacja: Rybnik
Pomógł: 24

A ja z kolei powiem tak:
Skoro brak czujnika lub czujnik uszkodzony, to powinienem dostać informację chociażby taką: "Błąd czujnika. Sprawdź czujnik" I to tyle.
Wtedy jestem pewien, że cały układ działa (uC) ale są problemy z samym czujnikiem. Według mnie (ale tylko wg. mnie) tak się to powinno odbywać,
żeby nie trza było kombinować co nie działa. Nie działa czujnik i tyle. A tak? Może czujnik, może procek, może źle napisany program i się wysypał.
Myślę, że po to są instrukcje warunkowe typu IF, ELSE, żeby do tego celu to wykorzystać. Ja jestem tylko uczniem Mirka ale wg. mnie tak to powinno wyglądać.
Jeśli nie mam racji i się mylę, to uznajcie, że tej odpowiedzi nie było.

_________________
http://www.avrboss.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 kwi 2026, o 07:02 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27460
Lokalizacja: Szczecin
Pomógł: 1045

Ale jak ktoś chce to niech sobie dorabia ... niech się bawi ;) kto komu zabroni ... i tak po pewnym czasie będzie robił jak każdy inny bez takich zabaw....

W każdym bądź razie moja biblioteka daje różne możliwości i jedną z nich jest ustawienie Timeouts wtedy procek się nie zatrzymuje i można się bawić dalej w obsługę błędów - no w czym problem jak ktoś lubi rzeźbić ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 kwi 2026, o 16:12 
Offline
Użytkownik

Dołączył(a): 12 kwi 2012
Posty: 115
Pomógł: 0

Mam jeszcze jedno pytanie, teraz dotyczące pomiaru temperatury tą czujką (BME280) przy pomocy biblioteki Atnel-a.
W zasadzie to jest pytanie do Pana Mirka.
Wygląda na to że biblioteka dobrze oblicza temperaturę do -12,7 stopnia. Poniżej następuje przepełnienie zmiennej przechowującej temperaturę (*10) która to zmienna jest typu int8_t czyli może liczyć do -12,7*10 = -127 Czy wystarczy zmienić typ tej zmiennej na int16_t czy też jeszcze trzeba coś zmodyfikować? Jeśli się mylę to proszę o poprawienie mnie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 kwi 2026, o 20:09 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27460
Lokalizacja: Szczecin
Pomógł: 1045

andrzej381 napisał(a):
Mam jeszcze jedno pytanie, teraz dotyczące pomiaru temperatury tą czujką (BME280) przy pomocy biblioteki Atnel-a.
W zasadzie to jest pytanie do Pana Mirka.
Wygląda na to że biblioteka dobrze oblicza temperaturę do -12,7 stopnia. Poniżej następuje przepełnienie zmiennej przechowującej temperaturę (*10) która to zmienna jest typu int8_t czyli może liczyć do -12,7*10 = -127 Czy wystarczy zmienić typ tej zmiennej na int16_t czy też jeszcze trzeba coś zmodyfikować? Jeśli się mylę to proszę o poprawienie mnie.

Tak jest mały babolek ale w środku wystarczy zmienić wartość jednej zmiennej z uint32_t na int32_t w bibliotece

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2026, o 11:17 
Offline
Użytkownik

Dołączył(a): 12 kwi 2012
Posty: 115
Pomógł: 0

mirekk36 napisał(a):
andrzej381 napisał(a):
Mam jeszcze jedno pytanie, teraz dotyczące pomiaru temperatury tą czujką (BME280) przy pomocy biblioteki Atnel-a.
W zasadzie to jest pytanie do Pana Mirka.
Wygląda na to że biblioteka dobrze oblicza temperaturę do -12,7 stopnia. Poniżej następuje przepełnienie zmiennej przechowującej temperaturę (*10) która to zmienna jest typu int8_t czyli może liczyć do -12,7*10 = -127 Czy wystarczy zmienić typ tej zmiennej na int16_t czy też jeszcze trzeba coś zmodyfikować? Jeśli się mylę to proszę o poprawienie mnie.

Tak jest mały babolek ale w środku wystarczy zmienić wartość jednej zmiennej z uint32_t na int32_t w bibliotece


A nie jest zmiana potrzebna w funkcji: uint8_t bmpe280_read_temp( int8_t * at_int, uint8_t * at_fract )
gdzie trzeba: int8_t * at_int zastąpić: int16_t * at_int?

Moja wiedza jest dosyć skromna więc się dopytuję.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2026, o 19:01 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27460
Lokalizacja: Szczecin
Pomógł: 1045

andrzej381 napisał(a):
A nie jest zmiana potrzebna w funkcji: uint8_t bmpe280_read_temp( int8_t * at_int, uint8_t * at_fract )
gdzie trzeba: int8_t * at_int zastąpić: int16_t * at_int?

Pomyśl - at_int przechowuje wartość temperatury przed przecinkiem tak? i jest przecież typu int8_t a nie uint ... int16_t byłoby potrzebne gdyby ujemne temperatury miałyby być niższe niż -127 stC a przecież nigdy takich nie będzie ;)

mówię ci zajrzyj do biblioteki - popatrz sobie na spokojnie i w jednej z funkcji zobaczysz uint32_t - tam trzeba zmienić na int32_t ... to będzie dla ciebie wyzwanie i sam się ucieszysz że ci wyszło ;) a jeśli nie to pokaż tu funkcję którą próbujesz poprawiać to ja wtedy ci chętnie pomogę ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2026, o 20:27 
Offline
Użytkownik

Dołączył(a): 12 kwi 2012
Posty: 115
Pomógł: 0

Według mnie chodzi o funkcję:
uint8_t bmpe280_read_temp( int8_t * at_int, uint8_t * at_fract )

Przeglądając dokumentację czujki BME280 (strona 23) znalazłem formułę obliczeniową z której powinienem wyciągnąć wnioski.
Stawiam na: uint32_t adc_T
to tutaj chyba powinno być int32_t adc_T

W dokumentacji ta zmienna jest: BME280_S32_t T; (tam jest zmienna ze znakiem)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2026, o 21:40 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27460
Lokalizacja: Szczecin
Pomógł: 1045

no to zmieniaj sprawdzaj i daj znać ;) toż co ci szkodzi sprawdzić i pobawić się chwilę kodem - to sama przyjemność jak sam naprawisz sobie a jak skill rośnie - tyle że ja mówię o kodzie biblioteki którą masz z atnela a ty opisujesz dokumentację - co sam chcesz pisać libsa od nowa ? ok to też wyzwanie ale póki co polecam ci prostszą drogę - popraw libsa z atnela wiele osób to zrobiło ;) dawaj i czekam na wyniki

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 kwi 2026, o 10:46 
Offline
Użytkownik

Dołączył(a): 12 kwi 2012
Posty: 115
Pomógł: 0

mirekk36 napisał(a):
no to zmieniaj sprawdzaj i daj znać ;) toż co ci szkodzi sprawdzić i pobawić się chwilę kodem - to sama przyjemność jak sam naprawisz sobie a jak skill rośnie - tyle że ja mówię o kodzie biblioteki którą masz z atnela a ty opisujesz dokumentację - co sam chcesz pisać libsa od nowa ? ok to też wyzwanie ale póki co polecam ci prostszą drogę - popraw libsa z atnela wiele osób to zrobiło ;) dawaj i czekam na wyniki


Nazwa funkcji i zmiennej (oraz jej typ) są z biblioteki Atnela. Więc odwołuję się do tej biblioteki. W dokumentacji czujki był przykład obliczeń który analizowałem wraz z biblioteką Atnela.
Jest jeszcze jedno miejsce w bibliotece do ewentualnej zmiany.
W kodzie jest linia: tmp_temperature = var1 + var2;
w której zmienne var1 i var2 są typu int32_t
a zmienna tmp_temperature jest typu uint32_t
To może być potencjalny błąd bo dodajemy 2 zmienne ze znakiem to dlaczego wynik jest tylko dodatni (zmienna bez znaku)?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2026, o 11:07 
Offline
Użytkownik

Dołączył(a): 12 kwi 2012
Posty: 115
Pomógł: 0

Analizując funkcję z biblioteki ATNELa deklarowaną jako:

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

I podpierając się sztuczną inteligencją otrzymałem poprawione ciało funkcji.
Jestem w trakcie testów.
Zmian jest trochę więcej niż jedna zamiana typu zmiennej z uint32_t na int32_t.
Domyślam się że p. Mirek mnie skarci za podpieranie się AI.

Myślę, że nie powinienem ciała tej funkcji publikować ze względu na prawa autorskie ATNELa do tej biblioteki. Chyba że p.Mirek zezwoli.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 kwi 2026, o 10:03 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27460
Lokalizacja: Szczecin
Pomógł: 1045

Domyślam się że p. Mirek mnie skarci za podpieranie się AI.
ABSOLUTNIE Cię nie skarcę! ;) wręcz przeciwnie ! AI to normalne narzędzie a kto dzisiaj się nim nie posługuje ten traci

jak dla mnie zadziałałeś super i myślę że nawet jeśli z AI to naprawiłeś to i tak już chyba wiesz o co chodzi no nie ? :)

andrzej381 napisał(a):
Myślę, że nie powinienem ciała tej funkcji publikować ze względu na prawa autorskie ATNELa do tej biblioteki. Chyba że p.Mirek zezwoli.


Bardzo dziękuję za to zdanie widać że szanujesz prawa autorkie, bardzo mi miło ale tak pozwalam żebyś tu pokazał ciało tej funkcji skoro w bibliotece jest błąd a tylko jedną funkcję jak pokażesz to nic się nie stanie

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 kwi 2026, o 13:55 
Offline
Użytkownik

Dołączył(a): 12 kwi 2012
Posty: 115
Pomógł: 0

Dziękuję za zgodę. Nie wiem czy jest ok. P. Mirek zweryfikuje to, mam nadzieję. Pojawia się dodatkowa zmienna i trzeba troszkę pozmieniać w bibliotece.
Ale patrząc na logi kompilacji każdy dojdzie do tego co jeszcze trzeba zmienić. Funkcja wygląda tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


U mnie przeszło testy. Proszę o feedback.



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

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