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

Jak ustawić fusebity dla termometru 4 kanałowego?

piotruuch 24 Mar 2010 19:40 1146 0
REKLAMA
  • #1 7875416
    piotruuch
    Poziom 14  
    Posty: 161
    Ocena: 22
    Witam!
    Proszę o pomoc przy ustawieniu fusebitów... Niestety autor nie odpowiada na moje maila i pytania... Proszę o pomoc np. w postaci opisów lub screnów. Po wysłaniu na wyświetlaczu pali się czarna linia kwadratów w pierwszej linijce. Zmieniłem również kwarc na 12MHz...

    Wykonałem poniższy układ 4xds18b20+LCD=termometr
    Cytat:
    Tam jest użyte słowo "może" co znaczy że błąd może wystąpić ale nie musi. Ja u siebie nie dostrzegam błędów, porównywane z kilkoma termometrami rtęciowymi.

    Dodaje fotki i wsad nowej wersji termometru oraz schemat i wzór PCB. Dodałem obsługę 2 przycisków (wyświetlanie temp. maksymalnej i minimalnej, oraz resetowanie tych wartości). Płytka PCB powstała w Eaglu. Panel przedni w Corelu.

    Wartość MAX i MIN dla każdej z temperatur przechowywana jest w zmiennej SRAM-owej. Soft może zawierać jeszcze błędy które postaram się w najbliższym czasie wyeliminować!!! Jak będzie mi się chciało to może zrobię wykres temperatury przy pomocy bargrafa.


    Wyeliminowano błąd pokazywania prawidłowej temperatury po kasowaniu pamięci SRAM-owej. Wsad poniżej jest poprawiony


    Wsad do procesora...
    Cytat:

    Kod:
    $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 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.5 , Db7 = Portc.4 , E = Portc.1 , Rs = Portc.0

    Config Lcd = 20 * 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 = Portd.5 'deklaracja portu na którym będą podpięte DS18b20



    Config Pind.7 = Input
    Config Pinb.0 = Input

    Config Debounce = 10


    Set Portd.7
    Set Portb.0

    Declare Sub Pokaz_temp
    Declare Sub Skasowano

    Dim I1 As Integer , Ss As String * 6
    Dim I2 As Integer
    Dim I3 As Integer
    Dim I4 As Integer
    Dim I11 As Integer ' przechowuje poprzednią wartoś temp
    Dim I22 As Integer ' przechowuje poprzednią wartoś temp
    Dim I33 As Integer ' przechowuje poprzednią wartoś temp
    Dim I44 As Integer ' przechowuje poprzednią wartoś temp

    Dim Zewmin As Integer
    Dim Zewmax As Integer
    Dim Wewmin As Integer
    Dim Wewmax As Integer
    Dim Piemin As Integer
    Dim Piemax As Integer
    Dim Lodmin As Integer
    Dim Lodmax 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
    Dim A As Byte 'Przesuwanie ekranu startowego


    Deflcdchar 0 , 8 , 20 , 8 , 32 , 32 , 32 , 32 , 32 'znak stopnia Celsjusza
    Deflcdchar 1 , 8 , 20 , 8 , 32 , 4 , 14 , 21 , 4 ' strzałka w góre
    Deflcdchar 2 , 8 , 20 , 8 , 32 , 4 , 21 , 14 , 4 ' strzałka w dół


    Zewmin = 125 * 16
    Wewmin = 125 * 16
    Piemin = 125 * 16
    Lodmin = 125 * 16
    Zewmax = -55 * 16
    Wewmax = -55 * 16
    Piemax = -55 * 16
    Lodmax = -55 * 16

    Cursor Off
    Cls
    Locate 1 , 21
    Lcd ">> Duch <<"
    Locate 2 , 24
    Lcd "2008"

    For A = 1 To 15
    Shiftlcd Left
    Waitms 30 'Wysuniecie tekstu
    Next A

    Wait 2

    For A = 1 To 15
    Shiftlcd Left
    Waitms 30 'Schowanie tekstu
    Next A

    Waitms 300

    'Wyłącza kursor
    Cls
    Locate 1 , 21 'Funkcja CLS czyści ekran
    Lcd "Termometr"
    Locate 2 , 21 'ekran startowy (pojawia się tylko podczas włączania urządzenia)
    Lcd "6.08.2008"

    For A = 1 To 15
    Shiftlcd Left
    Waitms 30 'Wysuniecie tekstu
    Next A

    Wait 2

    For A = 1 To 15
    Shiftlcd Left
    Waitms 30 'Wysuniecie tekstu
    Next A

    Waitms 500

    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 200
    Lcd W
    Wait 2
    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 , 6
    Lcd "Czujnik 1"
    Locate 2 , 3
    For B = 1 To 8
    Lcd Hex(dsid1(b))
    Next
    End If
    Wait 2

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

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

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

    '*******************koniec odczytu ID czujników temperatury*********************
    Poczatek:
    Do

    Call Pokaz_temp
    Debounce Pinb.0 , 0 , Maxmin
    Debounce Pind.7 , 0 , Kasuj

    Loop

    Pokaz_temp:

    '--------konwersja temp dla wszystkich dsow
    1wreset
    1wwrite &HCC
    1wwrite &H44
    Wait 1

    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)


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

    I1 = I1 * 10
    I1 = I1 / 16
    If I1 >= I11 Then
    I11 = I1
    If I1 > 0 Then
    Ss = Str(i1)
    Ss = Format(ss , " 0.0")
    Locate 1 , 1
    Lcd "Zew " ; Ss ; Chr(1) ;
    Else
    Ss = Str(i1)
    Ss = Format(ss , "0.0")
    Locate 1 , 1
    Lcd "Zew " ; Ss ; Chr(1) ;
    End If
    Else
    I11 = I1
    If I1 > 0 Then
    Ss = Str(i1)
    Ss = Format(ss , " 0.0")
    Locate 1 , 1
    Lcd "Zew " ; Ss ; Chr(2) ;
    Else
    Ss = Str(i1)
    Ss = Format(ss , "0.0")
    Locate 1 , 1
    Lcd "Zew " ; Ss ; Chr(2) ;
    End If
    End If


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


    I3 = I3 * 10
    I3 = I3 / 16
    If I3 >= I33 Then
    I33 = I3
    If I3 > 0 Then
    Ss = Str(i3)
    Ss = Format(ss , " 0.0")
    Locate 1 , 11
    Lcd "Wew " ; Ss ; Chr(1) ;
    Else
    Ss = Str(i3)
    Ss = Format(ss , "0.0")
    Locate 1 , 11
    Lcd "Wew " ; Ss ; Chr(1) ;
    End If
    Else
    I33 = I3
    If I1 > 0 Then
    Ss = Str(i3)
    Ss = Format(ss , " 0.0")
    Locate 1 , 11
    Lcd "Wew " ; Ss ; Chr(2) ;
    Else
    Ss = Str(i3)
    Ss = Format(ss , "0.0")
    Locate 1 , 11
    Lcd "Wew " ; Ss ; Chr(2) ;
    End If
    End If


    I4 = I4 * 10
    I4 = I4 / 16
    If I4 >= I44 Then
    I44 = I4
    If I1 > 0 Then
    Ss = Str(i4)
    Ss = Format(ss , " 0.0")
    Locate 2 , 11
    Lcd "Pie " ; Ss ; Chr(1) ;
    Else
    Ss = Str(i4)
    Ss = Format(ss , "0.0")
    Locate 2 , 11
    Lcd "Pie " ; Ss ; Chr(1) ;
    End If
    Else
    I44 = I4
    If I4 > 0 Then
    Ss = Str(i4)
    Ss = Format(ss , " 0.0")
    Locate 2 , 11
    Lcd "Pie " ; Ss ; Chr(2) ;
    Else
    Ss = Str(i4)
    Ss = Format(ss , "0.0")
    Locate 2 , 11
    Lcd "Pie " ; Ss ; Chr(2) ;
    End If
    End If

    If I1 < Zewmin Then Zewmin = I1
    If I1 > Zewmax Then Zewmax = I1
    If I3 < Wewmin Then Wewmin = I3
    If I3 > Wewmax Then Wewmax = I3
    If I4 < Piemin Then Piemin = I4
    If I4 > Piemax Then Piemax = I4
    If I2 < Lodmin Then Lodmin = I2
    If I2 > Lodmax Then Lodmax = I2

    Return
    '-------------------------------------------------
    Maxmin:
    Cls
    Goto Maxminzew

    Maxminzew:

    Do
    Locate 1 , 2
    Lcd "Min"

    Locate 1 , 6
    Lcd "Zewnetrzna"

    Locate 1 , 17
    Lcd "Max"


    Ss = Str(zewmin)
    Gosub Formatss
    Locate 2 , 2
    Lcd Ss ; Chr(0)

    Ss = Str(zewmax)
    Gosub Formatss
    Locate 2 , 16
    Lcd Ss; Chr(0)



    Debounce Pinb.0 , 0 , Maxminwew

    Loop
    '-------------------------------------------------
    Maxminwew:
    Cls
    Do
    Locate 1 , 2
    Lcd "Min"

    Locate 1 , 6
    Lcd "Wewnetrzna"

    Locate 1 , 17
    Lcd "Max"


    Ss = Str(wewmin)
    Gosub Formatss
    Locate 2 , 2
    Lcd Ss; Chr(0)

    Ss = Str(wewmax)
    Gosub Formatss
    Locate 2 , 16
    Lcd Ss; Chr(0)



    Debounce Pinb.0 , 0 , Maxminpie

    Loop
    '-------------------------------------------------
    Maxminpie:
    Cls

    Do
    Locate 1 , 2
    Lcd "Min"

    Locate 1 , 9
    Lcd "Piec"

    Locate 1 , 17
    Lcd "Max"


    Ss = Str(piemin)
    Gosub Formatss
    Locate 2 , 2
    Lcd Ss; Chr(0)

    Ss = Str(piemax)
    Gosub Formatss
    Locate 2 , 16
    Lcd Ss ; Chr(0)



    Debounce Pinb.0 , 0 , Maxminlod

    Loop
    '-------------------------------------------------
    Maxminlod:
    Cls

    Do
    Locate 1 , 2
    Lcd "Min"

    Locate 1 , 7
    Lcd "Lodowka"

    Locate 1 , 17
    Lcd "Max"


    Ss = Str(lodmin)
    Gosub Formatss
    Locate 2 , 2
    Lcd Ss ; Chr(0)

    Ss = Str(lodmax)
    Gosub Formatss
    Locate 2 , 16
    Lcd Ss ; Chr(0)



    Debounce Pinb.0 , 0 , Przeczytane

    Loop
    '-------------------------------------------------


    Formatss:
    Ss = Format(ss , "0.0")
    Return

    Przeczytane:
    Cls
    Goto Poczatek

    Kasuj:
    Cls
    Do

    Locate 1 , 3
    Lcd "SKASOWAC PAMIEC?"

    Locate 2 , 6
    Lcd "TAK"

    Locate 2 , 13
    Lcd "NIE"

    Debounce Pinb.0 , 0 , Kasuje
    Debounce Pind.7 , 0 , Wracamdopoczatku
    Loop

    Wracamdopoczatku:
    Cls

    Goto Poczatek

    Kasuje:
    Zewmin = I1
    Zewmax = I1
    Wewmin = I3
    Wewmax = I3
    Piemin = I4
    Piemax = I4
    Lodmin = I2
    Lodmax = I2

    Gosub Skasowano
    Gosub Skasowano
    Gosub Skasowano
    Gosub Skasowano
    Gosub Skasowano
    Gosub Skasowano
    Cls

    Goto Poczatek

    Sub Skasowano:

    Cls
    Locate 1 , 1
    Lcd "!!PAMIEC SKASOWANO!!"
    Waitms 250
    Cls
    Waitms 250

    End Sub


    Link z PCB oraz programem Link
  • REKLAMA
REKLAMA