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

Problem z czujnikiem temperatury DS18B20 i ATmega16

19 Cze 2006 11:52 1493 2
  • Poziom 2  
    Witam!Od tygodnia męczę się z zaprogramowaniem czujnika temperatury DS18B20 i cały czas uzyskuję wynik 0. Sprawdziłam, czy zgłasza się i robi to.Czasy sa odmierzone na oscyloskopie, czujnik też na pewno jest dobrze podłączony i ma rezystor 4,7k tak jak było podane w datasheet.Używam ATmega 16 z wewnętrznym oscylatorem ustawionym na 8MHz.Całość piszę w C w Avr Studio 4.12. Przeczytałam wszystkie informacje na temat tego czujnika na elektrodzie i korzystałam z programów tu podanych jako działające i nic.Ciągle wynik jest 0.Czy ktoś miał taki problem?Może wymienić czujnik?bardzo prosze o pomoc!W pliku przesyłam mój program wraz z obsługa LCD.Czujnik podpięty jest do portu PA1.Do PA0 będzie podpięty czujnik wilgoci.Pozdrawiam
  • Tektronix
  • Poziom 34  
    Wstawiłeś tu cały program, więc nie miej pretensji, że go nie analizowałem.
    Podam jedynie wszystkim znany link http://mikrokontrolery.net/index.htm do działających (przynajmniej u mnie) funkcji obsługi 1WIRE. Próby, które wykonałem na tym programie dotyczące głównie zmiany opóźnień powodowały, że czujnik przestawał reagować - stąd wiem, że czasy są istotne. Dla pamięci napiszę jeszcze krótko (zeby nikogo nie obrazić), że częstotliwość podłączonego kwarcu czasem nie odpowiada częstotliwości taktowania uC. Jak pamiętam u mnie DS działał z Megą8 taktowaną zegarem wewnętrznym.
  • Tektronix
  • Poziom 39  
    dżast napisał:
    Witam!Od tygodnia męczę się z zaprogramowaniem czujnika temperatury DS18B20 i cały czas uzyskuję wynik 0. Sprawdziłam, czy zgłasza się i robi to...

    Czyżby :?: :D
    Nawet nie sprawdzasz , czy DS odpowiedział na reset.Jednak odpowiedzieć nie może , bo procek nie jest w stanie wystawić na linię DQ niskiego stanu , a funkcja Resetwire() jest do kitu :(
    Code:

    void ResetWire()//unsigned char ResetWire()
    {   
       C_DQ;
       Delay(155);  //razem daje 477
       Delay(10);
       S_DQ;
       C_DQ;
       Delay(155);  //razem daje 477
       Delay(10);
    }

    Radzę dobrze sprawdzić kod , a w szczególności sterowanie pinem DQ.

    Piotrek