Mam maly problem pewnie z poprawnoscia kodu zrodlowego dla Termostatu zrobionego dla AT89C2051 i czujnika DS1820. W zalaczniku przesylam kod zrodlowy dla Bascoma i spisany w notatniku.
Problem mam z zadzialaniem ukladu. Jako temperature minimalna ustawiam 30 stopni. Uklad startuje i na pinie 11 mam 5V (P3.7) czyli wedlug ukladu temperatura przekroczyla 30 stopnii chociaz jest z pewnoscia nizsza od niej. Pin 9 (P3.5) ma stan 0 czyli czujnik dziala. Gdy odlacze DS1820 pokazuje się tam 5V czyli ta czesc programu dziala. Poza tym sam czujnik tez dziala gdyz podlaczylem go do komputera i lampomittari wykrywa czujnik i pokazuje temperature z niego.
Co moze byc moim problemem. Prosze o jakas pomoc bo juz sobie wlosy z glowy rwe, a nie wiem co robie zle. Moze to jakis drobny blad w programie ktory przeoczylem...
Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięTermostat na DS1820
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
Nie moge cos dorzucic zalacznika lub nie chce mi sie wystwielic wiec kod zrodlowy wkleje tu...
$crystal = 12000000
Declare Sub Read1820
Dim Bd(9) As Byte
Dim I As Byte , Tmp As Byte
Dim Crc As Byte
Dim T As Integer , T1 As Integer
Dim T0 As Integer
Dim X As Byte
Config 1wire = P3.3 ' DS1820 na PIN 7
Reset P3.4 ' T0 > T
Reset P3.5 ' blad DS1820
Reset P3.7 ' T0 < T
Do
T0 = 300
1wreset
1wwrite &HCC : 1wwrite &H44 ' start measure
Waitms 100
Reset P3.5
Call Read1820
Waitms 400
If Err = 1 Then ' if there is no sensor
Set P3.5
Else
If T < T0 Then ' sensor present, check CRC
Set P3.4
Reset P3.7
Waitms 400 ' CRC OK, print T*10 on LCD
Else
Reset P3.4
Set P3.7
Waitms 200
End If
End If
Loop
End
Sub Read1820 ' reads sensor ans calculate
Waitms 250
Waitms 100 ' T for 0.1 C
1wreset ' reset the bus
1wwrite &HCC ' read internal RAM
1wwrite &HBE ' read 9 data bytest
Bd(1) = 1wread(9) ' read bytes in array
1wreset ' reset the bus
Tmp = Bd(1) And 1 ' 0.1C precision
If Tmp = 1 Then Decr Bd(1)
T = Makeint(bd(1) , Bd(2))
T = T * 50 : T = T - 25 : T1 = Bd(8) - Bd(7) : T1 = T1 * 100
T1 = T1 / Bd(8) : T = T + T1 : T = T / 10
X = T / 10
End Sub
$crystal = 12000000
Declare Sub Read1820
Dim Bd(9) As Byte
Dim I As Byte , Tmp As Byte
Dim Crc As Byte
Dim T As Integer , T1 As Integer
Dim T0 As Integer
Dim X As Byte
Config 1wire = P3.3 ' DS1820 na PIN 7
Reset P3.4 ' T0 > T
Reset P3.5 ' blad DS1820
Reset P3.7 ' T0 < T
Do
T0 = 300
1wreset
1wwrite &HCC : 1wwrite &H44 ' start measure
Waitms 100
Reset P3.5
Call Read1820
Waitms 400
If Err = 1 Then ' if there is no sensor
Set P3.5
Else
If T < T0 Then ' sensor present, check CRC
Set P3.4
Reset P3.7
Waitms 400 ' CRC OK, print T*10 on LCD
Else
Reset P3.4
Set P3.7
Waitms 200
End If
End If
Loop
End
Sub Read1820 ' reads sensor ans calculate
Waitms 250
Waitms 100 ' T for 0.1 C
1wreset ' reset the bus
1wwrite &HCC ' read internal RAM
1wwrite &HBE ' read 9 data bytest
Bd(1) = 1wread(9) ' read bytes in array
1wreset ' reset the bus
Tmp = Bd(1) And 1 ' 0.1C precision
If Tmp = 1 Then Decr Bd(1)
T = Makeint(bd(1) , Bd(2))
T = T * 50 : T = T - 25 : T1 = Bd(8) - Bd(7) : T1 = T1 * 100
T1 = T1 / Bd(8) : T = T + T1 : T = T / 10
X = T / 10
End Sub
Trochę nie rozumiem problemu, zbyt chaotycznie jak dla mnie to opisałeś. Spróbuj napisać od początku program, zawsze to pomaga.
nie wiem czy dobrze rozumie (nie bawiłem się czujnikiem temperatury, ale patrząc na opisy przyjmuję, że o to ci chodzi), ale czy PIN 3.4, 3.5, 3.7 to piny które DS zmienia przy zmianie temperatury??, jeżeli tak to nie powinieneś je resetować tylko trzymać zawsze w stanie wysokim, jak DS będzie sygnalizować zmianę to sobie poradzi ze zmianą potencjału.
nie wiem czy dobrze rozumie (nie bawiłem się czujnikiem temperatury, ale patrząc na opisy przyjmuję, że o to ci chodzi), ale czy PIN 3.4, 3.5, 3.7 to piny które DS zmienia przy zmianie temperatury??, jeżeli tak to nie powinieneś je resetować tylko trzymać zawsze w stanie wysokim, jak DS będzie sygnalizować zmianę to sobie poradzi ze zmianą potencjału.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 44 gości