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

Bascom ds18b20 - brak odczytu temperatury na lcd

waju12 15 Apr 2015 16:09 2109 22
  • #1
    waju12
    Level 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.

    [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
  • #3
    waju12
    Level 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
  • Helpful post
    #4
    Anonymous
    Anonymous  
  • #5
    Wojtek75
    Level 24  
    A jest szansa żebyśmy zobaczyli jak to fizycznie wygląda? Wrzuć zdjęcie układu.
  • #6
    waju12
    Level 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ć
  • #7
    Anonymous
    Anonymous  
  • #8
    waju12
    Level 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;)
  • #9
    Anonymous
    Anonymous  
  • #10
    yokoon
    Level 29  
    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.
  • #11
    Anonymous
    Anonymous  
  • #12
    waju12
    Level 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
  • #13
    yokoon
    Level 29  
    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 ?
  • #14
    Anonymous
    Anonymous  
  • #15
    waju12
    Level 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
  • #16
    yokoon
    Level 29  
    waju12 wrote:
    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.
  • #17
    waju12
    Level 15  
    połączenia w magistrali 1 wire są w 100%sprawne rezystor podciągający 4,4k
  • #18
    piterek-23
    Level 33  
    waju12 wrote:
    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.
  • #19
    waju12
    Level 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
  • #20
    yokoon
    Level 29  
    Witam.
    Nie wiem po co mieszasz dwa programy, przecież w samym Bascomie bardzo dobrze i przejrzyście ustawia się Fuse Bity.
  • Helpful post
    #21
    Anonymous
    Anonymous  
  • #22
    waju12
    Level 15  
    Witam.
    pomogła zmiana fusebitów;)
    bardzo dziękuję za pomoc i przydatną instrukcje
  • #23
    Anonymous
    Anonymous