Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[BASCOM]1Wire. Moduł MMega01. Brak komunikacji z urządzeniami 1Wire.

august_a 18 Mar 2006 17:51 2524 8
  • #1
    august_a
    Level 21  
    Witam,
    Nabyłem moduł MMega01 firmy http://www.propox.pl/index.phtml?lang=pl
    Problem polega na braku komunikacji z urządzeniami 1wire... Probowałem podłączyć termometr DS18b20(nie jeden - myślałem że ten co mam jest uszkodzony) i nic... taktowanie procka to ok 16MHz.
    Jako rezystor podciągający na magistrali 1wire daje 2,2k np w ATmega32 zawsze wystarczało.

    Program który sprawdzam to:
    Code:

    Config 1wire = Porte.2

    Declare Sub Init
    Declare Sub Convallt
    Declare Function Decigrades(byval Sc(9) As Byte) As Integer




    Dim B As Byte
    Dim W As Word


    Dim Dg As Integer .
    Dim Min1 As Integer
    Dim Min2 As Integer
    Dim Max1 As Integer
    Dim Max2 As Integer

    Dim Dsid1(8) As Byte
    Dim Dsid2(8) As Byte


    Dim Sc(9) As Byte



    Cls
    W = 1wirecount()




    Dsid1(1) = 1wsearchfirst()
    Do
     Dsid2(1) = 1wsearchnext()
    Loop Until Err = 1


    If Dsid1(8) = Crc8(dsid1(1) , 7) Then
     Locate 1 , 1
     Lcd "CRC OK Sensor 1 ID"
     Waitms 100
     Locate 1 , 1
     For B = 1 To 8
     Lcd Hex(dsid1(b))
     Next
    End If


    If Dsid2(8) = Crc8(dsid2(1) , 7) Then
     Locate 2 , 1
     Lcd "CRC OK Sensor 2 ID"
     Wait 1
     Locate 2 , 1
     For B = 1 To 8
     Lcd Hex(dsid2(b))
     Next
    End If
    Waitms 100
    Cls

    Init

    ' Main loop
    Do
     Convallt                                                   ' "Convert ALL T on the 1w-bus"
     Waitus 250 : Waitus 250 : Waitus 250 : Waitus 250          'if you use 2-wire, could be reduced to 200us

     1wverify Dsid1(1)                                          'Issues the "Match ROM "
     Locate 1 , 1
     If Err = 1 Then
     Lcd "Err "                                                 'Err = 1 if something is wrong
     Elseif Err = 0 Then                                        'lcd " Sensor found"
     1wwrite &HBE
     Sc(1) = 1wread(9)                                          'read bytes into array
     If Sc(9) = Crc8(sc(1) , 8) Then
     Dg = Decigrades(sc(9))
     If Min1 > Dg Then Min1 = Dg
     If Max1 < Dg Then Max1 = Dg
     Lcd Dg : Locate 1 , 7 : Lcd Min1 : Locate 1 , 14 : Lcd Max1
     End If
     End If

     1wverify Dsid2(1)
     Locate 2 , 1
     If Err = 1 Then
     Lcd "DsId2 not on bus "
     Elseif Err = 0 Then                                        ' lcd " Sensor found "
     1wwrite &HBE
     Sc(1) = 1wread(9)
     If Sc(9) = Crc8(sc(1) , 8) Then
     Dg = Decigrades(sc(9))
     If Min2 > Dg Then Min2 = Dg
     If Max2 < Dg Then Max2 = Dg
     Lcd Dg : Locate 2 , 7 : Lcd Min2 : Locate 2 , 14 : Lcd Max2
     End If
     End If
     Wait 1
    Loop
    End                                                         'end program


    Sub Init
     Cls
     Lcd " Min Max"
     Locate 2 , 1
     Lcd " Min Max"
     Min1 = 999                                                 ' to get a real value from start
     Min2 = 999
    End Sub

    Sub Convallt
     1wreset                                                    ' reset the bus
     1wwrite &HCC                                               ' skip rom
     1wwrite &H44                                               ' Convert T
    End Sub


    Function Decigrades(byval Sc(9) As Byte)
     Decigrades = 0
     Decigrades = Makeint(sc(1) , Sc(2))
     Decigrades = Decigrades * 10
     Decigrades = Decigrades / 16
    End Function


    Proszę o pomoc w rozwiązaniu problemu.
  • #2
    1ceman
    Level 12  
    Jak już temat o 1wire i DS1820 to się podłącze.
    august_a Twojego problemu nie umiem rozwiązać niestety, ale na pewno ktoś to zrobi.
    Ja natomiast mam pytanie takie:
    Jaki mikrokontroler można wykorzystać do układu w którego skład wchodzą dwa czujniki DS1820 i LCD, na którym dane są wyświetlane? Mam atmega8, ale chyba do najtańszych nie należy i pewnie można coś mniejszego/tańszego wykorzystać dla takiego prostego układu.
  • #3
    august_a
    Level 21  
    Quote:
    Jaki mikrokontroler można wykorzystać do układu w którego skład wchodzą dwa czujniki DS1820 i LCD, na którym dane są wyświetlane? Mam atmega8, ale chyba do najtańszych nie należy i pewnie można coś mniejszego/tańszego wykorzystać dla takiego prostego układu.


    Do tego mozesz zastosowac AT89C2051 cena ok 3,5zł.
  • #4
    1ceman
    Level 12  
    Załóżmy, że chciałbym zasilać ten układ baterią 4.5V. Jak często będę musiał ją wymieniać?
  • #5
    august_a
    Level 21  
    Quote:
    Załóżmy, że chciałbym zasilać ten układ baterią 4.5V. Jak często będę musiał ją wymieniać?

    Jeśli lcd bedzie z podświetleniem to raczej często.
    (ZCHODZIMY Z MOJEGO TEMATU - proponuje założyć własny)
  • #6
    M. S.
    Level 34  
    Przy ostatnej dyskusji na forum dowiedzałem się, że jeden drut w Bascomie na 16MHz się nie wyrabia. Spróbuj przełączyć się na wewnętrzny generator i 8MHz. aby sprawdzić.
  • #7
    august_a
    Level 21  
    Ale czy efektem tego może być to, że DS nie jest całkowicie widoczny przez program??
    Dokładnie kwarc ma 14,7456MHz
  • #8
    M. S.
    Level 34  
    Nie testowałem 1wire na takich częstotliwościach. Wiem jednak z programowania w C, że warunki czasowe dla 1wire są bardzo ważne. Jeżeli nie są spełnione to magistrala się wysypie.
  • #9
    august_a
    Level 21  
    Działa. Nie wymieniałerm kwarca został ten 16MHz.
    Problem polegał na odpowiednim dobraniu rezystora pomiędzy Danymi a + zasilania, 2,2k nie wystarczał , dałem 4,7 i śmiga. Musiałem też troche pozmieniać czasy konwersji.
    Dzieki za wszelką pomoc