Witam,
Jestem w trakcie tworzenia układu i utknąłem na właśnie tym czujniku...
W programie używam przerwań do komunikacji z Ethernetem. Ale pomiar temperatury wykonuje albo przed włączeniem przerwań albo na pomiar je wyłączam.
Problem pojawia się na samym początku:
If Err = 1 Then
Blad = 1
End If
program zawsze zwraca mi Err = 1 -> Blad = 1
Wskazuje na to ze nie widzi w ogóle czujnika.
Kupiłem już 3 DS-y (2 podobno DS1820 a teraz DS18S20)
Podłączam go na 2 sposoby:
przez 3 kabelki z rezystorem podciągającym (GND, DQ - rezystor podciągający, VCC)
przez 2 kabelki też z rezystorem podciągającym (GND połączone z VCC do masy, DQ z rezystorem podciągającym)
- czyli tak jak dokumentacja pokazuje
Użyte kody:
albo:
Zmieniałem piny uC
Zmieniłem DS-y
Zmieniałem podłączenia (2-3 przewodowe)
i zawsze Err = 1
ale wartość:
T(1)=255
T(2)=255
Czyli zwraca same jedynki...
Problemu z podłączeniem nie ma - sprawdzałem już to chyba z 100 razy
Może czasy nie są zachowane takie jak powinny?
Może kwarc jest popsuty? A przy DS może być $crystal=11059200
może 12 albo inny?
Wiem że wysyła sygnał bo wrzuciłem w pętlę funkcje 1wreset i napięcie z 5 spadło do 2,5V wiec uwzględniając czułość woltomierza to jakieś sygnały tam idą (czasów nie jestem w stanie sprawdzić - oscyloskopu nie mam)
pomysły?
Jestem w trakcie tworzenia układu i utknąłem na właśnie tym czujniku...
W programie używam przerwań do komunikacji z Ethernetem. Ale pomiar temperatury wykonuje albo przed włączeniem przerwań albo na pomiar je wyłączam.
Problem pojawia się na samym początku:
If Err = 1 Then
Blad = 1
End If
program zawsze zwraca mi Err = 1 -> Blad = 1
Wskazuje na to ze nie widzi w ogóle czujnika.
Kupiłem już 3 DS-y (2 podobno DS1820 a teraz DS18S20)
Podłączam go na 2 sposoby:
przez 3 kabelki z rezystorem podciągającym (GND, DQ - rezystor podciągający, VCC)
przez 2 kabelki też z rezystorem podciągającym (GND połączone z VCC do masy, DQ z rezystorem podciągającym)
- czyli tak jak dokumentacja pokazuje
Użyte kody:
$regfile = "m32def.dat"
$crystal=11059200
Dim Blad As Bit
Config 1wire = PortB.1
Dim T(2) As Byte
Blad = 0
1wreset
If Err = 1 Then
Blad = 1
End If
1wwrite &HCC
1wwrite &H44
Waitms 750
1wreset
1wwrite &HCC
1wwrite &HBE
T(1) = 1wread()
T(2) = 1wread()
1wreset
If T(2) > 0 Then
T(1) = 256 - T(1)
End If
T(1) = T(1) / 2
albo:
$regfile = "m32def.dat"
$crystal=11059200
Dim Blad As Bit
Config 1wire = PortC.3
Dim Nr_ukladu(8) As Byte
Dim I As Byte
Dim T(2) As Byte
Dim Temp As Single
Dim Otrzymana_temperatura As String * 5
Blad = 0
1wreset
Nr_ukladu(1) = 1wsearchfirst()
If Err = 1 Then
Blad = 1
End If
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
1wreset
1wwrite &H55
For I = 1 To 8
1wwrite Nr_ukladu(i)
Next I
1wwrite &HBE
T(1) = 1wread()
T(2) = 1wread()
1wreset
If T(2) = 0 Then
Temp = T(1) / 2
Else
I = 256 - T(1)
End If
Otrzymana_temperatura = Fusing(temp , "#.&")
Zmieniałem piny uC
Zmieniłem DS-y
Zmieniałem podłączenia (2-3 przewodowe)
i zawsze Err = 1
ale wartość:
T(1)=255
T(2)=255
Czyli zwraca same jedynki...
Problemu z podłączeniem nie ma - sprawdzałem już to chyba z 100 razy
Może czasy nie są zachowane takie jak powinny?
Może kwarc jest popsuty? A przy DS może być $crystal=11059200
może 12 albo inny?
Wiem że wysyła sygnał bo wrzuciłem w pętlę funkcje 1wreset i napięcie z 5 spadło do 2,5V wiec uwzględniając czułość woltomierza to jakieś sygnały tam idą (czasów nie jestem w stanie sprawdzić - oscyloskopu nie mam)
pomysły?
