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

Bascom ds18b20 - brak odczytu temperatury na lcd

15 Kwi 2015 16:09 1857 22
  • Poziom 15  
    Witam.
    We wstępie chciałem zaznaczyć, że szukałem podobnych problemów, lecz bezskutecznie.

    Mój problem polega na tym, że po wgraniu poniższego kogu do mikrokontrolera atmega8, na wyświetlaczu LCD wyświetla się napis "*temperatura* wynik: -0,1 stopnia C", brak reakcji na zmiany temperatyry czujnika cały czas -0,1stopnia.

    Code:
    [syntax=basic4gl]
    
    $regfile = "m8def.dat"
    $crystal = 1000000

    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
      Deflcdchar 1 , 14 , 17 , 17 , 14 , 32 , 32 , 32 , 32      ' definicja znaki stopnia

    Config 1wire = Portb.0                                      ' konfiguracja portu PD.5 jako wej?cia magistrali 1-wire

    Dim Odczyt(2) As Byte , A As Byte , Licznik As Byte , T As Integer , T1 As Single , Napis As String * 5
    'Deklaracja wszystkich zmiennych potrzebnych do pracy programu

    Do
      1wreset                                                   'reset
      1wwrite &HCC                                              'jedna kostka, więc wykorzystujemy rozkaz SKIP ROM
      1wwrite &H44                                              'dokonaj konwersji
      Waitms 750                                                'przeczekaj czas konwersji
      1wreset                                                   'reset
      1wwrite &HCC                                              'rozkaz adresowy SKIP ROM
      1wwrite &HBE                                              'rozkaz funkcyjny - polecenie odczytu DS18x20
      Odczyt(1) = 1wread(2)                                     'odczytaj dwa pierwsze bajty
      T = Odczyt(2)                                             'przepisz starszy bajt do zmiennej typu Integer
      Shift T , Left , 8                                        'przesuń ten bajt w lewo na wyższe pozycje
      T = T + Odczyt(1)                                         'przepisz - dodaj młodszy bajt

      T1 = T * 0.0625                                           'wyra? w stopniach Celsjusza, wynik wpisz do zmiennej Single

    Napis = Fusing(t1 , "#.#")
      Cls : Cursor Off : Lcd "* Temperatura *"
      Lowerline
      Lcd "Wynik: " ; Napis ; " " ; Chr(1) ; "C"                'wy?wietl wynik ze zmiennej Single
    Loop : End
    [/syntax]


    Z góry dziękuję za pomoc i pozdrawiam
  • Poziom 15  
    podłaczenie z poniższego schematu:
    Bascom ds18b20 - brak odczytu temperatury na lcd

    jest to tylko część przedstawiająca sposób podłączenia czujnika do atmegi 8

    Dodano po 1 [minuty]:

    zacisk X5 jest opcją do podłączenia drugiego czujnika, aktualnie tylko jeden czujnik
  • Pomocny post
    Użytkownik usunął konto  
  • Poziom 23  
    A jest szansa żebyśmy zobaczyli jak to fizycznie wygląda? Wrzuć zdjęcie układu.
  • Poziom 15  
    Kod wziąłem z tej strony:
    http://www.portalnaukowy.edu.pl/termometr_cyfr.htm
    tylko dziwne jest to ponieważ mam w domu termostat elektroniczny na atmedze 8 i bez zewnętrznego rezonatora pracuje.
    a jak zmienić te fusebity?
    Mam na płytce wolne miejsce na kwarc, ale myslałem, że na wewnętrznym rezonatorze będzie chodzić
  • Użytkownik usunął konto  
  • Poziom 15  
    Jeszcze jedno pytanie:
    jak wejść w tą zakładkę?
    i czy nie ma to wpływu jeżeli robię w ten sposób, że kompiluje i za pomocą extreme burner avr wgrywam hexa?

    Proszę o wyrozumiałość, ponieważ jestem bardzo początkujący w tym temacie;)
  • Użytkownik usunął konto  
  • Poziom 28  
    Witam.
    U mnie ten program pracuje na wewnętrznym oscylatorze 1MHz.
    Sprawdź czy masz dobrze podłączony DS do pinu zadeklarowanym w programie.
    Config 1Wire = Portd.5 i tu ma być podłączony DS.
  • Użytkownik usunął konto  
  • Poziom 15  
    o mnie jest pod PB.0 i tak jest zadeklarowane a co do tych chińskich atmeg to mam kilka sztuk z kilku sklepów wersje 8 i 8A i na wszystkich to samo się wyświetla
  • Poziom 28  
    Czy na pewno nie ma przerwy na magistrali 1Wire ?
    Ten program jest sprawdzony i należy szukać błędu w połączeniu i konfiguracji.
    Czy Atmega jest nowa tzn. bezpośrednio ze sklepu ?
  • Użytkownik usunął konto  
  • Poziom 15  
    dokładnie tak wszystkie były użyte jedynie do zapalania diody i nic w fusebitach nic kombinowane nie było, ustawiłem programator, próbowałem zmienić na zewnętrzny oscylator i takie krzaki mi wyskoczyły:
    Bascom ds18b20 - brak odczytu temperatury na lcd
    ponadto jak zmieniam na zewnętrzny oscylator, wcisnę przycisk write, to później w KLA987 ustawia się domyślnie 100001:Int. RC Osc. 1 MHz
  • Poziom 28  
    waju12 napisał:
    dokładnie tak wszystkie były użyte jedynie do zapalania diody i nic w fusebitach nic kombinowane nie było, ustawiłem programator, próbowałem zmienić na zewnętrzny oscylator i takie krzaki mi wyskoczyły:
    Bascom ds18b20 - brak odczytu temperatury na lcd
    ponadto jak zmieniam na zewnętrzny oscylator, wcisnę przycisk write, to później w KLA987 ustawia się domyślnie 100001:Int. RC Osc. 1 MHz


    I tak zostaw nic nie grzeb w Fuse jak nie wiesz. Z tego co podałeś to wynika, ze Atmegi pracują na wewnętrznym oscylatorze 1MHz. W programie też ma być 1MHz.

    $crystal = 1000000

    Czy DS jest nowy ? podstaw drugi na wszelki wypadek.

    Tak jak pisałem wyżej sprawdź dokładnie połączenia.
  • Poziom 15  
    połączenia w magistrali 1 wire są w 100%sprawne rezystor podciągający 4,4k
  • Poziom 32  
    waju12 napisał:
    połączenia w magistrali 1 wire są w 100%sprawne rezystor podciągający 4,4k

    Zrób fotkę podłączonego DS'a. Sam swojego pierwszego DS'a podłączyłem odwrotnie-z rysunku inaczej wynikało.
  • Poziom 15  
    Witam.
    Pobrałem program mkAVR Calculator, jednak przy próbie zapisu fusebitów wyskoczył mi taki komunikat:
    "Nazwa 'avrdude.exe' nie jest rozpoznawana jako polecenie wewnętrzne lub zewnętrzne,
    program wykonywalny lub plik wsadowy."
    Czym to może być spowodowane?

    Dodano po 15 [minuty]:

    Z kolei jak wgrałem ten program to zamiast temperatury wyświetlała mi się wartość 255 bez względu na to czy ogrzdzewalem czy ochładzałem czujnik.
    $regfile = "m8def.dat"
    $crystal = 1000000

    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5

    Config 1wire = Portb.0
    Declare Sub Pomiar
    Deflcdchar 0 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32
    Dim T(2) As Byte


    Cls

    Do
    Call Pomiar
    Cls
    Locate 1 , 3
    Lcd "temp=>";
    If T(2) < 0 Then Lcd "-" ;
    Lcd T(1);
    Lcd Chr(0) ; "C"
    Loop

    Sub Pomiar

    1wreset
    If Err = 1 Then

    Cls
    Locate 1 , 7
    Lcd "brak"
    Lowerline
    Locate 2 , 5
    Lcd "czujnika"



    Do
    1wreset
    Loop Until Err = 0

    End If

    1wwrite &HCC

    1wwrite &H33

    Waitms 750

    1wreset
    1wwrite &HCC

    1wwrite &HBE

    T(1) = 1wread()
    T(2) = 1wread()


    1wreset
    'If(2) > 0 Then T(1) = 255 - T(1)

    T(2) = T(1) / 2


    End Sub
  • Poziom 28  
    Witam.
    Nie wiem po co mieszasz dwa programy, przecież w samym Bascomie bardzo dobrze i przejrzyście ustawia się Fuse Bity.
  • Pomocny post
    Użytkownik usunął konto  
  • Poziom 15  
    Witam.
    pomogła zmiana fusebitów;)
    bardzo dziękuję za pomoc i przydatną instrukcje
  • Użytkownik usunął konto