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

[atmega8][bascom] dlaczego termometr nie działa?

hubertfab 19 Lip 2009 16:10 3461 5
  • #1 6797576
    hubertfab
    Poziom 21  
    Witam.

    Zrobiłem termometr na DS18B20 i ATmega8. Wykorzystałem przykład z ksiązki. Wszystko podłączyłem zaprogramowałem listingiem z książki włączam, a tu widzę -81°C !

    Może mi ktoś powiedzieć jaka może być tego przyczyna?

    PS: Możecie mi dać/napisać program na ATmega8 z LCD 16*2. Aby obsługiwał DS18B20. (Tylko dodatnie temp)


    PROSZĘ O PORADY... (Za rozwiązanie mojego problemu daje 200pkt.)

    Regulamin, p. 11. + nie ten dział.
    Poprawiłem temat i przeniosłem z Programowanie Początkujący.
    [Dr.Vee]
  • #2 6797647
    SzymonHK
    Poziom 21  
    SZUKAJ słowa klucze Atmega8, DS18B20, a znajdziesz aż za dużo.
  • #3 6797922
    Konto nie istnieje
    Konto nie istnieje  
  • #4 6798160
    hubertfab
    Poziom 21  
    Książka to "Programowanie Mikrokontrolerów AVR w jez. BASCOM"


    Program termometra. Przykład z książki.
    '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                                                     'koniec procedury pomiaru


    PS: Przepraszam z początkowy brak informacji ale nie miałem dużo czasu. SORRY.

    Dodano po 29 [minuty]:

    Wyczytałem na forum, że DS18B20 różni się od DS1820 ?
    Piszą, że z tego DS18B20 mogą występować problemy odczytu.

    Ten program jest przystosowany na DS1820. Myślałem, że to nie ma różnicy.


    Może mi ktoś dać program w BASCOMie do odsługi tego DS18B20. (Najlepiej aby działał)
  • #5 6799769
    wader_669
    Poziom 28  
    Jest pelno dzialajacych kodow na forum. Jutro jak znajde czas to bede sie nimi bawic to ci dam kod.
  • #6 6799773
    dawid512
    Poziom 32  
    Proszę bardzo (szkoda kolejnych kilkunastu postów na omawiany wielokrotnie temat), kod zmodyfikuj wedle własnych potrzeb:
    $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
REKLAMA