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.

DS18B20, ATMEGA32A - Nie moge wykryc Presence Pulse

Sylwek1991 14 Paź 2013 21:12 1536 10
  • #1 14 Paź 2013 21:12
    Sylwek1991
    Poziom 6  

    Witam
    Już od dłuższego czasu nie mogę poprawnie uruchomić termometru ds18b20.

    mikrokontroler to ATMEGA32A, F_CPU 16Mhz
    Próbowałem już na wiele sposobów, ostatecznie jednak korzystam z kodu zamieszczonego w książce tmfa.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    dodałem świecenie diod , żeby zasygnalizować co się dzieje.

    korzystam z gotowej płytki, schemat jak na rysunku.
    DS18B20, ATMEGA32A - Nie moge wykryc Presence Pulse

    Każda próba kończy się odpowiedzią " No Presence Pulse"
    Jestem początkujący i pewnie popełniłem jakiś mały błąd, jednak od pewnego czasu nie mogę sobie z tym poradzić.
    Nie próbowałem jednak na innych częstotliwościach ponieważ bootloader na mojej płytce pracuje tylko przy 16Mhz.
    Jeżeli chodzi o podłączenie to podłączam tylko 1 drucik z PC0 do DQ , GND jak widać jest podłączone.

    Czy może ktoś podpowiedzieć co robię źle ?

    0 10
  • #3 14 Paź 2013 22:16
    tmf
    Moderator Mikrokontrolery Projektowanie

    Sylwek1991 napisał:

    Każda próba kończy się odpowiedzią " No Presence Pulse"
    Jestem początkujący i pewnie popełniłem jakiś mały błąd, jednak od pewnego czasu nie mogę sobie z tym poradzić.
    Nie próbowałem jednak na innych częstotliwościach ponieważ bootloader na mojej płytce pracuje tylko przy 16Mhz.
    Jeżeli chodzi o podłączenie to podłączam tylko 1 drucik z PC0 do DQ , GND jak widać jest podłączone.

    Czy może ktoś podpowiedzieć co robię źle ?


    Jeśli masz taką odpowiedź to albo czujnik jest źle podłączony, albo masz źle zadeklarowaną częstotliwość pracy mikrokontrolera. Masz zdefiniowany symbol F_CPU? Program kompiluje się bez ostrzeżeń? Masz poprawnie zdefiniowany pin do którego podłączony jest OW? Sam kod jest absolutnie poprawny, zresztą jak widzisz w tak prostych funkcjach nie ma miejsca na błąd. Stąd też zupełnie nie ma sensu próbować z innym kodem - rezultat musi być identyczny...

    Dodano po 5 [minuty]:

    BTW, jeśli korzystasz z innych pinów PORTC, to pamiętałeś o wyłączeniu JTAGa, który jest domyślnie włączony i przejmuje kontrolę nad pinami PC2-PC5?

    0
  • #4 14 Paź 2013 22:52
    Sylwek1991
    Poziom 6  

    Jeżeli chodzi o częstotliwość to deklaruje ja w avr studio 4, Projects>>Configuration Options.
    Program kompiluje się bez błędów, ale z 2 ostrzeżeniami.
    DS18B20, ATMEGA32A - Nie moge wykryc Presence Pulse


    co do definicji Pinu
    DS18B20, ATMEGA32A - Nie moge wykryc Presence Pulse

    Postępowałem podobnie dla Pinu D0, D1,D2, dlatego myślę , ze JTAG nie przeszkadza.
    Co do podłączenia, jak widać na schemacie w 1 poście, wystarczy podłączyć jeden kabelek,
    sprawdzałem też multimetrem ciągłość połączenia - nóżka- wyprowadzenie na płytce - jest ciągłe.


    Za przykłady na 16Mhz dziękuje, na pewno je spróbuje jutro po pracy, napisze czy one zadziałały.

    0
  • Pomocny post
    #5 14 Paź 2013 23:02
    tmf
    Moderator Mikrokontrolery Projektowanie

    A jesteś pewien, że procesor jest taktowany 16 MHz? Jakie wartości mają fusebity?
    Zrób prostą pętlę z _delay_ms(1000) i miganiem diodą i sprawdź czy miga z właściwą częstotliwością. BTW, jaką wartość ma rezystor podciągający na linii Data OW?

    0
  • #6 15 Paź 2013 19:38
    Sylwek1991
    Poziom 6  

    Jesli chodzi o fusebity to nie zmieniałem odkąd dostałem płytkę, w sumie nie znam się na tym zbytnio, więc nie dotykałem
    diody mrugają poprawnie.
    Fusebity
    hFuse D0
    ifuse EF // wgrywałem tak jak w instrukcji producenta płytki.


    Chyba znalazłem przyczynę, rezystor podciągający ma wartość 1.7k Ohma.
    korzystam z gotowej płytki wiec nie podejrzewałem, ze tutaj coś może być nie tak.
    spróbuje kupić nowy termometr i rezystor 4.7, mam nadzieje, że wtedy zadziała

    0
  • #7 15 Paź 2013 21:57
    tmf
    Moderator Mikrokontrolery Projektowanie

    Nowego termometru nie potrzebujesz. Natomiast rezystor 1k7 to zdecydowanie za mało i DS mógł nie móc wystawić poziomu niskiego, stąd brak detekcji presence pulse.

    0
  • #8 15 Paź 2013 22:34
    Sylwek1991
    Poziom 6  

    zmiana tak małego rezystora dla mnie jest niemożliwa,( na płytce jest ogólnie mało miejsca).
    dziękuje za pomoc

    0
  • #9 16 Paź 2013 08:42
    GanzConrad
    Poziom 21  

    tmf napisał:
    Natomiast rezystor 1k7 to zdecydowanie za mało i DS mógł nie móc wystawić poziomu niskiego, stąd brak detekcji presence pulse.

    u mnie działa na 1k - dobrałem go eksperymentalnie do pojemności całej linii 1-Wire (około 30m, przy 2k2 nie chciała wstać), ale jak odłączę linię i zostawię 1 czujnik to działa bez zarzutu.

    0
  • #10 16 Paź 2013 11:06
    michalko12
    Specjalista - Mikrokontrolery

    GanzConrad napisał:
    u mnie działa na 1k - dobrałem go eksperymentalnie do pojemności całej linii 1-Wire (około 30m, przy 2k2 nie chciała wstać), ale jak odłączę linię i zostawię 1 czujnik to działa bez zarzutu.


    A jak masz zasilany ten czujnik? Z napięcia pasożytniczego, czy zwykłe podłączenie 3-przewodowe?
    Przy 1k efekt może być taki, że struktura w DS będzie się sama podgrzewała fałszując pomiar.

    0
  • #11 16 Paź 2013 19:22
    GanzConrad
    Poziom 21  

    3 przewodowe, już kiedyś ktoś mi mówił o tym podgrzewaniu i wówczas potwierdziłem, że może coś w tym być, jednak trudno to oszacować jeśli różnica pomiaru w stosunku do innego termometru - cieczowego, oscyluje w okolicach 1st. Pomiar dokonywany jest co 3s.

    0