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.

Bascom ds18b20 - brak odczytu temperatury na lcd

waju12 15 Kwi 2015 16:09 1536 22
  • #1 15 Kwi 2015 16:09
    waju12
    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

    -1 22
  • #2 15 Kwi 2015 16:49
    piterek-23
    Poziom 31  

    A jak podłączyłeś DS'a pod ATmege?

    0
  • #3 15 Kwi 2015 17:21
    waju12
    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

    -1
  • Pomocny post
    #4 15 Kwi 2015 17:25
    373522
    Użytkownik usunął konto  
  • #5 15 Kwi 2015 17:25
    Wojtek75
    Poziom 23  

    A jest szansa żebyśmy zobaczyli jak to fizycznie wygląda? Wrzuć zdjęcie układu.

    0
  • #6 15 Kwi 2015 17:32
    waju12
    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ć

    -1
  • #7 15 Kwi 2015 18:03
    373522
    Użytkownik usunął konto  
  • #8 15 Kwi 2015 18:11
    waju12
    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;)

    -1
  • #9 15 Kwi 2015 18:17
    373522
    Użytkownik usunął konto  
  • #10 15 Kwi 2015 18:34
    yokoon
    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.

    0
  • #11 15 Kwi 2015 18:46
    373522
    Użytkownik usunął konto  
  • #12 15 Kwi 2015 19:01
    waju12
    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

    -1
  • #13 15 Kwi 2015 19:08
    yokoon
    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 ?

    0
  • #14 15 Kwi 2015 19:12
    373522
    Użytkownik usunął konto  
  • #15 15 Kwi 2015 19:22
    waju12
    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

    -1
  • #16 15 Kwi 2015 19:55
    yokoon
    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.

    0
  • #17 15 Kwi 2015 19:59
    waju12
    Poziom 15  

    połączenia w magistrali 1 wire są w 100%sprawne rezystor podciągający 4,4k

    -2
  • #18 16 Kwi 2015 13:07
    piterek-23
    Poziom 31  

    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.

    0
  • #19 16 Kwi 2015 16:02
    waju12
    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

    -1
  • #20 16 Kwi 2015 18:48
    yokoon
    Poziom 28  

    Witam.
    Nie wiem po co mieszasz dwa programy, przecież w samym Bascomie bardzo dobrze i przejrzyście ustawia się Fuse Bity.

    0
  • Pomocny post
    #21 17 Kwi 2015 01:51
    373522
    Użytkownik usunął konto  
  • #22 18 Kwi 2015 10:29
    waju12
    Poziom 15  

    Witam.
    pomogła zmiana fusebitów;)
    bardzo dziękuję za pomoc i przydatną instrukcje

    0
  • #23 18 Kwi 2015 11:48
    373522
    Użytkownik usunął konto