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

[bascom][attiny2313][ds18b20]

kozunami 26 Paź 2008 23:04 6369 15
REKLAMA
  • #1 5671321
    kozunami
    Poziom 12  
    Witam!
    Wiem że problem był wałkowany setki razy,ale jakoś nie mogę sobie z nim poradzić. Posiadam zestaw uruchomieniowy zvl11 na którym to prowadzę kurs oślej łączki. Wrzuciłem wsad podany niżej do uP i odczyt z ds18b20 jaki otrzymuje to "Temp= -0.0625oC" i pod wpływem ogrzewania nic się nie zminia. W zwiazku z tym mam kilka pytań. Mianowicie czy w ustawieniach bascomu options>progarammer>compiler>1wire musi być ustawiony port komunikacji ten sam który definiujemy w programie? Czy mogą być one różne? W książce niema żadnej wzmianki o tym. Czujnik mam podłączony, przez 3 końcówki to jest ,gnd, Vcc oraz data, i z daty do Vcc przez rezystor 3.3K. JAkaś komunikacja z układem jest ponieważ gdy wypnę date z pinb.0 to LCD pokazuje "Temp=0.0oC" Czy czujnik jest walnięty czy poprostu przed 1 użyciem trzeba go jakoś skonfigurować? A może błąd w kodzie programu?
    Pozdrawiam i z góry dziękuje za odpowiedź!
      ' C032c     Najprostsze wykorzystanie DS18x20
    Config 1wire = Portb.0   ' + jumper J2 B-C
    Dim Odczyt(2) As Byte , A As Byte , Licznik As Byte , T As Integer , T1 As Single
    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
    'teraz w zmiennej T typu Integer jest dziwna "ułamkowa" wartość temperatury
      T1 = T / 16            'wyraź w stopniach Celsjusza, wynik wpisz do zmiennej Single
      'T1 = T / 2      'dla układów DS18S20 i DS1820
      Cls : Lcd "Temp=" ; T1 ; "oC"       'wyświetl wynik ze zmiennej Single
    Loop : End 


    [bascom][attiny2313][ds18b20]
  • REKLAMA
  • #2 5671401
    dawid512
    Poziom 32  
    Jeśli podajesz w programie do której końcówki jest podłączony czujnik to nie przejmuj się tym co podaje bascom ale dla świętego spokoju tam też to zmień. Obowiązkowo zmień rezystor na 4,7kΩ. Po za tym masz jakiś dziwny ten programik. Spróbuj na tym(wczesniej zmien rezystor):
    $regfile = "m32def.dat"
    $crystal = 8000000
    
    Config Lcdbus = 4
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Pb.4 , Db5 = Pb.5 , Db6 = Pb.6 , Db7 = Pb.7 , E = Pb.3 , Rs = Pb.2
    
    
    Config 1wire = Portb.0                                      ' termometr ds18b20
    Dim I As Integer                                            'zmienne do odczytu temp.
    Dim S As Single
    Dim T As String * 4
    
    Deflcdchar 0 , 6 , 9 , 6 , 32 , 32 , 32 , 32 , 32           ' znak stopnia
    
    Cursor Off
    Cls
    
                                                       'pomiar temp. na termometrze ds18b20
    Do
    
    
       1wreset
       1wwrite &HCC
       1wwrite &H44
       Waitms 750
    
       1wreset
       1wwrite &HCC
       1wwrite &HBE
    
       I = 1wread(2)
       S = I / 16
       T = Fusing(s , "##.#")
    
       Locate 1 , 1
       Lcd "Temp:" ; T ; Chr(0) ; "C"
    
    
    
    Loop
  • #3 5671476
    kozunami
    Poziom 12  
    Witam! Wrzuciłem w szereg 4 rezystory o łącznej oporności 4.7k, zmodyfikowałem program jak widać niżej pod mojego procka, niestety na wyświetlaczu wynik "Temp:-0,1oC" i nie drgnie pod wpływem zmiany temperatury. :( Jak wypnę DATA pin to otrzymuję dokładnie: "Temp:0,0oCC" wiec cos tam wysyla układ do uP. Podłączyłem układ przez zewnętrzne zasilanie 78L05 dodatkowo z daty do + przez 4.7K i nawet nie drgnie. Podciągnę w takim układzie do Vcc przez 4.7k to znowu mam "Temp:-0,1oC". Dodam Czujnik napewno nie jest uszkodzony ponieważ jak podłączyłem inny nowy, wskazania są identyczne. Cóż to może być? Tak patrze na tą płytke testową zl11AVR,kwarc jest zewnętrzny 4Mhz, wiec wszystko gra, niemam pojęcia.
      $regfile = "ATtiny2313.dat"
    $crystal = 4000000
    
    Config Lcdbus = 4
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Pb.4 , Db5 = Pb.5 , Db6 = Pb.6 , Db7 = Pb.7 , E = Pb.3 , Rs = Pb.2
    
    
    Config 1wire = Portb.0                                      ' termometr ds18b20
    Dim I As Integer                                            'zmienne do odczytu temp.
    Dim S As Single
    Dim T As String * 4
    
    Deflcdchar 0 , 6 , 9 , 6 , 32 , 32 , 32 , 32 , 32           ' znak stopnia
    
    Cursor Off
    Cls
    
                                                       'pomiar temp. na termometrze ds18b20
    Do
    
    
       1wreset
       1wwrite &HCC
       1wwrite &H44
       Waitms 750
    
       1wreset
       1wwrite &HCC
       1wwrite &HBE
    
       I = 1wread(2)
       S = I / 16
       T = Fusing(s , "##.#")
    
       Locate 1 , 1
       Lcd "Temp:" ; T ; Chr(0) ; "C"
    
    
    
    Loop
  • REKLAMA
  • #4 5672164
    Freddy
    Poziom 43  
    A napewno masz DS18b20 a nie DS1820 lub DS18S20 ?
  • #5 5672239
    kozunami
    Poziom 12  
    Witam! Układ to Dallas 18B20, używam Bascom-u 1.11.9.0 , napięcie Vcc na uP to 5v. Nie wiem już gdzie szukać przyczyny, a nie podaruje bo do projektu będzie mi on potrzebny. Czy jest jakiś uprzejmy forumowicz z Koszalina do którego mógłbym się zgłosić z tym problemem?
  • #6 5672293
    zumek
    Poziom 39  
    kozunami napisał:
    ...kwarc jest zewnętrzny 4Mhz, wiec wszystko gra...

    To po raz N-ty na tym forum , zapytam: A fusebity skonfigurowałeś/przestawiłeś/zmieniłeś/ruszałeś :?:

    Piotrek
  • #7 5672419
    kozunami
    Poziom 12  
    Na płytce zvl11avr jest kwarc ale nie wiem czy jest on podłączony czy nie jak to sprawdzić? Wszystkie poprzednie programy działają prawidłowo, nigdy nie konfigurowałem fuse bitów, wiem o nich tylko tyle że nieprawidłową konfiguracją można zablokować procka. Może foto coś wyjaśni. Więc jak do wspołpracy z 18B20 powinny być skonfigurowane?
    [bascom][attiny2313][ds18b20]
  • #8 5672439
    snow
    Poziom 31  
    Skoro nie przestawiałeś nic to deklaracje $crystal musisz zmienić na 1MHz
  • REKLAMA
  • #9 5672485
    kozunami
    Poziom 12  
    Kocham Was!!! Ustawienie kwarcu na 1Mhz pomogło :))))Czy to znaczy ze procek chodzi z prędkością 1Mhz? Przecież wewnętrzny oscylator ma 4Mhz.A jakby nie było tego wewnętrznego kwarca? Wyjaśni mi ktoś dlaczego tak a nie inaczej?
  • #10 5672566
    snow
    Poziom 31  
    Nie ma wewnętrznego kwarca. Wszystko jest opisane w dokumentacji w rozdziale "System Clock and Clock Options"
  • #11 5673022
    dawid512
    Poziom 32  
    Zostaje jeszcze jedno pytanie: czy masz na pewno to 4MHz?
  • #12 5673026
    snow
    Poziom 31  
    Skoro autor napisał że nic nie zmieniał i ruszyło mu po zmianie na 1MHz zatem wniosek z tego taki że .... ma 1MHz ;)
  • #13 5673051
    dawid512
    Poziom 32  
    Snow to była pomyłka. Dostałem maila i od razu dałem link do odpowiedzi i nie było tam późniejszych postów. Chciałem usunąć post ale na niego odpowiedziałeś.
  • #14 5674675
    kozunami
    Poziom 12  
    Witam!
    Próbowałem zmodyfikować ten program w taki sposób abym mógł odczytywać pastylki ibutton ds1990a ,kod na dole jednak nie chodzi w ogóle, czy ktoś z Was ruszał te pastylki?
     $regfile = "ATtiny2313.dat"
    $crystal = 1000000
    
    Config Lcdbus = 4
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Pb.4 , Db5 = Pb.5 , Db6 = Pb.6 , Db7 = Pb.7 , E = Pb.3 , Rs = Pb.2
    
    
    Config 1wire = Portb.0                                      
    Dim I As Integer        
    
    Cursor Off
    Cls
    
                                                     
    Do
    
    
       1wreset
       1wwrite &HCC
       1wwrite &H44
       Waitms 750
    
       1wreset
       1wwrite &HCC
       1wwrite &HBE
    
       I = 1wread(8)
    
    
    
       Locate 1 , 1
       Lcd "KOD:" ; I
    
    
    
    
    
    
    Loop  
  • REKLAMA
  • #15 5675125
    zumek
    Poziom 39  
    kozunami napisał:
    ...czy ktoś z Was ruszał te pastylki?

    A czy Ty , zaglądałeś do dokumentacji tej "pastylki" :?: Wątpię :|
    Przecież jedyne co potrafi DS1990A , to podanie swojego numeru seryjnego(ID) , natomiast Ty , nakazujesz mu zmierzyć i podać temperaturę.
    Poza tym , na zmienną typu INTEGER , Bascom rezerwuje 2B , a Ty na siłę chcesz wepchnąć 8B.A więc poczytaj , pomyśl i dopiero wtedy napisz kod.

    Piotrek
  • #16 5675700
    kozunami
    Poziom 12  
    Witam! Rozumiem że spora część starszych forumowiczów jest podirytowany gdy nie znający prawa ohma pytają się jak podłączyć diodę,ale skromne "&H33" wiele by mi pomogło :crazyeyes: Oto poprawny kodu dołu. Mam pytanie jeszcze odnośnie czekania przy odczytywaniu temperatury nie da sie tego jakoś obejść?
     
     $regfile = "ATtiny2313.dat"
    $crystal = 1000000
    
    Config Lcdbus = 4
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Pb.4 , Db5 = Pb.5 , Db6 = Pb.6 , Db7 = Pb.7 , E = Pb.3 , Rs = Pb.2
    
    
    Config 1wire = Portb.0
    Dim Z(8) As Byte
    Dim I As Integer
    
    
    Cursor Off
    Cls
    
    
    Do
    
    
    
       1wreset
       1wwrite &H33
       Z(1) = 1wread(8)
    
     Locate 1 , 1
    
      For I = 1 To 8
    
       Lcd hex(Z(i))
    
       Next
    
    
    
    Loop
REKLAMA