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

Atmega32 16MHz/DS18B20 - niewłaściwe opóźnienia

Petermechanic 15 Lut 2014 11:19 1023 3
  • #1 15 Lut 2014 11:19
    Petermechanic
    Poziom 11  

    Witam,
    Mam atmegę32, 16MHz, chciałem podłączyć czujnik ds18b20. Oczywiście opornik pull-up 4,7k podłączony. Przedstawiam kod (nie jest mój):

    Kod: C
    Zaloguj się, aby zobaczyć kod

    Po odpaleniu tego kodu miałem jedynie FF FF z pierwszego i drugiego rejestru czujnika. Po przeczytaniu któregoś tematu z elektrody, podpiąłem równolegle opornik 2,2k do 4,7 i wtedy pokazał się jakiś odczyt temperatury (zawyżony, zapewne czujnik zaczął się grzać).

    W innym temacie ktoś sugerował, że funkcje _delay_ms oraz _delay_us nie są dokładne i pewien użytkownik napisał szybsze.
    delay.h:
    Kod: C
    Zaloguj się, aby zobaczyć kod


    Zmiana jednak nic nie daje, dalej jestem w kropce z opóźnieniami. Morduję się z tym trzy dni, czytam dokumentację, ale głowa już mi wyschła :| Proszę o pomoc.

    0 3
  • #2 15 Lut 2014 12:19
    tmf
    Moderator Mikrokontrolery Projektowanie

    Szybsze opóźnienia? Czyli co, 1 sekunda będzie trwała tylko 0,5s?:)
    OW uruchamiaj stopniowo. Odbierasz prawidłowo presence pulse?
    W przykładach do książki o C z mojej stopki masz gotowe i działające kody OW. BTW, masz analizator stanów logicznych? To sprawdź co się dzieje na magistrali - jeśli nie masz to sobie zbuduj, przyda się. A jeśli nie możesz to użyj symulatora Atmel Studio i sprawdź co rzeczywiście generujesz.

    0
  • #3 16 Lut 2014 15:36
    Petermechanic
    Poziom 11  

    Skorzystalem z Twojego kodu:

    Kod: C
    Zaloguj się, aby zobaczyć kod


    Odbiera ID czujnika, wykonuję konwersję.

    W trakcie działania OW_GetTemperature() wykonuje OW_SelectDevice(), a w nim OW_WaitForPresencePulse(). W tym miejscu kod zawodzi, bo nie otrzymuje presence.

    Dlaczego?

    Pozdrawiam

    0
  • #4 18 Lut 2014 00:15
    Petermechanic
    Poziom 11  

    Ok, mój kod działa. Zmieniłem wartość pull-up'a na 3,7k i łapie. Nie przekłamuję.
    Temat rozwiązany, dziękuję za pomoc.

    0