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



Teraz jest 9 sty 2025, o 18:34


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 31 mar 2017, o 12:07 
Offline
Użytkownik
Avatar użytkownika

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

Witam Kolegów

Zakupiłem niedawno od kolegów ze wschodu czujnik wilgotności i temperatury Si7021

Obrazek

Czujnik na płytce posiada stabilizator 3,3V oraz układ translacji poziomów 3,3V->5V tak więc można go podłączyć bezpośrednio pod zasilanie 5V.
Czujnik komunikuje się z procesorem za pomocą I2C.
Link do dokumentacji http://www.silabs.com/documents/public/data-sheets/Si7021-A20.pdf

Ponieważ na forum nie znalazłem informacji na temat tego czujnika pozwalam sobie na zamieszczenie mojego opracowania.
Oto kod:

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


Do projektu zaimportowane są biblioteki z BB LCD oraz I2C
Jak widzicie w przerwaniu Timera2 oprócz programowego Timera1 napędzam sobie zmienną "c" która jest czymś w rodzaju timera programowego a posłużyła do cyklicznego odczytu pomiarów z czujnika ~co 20s.
Do odczytu danych służy funkcja TWI_read_buf - tu odsyłam do BB
Funkcja zapisuje dane MSB i LSB do buforów "uint8_t temp[3];" dla temperatury i "uint8_t rh[3];" dla wilgotności.

Następnie za pomocą funkcji "void View_Temp(void);" i "void View_RH(void);" dokonuję obliczeń wartości temperatury i ciśnienia wyświetlając jednocześnie dane na LCD.

Tak to się prezentuje ostatecznie
Obrazek

Na uwagę zasługuje sposób obliczania temperatury.
Chcąc uniknąć liczb zmiennoprzecinkowych po prostu wystarczyło przesunąć przecinek w dwóch wartościach żeby wynik otrzymać w postaci całkowitej. Sposób opisany w BB
Oprócz tego należało za pomocą dodatkowych warunków "if" zająć się wyświetlaniem temperatur ujemnych.
Jeżeli część całkowita temperatury była równa zero a część ułamkowa już na minusie to otrzymywałem na LCD
Obrazek
dlatego część ułamkowa jest mnożona przez "-1" a dodatkowo badam czy już zeszliśmy poniżej zera i sztucznie jest wstawiany znak "-"
Obrazek
a tu przejście przez "0"
Obrazek

W pętli głównej migam sobie diodą ot tak żeby wiedzieć, że nic się nie blokuje....
Post umieściłem w dziale dla początkujących bo jestem początkujący i proszę o uwagi na temat kodu.

pozdrawiam Marek

_________________
Pomóżcie mi stanąć na nogi



Ostatnio edytowano 31 mar 2017, o 13:54 przez mczarny, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 mar 2017, o 12:13 
Offline
Użytkownik

Dołączył(a): 05 kwi 2014
Posty: 339
Pomógł: 10

"Funkcja zapisuje dane MSB i LSB do buforów "uint8_t temp[3];" dla temperatury i "uint8_t rh[3];" dla ciśnienia." - wilgotnosci:)
Ja zrobilem podobnie, ale bez bufora i timerow, prosty kod odczyt -wyswietl, tylko ze na ledowej matrycy + max7219.

Ale dzieki koledze sie udalo, cos mialem zamet w glowie i nie chcialo trybic..
Obrazek

a bedzie tak:
Zwykla szafa...
Obrazek

i tada:

Obrazek

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 mar 2017, o 18:22 
Offline
Użytkownik

Dołączył(a): 10 lip 2015
Posty: 334
Pomógł: 32

Pomysł z szafą pierwsza klasa. Sam chyba zrobię coś podobnego.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 kwi 2017, o 09:01 
Offline
Użytkownik
Avatar użytkownika

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

Ponad 200 wyświetleń i brak uwag....
Nic tylko się cieszyć i mam nadzieję, że się Wam przyda

_________________
Pomóżcie mi stanąć na nogi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 kwi 2017, o 13:12 
Offline
Użytkownik

Dołączył(a): 05 kwi 2014
Posty: 339
Pomógł: 10

jak skoncze moj projekt dodam swoje pliki:)
ja uwag nie mam, dziala wysmielicie:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2017, o 15:30 
Offline
Użytkownik
Avatar użytkownika

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

Dostałem wczoraj czujnik ciśnienia BMP180 więc trzeba było dołożyć kolejny pomiar.
Kody do czujnika prosto z YB więc nie opublikuję na forum.
Wszystkie pomiary działają w pętli - każdy pomiar jest dokonywany ~co 20s
Tak to wygląda na razie

_________________
Pomóżcie mi stanąć na nogi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 kwi 2017, o 15:12 
Offline
Użytkownik

Dołączył(a): 05 kwi 2014
Posty: 339
Pomógł: 10

BMP też posiada temperaturę;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 kwi 2017, o 19:19 
Offline
Użytkownik

Dołączył(a): 05 kwi 2014
Posty: 339
Pomógł: 10

tak sie zatanawiam czy:
temperature = -4685 + (17572*((uint32_t)temp_bits*100000>>16))/100000;
jest poprawnie..


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


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


my nie chcemy long, ale cos mi ten zapis nie pasuje...
Nie przekłamuje Tobie temperatury?
Mi o 1 stopień..

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


wg speka:
%RH = ((125*RH_Code)/65536 )-6

Temperature (C) = ((175,72*Temp_Code)/65536 )-46,85



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2017, o 13:39 
Offline
Użytkownik

Dołączył(a): 05 kwi 2014
Posty: 339
Pomógł: 10

Zrobilem troche inaczej:

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


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


temp = 2492 // czyli 24,92
hum = 26 //26%



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