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

DS18b20 + ATmega16: Błędne odczyty temperatury, jak poprawić komunikację?

kiuba 28 Lut 2007 23:11 1295 2
REKLAMA
  • #1 3629844
    kiuba
    Poziom 10  
    Posty: 43
    Witam!
    Przezwyciężanie kolejnych problemów w programowaniu mikrokontrolerów bywa równie trudne co podniecające ;)
    Czasami poprostu natrafia się na "opór materii" i nijak idzie problem rozwiązać. Czasami się okazuję, że rozwiązanie było bardzo proste, ale to już inna bajka,

    a więc:
    Używając w większości postu zamieszczonego przez slimak281 tu:
    https://www.elektroda.pl/rtvforum/topic657563.html
    chociaż nie tylko, skonstuowałem program do obsługi czujnika DS18b20.
    Wyświetlanie chodzi bez problemu.
    Problem jedynie stwarza dogadanie się z owym czujnikiem...
    Temperatura jaką wskazuje czujnik to wciąż -00,2

    Czytałem tu i gdzie indziej, że kluczowe są wartości opóźnień w funkcjach obsługujących 1-wire.
    Używam wartości podanych w tym poście, a jeśli chodzi o same funkcje, to ta na mikrosekundy została ta sama, a na milisekundy dałem swoją. Nie są one super-precyzyjne, ale chyba nie o to tu chodzi....

    Proszę o pomoc, gdyż już sam nie wiem co jest nie tak.
    Jeśli komuś z Was chodzi to bezproblemowo na takim lub podobnym sprzęcie, to proszę dajcie znać.

    Dzieki i pozdrawiam.
  • REKLAMA
  • #2 3632256
    johny_w
    Poziom 24  
    Posty: 674
    Pomógł: 80
    Ocena: 64
    Takie funkcje opóźnień (jak te z linku) nie są zbyt precyzyjne. Ten sam parametr (np. 50us) działa inaczej na różnych częstotliwościach. Powiedzmy dla f=8Mhz będzie to 48us ale już dla f=2Mhz będzie 200us. Znaczny wpływ na takie funkcje ma też ustawiony stopień optymalizacji kompilatora.

    Nie są to teorie, kiedyś również walczyłem z DS1820 używając podobnych funkcji opóźnień. Wyniki pomiarów w debugerze AVR Studio były szokujące...

    Ostatecznie opóźnienia zrobiłem na timerze, ustawiając odpowiedni czas do przepełnienia, włączając timer i czekając w pętli na to właśnie przepełnienie.

    pozdrawiam, JnS
  • #3 3634703
    genetix
    Poziom 24  
    Posty: 669
    Pomógł: 42
    Zgadzam się z przedmówcą. Kiedyś nie mogłem wyjść z podziwu, że program przestawał działać po załączeniu optymalizacji. Dopiero po pewnym czasie zauważyłem, że optymalizacja pod względem prędkości działania dosięgnęła również... pętli opóźniających :)
    Dlatego odmierzanie czasu na timerze jest najbardziej precyzyjnym i uniwersalnym wyjściem. I optymalizacja nie powinna tego ruszyć :]
REKLAMA