logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[bascom] Błędny odczyt temperatury z DS1820 w Bascom - zawyżone wyniki o kilka stopni

chomiczekOKP 13 Lis 2014 14:03 1761 17
REKLAMA
  • #1 14127437
    chomiczekOKP
    Poziom 12  
    Posty: 98
    Pomógł: 4
    Ocena: 4
    Wiem, że jest kilka podobnych tematów, które niby wskazują że problemy wynikają z różnic pomiędzy DS1820 a DS18B20, czy ewentualnie błędnej konfiguracji, ale u mnie wydaje się, że w programie jest wszystko ok, a mimo to, moim zdaniem temperatura jest zawyżana o kilka stopni (pomiar w temperaturze pokojowej) pokazuje około 24-26 st C, gdy tymczasem temperatura jest o kilka stopni niższa.

    Poniżej kod, którego używam:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    W jaki sposób mogę w 100% zweryfikować prawidłowość pomiarów?
  • REKLAMA
  • #2 14127525
    witoldwitoldowicz
    Poziom 28  
    Posty: 698
    Pomógł: 163
    Ocena: 60
    Z tego co przeczytałem w pdf to wystarczy
    Kod: text
    Zaloguj się, aby zobaczyć kod

    W msb jest tylko 0 lub 255.
  • #3 14127567
    chomiczekOKP
    Poziom 12  
    Posty: 98
    Pomógł: 4
    Ocena: 4
    Hmm.. nie wiem o jakim PDFie mówisz, ale ok :)

    Rozumie, że to co podesłałeś to fragment kodu, który powinien u siebie podmienić, czyli ten fragment:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    na ten?
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #5 14127717
    chomiczekOKP
    Poziom 12  
    Posty: 98
    Pomógł: 4
    Ocena: 4
    Tak, czytałem tego PDFa, jak zobaczysz to kod jest właśnie stamtąd, ale tak jak mówię, wg mnie termometr przekłamuje.

    Będę dzisiaj testował na DS18B20 zobaczymy czy również będą przekłamania.

    Tak g'woli uściślenia, ja mam DS1820, nie DS18B20 (tzn teraz mam oba, ale problem dot. tego pierwszego).
  • #6 14127737
    witoldwitoldowicz
    Poziom 28  
    Posty: 698
    Pomógł: 163
    Ocena: 60
    Jeżeli urzywasz DS1820 to czemu dzielisz przez 16 tracisz 4bity czyli 8 stopni.

    Dodano po 5 [minuty]:

    Teraz to już tego nie rozumiem jak Ci to wogóle działa.
  • REKLAMA
  • #7 14127772
    chomiczekOKP
    Poziom 12  
    Posty: 98
    Pomógł: 4
    Ocena: 4
    tak jak pisałem wcześniej kod jest z PDFa, którego podałeś (albo na nim wzorowany, już nie pamiętam) ale czytając o różnicach pomiędzy DS1820 i DS18B20 szukałem przykładu dla tego pierwszego.. stąd moje pytanie..

    Czyli przez ile powinienem dzielić?
  • #8 14127788
    witoldwitoldowicz
    Poziom 28  
    Posty: 698
    Pomógł: 163
    Ocena: 60
    Przez 2 bo rozdzielczość jest 0.5 stopnia.

    Dodano po 1 [godziny] 33 [minuty]:

    Z tego co widze to najprościej będzie tak
    Kod: text
    Zaloguj się, aby zobaczyć kod

    jeżeli MAKEINT działa tak jak myśle.
    http://avrhelp.mcselec.com/index.html?makeint.htm
  • #9 14128307
    chomiczekOKP
    Poziom 12  
    Posty: 98
    Pomógł: 4
    Ocena: 4
    Wychodzi z tego, że zastosowany u mnie układ to DS18B20 (wg dokumentacji płytki jest DS1820), ale przy podzieleniu T/2 otrzymuje wynik +/- 195C, przy podzieleniu na 16 mam +/- 24C.. Czyli rozumie, że powinienem zmienić/dostosować program do DS18B20.. spróbuje i dam znać.
  • #10 14130730
    chomiczekOKP
    Poziom 12  
    Posty: 98
    Pomógł: 4
    Ocena: 4
    Program działa, chociaż wydaje mi się, że temperatura jest ciut zawyżona, no ale może i faktycznie taka jest.

    Mam jeszcze inny problem, a właściwie póki co za małą wiedze w temacie, żeby wiedzieć jak ten temat ugryź, a mianowicie:

    Mam tak zdefiniowane zmienne:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Wg tego co znalazłem w innym temacie to zmienna string zostanie 'przepisana' do tablicy, żeby potem mieć dostęp do elementów tablicy muszę je wywoływać np.
    Kod: text
    Zaloguj się, aby zobaczyć kod


    I niby wszystko jest ok, ale przy takiej próbie porównania
    Kod: text
    Zaloguj się, aby zobaczyć kod


    otrzymuje komunikat o błędzie:
    
    ( or ) missing [IF(CHR(S2(1)) = 4 THEN] 
    Assigment error [IF(CHR(S2(1))):0 THEN:0]
    


    Przypuszczam, że coś nie tak z typem zmiennej, ale czy na pewno..

    A może w ogóle źle podszedłem do tematu?
    W sumie niekoniecznie muszę stosować OVERLAY, założenie jest takie, że na zmiennej typu string będę mógł pracować jak na tablicy, tzn chce móc pobierać dowolny elementy tablicy, etc.

    String, o którym mowa będzie zawierał tak naprawdę tylko cyfry.
    Może zamiast string zastosować inny typ zmiennej? Integer jest za mała, ale Long już jest ok, pytanie jak to się ma do zajętości pamięci? No i czy w ogole to coś zmieni?

    EDT: Czy w Bascomie jest coś takiego jak rzutowanie typu zmiennych?
  • #11 14131617
    witoldwitoldowicz
    Poziom 28  
    Posty: 698
    Pomógł: 163
    Ocena: 60
    If(chr(S2(1)) = 2 Then
    Brak nawiasu )
  • #12 14131821
    Konto nie istnieje
    Poziom 1  
  • #13 14132914
    chomiczekOKP
    Poziom 12  
    Posty: 98
    Pomógł: 4
    Ocena: 4
    witoldwitoldowicz napisał:
    If(chr(S2(1)) = 2 Then
    Brak nawiasu )


    niestety, ale dodanie nawiasu nie rozwiązuje problemu, cały czas ten sam komunikat.

    @emarcus - więc jak powinienem to zrobić?
  • REKLAMA
  • #14 14132925
    witoldwitoldowicz
    Poziom 28  
    Posty: 698
    Pomógł: 163
    Ocena: 60
    If chr(S2(1)) = "2" Then
  • #15 14132927
    chomiczekOKP
    Poziom 12  
    Posty: 98
    Pomógł: 4
    Ocena: 4
    aaaa.. no tak.. przecież to nie jest liczba.. człowiek patrzy, wie i nie widzi :)

    edt: albo i nie, ciągle to samo
  • #16 14135586
    Konto nie istnieje
    Poziom 1  
  • #17 14139789
    chomiczekOKP
    Poziom 12  
    Posty: 98
    Pomógł: 4
    Ocena: 4
    emarcus napisał:
    W sytuacji jak powyżej, mając string zawierający tylko cyfry i zechcesz z nich utworzyć x-elementowy array numeryczny to zamiast 'ovrelay' skorzystaj z Str2digits (czyt. String-to-digits); w ten sposób będziesz miał oddzielny dostęp do kazdej cyfry zawartej w string.
    Szczegóły znajdziesz w Basom Help.


    hmm.. no nie do końca to działa.

    Zrobiłem tak jak w manualu i niestety kicha:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Ostatnia pętla powinna mi pokazać 12345678 (natomiast nic nie zwraca)..
    Źle używam Str2digits?
  • #18 14140297
    Konto nie istnieje
    Poziom 1  

Podsumowanie tematu

✨ W dyskusji poruszono problem błędnego odczytu temperatury z czujnika DS1820 w programie Bascom, gdzie wyniki były zawyżane o kilka stopni. Użytkownik zauważył, że pomiar w temperaturze pokojowej wskazywał 24-26°C, podczas gdy rzeczywista temperatura była niższa. W odpowiedziach zasugerowano, że przyczyną mogą być różnice w konfiguracji między DS1820 a DS18B20 oraz błędy w kodzie. Użytkownik przetestował różne fragmenty kodu, w tym podział przez 2 lub 16, co miało wpływ na dokładność odczytów. Ostatecznie, po przetestowaniu DS18B20, użytkownik zauważył poprawę, ale nadal miał wątpliwości co do dokładności pomiarów. Dodatkowo, poruszono kwestie związane z konwersją zmiennych i użyciem funkcji Str2digits w Bascomie.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA