Witam,
Jeżeli napisałem w złym dziale, proszę moderatora o przeniesienie do właściwego.
Od kilku dni próbuję odczytać ciśnienie z czujnika LPS331AP. Czujnik ten jest podłączony do ATmega8 przez sprzętowe SPI (4 przewody) - SCL/SPC z PB.5 , SDA/SDI/SDO z PB.3, SDO/SA0 z PB.4 i CS z PB.0. Napięcie prawidłowo podłączone do czujnika. Całość zasilana z 3.3V. ATmega pracuje na kwarcu 8MHz. Rejestry są poprawnie zapisywane i odczytywane w tym rejestr WHO_AM_I (adres 0Fh wartość BBh). Problem pojawia się kiedy chcę odczytać wartość rejestru PRESS_OUT i TEMP_OUT. Zawartość tego ostatniego jest cały czas stała(mimo ogrzewania) i wynosi 0xfc ldla 0x2B i 0x7f dla 0x2C , a PRESS_OUT po przeliczeniu daje wartości większe od 1200hPa (mBar)(maleje przy ogrzewaniu do ok. 1050hPa) . Przed odczytaniem ciśnienia i temperatury do układu zapisuję 0x7A w rejestrze 0x10 (ustawienia pomiaru) oraz 0x96 (lub 0x94 lub 0x82) w rejestrze 0x20 (konfiguracja układu i odświeżania danych). Datasheet układu jest dostępny tu : http://www.kamami.pl/dl/lpd331ap.pdf . Poniżej dane odczytane z czujnika, które otrzymałem przez terminal z Atmegi.
Program pochodzi z przerobionego przykładu dla czujnika MPL115A1. Zapisuję nim dwa rejestry konfiguracyjne, po czym odczytuję wszystkie oraz cyklicznie temperaturę i ciśnienie.
Na chwilę obecną dane z czujnika przeliczam ręcznie wg. informacji z datasheet (str. 28 i 29.) otrzymane wartości zamieniam z zapisu szesnastkowego na dwójkowy i zapisuję w podanym ciągu PRESS_OUT_H PRESS_OUT_L PRESS_OUT_XL (kiedy to konieczne uzupełniam wartości z poszczególnych rejestrów zerami na początku, aby każdy element miał po 8 znaków), później całość przeliczam na zapis dziesiętny i dzielę przez 4096. Podobnie postępuję z temperaturą.
Czy dobrze rozumiem, że dane o temp. wyrażone są w °C ? ( datasheet "T(degC) = 42.5 + (Temp_OUTH & TEMP_OUT_L)[dec]/480")
Później planuję przeliczać to poniższym kodem:
Proszę o poradę w czym leży problem - w kodzie, w sposobie obsługi i konfiguracji czujnika, w błędnym sposobie przeliczania, czy też może jest prawdopodobieństwo, że czujnik jest uszkodzony.
Za odpowiedź z góry dziękuję.
Pozdrawiam,
Michał
Jeżeli napisałem w złym dziale, proszę moderatora o przeniesienie do właściwego.
Od kilku dni próbuję odczytać ciśnienie z czujnika LPS331AP. Czujnik ten jest podłączony do ATmega8 przez sprzętowe SPI (4 przewody) - SCL/SPC z PB.5 , SDA/SDI/SDO z PB.3, SDO/SA0 z PB.4 i CS z PB.0. Napięcie prawidłowo podłączone do czujnika. Całość zasilana z 3.3V. ATmega pracuje na kwarcu 8MHz. Rejestry są poprawnie zapisywane i odczytywane w tym rejestr WHO_AM_I (adres 0Fh wartość BBh). Problem pojawia się kiedy chcę odczytać wartość rejestru PRESS_OUT i TEMP_OUT. Zawartość tego ostatniego jest cały czas stała(mimo ogrzewania) i wynosi 0xfc ldla 0x2B i 0x7f dla 0x2C , a PRESS_OUT po przeliczeniu daje wartości większe od 1200hPa (mBar)(maleje przy ogrzewaniu do ok. 1050hPa) . Przed odczytaniem ciśnienia i temperatury do układu zapisuję 0x7A w rejestrze 0x10 (ustawienia pomiaru) oraz 0x96 (lub 0x94 lub 0x82) w rejestrze 0x20 (konfiguracja układu i odświeżania danych). Datasheet układu jest dostępny tu : http://www.kamami.pl/dl/lpd331ap.pdf . Poniżej dane odczytane z czujnika, które otrzymałem przez terminal z Atmegi.
0x08 0
0x09 0
0x0A 0
0x0F bb
0x10 7a
0x20 96
0x21 0
0x22 0
0x23 0
0x24 0
0x25 0
0x26 0
0x27 33
0x28 19
0x29 27
0x2A 49
0x2B fc
0x2C 7f
0x2D 0
0x3C 0
0x3D 0
0x3E 0 Program pochodzi z przerobionego przykładu dla czujnika MPL115A1. Zapisuję nim dwa rejestry konfiguracyjne, po czym odczytuję wszystkie oraz cyklicznie temperaturę i ciśnienie.
Kod: C / C++
Na chwilę obecną dane z czujnika przeliczam ręcznie wg. informacji z datasheet (str. 28 i 29.) otrzymane wartości zamieniam z zapisu szesnastkowego na dwójkowy i zapisuję w podanym ciągu PRESS_OUT_H PRESS_OUT_L PRESS_OUT_XL (kiedy to konieczne uzupełniam wartości z poszczególnych rejestrów zerami na początku, aby każdy element miał po 8 znaków), później całość przeliczam na zapis dziesiętny i dzielę przez 4096. Podobnie postępuję z temperaturą.
Czy dobrze rozumiem, że dane o temp. wyrażone są w °C ? ( datasheet "T(degC) = 42.5 + (Temp_OUTH & TEMP_OUT_L)[dec]/480")
Później planuję przeliczać to poniższym kodem:
Kod: C / C++
Proszę o poradę w czym leży problem - w kodzie, w sposobie obsługi i konfiguracji czujnika, w błędnym sposobie przeliczania, czy też może jest prawdopodobieństwo, że czujnik jest uszkodzony.
Za odpowiedź z góry dziękuję.
Pozdrawiam,
Michał