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

Ds18B20 + Zl2avr = Brak układu

gts1991 22 Mar 2010 23:49 933 0
  • #1 7868339
    gts1991
    Użytkownik obserwowany
    Witam
    Próbuje od parru godzin rozszyfrować problem z brakiem komunikacji po 1wire 3 przewodowej , opornik 3.3k jest wersja
    Kod nawet z książnik nie działa na 3 różnych ds sprawdzane? może dlatego że Vcc z gdn zostało pomylone? ; Bascom 1.11.7.4
    Kod:
    
    'Program  obsługi jednego układu DS1820 dołączonego
    'do magistrali 1-Wire
    
    $regfile = "m8def.dat"                                      'informuje kompilator o pliku
          'dyrektyw mikrokontrolera
    $crystal = 8000000                                          'informuje kompilator
          'o częstotliwości oscylatora
          'taktującego mikrokontroler
    Config Lcd = 16 * 2                                         'konfiguracja typu wyświetlacza
          'LCD
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5       'konfiguracja linii
          'mikrokontrolera‚ do których
          'dołączono wyświetlacz
          'LCD
    Config 1wire = Portb.0                                      'konfiguracja linii magistrali
          '1-Wire
    Declare Sub Odcz_temp                                       'procedura odczytu temperatury
          'z układu DS1820
    Dim Temperatura(2) As Byte                                  'tablica dwóch zmiennych typu
          'Byte do pamiętania wartości
          'temperatury
    'definicja znaku stopnia
    Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
    
    Do                                                          'początek pętli programu
     Call Odcz_temp                                             'wywołanie procedury pomiaru
          'temperatury
     Cls                                                        'czyszczenie ekranu LCD
     If Temperatura(2) = 0 Then                                 'jeśli wartość Temperatura(2)=
          '=0, to temperatura dodatnia
          'wyświetla temperatury dodatnie
      Lcd "Temp: " ; Temperatura(1) ; Chr(0) ; "C"
     Else                                                       'w przeciwnym razie
          'wyświetla temperatury ujemne
      Lcd "Temp: -" ; Temperatura(1) ; Chr(0) ; "C"
     End If
    Loop                                                        'koniec pętli Do...Loop
    End                                                         'koniec programu
    
    Sub Odcz_temp                                               'definicja procedury pomiaru
          'temperatury
     1wreset                                                    'reset magistrali 1-Wire
     1wwrite &HCC                                               'opuszczenie zapisu numeru ID
     1wwrite &H44                                               'start pomiaru temperatury
     Waitms 750                                                 'opóźnienie na czas pomiaru
     1wreset                                                    'reset magistrali 1-Wire
     1wwrite &HCC                                               'opuszczenie zapisu numeru ID
     1wwrite &HBE                                               'komenda odczytu zmierzonej
          'temperatury
     Temperatura(1) = 1wread(2)                                 'odczyt zmierzonej temperatury
          'do tablicy Temperatura
     1wreset                                                    'reset magistrali 1-Wire
     If Err = 1 Then                                            'jeśli układ dołączony do
          'magistrali nie odpowiada, to
      Cls                                                       'czyszczenie LCD
      Lcd "Brak ukladu"                                         'wyświetlenie komunikatu o braku
          'dołączonego układu
      Do                                                        'nieskończona pętla w celu
          'wstrzymania działania programu
      Loop
     End If
     If Temperatura(2) > 0 Then                                 'jeśli zmienna Temperatura(2)
          '> 0, to temperatura ujemna
          'przeliczenie temperatury
          'ujemnej
      Temperatura(1) = 256 - Temperatura(1)
     End If                                                     'koniec warunku
     Temperatura(1) = Temperatura(1) / 2
          'dalsze przeliczenie odczytanej
          'temperatury dodatniej jak
          'i ujemnej
    End Sub
REKLAMA