logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Brak odczytu temperatury z czujnika ds18b20 na LCD w Bascom, ATmega8

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

    [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 14619702
    waju12
    Poziom 15  
    podłaczenie z poniższego schematu:
    Brak odczytu temperatury z czujnika ds18b20 na LCD w Bascom, ATmega8

    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
    #4 14619723
    Konto nie istnieje
    Konto nie istnieje  
  • #5 14619724
    Wojtek75
    Poziom 24  
    A jest szansa żebyśmy zobaczyli jak to fizycznie wygląda? Wrzuć zdjęcie układu.
  • #6 14619744
    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ć
  • #7 14619817
    Konto nie istnieje
    Konto nie istnieje  
  • #8 14619837
    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;)
  • #9 14619858
    Konto nie istnieje
    Konto nie istnieje  
  • #10 14619894
    yokoon
    Poziom 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 14619927
    Konto nie istnieje
    Konto nie istnieje  
  • #12 14619970
    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
  • #13 14619989
    yokoon
    Poziom 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 14619996
    Konto nie istnieje
    Konto nie istnieje  
  • #15 14620030
    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:
    Brak odczytu temperatury z czujnika ds18b20 na LCD w Bascom, ATmega8
    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 14620142
    yokoon
    Poziom 29  
    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:
    Brak odczytu temperatury z czujnika ds18b20 na LCD w Bascom, ATmega8
    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 14620155
    waju12
    Poziom 15  
    połączenia w magistrali 1 wire są w 100%sprawne rezystor podciągający 4,4k
  • #18 14621708
    piterek-23
    Poziom 33  
    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.
  • #19 14622039
    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
  • #20 14622465
    yokoon
    Poziom 29  
    Witam.
    Nie wiem po co mieszasz dwa programy, przecież w samym Bascomie bardzo dobrze i przejrzyście ustawia się Fuse Bity.
  • Pomocny post
    #21 14623521
    Konto nie istnieje
    Konto nie istnieje  
  • #22 14626275
    waju12
    Poziom 15  
    Witam.
    pomogła zmiana fusebitów;)
    bardzo dziękuję za pomoc i przydatną instrukcje
  • #23 14626444
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA