f
Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 548

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 549

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/page_header.php on line 343
And-Tech :: Zobacz temat - 2xDS18B20 na jednej magistrali 1wire

Strona korzysta z plików cookie w celu realizacji usług zgodnie z Politykš prywatnoœci.

Możesz okreœlić warunki przechowywania lub dostępu do cookie w Twojej przeglšdarce lub konfiguracji usługi.

And-Tech Strona Główna And-Tech
Forum firmy And-Tech

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  AlbumAlbum  DownloadDownload

Poprzedni temat «» Następny temat
2xDS18B20 na jednej magistrali 1wire
Autor Wiadomość
monolith

Dołączył: 10 Lut 2011
Posty: 3
  Wysłany: Czw Lut 10, 2011 1:42 am   2xDS18B20 na jednej magistrali 1wire

witam
pisze sobie malutki projekt
chciałbym odczytać dwie temperatury z dwóch czujników DS18B20

na razie mam tylko kawałek kodu
udaje mi się wyświetlić temperaturę ale z jednego czujnika w dwóch liniach
gdzie leży mój błąd ??

Ps. Uruchamiam na zestawie EvB 4.3 v4

Kod:
$regfile = "m32def.dat"
$crystal = 16000000

'Podłączenie pinów LCD do mikroprocesora

' BL = do +5V
' Rs = PortC.2
'  E = PortC.3
'Db4 = PortC.4
'Db5 = PortC.5
'Db6 = PortC.6
'Db7 = PortC.7
' Portd.4  podpiete 2x czujniki ds18b20 przez port 1wire

Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7       'konfiguracja pinow wyswietlacza
Config Lcd = 16 * 2


Config 1wire = Portd.4


'(Dim I1 As Integer , Ss As String * 6
Dim I2 As Integer

Dim B As Byte
Dim W As Byte

')

Dim C As Byte

Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim Id1(8) As Byte
Dim Id2(8) As Byte

Dim Lsb As Byte , Msb As Byte , T As Single , S As String * 6


Deflcdchar 0 , 32 , 14 , 17 , 14 , 32 , 32 , 32 , 32        '
Cursor Off
Cls
  C = 1wirecount()

Dsid1(1) = 1wsearchfirst()                                  'musi być wywołana w celu zainicjowania procedury przeszukiwania magistrali.
Dsid2(1) = 1wsearchnext()                                   'Potem, aby odczytać następne numery ID należy użyć funkcji 1WSEARCHNEXT()


    Locate 1 , 1
    Lcd "ile:" ; C




   Locate 1 , 1
For C = 1 To 8 Step 1
    Lcd Hex(id1(c))
Next C

Locate 2 , 1
For C = 1 To 8 Step 1
    Lcd Hex(id2(c))
Next C
Wait 2

Cls
Lcd "T1:+000.00 {001}C"
Lowerline
Lcd "T2:+000.00 {001}C"




Do
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 800


1wreset
1wverify Id1(1)

1wwrite &HBE

   Lsb = 1wread():
   Msb = 1wread():

T = Msb * 256
T = T + Lsb
T = T / 16
If Msb.7 = 1 Then T = T - 4096
Locate 1 , 4
S = Fusing(t , "#.##")
S = Format(s , "+000000")
Lcd S



1wreset
1wverify Id2(1)
1wwrite &HBE

   Lsb = 1wread():
   Msb = 1wread():

T = Msb * 256
T = T + Lsb
T = T / 16
If Msb.7 = 1 Then T = T - 4096
Locate 2 , 4
S = Fusing(t , "#.##")
S = Format(s , "+000000")
Lcd S
     Loop

  End


End
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Czw Lut 10, 2011 8:54 am   

Kod wygląda na poprawny, jakie id Ci się na początku pokazują? Czy drugi czujnik na pewno dobrze podłączony?
_________________
http://www.piotr94.net21.pl/
 
     
monolith

Dołączył: 10 Lut 2011
Posty: 3
Wysłany: Czw Lut 10, 2011 9:21 am   

niestety pokazuje same zera do obu czujników, czujnik wydaje mi się ze dobrze podłączony wg. instrukcji zestawu EvB 4.3 v4
co ciekawe ze zaraz po uruchomieniu i pokazaniu T1 i T2 przy T1 pojawia się na chwile temperatura 85C???
potem pojawia się aktualna
czyżby problem był z dodatkowym czujnikiem ??


hmm
ciekawa sprawa
wrzuciłem do testów skompilowany plik kolegi @pirzol z tematu
http://and-tech.pl/forum/viewtopic.php?t=90
ten programik poprawnie wyświetla id czujników oraz temperature
walczę dalej :)
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Czw Lut 10, 2011 11:34 am   

cóż, temperatura 85 stopni to temperatura "startowa" czujników (taką zawartość ma odpowiedni rejestr przed dokonaniem pierwszego pomiaru.
a jak zachowuje się ten program:
Kod:

$regfile = "m644pdef.dat"
'$regfile = "m32def.dat"
'$regfile = "m16def.dat"
$include "ds18b20_commands.bas"

$crystal = 16000000

Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7
Config Lcd = 16 * 2
Deflcdchar 1 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32
'znak stopnia
Cls
Cursor Off Noblink

Config 1wire = Pind.4

Dim C As Byte
Dim Id1(8) As Byte
Dim Id2(8) As Byte
Dim Lsb As Byte , Msb As Byte , T As Single , S As String * 6

C = 1wirecount()
Locate 1 , 1
Lcd "Czujnikow: " ; C
Locate 2 , 1
Lcd "ID czujnikow: "
Wait 2
'program zliczy liczbę urządzeń 1wire podpiętych do procesora

Id1(1) = 1wsearchfirst()
Id2(1) = 1wsearchnext()
'odczytujemy numery identyfikacyjne układów
'każdy numer składa się z 8 bajtów, dlatego używamy odpowiednich tablic

Locate 1 , 1
For C = 1 To 8 Step 1
    Lcd Hex(id1(c))
Next C

Locate 2 , 1
For C = 1 To 8 Step 1
    Lcd Hex(id2(c))
Next C
Wait 2
'wyświetlamy na ekranie numery identyfikacyjne poszczególnych czujników

Cls
Lcd "T1:+000.00 {001}C"
Lowerline
Lcd "T2:+000.00 {001}C"


Do
1wreset
1wwrite Skip_rom
1wwrite Convert_t
Waitms 750
'wysyłamy do wszystkich termometrów polecenie dokonania pomiaru temperatury

1wreset
1wverify Id1(1)
'wywołujemy tylko pierwszy czujnik
'a potem doczytujemy z niego dane
1wwrite Read_scratchpad
Lsb = 1wread()
Msb = 1wread()
T = Msb * 256
T = T + Lsb
T = T / 16
If Msb.7 = 1 Then T = T - 4096
Locate 1 , 4
S = Fusing(t , "#.##")
S = Format(s , "+000000")
Lcd S

1wreset
1wverify Id2(1)
'powtarzamy sekwencję dla drugiego układu
1wwrite Read_scratchpad
Lsb = 1wread()
Msb = 1wread()
T = Msb * 256
T = T + Lsb
T = T / 16
If Msb.7 = 1 Then T = T - 4096
Locate 2 , 4
S = Fusing(t , "#.##")
S = Format(s , "+000000")
Lcd S

Loop
End

ds18b20_commands.bas:
Kod:

'funkcje ogólne magistrali 1wire
Const Search_rom = &HF0
Const Read_rom = &H33
Const Match_rom = &H55
Const Skip_rom = &HCC
Const Alarm_search = &HEC
'funkcje termometru DS18B20
Const Convert_t = &H44
Const Write_scratchpad = &H4E
Const Read_scratchpad = &HBE
Const Copy_scratchpad = &H48
Const Recla_e2 = &HB8
Const Read_power_supply = &HB4


EDIT:
widzę błąd w Twoim programie. przy procedurach wyszukiwania czujników wpisujesz ich numery ID do tablic Dsid1 i Dsid2, a potem przy weryfikacji podajesz tablice Id1 i Id2 :D
Z tego co widzę kody po prostu bezmyślnie skopiowane i sklejone z kliku innych :D
_________________
http://www.piotr94.net21.pl/
 
     
monolith

Dołączył: 10 Lut 2011
Posty: 3
Wysłany: Czw Lut 10, 2011 11:48 am   

dzięki teraz działa tak jak powinno to w takim razie nie wiem gdzie mam błąd :)
teraz tez zauważyłem ten błąd ale po poprawieniu tez nie działa tak jak Twój ;)

EDIT:
już jest ok
dzięki za poprawne nakierowanie
całkowicie bezmyślnie to nie ale przyznaje że skopiowany co widać przy porównaniu Twojego kodu i mojego :D
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group