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 1MHz/DS18B20 - jeden czujnik nie reaguje

Petermechanic 22 Lip 2014 00:29 1104 10
  • #1 22 Lip 2014 00:29
    Petermechanic
    Poziom 11  

    Witam!
    Udało mi się ogarnąć obsługę pojedynczego czujnika ds18b20. Jednakże moim celem są dwa sensory na jednej magistrali.

    Odczytałem sobie pojedynczo ID każdego z nich i wpisałem do programu. Z poszczególnymi komunikuję się za pomocą danego identyfikatora.

    Jak pierwszy czujnik jest włączony, jego temperatura zostaje odczytana. Po dołożeniu drugiego czujnika, temperatura z drugiego jest uzyskiwana, ale za to z pierwszego czujnika otrzymuję same jedynki.

    To wygląda tak, jakby drugi czujnik "zagłuszał" ten pierwszy. Czy ktoś spotkał się z tym problemem?

    Dorzucę jeszcze kod, może faktycznie zrobiłem jakiś błąd

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Z góry dziękuję za pomoc i wskazówki!

    Pozdrawiam

    0 10
  • #2 22 Lip 2014 00:36
    excray
    Poziom 39  

    A jak zasilasz? Jeśli pasożytniczo to pamiętaj że na czas konwersji pierwszego nie możesz nic robić na magistrali.

    0
  • #3 22 Lip 2014 09:37
    Petermechanic
    Poziom 11  

    Dziękuję za szybką odpowiedź

    excray napisał:
    A jak zasilasz?

    Zasilam normalnie, trzecim przewodem
    excray napisał:
    Jeśli pasożytniczo to pamiętaj że na czas konwersji pierwszego nie możesz nic robić na magistrali.

    Nawet jeżeli nie wykonuję konwersji, na obu czujnikach mam mieć 85 stopni, jednak gdy ten drugi jest wpięty, na pierwszym dostaję same jedynki :|

    Proszę o dalszą pomoc

    0
  • #4 22 Lip 2014 13:26
    el2010tmp
    Poziom 25  

    Zmień funkcje void select_rom(uint8_t romcode[8]) tak aby wysyłała romcode na LCD.
    Upewnisz się czy DS18B20 dostaje to co powinien.

    0
  • #5 23 Lip 2014 14:56
    Petermechanic
    Poziom 11  

    tak, DS dostaje to, co powinien. Dorzucę jeszcze bibliotekę z 1-Wire, może tam jest coś źle:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #6 23 Lip 2014 19:30
    excray
    Poziom 39  

    A co się kryje pod CLR_DQ i SET_DQ?

    0
  • #7 23 Lip 2014 21:45
    Petermechanic
    Poziom 11  

    To:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #8 23 Lip 2014 23:21
    excray
    Poziom 39  

    To bardzo źle sterujesz. Wystawiasz bardzo silną "jedynkę" DS może nie być w stanie ją zewrzeć do masy. Może się też uszkodzić.

    0
  • #9 23 Lip 2014 23:25
    Petermechanic
    Poziom 11  

    Jaką masz propozycję?

    0
  • Pomocny post
    #10 24 Lip 2014 10:59
    excray
    Poziom 39  

    Podciągnij linię zewnętrznym opornikiem 4k7 do +5V, Ustaw na tej linii stan niski i steruj kierunkiem. Szybko można przerobić jak poniżej:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #11 24 Lip 2014 13:05
    Petermechanic
    Poziom 11  

    Witam ponownie!

    Dzięki za rady, poprawiłem definicję kasowania bitu i ustawiania wg. Twojej sugestii. Pull-up'a miałem już wpiętego, bo drugi czujnik działał.

    Problem okazał się leżeć zupełnie gdzie indziej. Mimo Twoich porad, pierwszy czujnik dalej nie ruszył. Okazało się, że jest uszkodzony. Kupiłem kolejny i wstał bez problemu.

    Stąd też te wszystkie niestworzone problemy, które miałem z ds18b20 od lutego, zniechęcając mnie do magistrali 1-Wire. Gość musiał sprzedać mi wadliwy układ. Zdarza się.

    Jeszcze raz dziękuję za pomoc i poświęcony czas :)
    Pozdrawiam

    0