ZL27ARM: obsługa czujnika MEMS do pomiaru ciśnienia – BMP085

Aby w rejestrze F6 znajdowały się dane dotyczące temperatury, musi być wykonany wcześniej zapis wartości 0x2E pod adres 0xF4, w celu poinformowania BMP085, że interesuje nas odczyt wyniku pomiaru temperatury. Inaczej wygląda odczyt ciśnienia:

Po zapisie do rejestru 0xF4 wartości 0x34+(OSS<<6), celem poinformowania czujnika, że odczyt będzie dotyczył ciśnienia z określoną wartością OSS (wartość ustalona przez producenta czujnika) precyzją, zostają odczytane trzy kolejne rejestry zaczynając od 0xF6. Jako, że przy odczycie ciągłym danych z czujnika, inkrementuje on adres rejestru samodzielnie, nie musimy podawać 3 adresów, a jedynie pierwszy po czym odczytujemy 3 bajty z magistrali I2C obrazujące zawartość rejestrów o adresach 0xF6, 0xF7 i 0xF8.
Dalej w funkcji konwertującej dane z rejestrów czujnika ciśnienia, wykonywane są obliczenia na otrzymanych danych. Należy zwrócić uwagę, że do obliczenia temperatury oraz ciśnienia wykorzystane zostały zmienne wcześniej odczytane z pamięci EEPROM oraz to że do obliczenia ciśnienia atmosferycznego użyta została zmienna ut (opisująca temperaturę) a co za tym idzie, temperatura winna być odczytana i obliczona przed rozpoczęciem wyliczania ciśnienia. Na końcu obliczona zostaje wysokość na podstawie ciśnienia. Wszystkie trzy informację zostają przekształcone na łańcuch tekstowy w funkcji main za pomocą funkcji sprintf z odpowiednim formatowaniem:

Wyjaśnienia może wymagać wyświetlenie wysokości, przede wszystkim jej przekształcenie na zmienną string. Zmienna altitude zawiera wysokość nad poziomem morza w centymetrach, więc jako pierwszy argument do funkcji sprintf zostaje przekazana zmienna altitude/100 celem wyświetlenia liczby metrów bez części dziesiętnych. Do ciągu znaków w tablicy Tekstalt zostaje dodana „.” i następnie część dziesiętna wysokości. Aby wyświetlić część dziesiętną wysokości od wysokości podanej w centymetrach odjęta zostaje wysokość w metrach*100 jak wynik operacji: altitude-((altitude/100)*100). Informacje na temat temperatury, ciśnienia oraz wysokości zostają wyświetlone w odpowiednich miejscach na wyświetlaczu OLED:

 

Do pobrania

O autorze