{"id":334,"date":"2015-12-21T14:44:43","date_gmt":"2015-12-21T13:44:43","guid":{"rendered":"http:\/\/www.daniel.slask.pl\/?p=334"},"modified":"2021-02-12T21:19:48","modified_gmt":"2021-02-12T20:19:48","slug":"obsluga-barometru-cyfrowego-hp02s-biblioteka","status":"publish","type":"post","link":"https:\/\/daniel.slask.pl\/m\/obsluga-barometru-cyfrowego-hp02s-biblioteka\/","title":{"rendered":"Obs\u0142uga barometru cyfrowego HP02S &#8211; biblioteka."},"content":{"rendered":"\n<p>Dzisiaj chcia\u0142bym zaprezentowa\u0107 bibliotek\u0119 do obs\u0142ugi cyfrowego barometru &#8211; <strong>HP02S<\/strong>.<\/p>\n\n\n\n<p>Uk\u0142ad ten jest produkcji <strong>Hope RF<\/strong>, kt\u00f3ry wyr\u00f3\u017cnia si\u0119 nast\u0119puj\u0105cymi cechami:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft\"><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/Uk\u0142ad.png\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/Uk\u0142ad-150x150.png\" alt=\"Wygl\u0105d uk\u0142adu HP02S - zaczerpni\u0119ty z noty katalogowej\" class=\"wp-image-338\"\/><\/a><figcaption>Wygl\u0105d uk\u0142adu HP02S &#8211; zaczerpni\u0119ty z noty katalogowej<\/figcaption><\/figure><\/div>\n\n\n\n<ul><li>zakres pomiarowy 300-1100hPa<\/li><li>16-bitowy przetwornik \u03a3-\u0394 &#8211; odczytywanych jest jedyni 14bit\u00f3w<\/li><li>mo\u017cliwo\u015b\u0107 zasilanie 2.0 &#8211; 5.0 VDC<\/li><li>niski pob\u00f3r mocy<\/li><li>komunikacja z uC poprzez magistral\u0119 I2C<\/li><li>uk\u0142ad posiada 1 lini\u0119 resetu<\/li><li>konwersja odbywa si\u0119 poprzez dostarczenie do uk\u0142adu sygna\u0142u o cz\u0119stotliwo\u015bci 32768Hz<\/li><li>czas konwersji wynosi 35ms<\/li><li>auto u\u015bpienie<\/li><li>uk\u0142ad posiada 5 wsp\u00f3\u0142czynnik\u00f3w kompensuj\u0105cych &#8211; brak potrzeby kalibracji<\/li><\/ul>\n\n\n\n<p>Wed\u0142ug noty katalogowej (nie jest to wprost opisane), uk\u0142ad dostarcza nam mo\u017cliwo\u015b\u0107 pomiaru ci\u015bnienie bezwzgl\u0119dnego &#8211; czyli na danej wysoko\u015bci na kt\u00f3rej znajduje si\u0119 czujnik. W wielu sklepach oferuj\u0105cych ten czujnik w opisie mo\u017cna si\u0119 doczyta\u0107, \u017ce jest to czujnik do pomiaru ci\u015bnienia oraz temperatury. Ci\u015bnienia nie mo\u017cna odczyta\u0107 wprost z uk\u0142adu, lecz po obliczeniu wzoru na ci\u015bnienie w kt\u00f3rym opr\u00f3cz sta\u0142ych wsp\u00f3\u0142czynnik\u00f3w &#8211; dla danego uk\u0142adu &#8211; znajduj\u0105 si\u0119 jeszcze dwie zmienna, kt\u00f3re zale\u017c\u0105 od ci\u015bnienia i temperatury (zmienne <em>D1<\/em> i <em>T1<\/em>). Producent czujnika nie dostarcza wzoru na obliczenie temperatury, wi\u0119c dane odczytane niby jako temperatura, nie odnosz\u0105 si\u0119 bezpo\u015brednio do temperatury powietrza. Reasumuj\u0105c czujnik mierzy ci\u015bnienie i temperatur\u0119, lecz u\u017cytkownik w efekcie ko\u0144cowym otrzymuje tylko ci\u015bnienie bezwzgl\u0119dne &#8211; brak mo\u017cliwo\u015bci odczytu temperatury (na chwil\u0119 obecn\u0105, mo\u017ce w przysz\u0142o\u015bci producent umie\u015bci wz\u00f3r umo\u017cliwiaj\u0105cy obliczenie zmierzonej temperatury)<\/p>\n\n\n\n<p>Podczas obs\u0142ugi czujnika ci\u015bnienia nale\u017cy zwr\u00f3ci\u0107 szczeg\u00f3ln\u0105 uwag\u0119 na:<\/p>\n\n\n\n<ul><li>pin <em>XCLR<\/em> ma by\u015b ustawiony w stan wysoki (logiczna 1 &#8211; wysoki) tylko w tedy gdy odczytywane s\u0105 warto\u015bci <em>T1<\/em> i <em>D1<\/em> (s\u0105 to warto\u015bci mierzone &#8211; temperatury i ci\u015bnienia) &#8211; stan niski (logiczne 0) ma wyst\u0119powa\u0107 podczas odczytu wsp\u00f3\u0142czynnik\u00f3w kalibruj\u0105cych<\/li><li>do pinu <em>MCLK<\/em> ma by\u0107 dostarczony sygna\u0142 o cz\u0119stotliwo\u015bci 32768Hz (z kwarcu), b\u0105d\u017a 32kHz (bezpo\u015brednio z wyj\u015bcia mikrokontrolera) &#8211; czas konwersji wynosi minimum 35ms.<\/li><li>linia <em>SCL<\/em> magistrali I2C mo\u017ce by\u0107 taktowana z maksymaln\u0105 cz\u0119stotliwo\u015bci\u0105 wynosz\u0105c\u0105 500kHz.<\/li><\/ul>\n\n\n\n<p>Poni\u017cej przedstawiam spos\u00f3b pod\u0142\u0105czenia uk\u0142adu do mikrokontrolera: ( a &#8211; wed\u0142ug noty katalogowej, b &#8211; uk\u0142ad pod\u0142\u0105czony podczas test\u00f3w)<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-4 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/Pod\u0142\u0105czenie-nota.png\"><img loading=\"lazy\" decoding=\"async\" width=\"718\" height=\"408\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/Pod\u0142\u0105czenie-nota.png\" alt=\"\" data-id=\"346\" class=\"wp-image-346\" srcset=\"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/Pod\u0142\u0105czenie-nota.png 718w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/Pod\u0142\u0105czenie-nota-300x170.png 300w\" sizes=\"(max-width: 718px) 100vw, 718px\" \/><\/a><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/pod\u0142\u0105czenie-eagle.png\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"622\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/pod\u0142\u0105czenie-eagle.png\" alt=\"\" data-id=\"345\" class=\"wp-image-345\" srcset=\"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/pod\u0142\u0105czenie-eagle.png 480w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/pod\u0142\u0105czenie-eagle-232x300.png 232w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/a><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p><strong><span style=\"text-decoration: underline;\">Dzia\u0142anie<\/span>:<\/strong><\/p>\n\n\n\n<p>Obs\u0142uga <strong>HP02S<\/strong> zosta\u0142a podzielona na dwie cz\u0119\u015bci. W pierwszej cz\u0119\u015bci, program odczytuje 5 wsp\u00f3\u0142czynnik\u00f3w kalibruj\u0105cych (kompensuj\u0105cych dzia\u0142anie czujnika) &#8211; jest on wykonywany tylko raz na samym pocz\u0105tku programu docelowego (wsp\u00f3\u0142czynniki s\u0105 sta\u0142e dla danego czujnika i nie zmieniaj\u0105 si\u0119 podczas u\u017cytkowania go). Nast\u0119pna cz\u0119\u015b\u0107 dotyczy ju\u017c odczytu, oraz oblicze\u0144 ci\u015bnienia. Przedstawiam tym razem do\u015b\u0107 kr\u00f3tkie algorytmy obrazuj\u0105ce dzia\u0142anie biblioteki:<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-5 is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/Algorytm-g\u0142\u00f3wny1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"547\" height=\"2000\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/Algorytm-g\u0142\u00f3wny1.png\" alt=\"\" data-id=\"352\" class=\"wp-image-352\" srcset=\"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/Algorytm-g\u0142\u00f3wny1.png 547w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/Algorytm-g\u0142\u00f3wny1-82x300.png 82w\" sizes=\"(max-width: 547px) 100vw, 547px\" \/><\/a><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/Algorytm-wsp\u00f3\u0142czynniki.png\"><img loading=\"lazy\" decoding=\"async\" width=\"536\" height=\"2000\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/Algorytm-wsp\u00f3\u0142czynniki.png\" alt=\"\" data-id=\"353\" class=\"wp-image-353\" srcset=\"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/Algorytm-wsp\u00f3\u0142czynniki.png 536w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/Algorytm-wsp\u00f3\u0142czynniki-80x300.png 80w\" sizes=\"(max-width: 536px) 100vw, 536px\" \/><\/a><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/Algorytm-odczyt_pomiar.png\"><img loading=\"lazy\" decoding=\"async\" width=\"332\" height=\"2000\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/Algorytm-odczyt_pomiar.png\" alt=\"\" data-id=\"354\" class=\"wp-image-354\" srcset=\"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/Algorytm-odczyt_pomiar.png 332w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/Algorytm-odczyt_pomiar-50x300.png 50w\" sizes=\"(max-width: 332px) 100vw, 332px\" \/><\/a><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p>Na samym pocz\u0105tku, po odpowiednim ustawieniu bitu <em>XCLR<\/em> oraz sygna\u0142u <em>MCLK<\/em> zosta\u0142o zastosowane dodatkowe op\u00f3\u017anienie wynosz\u0105ce 5ms. Zastosowa\u0142em je w celu ustabilizowania wszystkich parametr\u00f3w &#8211; na liniach sygna\u0142owych, oraz w czujniku.<\/p>\n\n\n\n<p>Podczas odczytywania wsp\u00f3\u0142czynnik\u00f3w <em>D0<\/em>, <em>T0<\/em>, <em>P0<\/em>, <em>S<\/em>, <em>C<\/em> z pami\u0119ci <strong>EEPROM<\/strong> uk\u0142adu, jedynym problemem jest odnalezienie w dokumentacji adresu dost\u0119pu do tej pami\u0119ci. Dokumentacja zwraca jednak uwag\u0119, \u017ce dost\u0119p do pami\u0119ci <strong>EEPROM<\/strong> jest taki sam jak w uk\u0142adzie AT24C02 (pami\u0119ci <strong>EEPROM<\/strong> firmy Atmel). Zajrzyjmy wi\u0119c do kolejnej dokumentacji. Po kilku chwilach mo\u017cna odnale\u017a\u0107 zapis, \u017ce adres kom\u00f3rek pami\u0119ci to <strong>0xA0<\/strong> (podczas zapisu) &#8211; tak wi\u0119c mo\u017cna przyst\u0105pi\u0107 do odczytania wcze\u015bniej wspomnianych wsp\u00f3\u0142czynnik\u00f3w. Trzeba pami\u0119ta\u0107 o tym, \u017ce pin <em>XCLR<\/em> ma mie\u0107 stan logicznej 1. Odczytanie wsp\u00f3\u0142czynnik\u00f3w dokonuje si\u0119 wywo\u0142uj\u0105c funkcj\u0119:<\/p>\n\n\n\n<pre class=\"wp-block-code height-set:true lang:c decode:true\"><code lang=\"c\" class=\"language-c\">\/\/**********\todczyt wsp\u00f3\u0142czynnik\u00f3w potrzebnych do poprawnego pomiaru\nds_hp02s_coeff();<\/code><\/pre>\n\n\n\n<p>Odczytane dane zapisywane s\u0105 w wewn\u0119trznej strukturze, do kt\u00f3rej u\u017cytkownik nie ma dost\u0119pu z poziomu programu.<\/p>\n\n\n\n<p>Pomiar ci\u015bnienia dokonuje si\u0119 przy udziale sygna\u0142u taktuj\u0105cego, pochodz\u0105cego z zewn\u0119trznego kwarcu 32768Hz, b\u0105d\u017a ze sygna\u0142u o cz\u0119stotliwo\u015bci 32kHz kt\u00f3ry mo\u017ce by\u0107 dostarczony z mikrokontrolera. W moim przypadku zastosowa\u0142em opcj\u0119 drug\u0105, tzn. skonfigurowa\u0142em timer 1 tak aby przerwanie wykonywa\u0142o si\u0119 co 32kHz w trybie CTC, czego skutkiem ma by\u0107 prze\u0142\u0105czanie stanu jednego z pin\u00f3w dost\u0119pnych dla tego timer &#8211; wybra\u0142em pin 5 portu <strong>D<\/strong>. Po wys\u0142aniu komendy z \u017c\u0105daniem pomiaru czekam 40ms &#8211; wg noty ma by\u0107 minimum 35ms, wi\u0119c warunek jest spe\u0142niony. Algorytm dotycz\u0105cy pomiaru, kt\u00f3ry zosta\u0142 przedstawiony wcze\u015bniej, prezentuje spos\u00f3b odbioru danych dla jednej z dw\u00f3ch zmiennych (<em>D1<\/em> lub <em>T1<\/em>) &#8211; podczas odczytu algorytm ten jest wykonywany dwa razy. Aby rozpocz\u0105\u0107 pomiar nale\u017cy wywo\u0142a\u0107 funkcj\u0119:<\/p>\n\n\n\n<pre class=\"wp-block-code height-set:true lang:c decode:true\"><code lang=\"c\" class=\"language-c\">ds_hp02s_start();<\/code><\/pre>\n\n\n\n<p>a nast\u0119pnie w p\u0119tli g\u0142\u00f3wnej u\u017cy\u0107 funkcji:<\/p>\n\n\n\n<pre class=\"wp-block-code height-set:true lang:c decode:true\"><code lang=\"c\" class=\"language-c\">ds_hp02s_measure();<\/code><\/pre>\n\n\n\n<p>Pomiar zostanie wykonany tylko raz (a\u017c do ponownego u\u017cycia funkcji rozpoczynaj\u0105cej pomiar), a dane zostan\u0105 zapisane w strukturze do kt\u00f3rej u\u017cytkownik ma dost\u0119p:<\/p>\n\n\n\n<pre class=\"wp-block-code height-set:true lang:c decode:true\"><code lang=\"c\" class=\"language-c line-numbers\">int16_t value_D1;\nint16_t value_T1;\nuint16_t value_pressure_abs_cel;\t\t\/\/ca\u0142osc\nuint8_t value_pressure_abs_frac;\t\t\/\/liczba po przecinku\nuint8_t value_update;\t\t\t\t\t\/\/czy wartosci zosta\u0142y zaktualizowane - wartosc inkrementowana<\/code><\/pre>\n\n\n\n<p>W zmiennych <em>D1<\/em> oraz <em>T1<\/em> znajduje si\u0119 ostatnie odczytane warto\u015bci z czujnika. Zmienna <em>value_update<\/em> zwi\u0119ksza si\u0119 za ka\u017cdym razem gdy zostanie zako\u0144czony pomiar. W pozosta\u0142ych dw\u00f3ch zmiennych przechowywana jest warto\u015b\u0107 ci\u015bnienia &#8211; liczba ca\u0142kowita, oraz po przecinku.<\/p>\n\n\n\n<p>Dost\u0119p do tej struktury jest poprzez zmienn\u0105<\/p>\n\n\n\n<pre class=\"wp-block-code height-set:true lang:c decode:true\"><code lang=\"c\" class=\"language-c\">ds_hp02s_value_pressure<\/code><\/pre>\n\n\n\n<p><span style=\"text-decoration: underline;\"><strong>Konfiguracja biblioteki.<\/strong><\/span><\/p>\n\n\n\n<p>Konfiguracj\u0119 biblioteki dokonuje si\u0119 w pliku <em>ds_hp02s_conf.h<\/em>. Do ustawienia mamy jedynie:<\/p>\n\n\n\n<pre class=\"wp-block-code height-set:true lang:c decode:true\"><code lang=\"c\" class=\"language-c line-numbers\">\/\/pin i port do kt\u00f3rego pod\u0142\u0105czony jest XCLR\n#define HP02S_XCLR_PIN\t\t1\n#define HP02S_XCLR_PORT\t\tB\n\n\/\/ile wynik\u00f3w ma byc usrednionych maksymalnie 40 !!im w\u0119ksza ilosc wynikow do usredniania tym wieksza zajetosc pamieci!!\n#define HP02S_AVG_VALUE\t1\n\n\/\/jaki odst\u0119p pomiedzy kolejnymi pomiarami w ms (maksymalnie 200ms)\n#define HP02S_AVG_TIME 100<\/code><\/pre>\n\n\n\n<p>Warte wyja\u015bnienia jest jedynie u\u015brednianie wynik\u00f3w. Zastosowa\u0142em je aby mo\u017cliwy by\u0142 dok\u0142adniejszy pomiar ci\u015bnienia. Wg noty powinno si\u0119 u\u015bredni\u0107 co najmniej 8 wynik\u00f3w pomiarowych, aby m\u00f3c zwi\u0119kszy\u0107 dok\u0142adno\u015b\u0107 (warto\u015b\u0107 ta jest rekomendowana przez producenta). Podczas zwi\u0119kszania ilo\u015bci pomiar\u00f3w do u\u015brednienia, nale\u017cy pami\u0119ta\u0107, \u017ce im wi\u0119kszy zakres tym wi\u0119cej pami\u0119ci jest poch\u0142anianych przez t\u0105 bibliotek\u0119. U\u017cytkownika biblioteki ma r\u00f3wnie\u017c mo\u017cliwo\u015b\u0107 ustawienia czasu pomi\u0119dzy kolejnymi pomiarami podczas u\u015bredniania &#8211; czas ten mo\u017ce wynosi\u0107 od 1ms do 200ms.<\/p>\n\n\n\n<p>Program zosta\u0142 dopasowany do nast\u0119puj\u0105cych mikrokontroler\u00f3w z rodziny AVR:<\/p>\n\n\n\n<ul><li><strong>Atmega8<\/strong><\/li><li><strong>Atmega16<\/strong><\/li><li><strong>Atmega32<\/strong><\/li><li>oraz uk\u0142ady z takimi samymi rejestrami.<\/li><\/ul>\n\n\n\n<p>Natomiast cz\u0119stotliwo\u015bci obs\u0142ugiwane przez bibliotek\u0119 to: <strong>4MHz<\/strong>, <strong>6MHz<\/strong>, <strong>8MHz<\/strong>, <strong>10MHz<\/strong>, <strong>11,0592MHz<\/strong>, <strong>12MHz<\/strong>, <strong>14MHz<\/strong>, <strong>16MHz<\/strong>, <strong>20MHz<\/strong>.<\/p>\n\n\n\n<p><span style=\"text-decoration: underline;\"><strong>Magistrala I2C.<\/strong><\/span><\/p>\n\n\n\n<p>Biblioteka kt\u00f3r\u0105 wykona\u0142em, charakteryzuje si\u0119 szczeg\u00f3lnym aspektem &#8211; obs\u0142uga I2C nie jest na sztywno po\u0142\u0105czona z bibliotek\u0105. Oznacza to, \u017ce u\u017cytkownika mo\u017ce posiada\u0107 w\u0142asny spos\u00f3b obs\u0142ugi magistrali I2C i podpi\u0105\u0107 j\u0105 do tej biblioteki, poprzez rejestracj\u0119 funkcji, kt\u00f3ra wygl\u0105da nast\u0119puj\u0105co:<\/p>\n\n\n\n<pre class=\"wp-block-code height-set:true lang:c decode:true\"><code lang=\"c\" class=\"language-c line-numbers\">\/\/********** \trejestracji funkcji i2c potrzebnych dla hp02s\nregister_twi_start_hp02s(I2C_start);\nregister_twi_stop_hp02s(I2C_stop);\nregister_twi_read_hp02s(I2C_read);\nregister_twi_write_hp02s(I2C_write);<\/code><\/pre>\n\n\n\n<p>Jedyne ograniczenie to jest takie, \u017ce funkcje strat i stop nie powinny przekazywa\u0107 \u017cadnych argument\u00f3w, oraz nie powinny nic zwraca\u0107 (typ <em>void<\/em>). Funkcja dotycz\u0105ca odczytu &#8211; <em>read<\/em> &#8211; r\u00f3wnie\u017c nie powinna nic zwraca\u0107, le\u017c mo\u017cliwe jest przes\u0142anie adresu jako typ 8 bitowy bez znaku (<em>uint8_t<\/em>). Mo\u017cliwo\u015b\u0107 przekazania argument\u00f3w posiada funkcja odczytuj\u0105ca dane z urz\u0105dzenia &#8211; przesy\u0142ane jest potwierdzenie (ACK = 1). Funkcja read powinna zwraca\u0107 dane w postacie 8 bitowej bez znaku (<em>uint8_t<\/em>)<\/p>\n\n\n\n<p>Po dokonaniu konfiguracji, oraz rejestracji potrzebnych funkcji nale\u017cy dokona\u0107 inicjalizacji poprzez wywo\u0142anie funkcji:<\/p>\n\n\n\n<pre class=\"wp-block-code height-set:true lang:c decode:true\"><code lang=\"c\" class=\"language-c\">\/\/**********\tinicjalizacja hp02s\nds_hp02s_init();<\/code><\/pre>\n\n\n\n<p>U\u017cytkownik korzystaj\u0105cy z tej biblioteki powinien uruchomi\u0107 przerwanie wykonywane co 1ms, a w procedurze tego przerwania umie\u015bci\u0107 warunek:<\/p>\n\n\n\n<pre class=\"wp-block-code height-set:true lang:c decode:true\"><code lang=\"c\" class=\"language-c\">if(hp02s_time_1ms--);<\/code><\/pre>\n\n\n\n<p>Dzi\u0119ki temu warunkowi, biblioteka nie powoduje blokowania dzia\u0142ania ca\u0142ego programu &#8211; <span style=\"text-decoration: underline;\">nie brana<\/span> jest pod uwag\u0119 biblioteka obs\u0142uguj\u0105ca I2C.<\/p>\n\n\n\n<p><span style=\"text-decoration: underline;\"><strong>Przyk\u0142adowy program<\/strong><\/span>:<\/p>\n\n\n\n<p>Przedstawiam r\u00f3wnie\u017c przyk\u0142adowy program do obs\u0142ugi czujnika ci\u015bnienia HP02S.<\/p>\n\n\n\n<pre class=\"wp-block-code height-set:true lang:c decode:true\"><code lang=\"c\" class=\"language-c line-numbers\">ISR(TIMER0_COMP_vect){\n\n\tif(++time_1ms&gt;9){\n\t\ttime_1ms=0;\n\n\t\tif(++time_10ms &lt; 99){\n\t\t\ttime_10ms=0;\n\n\t\t\tif(++time_1s &lt; 59) time_1s=0;\n\t\t}\n\t}\n\n\tif(hp02s_time_1ms--);\n\n}\/\/ \/isr\n\nint main(void){\n\n\t\/\/inicjalizacja LCD\n\tlcd_init();\n\n\t\/\/********** \trejestracji funkcji i2c potrzebnych dla hp02s\n\tregister_twi_start_hp02s(TWI_start);\n\tregister_twi_stop_hp02s(TWI_stop);\n\tregister_twi_read_hp02s(TWI_read);\n\tregister_twi_write_hp02s(TWI_write);\n\n\t\/\/**********\tinicjalizacja hp02s\n\tds_hp02s_init();\n\n\t\/\/inicjalizacja przerwa\u0144\n\t\t\/\/timer0 w trybie ctc\n\tTCCR0 |= (1&lt;&lt;WGM01);\t\t\t\t\t\/\/tryb CTC\n\tTCCR0 |= (1&lt;&lt;CS01) | (1&lt;&lt;CS00);\t\t\t\/\/preskaler 64\n\tOCR0 = 249;\t\t\t\t\t\t\t\t\/\/co 1ms dla preskalera 64 bity i kwarcu 16MHz\n\tTIMSK |= (1&lt;&lt;OCIE0);\t\t\t\t\t\/\/aktywacja przerwania\n\n\t\/\/aktywacja przerwa\u0144\n\tsei();\n\t\n\t\/\/program w\u0142asciwy\n\tlcd_cls();\n\n\tlcd_str_P(PSTR(\"Cisnienie:\"));\n\n\t\/\/**********\todczyt wsp\u00f3\u0142czynnik\u00f3w potrzebnych do poprawnego pomiaru\n\tds_hp02s_coeff();\n\n\tds_hp02s_start();\n\n\tuint8_t tmp=0;\n\n\twhile(1){\n\t\t\n\t\t\/\/pomiar co 5 sekund\n\t\tif( (time_1s != time_ls) &amp;&amp; !(time_1s % 5) ){\n\t\t\ttime_ls = time_1s;\n\t\t\tds_hp02s_start();\n\t\t}\n\n\t\tds_hp02s_measure();\n\n\t\tif(ds_hp02s_value_pressure.value_update != tmp){\n\n\t\t\ttmp = ds_hp02s_value_pressure.value_update;\n\t\t\tlcd_locate(1,0);\n\t\t\tlcd_int(ds_hp02s_value_pressure.value_pressure_abs_cel);\n\t\t\tlcd_char('.');\n\t\t\tlcd_int(ds_hp02s_value_pressure.value_pressure_abs_frac);\n\t\t\tlcd_str(\"hpa \");\n\n\t\t}\t\n\t}\n}<\/code><\/pre>\n\n\n\n<p>Program jest przyk\u0142adowy i nie zawiera informacji dotycz\u0105cych potrzebnych bibliotek. Biblioteki kt\u00f3re powinny by\u0107 do\u0142\u0105czone do programu dotycz\u0105 obs\u0142ugi magistrali I2C, oraz wy\u015bwietlacza LCD.<\/p>\n\n\n\n<p><span style=\"text-decoration: underline;\"><strong>Cechy biblioteki.<\/strong><\/span><\/p>\n\n\n\n<p>Przedstawiona biblioteka zajmuje oko\u0142o 5kB pami\u0119ci Flash, oraz 302Bajty pami\u0119ci RAM &#8211; dok\u0142adna ilo\u015b\u0107 zajmowane pami\u0119ci zale\u017cy od ilo\u015bci pomiar\u00f3w u\u015brednianych. Dodatkowo wszystkie funkcje odczytuj\u0105ce pomiary z <strong>HP02S<\/strong> s\u0105 nieblokuj\u0105ce &#8211; nie blokuj\u0105 na d\u0142u\u017cszy okres dzia\u0142ania ca\u0142ej pracy systemu. Nie brane jest pod uwag\u0119 dzia\u0142anie biblioteki obs\u0142uguj\u0105cej magistral\u0119 I2C, gdy\u017c ona mo\u017ce powodowa\u0107 blokuj\u0105ce dzia\u0142anie reszty programu.<\/p>\n\n\n\n<p>U\u017cytkownik podczas odczytywania ci\u015bnienia ma do dyspozycji struktur\u0119 w kt\u00f3rej odczytuje warto\u015b\u0107 ca\u0142kowit\u0105 zmierzonego ci\u015bnienia, oraz warto\u015b\u0107 po przecinku. Dost\u0119pne s\u0105 r\u00f3wnie\u017c warto\u015bci D1 i T1 ostatnie zmierzonego ci\u015bnienia. W dost\u0119pnej strukturze znajduje si\u0119 r\u00f3wnie\u017c informacja o ilo\u015bci wykonanych pomiar\u00f3w &#8211; resetuje si\u0119 ona po przekroczeniu warto\u015bci 255.<\/p>\n\n\n\n<p>Podczas konfiguracji biblioteki u\u017cytkownik mo\u017ce zdecydowa\u0107, czy odczytywane ci\u015bnienie ma by\u0107 ci\u015bnienie u\u015brednionym z okre\u015blonej ilo\u015bci pr\u00f3bek, czy nie (parametr ustawiony na 1). Pomi\u0119dzy kolejnymi pomiarami wyst\u0119puje op\u00f3\u017anienie okre\u015blone przez u\u017cytkownika (od 1ms do 200 ms).<\/p>\n\n\n\n<p>W razie pyta\u0144 prosz\u0119 o kontakt poprzez formularz kontaktowy, lub poprzez komentarz poni\u017cej artyku\u0142u.<\/p>\n\n\n\n<p>Pliki biblioteki mo\u017cna pobra\u0107 tutaj:<\/p>\n\n\n\n<a  data-e-Disable-Page-Transition=\"true\" class=\"download-link download-button aligncenter\" title=\"Wersja v1.0\" href=\"https:\/\/daniel.slask.pl\/m\/download\/364\/?tmstv=1788163884\" rel=\"nofollow\" id=\"download-link-364\" >\n\t<p>\n\t\tPobierz &ldquo;DS_HP02S.zip&rdquo;\t<\/p>\n\t<small>DS_HP02S.zip\t\t&ndash; Pobrano 461 razy\t\t&ndash; 4,90 KB<\/small>\n<\/a>\n\n\n\n<p>Zach\u0119cam do pobierania.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dzisiaj chcia\u0142bym zaprezentowa\u0107 bibliotek\u0119 do obs\u0142ugi cyfrowego barometru &#8211; HP02S. Uk\u0142ad ten jest produkcji Hope RF, kt\u00f3ry wyr\u00f3\u017cnia si\u0119 nast\u0119puj\u0105cymi cechami: zakres pomiarowy 300-1100hPa 16-bitowy przetwornik \u03a3-\u0394 &#8211; odczytywanych jest jedyni 14bit\u00f3w mo\u017cliwo\u015b\u0107 zasilanie 2.0 &#8211; 5.0 VDC niski pob\u00f3r&#8230;<br \/><a class=\"read-more-button\" href=\"https:\/\/daniel.slask.pl\/m\/obsluga-barometru-cyfrowego-hp02s-biblioteka\/\">Wi\u0119cej<\/a><\/p>\n","protected":false},"author":1,"featured_media":379,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[7],"tags":[12,32,33,43,41,40,39],"views":1204,"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2015\/12\/binary-1071776_640-e1450706947991.jpg","jetpack_shortlink":"https:\/\/wp.me\/pcPgV3-5o","_links":{"self":[{"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/posts\/334"}],"collection":[{"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/comments?post=334"}],"version-history":[{"count":30,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/posts\/334\/revisions"}],"predecessor-version":[{"id":1651,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/posts\/334\/revisions\/1651"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/media\/379"}],"wp:attachment":[{"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/media?parent=334"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/categories?post=334"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/tags?post=334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}