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.

[Atmega8][bascom] problem z ds18b20

pawello148 05 Dec 2009 11:26 1629 5
  • #1
    pawello148
    Level 12  
    witam
    mój problem jest tego typu, że ma termometr, który wykorzystuje właśnie18d20 i wyświetla temperaturę na lcd tylko że nie liniowo;/
    co jest nie tak
    podłączony jest przez rezystor podciągający
    a o to jak wygląda kod programu
    Code:

    $regfile = "m8def.dat"                                      ' zdeklarowane dla Atmegi8
    $crystal = 8000000                                          ' Taktowanie wewnetrzne 1mHz

    Config 1wire = Portb.0                                      ' ustawienie pinu dla magistrali 1wire (czujnik temperatury)
    Declare Sub Odcz_temp

    Dim Temp(2) As Byte                                         ' adres czujnika temperatury
    'definicja znaku stopnia
    Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
    Cls
    Cursor Off
    Lcd "Termometr Pawel"
    Lowerline
    Lcd "   2009;)"
    Wait 2
    Do
       Call Odcz_temp
       Cls
       If Temp(2) = 0 Then
          Lcd "Temp: " ; Temp(1) ; Chr(0) ; "C"
       Else
          Lcd "Temp: -" ; Temp(1) ; Chr(0) ; "C"
       End If
    Loop
    End

    Sub Odcz_temp

       1wreset
       1wwrite &HCC
       1wwrite &H44
       Waitms 750
       1wreset
       1wwrite &HCC
       1wwrite &HBE



       Temp(1) = 1wread(2)

       1wreset
       If Err = 1 Then
          Cls
          Lcd "Brak układu"

          Do
          Loop
       End If
       If Temp(2) > 0 Then
       Temp(1) = 256 - temp(1);

       End If

            Temp(1) = Temp(1) / 2

    End Sub
  • #2
    _Robak_
    Level 33  
    A co to znaczy ze wyswietla temperature nie liniowo ?
  • #3
    pawello148
    Level 12  
    tzn. wyświetla liniowo, jednak wskazuje głupie wartości
    np dla tem pokojowej jest oko -70
  • #4
    11111olo
    Level 42  
    Witam.
    Ja kiedyś napisałem program który zawierał odczyt z ds18b20.

    Code:

    'tablica temperatury po przecinku
    Tabtemp(1) = 0
    Tabtemp(2) = 1
    Tabtemp(3) = 1
    Tabtemp(4) = 2
    Tabtemp(5) = 3
    Tabtemp(6) = 3
    Tabtemp(7) = 4
    Tabtemp(8) = 4
    Tabtemp(9) = 5
    Tabtemp(10) = 6
    Tabtemp(11) = 6
    Tabtemp(12) = 7
    Tabtemp(13) = 8
    Tabtemp(14) = 8
    Tabtemp(15) = 9
    Tabtemp(16) = 9

    Temperatura2:
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    Odczyt(1) = 1wread(2)
    Starszy = Odczyt(2)                                         'starszy
    Mlodszy = Odczyt(1)                                         'młodszy
    Return


    '****************
    'przeliczanie
    '*******************
    Przelicz:

    Ujemna = 0
    If Starszy > 127 Then
     Ujemna = 1
     Starszy = Starszy And 127
     Starszy = Starszy Xor 255
     Mlodszy = Mlodszy Xor 255
    End If

    Poprzecinku = Mlodszy And 15
     Shift Starszy , Left , 4
     Mlodszy = Mlodszy / 16
     Starszy = Starszy + Mlodszy

    If Ujemna = 1 Then Lcd "-"
    If Starszy < 100 Then Lcd " "
    If Starszy < 10 Then Lcd " "
    Lcd Starszy
    If Poprzecinku2 = 1 Then
    Lcd "."
    Lcd Tabtemp(poprzecinku + 1)
    End If
    Return


    Było to pisane do czegoś innego, jednak działało.
  • #5
    zumek
    Level 39  
    pawello148 wrote:
    ...jednak wskazuje głupie wartości...

    Bo masz ... "głupie" obliczenia :-P
    Code:

    '...
       If Temp(2) > 0 Then
       Temp(1) = 256 - temp(1);

       End If

            Temp(1) = Temp(1) / 2
    '...

    Jak obliczyć ją właściwie :?:
    Użyj lokalnej wyszukiwarki - rozwiązań jest sporo :)
  • #6
    pawello148
    Level 12  
    zamykam temat:) dziękuje wszytki którzy się wypowiedzieli