Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[ATMega32] [Bascom]Termometr - przypisanie czujników.

majki1995 02 Nov 2012 13:11 2346 10
  • #1
    majki1995
    Level 10  
    Witam
    Ostatnio zacząłem robić termostat na ds18b20 i ATmega 32 w bascomie. Program z odczytem temperatury z dwóch czujników działał, ale pojawił się problem, ponieważ jeden czujnik umieściłem na polu a drugi w pokoju. I w pewnym momencie pojawiło mi się „pok 3,6oC” „zew 21,3oC”. programowo zamieniłem czujniki, ale po resecie Nie zawsze to działa. Znalazłem w sieci, że można przypisywać po kolei czujniki (podłączam 1 i wczytuje się jego adres, potem 2) ale nie znalazłem opisu jak to zrobić mógłby ktoś pomóc, dać jakąś wskazówkę?
    Kod
    Code: vbnet
    Log in, to see the code


    Pozdrawiam
  • Helpful post
    #2
    piotrva
    VIP Meritorious for electroda.pl
    Po prostu raz odczytujesz id termometrów i potem na stałe zapisujesz je w odpowiednich tablicach, zamiast stosować instrukcji wyszukujących układy na magistrali.
    ---
    Choć z tego co wiem o magistrali 1wire czujniki powinny być zawsze wyszukiwane w tej samej kolejności, stąd może masz jakieś błędy w komunikacji (np. poprzez za długi kabel złej jakości - jak zasilasz czujniki - pasożytniczo czy normalnie). Na pewno w Twoim programie brakuje bardzo ważnej sprawy jaką jest liczenie sumy kontrolnej CRC dla każdej transmisji.
  • #3
    majki1995
    Level 10  
    Podłączyłem teraz obydwa czujniki na krótko ( bezpośrednio do avr ok. 10cm kabla i do zasilania) i nie zauważyłem już tego problemu.
    Piotrva napisał:
    Quote:
    Na pewno w Twoim programie brakuje bardzo ważnej sprawy jaką jest liczenie sumy kontrolnej CRC dla każdej transmisji

    Rzeczywiście zapomniałem o tym

    Code: vbnet
    Log in, to see the code


    Ale pojawił się kolejny problem, po podłączeniu drugiego czujnika na ekranie pojawiają się dwie temperatury 85,0 ; 85,0 , po odłączeniu czujnika dalej się to wyświetla pomaga dopiero wgranie jeszcze raz programu , sprawdzałem na kilku różnych czujnikach co może być przyczyną ?
  • Helpful post
    #4
    MArSTER_1
    Level 19  
    Jeśli pojawia się 85 stopni to znaczy, że nie została uruchomiona i poprawnie zakończona konwersja temperatury. Wartość 85 stopni mają czujniki "w sobie" po włączeniu zasilania. Można ją odczytać.I ty to robisz. :D
  • #6
    majki1995
    Level 10  
    Piotrva napisał:
    Quote:
    No właśnie. Wysyłaj do czujników komendę convrt_t z pominięciem ID.


    Przyznam się że nie bardzo rozumiem o co chodzi kiedy mam wysyłać to polecenie?
  • #7
    MArSTER_1
    Level 19  
    Czujniki DS18B20 nie wysyłają same zmierzonej temperatury do procesora. Robią to na rozkaz z procesora. Ten rozkaz można wysłać na przykład co godzinę i po wysłaniu rozkazu następuje proces pomiaru i konwersji odczytanej temperatury na postać binarną. W zależności od tego jak dokładnie chcemy mierzyć temperaturę (po włączeniu zasilania domyślnym ustawieniem jest dokładność do 1/16 stopnia) czas konwersji jest różny. Dla największej dokładności (czyli 1/16 stopnia) wynosi około 750 milisekund. Tyle trzeba poczekać po wysłaniu rozkazu pomiaru temperatury , żeby można było odczytać wynik. W twoim programie nie ma rozkazu pomiaru i konwersji temperatury. Robisz
    Code: vbnet
    Log in, to see the code


    Myślę, że musisz spróbowac dodac instrukcje nastepujące:
    Code: vbnet
    Log in, to see the code

    No i napisz czy działa, czy nie działa.
  • #8
    majki1995
    Level 10  
    MArSTER_1 napisał:
    Quote:
    Czujniki DS18B20 nie wysyłają same zmierzonej temperatury do procesora. Robią to na rozkaz z procesora. Ten rozkaz można wysłać na przykład co godzinę i po wysłaniu rozkazu następuje proces pomiaru i konwersji odczytanej temperatury na postać binarną. W zależności od tego jak dokładnie chcemy mierzyć temperaturę (po włączeniu zasilania domyślnym ustawieniem jest dokładność do 1/16 stopnia) czas konwersji jest różny. Dla największej dokładności (czyli 1/16 stopnia) wynosi około 750 milisekund. Tyle trzeba poczekać po wysłaniu rozkazu pomiaru temperatury , żeby można było odczytać wynik. W twoim programie nie ma rozkazu pomiaru i konwersji temperatury.

    Nie wiem, co robię dalej źle, ale dalej nie działa, usunąłem drugi czujnik i na ekranie wyświetla się mi cały czas 0,0OC, co może być przyczyną?
    Kod
    Code: vbnet
    Log in, to see the code
  • #9
    MArSTER_1
    Level 19  
    Usuń komentarz przed instrukcją 1wreset.
  • #10
    majki1995
    Level 10  
    Usunąłem
    Code: vbnet
    Log in, to see the code
  • #11
    ---trafopowielacz---
    Level 23  
    Przepraszam że odkopuję temat, ale sam już któryś raz z kolei mam identyczny problem. Propozycje w temacie były prawidłowe tylko polecenia:

    Code: vbnet
    Log in, to see the code


    Należało wpisać po odczytach temperatury, a przed obliczeniami.