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ę

problem z DS18b20

Robur123
-
-
Posty:6
Rejestracja:16 gru 2003, o 15:29
Lokalizacja:Mszana Dolna
problem z DS18b20

Postautor: Robur123 » 16 gru 2003, o 15:35

Proszę o listing programu w bascomie do 89c2051, który obsługiwałby DS18B20, ew. jakieś wskazówki przeróbki programu obsługującego DS1820. Z góry dzięki :-)

euromatic
-
-
Posty:77
Rejestracja:27 lip 2003, o 21:38
Lokalizacja:00000

Postautor: euromatic » 19 gru 2003, o 23:00

Sub Wylicz
1wwrite &HBE
Bd(1) = 1wread(9)
Tmp = Bd(1) And 1
If Tmp = 1 Then Decr Bd(1)
T = Makeint(bd(1) , Bd(2))
T = T * 10
T = T / 16
End Sub

Robur123
-
-
Posty:6
Rejestracja:16 gru 2003, o 15:29
Lokalizacja:Mszana Dolna

Postautor: Robur123 » 26 gru 2003, o 20:16

Dzięki bardzo za listing, układ fajnie mierzy temperaturkę ale tylko do 39 stopni, po przekroczeniu tej temp, wyświetla jakieś haotyczne liczby, podejrzewałem że tak zaprogramowane ma wewnętrzne wartości TL i TH, przeprogramowełem je na wyższe wartości zgodnie z dokumenyacją DS18b20, ale nic to nie dało. Proszę jeszcze o jakieś wskazówki

euromatic
-
-
Posty:77
Rejestracja:27 lip 2003, o 21:38
Lokalizacja:00000

Postautor: euromatic » 26 gru 2003, o 22:54

przepraszam ale źle wkleiłem soft
Problemy wynikły też pewnie ze źle zadeclarowanych zmiennych
spróbuj tak, ja nie mam problemów w całym zakresie od 0 do 127 stopni
(podany listing nie pracuje poniżej 0)





Dim Bd(9) As Byte
Dim Tmp As Integer
Dim T As Integer , T1 As Integer
Declare Sub Read1820
Config 1wire = Pina.3


Do
Read1820



Loop







Sub Read1820
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
1wreset
1wwrite &HCC
1wwrite &HBE
Bd(1) = 1wread(9)
T = Makeint(bd(1) , Bd(2))
T = T * 10
T = T / 16
End Sub

Robur123
-
-
Posty:6
Rejestracja:16 gru 2003, o 15:29
Lokalizacja:Mszana Dolna

Postautor: Robur123 » 28 gru 2003, o 13:35

Witam ponownie, deklaracje zmiennych miałem ustawione ok, listing działa poprawnie dla DS1820 ale dla DS18B20 nie ma żadnych zmian, mierzy do 33 stopni, a później świruje :-), podłączyłem też drugi czujnik ale sytuacja jest ta sama, czyli czujnik jest sprawny

zolax
-
-
Posty:9
Rejestracja:29 gru 2003, o 21:22

Postautor: zolax » 29 gru 2003, o 21:30

Czesc
To znalazlem kiedys gdzies w necie,dziala na 100%,mierzy tez temp. ujemne (efekt mozesz zobaczyc tu http://www.elektronika.kgb.pl/1.jpg)

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'program obslugi termometru DS18B20 kompatybilnym z DS1822
'uwagi i komentarze prosze mailem mariuszk@altkom.com.pl

'Mariusz Ksiezak

Config 1wire = P1.0 'konfiguracja magistrali 1wire
Config Lcd = 16 * 1a 'konfiguracja wyswietlacza
Deflcdchar 1 , 4 , 10 , 4 , 32 , 32 , 32 , 32 , 32 'znak stopnia
Dim T1 As Single
Dim T2 As Single
Dim B1 As Byte , B2 As Byte , R As Byte
Dim Tmp As String * 6
Dim Znak As String * 1
R = &HFF
Declare Sub 1wr 'podprogram resetujacy magistrale 1w
Cursor Off
Cls

Do
1wr 'podprogram 1wr
1wwrite &HCC 'komenda skip ROM
1wwrite &H44 'komenda convert T
Waitms 250
Waitms 250
1wr 'podprogram 1wr
1wwrite &HCC 'komenda skip ROM
1wwrite &HBE 'komenda read

B1 = 1wread() 'odczyt z termometru
B2 = 1wread()

1wr 'podprogram 1wr

If B2 >= 248 Then 'w przypadku temperatur ujemnych
B1 = R - B1 'Od 255 Odejmujemy B1
B2 = R - B2 'od 255 odejmujemy B2
Znak = "-"
Else
Znak = "+"
End If
T1 = B1 / 16 'Przesuniecie w pawo o 4 bajty
T2 = B2 * 16 'przesuniecie w lewo o 4 bajty
T1 = T1 + T2

Tmp = Fusing(t1 , ###.&&)
Cls
Lcd Znak ; Tmp ; Chr(1) ; "C "

Waitms 250
Waitms 250
Waitms 250
Waitms 50
Loop

Sub 1wr 'podprogram resetujacy magistrale
1wreset
End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''

Remo
-
-
Posty:32
Rejestracja:22 lis 2003, o 21:00
Lokalizacja:Szczecin
Kontaktowanie:

DS18b20

Postautor: Remo » 31 gru 2003, o 01:36

Byc moze problem tkwi w zbyt krotkim czasie na przetwarzanie danych przez DS'a. Musi byc min 700ms.

Robur123
-
-
Posty:6
Rejestracja:16 gru 2003, o 15:29
Lokalizacja:Mszana Dolna

Postautor: Robur123 » 5 sty 2004, o 00:37

Witam, udało mi się wreszcie uruchomić to nieszczęsne 18b20, dzięki wielkie za informacje, pozdrawiam

pi
-
-
Posty:14
Rejestracja:5 wrz 2003, o 11:59
Lokalizacja:Zgierz

Postautor: pi » 10 lis 2004, o 12:49

Wiem, że to dość stary post i jego autor dawno znalazł już rozwiązanie problemu, ale być może ta informacja przyda się innym roztargnionym lub początkującym miłośnikom magistrali 1wire. Otóż takie dziwaczne zachowanie układów DS1820 (w temperaturach do ok. 40 'C zachowuje się na pierwszy rzut oka poprawnie - tylko na pierwszy rzut oka , bo tak naprawdę to zawyżają wskazania o jakieś 2-4 'C, a po przekroczeniu pewnej magicznej granicy "świruje", czyli wystawia wartość temperatury dość zabawną np. -15.7, a zaraz potem 127.1 'C) spowodowane jest najczęściej brakiem rezystora podciągającego szynę 1wire do +zasilania. Producent zaleca tu 4k7, ale można poeksperymentować z innymi wartościami. Po szczegóły odsyłam do dokumentacji.

Robur123
-
-
Posty:6
Rejestracja:16 gru 2003, o 15:29
Lokalizacja:Mszana Dolna

Postautor: Robur123 » 16 lis 2004, o 11:51

Witam ponownie, opornik 4,7k to podstawa, bez tego ani rusz, w oprogramowaniu też nie było większych uchybień, bawiłem sie z tym ponad miesiąc, w układach 18b20 jest jeden mankament, natomiast żeby pracowały w pełnym zakresie muszą być zasilane nie przez oporniczek, tylko przez dodatkową żyłę zasilającą

fragles
-
-
Posty:23
Rejestracja:16 wrz 2004, o 17:49

Postautor: fragles » 18 lis 2004, o 22:45

Stasuje 18B20 od dawna ale rezystor to obnizylem do 2k2 bo przy wiekszych wartosciach byly problemy.
Powodzenia w eksperymentach.

pi
-
-
Posty:14
Rejestracja:5 wrz 2003, o 11:59
Lokalizacja:Zgierz

Postautor: pi » 19 lis 2004, o 08:07

Co do samego zasilania układów DS18xx to faktycznie zasilanie ich tradycyjnie czyli z oddzielną linią zasilającą (wtedy to już nie jest 1-wire ;-) pozwala wydusić z nich więcej, zwłaszcza jeśli chodzi o możliwe do uzyskania długości kabla transmisyjnego i szybkość konwersji. NAtomiast zasilanie tzw. pasożytnicze czyli przez linię do transmisji danych wymaga po prostu, aby dać układowi więcej czasu na wykonanie konwersji temperatury. Wartością przyjmowaną za "bezpieczną" jest 700-750ms. Moje próby z tymi kostkami wykazały, że przy spełnieniu tych warunków uzyskanie wiarygodnych pomiarów nie stanowi problemu. Nie miałem wprawdzie możliwości sprawdzenia pełnego zakresu pomiarowego, ale w przedziale od -18'C (moja lodowka więcej nie potrafi ;-) do 120'C wszystko było O.K.
Warto jeszcze wspomnieć, że w bieżącym numerze EP zamieszczono dobrze napisany artykuł Artura Starza, który powinien rozwiać wszelkie wątpliwości dotyczące obsługi DS-ów pod Bascomem. Sam dowiedziałem się z niego kilku nowych rzeczy i poznałem kilka innych trików programistycznych, różnych od tych, które wymyśliłem podczas moich bojów z Dallasami (niektóre mogą być nawet lepsze w sensie generowania krótszego kodu wynikowego - kod programu jest dłuższy, ale to muszę na spokojnie sprawdzić).
Pozdrawiam i życzę owocnych pomiarów.
Pi

Billy
-
-
Posty:25
Rejestracja:28 lis 2004, o 17:45
Lokalizacja:Wronki
Kontaktowanie:

Postautor: Billy » 11 lut 2005, o 02:17

Czesc
To znalazlem kiedys gdzies w necie,dziala na 100%,mierzy tez temp. ujemne (efekt mozesz zobaczyc tu http://www.elektronika.kgb.pl/1.jpg)

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'program obslugi termometru DS18B20 kompatybilnym z DS1822
'uwagi i komentarze prosze mailem mariuszk@altkom.com.pl

'Mariusz Ksiezak

Config 1wire = P1.0 'konfiguracja magistrali 1wire
Config Lcd = 16 * 1a 'konfiguracja wyswietlacza
Deflcdchar 1 , 4 , 10 , 4 , 32 , 32 , 32 , 32 , 32 'znak stopnia
Dim T1 As Single
Dim T2 As Single
Dim B1 As Byte , B2 As Byte , R As Byte
Dim Tmp As String * 6
Dim Znak As String * 1
R = &HFF
Declare Sub 1wr 'podprogram resetujacy magistrale 1w
Cursor Off
Cls

Do
1wr 'podprogram 1wr
1wwrite &HCC 'komenda skip ROM
1wwrite &H44 'komenda convert T
Waitms 250
Waitms 250
1wr 'podprogram 1wr
1wwrite &HCC 'komenda skip ROM
1wwrite &HBE 'komenda read

B1 = 1wread() 'odczyt z termometru
B2 = 1wread()

1wr 'podprogram 1wr

If B2 >= 248 Then 'w przypadku temperatur ujemnych
B1 = R - B1 'Od 255 Odejmujemy B1
B2 = R - B2 'od 255 odejmujemy B2
Znak = "-"
Else
Znak = "+"
End If
T1 = B1 / 16 'Przesuniecie w pawo o 4 bajty
T2 = B2 * 16 'przesuniecie w lewo o 4 bajty
T1 = T1 + T2

Tmp = Fusing(t1 , ###.&&)
Cls
Lcd Znak ; Tmp ; Chr(1) ; "C "

Waitms 250
Waitms 250
Waitms 250
Waitms 50
Loop

Sub 1wr 'podprogram resetujacy magistrale
1wreset
End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''


Mnie ten program pokazuje tylko temperaturę 85,0C

Dlaczego tak się dzieje ?? Mam DS18B20

slakarw
-
-
Posty:9
Rejestracja:15 lis 2004, o 13:32
Lokalizacja:Lublin/Tomaszów Lub
Kontaktowanie:

Postautor: slakarw » 11 lut 2005, o 14:31

Witam

Ja chwilę walczyłem z układami DS1820 (Z DS18B20 niestety nie miałem do czynienia) ale miałem podpięte 4 układy na przewodzie telefonicznym każdy koło 10metów długości, i problem z temp 85 występował w 3 sytuacjach (o koniecznym rezystorze już się nie wypowiadam)
1.4 DSy mam podpięte na 2 żyłowym przewodzie telefonicznym i na początku podłączałem tylko masę i linie danych, 3 końcówka (VDD) wisiała w powietrzu - na dłuższym przewodzie niż 10 cm wyświetlało tylko 85 stopni –pomogło dopiero połączenie 3 końcówki z masą albo podpięcie 3 przewodu zasilania – U mnie od 3 miesięcy konfiguracja działa bez problemów na 2 przewodach. Sposób połączenia zresztą jest opisany w nocie aplikacyjnej chyba storna 5 (http://pdfserv.maxim-ic.com/en/ds/DS18B20.pdf).
2. za krótki czas na konwersje wydłużenie do 750ms pomogło oczywiście też po spełnieniu warunku prawidłowego zasilenia układu
3. problem występował w czasie testów jak DSy miałem jeszcze nie przylutowane i miałem je prowizorycznie podłączone czasem cos nie stykało wiec tez ten sam błąd występował

Całością steruje Atmega8, a program napisałem na podstawie książki „Programowanie mikrokontrolerów AVR w języku Bascom” na stronie wydawnictwa BTC są wszystkie listingi programów z książki.
Na początek jednak proponuje zweryfikować czy wszystko jest prawidłowo połączone – u mnie to był główny problem
pozdrawiam

Billy
-
-
Posty:25
Rejestracja:28 lis 2004, o 17:45
Lokalizacja:Wronki
Kontaktowanie:

Postautor: Billy » 11 lut 2005, o 18:14

Witam

Ja chwilę walczyłem z układami DS1820 (Z DS18B20 niestety nie miałem do czynienia) ale miałem podpięte 4 układy na przewodzie telefonicznym każdy koło 10metów długości, i problem z temp 85 występował w 3 sytuacjach (o koniecznym rezystorze już się nie wypowiadam)
1.4 DSy mam podpięte na 2 żyłowym przewodzie telefonicznym i na początku podłączałem tylko masę i linie danych, 3 końcówka (VDD) wisiała w powietrzu - na dłuższym przewodzie niż 10 cm wyświetlało tylko 85 stopni –pomogło dopiero połączenie 3 końcówki z masą albo podpięcie 3 przewodu zasilania – U mnie od 3 miesięcy konfiguracja działa bez problemów na 2 przewodach. Sposób połączenia zresztą jest opisany w nocie aplikacyjnej chyba storna 5 (http://pdfserv.maxim-ic.com/en/ds/DS18B20.pdf).
2. za krótki czas na konwersje wydłużenie do 750ms pomogło oczywiście też po spełnieniu warunku prawidłowego zasilenia układu
3. problem występował w czasie testów jak DSy miałem jeszcze nie przylutowane i miałem je prowizorycznie podłączone czasem cos nie stykało wiec tez ten sam błąd występował

Całością steruje Atmega8, a program napisałem na podstawie książki „Programowanie mikrokontrolerów AVR w języku Bascom” na stronie wydawnictwa BTC są wszystkie listingi programów z książki.
Na początek jednak proponuje zweryfikować czy wszystko jest prawidłowo połączone – u mnie to był główny problem
pozdrawiam
Mam pytanie...

podłączyłem rezystor, DS18B20 jest wlutowany "na sztywno" i nadal temperatura 85.00

[ Dodano: 11-02-2005, 17:38 ]
Witam ponownie, opornik 4,7k to podstawa, bez tego ani rusz, w oprogramowaniu też nie było większych uchybień, bawiłem sie z tym ponad miesiąc, w układach 18b20 jest jeden mankament, natomiast żeby pracowały w pełnym zakresie muszą być zasilane nie przez oporniczek, tylko przez dodatkową żyłę zasilającą

O jakim mankamencie DS18B20 mówisz??

Podlaczyłem teraz DS1820 (bez literki B) pokazuje temperaturę +10.62
O co tutaj chodzi??

Kompletnie tego nie rozumiem...
Czy ma znaczenie na jaki port wpiołem żyłę danych?? Bo ja podłączyłem DS1820 na P3.7
Może tak zostać??

Teraz zaczął mi pokazywać temperaturę, +2,37, gdzie w pokoju mam conajmniej 21C

Chyba znalazłem przyczyne, ten programco jest napisany wyżej chyba jest do banii, bo znalazłem inny program i dziala prawidłow, prawie prawidlowo, tzn. jest co jakiś czas skok o 1 stopień.

spoli
-
-
Posty:4
Rejestracja:13 mar 2003, o 11:54
Lokalizacja:Gorzów
Kontaktowanie:

Postautor: spoli » 11 lut 2005, o 19:05

Do
1wr 'podprogram 1wr
1wwrite &HCC 'komenda skip ROM
1wwrite &H44 'komenda convert T
Waitms 250
Waitms 250
1wr 'podprogram 1wr
1wwrite &HCC 'komenda skip ROM
1wwrite &HBE 'komenda read
Dodaj jeszcze jedną instrukcję Waitms 250. I bedzie dobrze.
Czas konwersji temperatury jest za krótki. Przeczytaj trochę wyżej...
Minimum 700ms :)

Billy
-
-
Posty:25
Rejestracja:28 lis 2004, o 17:45
Lokalizacja:Wronki
Kontaktowanie:

Postautor: Billy » 11 lut 2005, o 19:15

Do
1wr 'podprogram 1wr
1wwrite &HCC 'komenda skip ROM
1wwrite &H44 'komenda convert T
Waitms 250
Waitms 250
1wr 'podprogram 1wr
1wwrite &HCC 'komenda skip ROM
1wwrite &HBE 'komenda read
Dodaj jeszcze jedną instrukcję Waitms 250. I bedzie dobrze.
Czas konwersji temperatury jest za krótki. Przeczytaj trochę wyżej...
Minimum 700ms :)
Dodałem nawet 1 sekundę i tak nic nie pomogło w tym programie.

[ Dodano: 11-02-2005, 18:18 ]
Ten przyklad działa bez zarzutów, jednak podaje temperaturę z dokładnością do 1C, tak więc
mysle, ze cały problem polega w dokładności, może one różnie poprostu konwertują dane??

$baud = 57600
Config 1wire = P1.0
Dim T(2) As Byte
Dim Temperatura As Byte
Dim Minus As Byte
Declare Sub Inicjuj_czujnik
Declare Sub Czytaj_temp
1wreset
Do
Inicjuj_czujnik
Czytaj_temp
Print Temperatura
Loop
Sub Inicjuj_czujnik
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
End Sub

Sub 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
End Sub

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 43 gości