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

Termometr atmega8 dodanie przycisków

23 Mar 2011 22:40 1646 2
  • Poziom 18  
    Witam

    Na wstępie chciał bym dodać, że w programowaniu jestem laikiem. Tworzę właśnie termometr czteropunktowy. jest to przeróbka schematu z sieci http://sq9mtx.pl/viewpage.php?page_id=11 . Po załączeniu termometru na lcd pojawiają mi się wszystkie temperatury, a chciał bym aby były np. 4 przyciski do wybierania danej temperatury. I tu do was prośba aby przerobić mój program do obsługi przycisków i poprawienia schematu oraz płytki bo ja jako początkujący spędziłem nad nią sporo czasu a pewnie ta przeróbka może mi się nie udać.
    program jest również z tego forum lecz po drobnych przeróbkach z mojej strony
    Code:

    $regfile = "m8def.DAT"                                      'deklaracja procesora, w tym wypadku Atmega8
    $crystal = 8000000                                          'deklaracja cześtotlwiości pracy (wew oscylator 1MHz w zupełności wystarcza)
    'Deklaracja portów od wyświetlacza LCD
    Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5

    Config Lcd = 16 * 2                                         'ustawiamy typ wyświetlacza (soft jest dostosowany do pracy z wyświetlaczem 2x20, przy pracy z innym wyświetlaczem trzeba będzie skorygować wyświetlanie znaków)

    '*************************************WAŻNE**********************************************
    'Pamiętać o podłączeniu rezystora podciągającego o wartości 4.7kohm między linią DQ a VCC
    Config 1wire = Portb.5                                      'deklaracja portu na którym będą podpięte DS18b20

    Dim I1 As Integer , Ss As String * 6
    Dim I2 As Integer
    Dim I3 As Integer
    Dim I4 As Integer

    Dim Dsid1(8) As Byte
    Dim Dsid2(8) As Byte
    Dim Dsid3(8) As Byte
    Dim Dsid4(8) As Byte
    Dim B As Byte                                               'deklaracja zmiennej do odczytu kodów ID
    Dim W As Byte                                               'deklaracja zmiennej do odczytu ilośc czujników

    Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32             'znak stopnia Celsjusza

    Cursor Off                                                  'Wyłącza kursor
    Cls                                                         'Funkcja CLS czyści ekran
    Lcd " Termometr by Duch  " ;                                'ekran startowy (pojawia się tylko podczas włączania urządzenia)
    Lowerline
    Lcd "        2007        "
    Wait 5
    Cls
    W = 1wirecount()
    Lcd "Ilosc czujnikow:"                                      'Informuje ile czujników jest podpiętych do układu (pojawia się tylko podczas włączania urządzenia)
    Waitms 500
    Lcd W
    Wait 3
    Cls                                                         'Znajdź pierwszy czujnik podpięty do portu
    Dsid1(1) = 1wsearchfirst()                                  'Znajdź kolejny czujnik podpięty do portu
    Dsid2(1) = 1wsearchnext()                                   'Znajdź kolejny czujnik podpięty do portu
    Dsid3(1) = 1wsearchnext()                                   'Znajdź kolejny czujnik podpięty do portu
    Dsid4(1) = 1wsearchnext()

    '*******************Odczyt numerów ID czujników temperatury*********************

    If Dsid1(8) = Crc8(dsid1(1) , 7) Then                       'ta opcja pojawia się tylko przy włączaniu urządzenia
     Locate 1 , 1
     Lcd "CRC OK Czujnik 1 ID"
     Wait 1
     Locate 1 , 1
     For B = 1 To 8
     Lcd Hex(dsid1(b))
     Next
    End If
    Wait 2

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

    If Dsid3(8) = Crc8(dsid3(1) , 7) Then
     Locate 1 , 1
     Lcd "CRC OK Czujnik 3 ID"
     Wait 1
     Locate 1 , 1
     For B = 1 To 8
     Lcd Hex(dsid3(b))
     Next
    End If
    Wait 2

    If Dsid4(8) = Crc8(dsid4(1) , 7) Then
     Locate 2 , 1
     Lcd "CRC OK Czujnik 4 ID"
     Wait 1
     Locate 2 , 1
     For B = 1 To 8
     Lcd Hex(dsid4(b))
     Next
    End If
    Wait 2
    Cls

    '*******************koniec odczytu ID czujników temperatury*********************

    Do
       1wreset
       1wwrite &H55
       1wverify Dsid1(1)                                        'wysyłamy adres pierwszego czujnika
       1wwrite &HBE
       I1 = 1wread(2)
    '---------------------------------
       1wreset
       1wwrite &H55
       1wverify Dsid2(1)                                        'wysylam adres drugiego czujnika
       1wwrite &HBE
       I2 = 1wread(2)
    '---------------------------------
       1wreset
       1wwrite &H55
       1wverify Dsid3(1)                                        'wysylam adres trzeciego czujnika
       1wwrite &HBE
       I3 = 1wread(2)
    '---------------------------------
       1wreset
       1wwrite &H55
       1wverify Dsid4(1)                                        'wysylam adres czwartego czujnika
       1wwrite &HBE
       I4 = 1wread(2)
    '--------konwersja temp dla wszystkich dsow
       1wreset
       1wwrite &HCC
       1wwrite &H44
    Wait 1

    '****Jeśli pracujesz z wyświetlaczem innym niż 2x20 to tutaj trzeba wprowadzić zmiany w LOCATE********

       I1 = I1 * 10
       I1 = I1 / 16
       'If I1 > 0 Then Cls                                       'korekta przesuniecia znaku st C przy przejściu z temp ujemnej na dodatnią
       Ss = Str(i1)
       Ss = Format(ss , " 0.0")
       Locate 1 , 1                                             'Pozycja wyświetlania nazwy i temperatury (1.1 -> 1 linia 1 kolumna, 2.10 -> 2 linia 10 kolumna itd)
       Lcd "Zew" ; Ss ; Chr(0) ;

       I2 = I2 * 10
       I2 = I2 / 16
       'If I2 > 0 Then Cls
       Ss = Str(i2)
       Ss = Format(ss , " 0.0")
       Locate 2 , 1
       Lcd "Lod" ; Ss ; Chr(0) ;

       I3 = I3 * 10
       I3 = I3 / 16
       'If I3 > 0 Then Cls
       Ss = Str(i3)
       Ss = Format(ss , " 0.0")
       Locate 1 , 11
       Lcd "Wew " ; Ss ; Chr(0) ;

       I4 = I4 * 10
       I4 = I4 / 16
       'If I4 > 0 Then Cls
       Ss = Str(i4)
       Ss = Format(ss , " 0.0")
       Locate 2 , 11
       Lcd "Piec" ; Ss ; Chr(0) ;

    Loop

    PS. Może ewentualnie jakiś linki do gotowego projektu spełniające moje oczekiwania?

    w załączniku schemat i płytka

    z góry dziękuję za wszelką pomoc
  • Poziom 42  
    Komar91 napisał:
    Witam
    PS. Może ewentualnie jakiś linki do gotowego projektu spełniające moje oczekiwania?


    Proszę oto Link

    Gwarantuję ci, że po przeczytaniu tego o czym tam mowa to nie dość że zrobisz sobie taki termometr na bazie choćby podanych przykładów to będzie jeszcze jedna, i to o wiele większa korzyść - sam nauczysz się pisać takie programy ;) Na prawdę warto spróbować. Będziesz wtedy miał dokładnie to czego oczekujesz, bo jak widzisz ciężko znaleźć gotowca który by spełniał wszystko to o czym myślisz.