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
Wsad do procesora...
Link z PCB oraz programem Link
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