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



Teraz jest 28 mar 2024, o 19:36


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 8 sie 2018, o 16:35 
Offline
Użytkownik

Dołączył(a): 22 lut 2014
Posty: 205
Lokalizacja: Poznań
Pomógł: 22

Cześć,
niedawno zakupiłem na aliexpress 10szt czujników mcp9808. Zabrałem się za napisanie biblioteki do tych czujniczków i zaprojektowałem prototyp (mcp9808 + bh1750 (czujnik oświetlenia, także na i2c). Po polutowaniu, podłączyłem i nie było żadnych problemów z komunikacją z nimi :). Ale niestety mcp9808 mierzą o około 10C za mało (testowane na 2 szt). Z bh1750 odczytuje poprawne wartości :)

O to mój kod :)


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


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


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


Schemat:
Obrazek

Rezystory od R6 do R9 nie są wlutowane.

Testy, które wykonałem:
1. Wylutowanie bh1750 i testy z samym mcp9808
2. Odczyt "na żywca" danych z rejestrów i przeliczenie "ręcznie"

Wnioski:
Ad.1 Wylutowanie bh1750 nie poprawiło sytuacji
AD.2 Przeliczenie "ręcznie" pokrywa się z wynikiem obliczenie przez procesor (czyli mniej o około 10C).

Pytanie:
Czy ktoś z Was próbował gadać z tym czujnikiem? Jakie były efekty? Mało prawdopodobne ale czy mogłem zakupić wadliwe sztuki?

Liczę na Waszą pomoc :)

Jeśli zapomniałem czegoś napisać w tym poście to śmiało dopytajcie, chętnie odpowiem

Pozdrawiam
Dawid :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sie 2018, o 17:21 
Offline
Użytkownik
Avatar użytkownika

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

cześć
Tak myślę, że pewnie trzeba przed pomiarem ustawić na starcie pewne rejestry odpowiedzialne za rozdzielczość pomiaru, histerezę itd.
Czy czasem nie za mało bitów odczytujesz z rejestru "ambient temperature"?

_________________
Pomóżcie mi stanąć na nogi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sie 2018, o 17:29 
Offline
Użytkownik

Dołączył(a): 22 lut 2014
Posty: 205
Lokalizacja: Poznań
Pomógł: 22

Na starcie czujnik ma jakieś defaultowe ustawienia. Na chłopski rozum nie wpływające na wynik pomiaru. Standardowo rozdzielczość pomiaru to 0,0625C i z taką dokładnością odczytuje wynik.

Z rejestru odczytuje 16 bitów. Zgodnie z notą katalogową maskuje starszą część i wykonuje obliczenia:
Obrazek

Na razie nie analizujmy ujemnych temperatur. Błąd który mam dotyczy temperatur dodatnich. Nie wiem czy występuje przy temperaturach ujemnych. Po umieszczeniu czujnika w zamrażalniku pokazał -13C całkiem prawdopodobny wynik ale nie miałem pomiaru wykonanego referencyjnym termometrem :) .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sie 2018, o 17:53 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

Najprostszy miarodajny (w miarę ;) ) test to woda zmieszana z lodem ( ale odpowiednio długo mrożona ).
Jeżeli czujnik chiński to może być podróbka ( wspominano o tym w sieci).

Spróbuj rozbić wynik funkcji od razu na część całkowitą i ułamkową ( bez floatów ) i zobacz czy wyjdzie to samo.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sie 2018, o 18:18 
Offline
Użytkownik

Dołączył(a): 22 lut 2014
Posty: 205
Lokalizacja: Poznań
Pomógł: 22

Obecnie w moim pokoju jest 30C. Wartość odczytana z rejestru ambient temperature to: 0xc1 0x4d.

obliczenia:
UpperByte 0xc1 = 0b1100 0001
maska 0x1f = 0b0001 1111
UpperByte & maska = 0b1100 0001 & 0b0001 1111 = 0b0000 0001

LowerByte 0x4d = 0b0100 1101

UpperByte * 16 + LowerByte / 16 = 0b0001 0000 + 0b0000 0100,1101 = 0b0001 0100,1101 = 20,8125C



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sie 2018, o 18:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 gru 2013
Posty: 121
Pomógł: 16

Miałem randkę z tym czujnikiem :) .Masz tu mały artykulik o tym czujniku razem z kodem dla PIC32MM http://strefapic.blogspot.com/2018/05/mcp9808-cyfrowy-czujnik-temperatury-od.html kod przetestowany i działa dobrze, więc można sobie podejrzeć . 10 stopni jak piszesz to mega dużo i myślę, że to problem kodu raczej, w artykule masz dokładnie wskazane gdzie najczęściej popełnia się błąd przy odczycie temperatury w tym czujniku. Z moich doświadczeń z tym w sumie uroczym czujniczku mogę napisać , że koniecznie trzeba zastosować się do zaleceń producenta odnośnie termal pada pod czujnikiem i prowadzenia ścieżek, jeśli tego nie zrobisz to czujnik będzie ci zawyżał temperaturę.

Pozdrawiam

_________________
http://strefapic.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sie 2018, o 18:57 
Offline
Użytkownik

Dołączył(a): 22 lut 2014
Posty: 205
Lokalizacja: Poznań
Pomógł: 22

Mój PCB wygląda tak:
Obrazek

odbiega trochę od tego co jest w datasheecie ale ja mam czujnik w obudowie MSOP więc nie mam thermal pad (EP9). Poza tym mój czujnik zaniża temperaturę a nie zawyża :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sie 2018, o 21:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 gru 2013
Posty: 121
Pomógł: 16

gumeni napisał(a):
....odbiega trochę od tego co jest w datasheecie ale ja mam czujnik w obudowie MSOP więc nie mam thermal pad (EP9). Poza tym mój czujnik zaniża temperaturę a nie zawyża :)


Jak się uporasz z zaniżaniem (kod) to następnym problemem będzie zawyżanie :) a jest na to duże p-stwo bo prowadzisz grubego pytona zasilającego pod czujnikiem :)
W datasheet jest przykładowy rozkład akurat dla obudowy DFN ale idea dotyczy również MSOP-a : " For good temperature sensitivity, add a ground
layer under the device pins, as shown in Figure 6-1"

Pozdrawiam

_________________
http://strefapic.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sie 2018, o 21:23 
Offline
Użytkownik

Dołączył(a): 22 lut 2014
Posty: 205
Lokalizacja: Poznań
Pomógł: 22

Okej. Dziękuję za podpowiedzi w projekcie PCB. W docelowym PCB zrobię wszystko zgodnie ze sztuka (frezowanie do okoła czujnika).
Zamówiłem przed chwilą mcp9808 z bootland jak przyjdzie to sprawdzę czy działa inaczej niż te z aliexpress.
Pozdrawiam i dziękuję za zainteresowanie tematem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sie 2018, o 16:26 
Offline
Użytkownik

Dołączył(a): 22 lut 2014
Posty: 205
Lokalizacja: Poznań
Pomógł: 22

Właśnie podłączyłem mcp9808 z botlandu i działa prawidłowo :). Przepraszam za zamieszanie.

Pozdrawiam
Dawid



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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