Witam,
Gdyby patrzec na ilosc postow to okaze sie ze 1820 jest obecnie najpopularniejszym ukladem
Zbudowalem sobie termometr oparty na AT89C2051 i powyzszym ukladzie. Uklad dziala, ale sa spore problemy z prawidlowym odczytem temperatury, mianowicie srednio co drugi odczyt jest bledny. Kiedy mam w pokoju temperature 21 stopni, to raz otrzymuje prawidlowa wartosc, a raz zupelne bzdury w rodzaju 0, sporo powyzej 100 stopni (co powoduje wykrzaczenie dwoch wyswietlaczy led ktore moga pokazac max 99 stopni), albo sporo ponizej zera. do odczytu temp stosuje taki procedurki :
Inicjuj_czujnik:
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
Return
i od razu
Czytaj_temp:
1wreset
1wwrite &HCC
1wwrite &HBE
T(1) = 1wread()
T(2) = 1wread()
1wreset
If T(2) = 0 Then
Temperatura = T(1) / 2
Minus = 0
Else
T(1) = 256 - T(1)
Temperatura = T(1) / 2
Minus = 1
End If
If Temperatura = 0 Then
Minus = 0
End If
Return
Odczytuje tylko dwa bajty bo pomiar robie z dokladnoscia jedynie do 1 stopnia, wiec dwa bajty wystarcza. Tak mysle, moze w pamieci czujnika zostaja jakies smieci i lepiej odczytac wszystkie 9 bajtow ?
wymyslilem kilka mozliwych przyczyn, ale czy sa prawdopodobne nie wiem, musialby mi pomoc ktos bardziej doswiadczony
- blad w oprogramowaniu. Ale co jest zle ? nie mam pojecia. Jedyne co mi wpadlo do glowy to sprawdzac CRC (z tym ze nie znalalzem przykladu jak to robic) albo sczytywac 9 bajtow zamiast dwoch "bo moze pomoze"
- za dlugi kabel. Ma cale 2 metry (kabel telefoniczny), ale kto wie. Z drugiej strony czytalem gdzies o magistrali 1wire na 300 metrowym kablu ktora dzialala.
- uwalony czujnik. Czujnik na kablu zaizolowalem koszulka termokurczliwa, moze go przegrzalem ? Staralem sie zeby za bardzo sie nierozgrzal, byl co prawda goracy ale dotkniecie go nie powodowalo trwalych oparzen wiec mysle ze mial mniej niz 100 stopni.
- zaklocenia w ukladzie. Linia danych 1wire na mojej plytce prowadzona jest miedzy nozkami oscylatora kwarcowego, milimetr od stabilizatora napiecia 7805 (uklad zasilany jest z zasilacza 12 V) i pod gniazdem zasilania. Plytka jest dosyc upakowana i tylko tak mozna bylo to zrobic. Czy mozliwe aby ktorys z tych elementow "sial" tak bardzo zeby znieksztalcac transmitowane dane ?
WIecej pomyslow nie mam, moze ktos wymysli jeszcze inne mozliwe przyczyny. Help me please !
Grzesiek
Gdyby patrzec na ilosc postow to okaze sie ze 1820 jest obecnie najpopularniejszym ukladem
Zbudowalem sobie termometr oparty na AT89C2051 i powyzszym ukladzie. Uklad dziala, ale sa spore problemy z prawidlowym odczytem temperatury, mianowicie srednio co drugi odczyt jest bledny. Kiedy mam w pokoju temperature 21 stopni, to raz otrzymuje prawidlowa wartosc, a raz zupelne bzdury w rodzaju 0, sporo powyzej 100 stopni (co powoduje wykrzaczenie dwoch wyswietlaczy led ktore moga pokazac max 99 stopni), albo sporo ponizej zera. do odczytu temp stosuje taki procedurki :
Inicjuj_czujnik:
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
Return
i od razu
Czytaj_temp:
1wreset
1wwrite &HCC
1wwrite &HBE
T(1) = 1wread()
T(2) = 1wread()
1wreset
If T(2) = 0 Then
Temperatura = T(1) / 2
Minus = 0
Else
T(1) = 256 - T(1)
Temperatura = T(1) / 2
Minus = 1
End If
If Temperatura = 0 Then
Minus = 0
End If
Return
Odczytuje tylko dwa bajty bo pomiar robie z dokladnoscia jedynie do 1 stopnia, wiec dwa bajty wystarcza. Tak mysle, moze w pamieci czujnika zostaja jakies smieci i lepiej odczytac wszystkie 9 bajtow ?
wymyslilem kilka mozliwych przyczyn, ale czy sa prawdopodobne nie wiem, musialby mi pomoc ktos bardziej doswiadczony
- blad w oprogramowaniu. Ale co jest zle ? nie mam pojecia. Jedyne co mi wpadlo do glowy to sprawdzac CRC (z tym ze nie znalalzem przykladu jak to robic) albo sczytywac 9 bajtow zamiast dwoch "bo moze pomoze"
- za dlugi kabel. Ma cale 2 metry (kabel telefoniczny), ale kto wie. Z drugiej strony czytalem gdzies o magistrali 1wire na 300 metrowym kablu ktora dzialala.
- uwalony czujnik. Czujnik na kablu zaizolowalem koszulka termokurczliwa, moze go przegrzalem ? Staralem sie zeby za bardzo sie nierozgrzal, byl co prawda goracy ale dotkniecie go nie powodowalo trwalych oparzen wiec mysle ze mial mniej niz 100 stopni.
- zaklocenia w ukladzie. Linia danych 1wire na mojej plytce prowadzona jest miedzy nozkami oscylatora kwarcowego, milimetr od stabilizatora napiecia 7805 (uklad zasilany jest z zasilacza 12 V) i pod gniazdem zasilania. Plytka jest dosyc upakowana i tylko tak mozna bylo to zrobic. Czy mozliwe aby ktorys z tych elementow "sial" tak bardzo zeby znieksztalcac transmitowane dane ?
WIecej pomyslow nie mam, moze ktos wymysli jeszcze inne mozliwe przyczyny. Help me please !
Grzesiek