Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Czujnik ciśnienia HP02S - czy ktoś się kiedyś nim bawił

mc_mc 11 Lut 2011 11:40 14312 46
  • #31
    szydarek
    Poziom 2  
    Witam!
    Chodzi o odczyt wspólczynników.
    Mam zestaw HP03 + Mega48 + RFM02 polutowany (smd) i oprogramowany (C), zasilanie to 2xR3. Działa i mierzy z dokładnością jak stary radziecki barometr wiszący na ścianie. Mam pytanie o odczyt współczynników z wewnętrznego EEPROMa. Przeczytałem je 'ręcznie' i wstawiłem do programu jako stałe. Po pierwszym czytaniu jest OK. Przy drugim czytaniu EEPROMa, czytam następne adresy - a tam już nie ma współczynników. Jak zacząć czytać znowu od adresu 00 ? Napisali w pdf-ie że nie można do niego pisać - czytamy z 0xA1, a zapisać adres musimy pod 0xA0 - a tam nie można! no to jak! ?
    W poprzednich postach widziałem współczynniki jako #define, ale przy kolejnym egzemplarzu trzeba poprawiać źródło. Czy ktoś ma na to sposób?
  • #32
    dan50
    Poziom 11  
    Witam.
    Przyszła kolej na mnie, aby stawić czoło temu czujnikowi - HP02s.
    Programuje w AVR Studio (w C). Czujnik podłączam do Atmegi8. Problem u mnie polega na tym, że przy odczycie współczynników przy każdym resecie uC pokazuje (odczytywane są) inne wartości. Może wie ktoś dlaczego tak się dzieje. Podłączenie wykonałem tak jak w nocie katalogowej, oprócz podłączenia MCLK (generuje tak jak kolega wcześniej, napisał przebieg na wyjściu o odpowiedniej częstotliwości), ale to do odczytu z eepromu nie ma nic wspólnego.
  • #33
    And!
    Admin grupy Projektowanie
  • #34
    Vinnic
    Poziom 15  
    Witam.
    Mój problem związany z czujnikiem HP02S polega na dziwnym odczycie danych D1 i T1. przykładowa seria danych i przeliczona wartość ciśnienia wygląda następująco:
    D1:9f84; T1:9f7b 1213.0 hPa
    D1:9f83; T1:9f74 1212.9 hPa
    D1:9f78; T1:9f74 1212.5 hPa
    D1:9f70; T1:9f6c 1212.2 hPa
    D1:9f87; T1:9f81 1213.1 hPa
    D1:9f74; T1:9f7e 1212.4 hPa
    D1:9f81; T1:9f82 1212.9 hPa
    D1:9f72; T1:9f7f 1212.3 hPa
    D1:9f81; T1:9f79 1212.9 hPa
  • #35
    artusb
    Poziom 13  
    Witam Przepraszam za odgrzewanie tak starego tematu ale zostałem zmuszony do skorzystania z czujnika HP03S i niestety ale męczę się z nim już od jakiegoś dłuższego czasu.

    Mianowicie cały czas po odczytaniu i przeliczeniu wartości otrzymuję że temperatura wynosi 250 (czyli 25,0C) bez względu na prawdziwą wartość temp
    Ciśnienie obliczone wynosi 985

    Z tego co porównywałem wartości zapisane w EEprom z notą katalogową lub użytkownikami HP03S to moje wartości okazują się dosyć różne:

    C1 = 27951
    C2 = 700
    C3 = 300
    C4 = 0
    C5 = 31662
    C6 = 0
    C7 = 2500
    A = 3
    B= 22
    C = 6
    D = 7

    odczytane dane z przetwornika to:
    D1 = 22629
    D2 = 31583

    Lub

    D1 = 22626
    D2 = 31588

    lub

    D1 = 22632
    D2 = 31582

    Czy ktoś ma pomysł co może być nie tak ?
  • #36
    szydarek
    Poziom 2  
    Moje dane i obliczenia:
    c1 16384
    c2 2686
    c3 343
    c4 1357
    c5 30507
    c6 6540
    c7 2610
    a 7
    b 21
    c 6
    d 9
    d1 42489
    d2 30124
    dut=-385,9
    t=212,2
    off=10712,6
    sens=16254,7
    x=24329,7
    p=1021,3

    ale u ciebie te c4 i c6 NIE mogą być 0 ! Popatrz na wzory z PDFa!
  • #37
    lukash90
    Poziom 16  
    Pozwolę sobie odświeżyć wątek, gdyż również borykam się z podobnym czujnikiem, tyle że nowszym HP03S. Ogólnie zasada działania jest podobna, jednak wartości bzdurne. Moje wartości odczytane z eprom:
    C1 15547
    C2 3173
    C3 260
    C4 705
    C5 -32411 ??
    C6 5974
    C7 2500

    dalej już nie odczytuję bo wartość C5 jest nierealna i psioczy mi wyniki. Podam jeszcze kod jej odczytu:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    wszystkie inne odczytywane w identyczny sposób są prawdopodobne. Jakiś pomysł skąd taka wartość C5? Czujnik przeszedł ciężką próbę ognia podczas lutowania ale to chyba nie zmieniło mu komórki pamięci? :P
  • #38
    dan50
    Poziom 11  
    Tutaj masz mój program działający. Utworzyłem bibliotekę do obsługi tego czujnika. Wszystko działa pięknie, różnica w ciśnieniu to około 5hPa. Wyświetlacz oparty na hd44780.
    Program jest przykładowy więc od razu przepraszam za użycie funkcji delay.
    Jeżeli chcesz podejrzeć dane zmienne (stałe P0 itp) to wystarczy że użyjesz funkcji LCD_numb(...), np.:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    oczywiście przy wcześniejszym zakomentowaniu funkcji odczytu ciśnienia.

    Jeżeli jakieś problemy będziesz miał to pytaj.

    Nie wiem czy dostęp do rejestrów w HP03 jest taki sam jak w HP02. Jeżeli jest inny to zmień odpowiednie wartości hex.

    Pozdrawiam.

    P.S.
    Program napisany w Eclipse pod ATmega8.
    Załączniki:
  • #39
    lukash90
    Poziom 16  
    Dzięki wielkie. Niestety problemu mojego to nie rozwiązuje za bardzo. HP02S ma inne rodzaje zmiennych zapisane w pamięci. W HP03 jest ich więcej a co najgorsze to krzaczy się odczyt tylko jednej, kod odczytu zmiennych z pamięci mam akurat podobny do twojego i on raczej działa. Niemniej jednak dziękuję za kod, być może w późniejszym etapie mojego projektu okaże się przydatny
  • #40
    dan50
    Poziom 11  
    Spróbuj obliczyć ciśnienie ręcznie. Tzn. odczytaj wszystkie wartości zapisane w pamięci i wartości które biorą dynamiczny udział w obliczaniu ciśnienia. Następnie np. w excelu (albo na kartce) napisz formułę do obliczania tego ciśnienia i sprawdź czy ciśnienie które wyszło, ma prawo występować. Ja tak zrobiłem, bo też miałem problemy z zmiennymi i samymi obliczeniami - małe zaokrąglenia powodowały u mnie różnicę ciśnienia w 100hPa a czasami i większe.
    Jeżeli wyjdzie ci poprawnie, to będzie oznaczać że tak w Twoim przypadku musi być.

    P.S.
    teraz to zauważyłem: Jak odczytujesz tą wartość z minusem (przecież wyświetlasz wartości bez znaku) - skąd bierze Ci się nagle ten minus?
    Wyświetl szesnastkowo ten parametr i sprawdź wartość.
  • #41
    lukash90
    Poziom 16  
    Racja, też mi coś nie pasowało. Szesnastkowo niby jest ok (32125). Chyba problem leży u mnie w wyświetlaniu, bo obliczone przeze mnie wartości pośrednie dUT, OFF, SENS i X dałem już jako long int a wyświetla mi 0 albo ffff. Temperatura mi maleje jak podgrzewam czujnik żarówką, ale ciśnienie ma w miarę wiarygodną wartość. Nie mam żadnego źródła odniesienia więc nie mogę określić z jaką dokładnością mierzy.
  • #42
    dan50
    Poziom 11  
    Na stronie Twojego miasta/gminy może jest pokazana prognoza pogody, albo sprawdź na: http://www.meteo.pl/

    Sprawdź funkcję wyświetlania liczb. Z tego co widzę to Twoja funkcja:
    Kod: c
    Zaloguj się, aby zobaczyć kod
    wyświetla liczby typu INT a nie Unsigned int. Więc funkcja w Twoim przypadku jest wadliwa - bo uwzględnia znak.
  • #43
    lukash90
    Poziom 16  
    ok, już prawie dobrnąłem do końca. Wszystko wyświetla się ładnie, temperaturę mierzy dość dokładnie, ostatni mankament to spory błąd ciśnienia. (prawie 100hPa wg meteo). Może pokażę moją funkcję do obliczenia ciśnienia i poproszę o sprawdzenie?

    Kod: C
    Zaloguj się, aby zobaczyć kod


    wartości Cal[0..6] to odpowiednio C1..C7 z wzoru z dokumentacji. Reszta nazw identyczna. Dzielenie przez 2^n oczywiście zrealizowane przesuwaniem w prawo i tu mam największe wątpliwości.
    Poniżej jeszcze wzory z dokumentacji, żeby łatwo mógł pomóc również ktoś kto nie zna na ich jeszcze na pamięć :P

    Czujnik ciśnienia HP02S - czy ktoś się kiedyś nim bawił
  • #44
    dan50
    Poziom 11  
    Jeżeli dobrze pamiętam to na stronie meteo jest podawane ciśnienie zredukowane do poziomu morza (czyli ciśnienie względne), a te czujniki HP0x mierzą ciśnienie bezwzględne (czyli absolutne).

    Tutaj masz 'kalkulator' do przeliczania http://stacjepogody.waw.pl/kalkulator_cisnien.php
  • #45
    lukash90
    Poziom 16  
    Dużo to nie zmienia (mieszkam 2km od morza) ale dzięki za podpowiedź
  • #46
    dan50
    Poziom 11  
    Spróbuj zrobić tak:
    Odczytaj jakie masz wartości w eepromie i odczytuj na bieżąco D1, D2. Napisz sobie jakiś skrypt, np w excelu za pomocą formuł obliczanie poszczególnych wartości dUT, OFF, SENS, X. Na wyświetlaczu oprócz D1, D2 wyświetlaj też dUT, OFF, SENS, X. Następnie porównaj wartości wyświetlane z wartościami obliczonym w excelu. Dzięki temu może dojdziesz do wystąpienia przekłamania w ciśnieniu. Jeżeli wyniki będę w przybliżeniu takie same, to oznacza że takie ciśnienie u Ciebie występuje (w co wątpię, ale wszystko się może zdarzyć).
    Ja tak postępowałem, bo miałem podobny problem i okazało się że winą były zaokrąglenia podczas obliczeń w uC.
  • #47
    drzasiek
    Specjalista - Mikrokontrolery
    Witam,
    Czy miał ktoś taki problem z tym czujnikiem, że po dłuższym wyłączeniu zasilania (np na 10 minut) po włączeniu wysyła jakieś śmieci, dopiero po pewnym czasie lub po dmuchnięciu w czujnik (zmiana ciśnienia) jakby zaskakiwał i działa poprawnie. Krótkie odłączenie zasilania nie powoduje takiego efektu.