Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ds18b20 + atmega8 + bascom + alarm

T.J.Storm 06 Sty 2008 14:09 2176 0
  • #1 06 Sty 2008 14:09
    T.J.Storm
    Poziom 9  

    Witam

    Mam Problem Z Napisaniem Programu Do Atmega8.

    A Mianowicie Sprawa Wygląda Tak:

    Każdy ds18b20 Podpięty Do Innego Portu.

    I Chcę:

    1. Zrobić Alarm Po Przekroczeniu Określonej Temperatury:

    a) W Miejscu Danego Czujnika np. 2 Zamiast Temperatury Wyskoczył Napis "GORĄCO" i Po Chwili Zniknął i Pojawiła Się Temperatura i Znowu Napis "GORĄCO" I tak W Kółko Dopóki Temperatura Nie Spadnie Poniżej Określonej Temperatury Alarmu).

    2. Chcę Zrobi Strzałki Informujące O Danym Trendzie Temperatury :

    a) Jeżeli Temperatura Rośnie To Za Temperaturą Na Końcu Pojawiała Się Strzałka Skierowana Do Góry,

    b)Jeżeli Temperatura Maleje To Strzałka Skierowana Do Dołu,

    c) Jeżeli Jest Stała Temperatura To Strzałki Nie Ma.

    Z Góry Dzięki Za Pomoc

    Pozdrawiam Dawid

    Poniżej Kod Mojego Programu:


    Code:
    'program kompilowany w BASCOM AVR ver. 1.11.8.4
    


    'ładowanie biblioteki rejestrów dla ATMEGA8
    $regfile = "m8def.dat"

    'deklaracja kwarca (wewnętrzny 1 MHz)
    $crystal = 1000000

    'konfiguracja połączeń LCD oraz wybór typu
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
    Config Lcd = 16 * 4



    'konfiguracja 1 -wire
    Config 1wire = Portd.0
    Config 1wire = Portd.1
    Config 1wire = Portd.2
    Config 1wire = Portd.3


    Deflcdchar 0 , 28 , 20 , 28 , 32 , 32 , 32 , 32 , 32        ' znak stopnia
    'zmienne i podprogramy

    Declare Sub Wysw_temp


    'zmienne dotyczace pomiaru temperatur

    Dim A1 As Byte
    Dim B1 As Byte
    Dim B2 As Byte
    Dim R As Byte
    Dim Znak As String * 1
    Dim Tmp As String * 4
    R = 255
    Dim T1 As Single
    Dim T2 As Single

    'intro :)                                                     'ekran startowy (pojawia się tylko podczas włączania urządzenia)
    Cursor Off
    Cls

    Locate 1 , 1
    Lcd "   Witaj T.J.   "
    Wait 3
    Locate 3 , 1
    Lcd "Kolejny Dzien:-)"
    Wait 3
    Cls

    'opisy mierzonych wielkosci
    Locate 1 , 1
    Lcd "KEG"
    Locate 2 , 1
    Lcd "KOLUMNA"
    Locate 3 , 1
    Lcd "GLOWICA"
    Locate 4 , 1
    Lcd "DESTYLAT"


    'petla glowna

    Do



    'odczyt temperatury
    'wyslanie polecenia "skip rom" oraz rzadanie przetwarzania temperatury dla czujnika 1 (DS1)
    1wreset Pind , 0
    1wwrite &HCC , 1 , Pind , 0
    1wwrite &H44 , 1 , Pind , 0






    'wyslanie polecenia "skip rom" oraz rzadanie przetwarzania temperatury dla czujnika 2 (DS2)
    1wreset Pind , 1
    1wwrite &HCC , 1 , Pind , 1
    1wwrite &H44 , 1 , Pind , 1

    'wyslanie polecenia "skip rom" oraz rzadanie przetwarzania temperatury dla czujnika 1 (DS3)
    1wreset Pind , 2
    1wwrite &HCC , 1 , Pind , 2
    1wwrite &H44 , 1 , Pind , 2

    'wyslanie polecenia "skip rom" oraz rzadanie przetwarzania temperatury dla czujnika 1 (DS1)
    1wreset Pind , 3
    1wwrite &HCC , 1 , Pind , 3
    1wwrite &H44 , 1 , Pind , 3


    'konieczny delay dla czujników DS18B20
    Waitms 800

    'odczyt temeratury z czujnika 1 (DS1)
    1wreset Pind , 0
    1wwrite &HCC , 1 , Pind , 0
    1wwrite &HBE , 1 , Pind , 0

    B1 = 1wread(1 , Pind , 0)
    B2 = 1wread(1 , Pind , 0)

    'przeliczenie temperatury oraz jej wyswietlanie
    Locate 1 , 10
    Wysw_temp


    'odczyt temeratury z czujnika 2 (DS2)

    1wreset Pind , 1
    1wwrite &HCC , 1 , Pind , 1
    1wwrite &HBE , 1 , Pind , 1

    B1 = 1wread(1 , Pind , 1)
    B2 = 1wread(1 , Pind , 1)

    'przeliczenie temperatury oraz jej wyswietlanie
    Locate 2 , 10
    Wysw_temp

    'odczyt temeratury z czujnika 3 (DS3)

    1wreset Pind , 2
    1wwrite &HCC , 1 , Pind , 2
    1wwrite &HBE , 1 , Pind , 2

    B1 = 1wread(1 , Pind , 2)
    B2 = 1wread(1 , Pind , 2)

    'przeliczenie temperatury oraz jej wyswietlanie
    Locate 3 , 10
    Wysw_temp

    'odczyt temeratury z czujnika 4 (DS4)

    1wreset Pind , 3
    1wwrite &HCC , 1 , Pind , 3
    1wwrite &HBE , 1 , Pind , 3

    B1 = 1wread(1 , Pind , 3)
    B2 = 1wread(1 , Pind , 3)

    'przeliczenie temperatury oraz jej wyswietlanie
    Locate 4 , 10
    Wysw_temp

    Waitms 100


    Loop

    'procedura przelicza temperature z czujnikow DS18B20 oraz ją wyświetla z dokladnoscia 0,1st C
    Sub Wysw_temp


    If B2 >= 248 Then
    B1 = R - B1
    B2 = R - B2
    Znak = "-"
    Else
    Znak = ""
    End If
    T1 = B1 / 16
    T2 = B2 * 16
    T1 = T1 + T2


    T1 = T1 = 0.05
    Tmp = Fusing(t1 , "##.&")

    If T1 > 99.999 Then
    Lcd Tmp ; Chr(0) ; "C"
    Else





           If T1 > 9.999 Then
          Lcd Znak ; Tmp ; Chr(0) ; "C"
          Else
          Lcd Znak ; "" ; Tmp ; Chr(0) ; "C"
          End If


    End If

    End Sub
    'koniec programu

    0 0
  Szukaj w 5mln produktów