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 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 1wire
Autor Wiadomość
pawel182

Dołączył: 02 Kwi 2010
Posty: 3
Wysłany: Sob Gru 18, 2010 11:00 pm   2xDS18B20 na 1wire

Witam;
Czy ma ktoś z Was jakis mały programik do obsługi dwóch czujników DS18B20 a 1wire?
W przykładach udostepnionych przez And-Tech jest tylko program do obsługi 1 czujnika....

Chodzi mi dokładnie o programik, który wyświetlałbym jednocześnie wskazania z obu czujników. W pierwszej linijce Temp1 a w drugiej Temp2 i aby program widział np uszkodzenie czujnika lub jego odłączenie tzn w momencie odłączenia np czujnika 2 od lini 1wire na wyświetlaczu Temp1 nadal byłaby wyswietlana a w miejscu Temp2 był komunikat "czujnik uszkodzony"
Coś takiego jak poniożej:
-----------------------
Temp1: 21,2 st.C
Temp2: Czuj.Uszk
-----------------------


Pozdrawiam i z góry dziękuje za wszelka pomoc
Pawel
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Wto Gru 28, 2010 2:44 pm   

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
_________________
http://www.piotr94.net21.pl/
 
     
reapermax

Dołączył: 29 Sty 2013
Posty: 6
Wysłany: Sro Lis 06, 2013 5:33 pm   problem z funkcją "ds18b20_commands.bas "

Witam chce wykorzystać przykład z lekcji 9 ten z 2 czujnikami ale podczas kompilacji wyrzuca błąd :
demo/beta only supports 4096 bytes of code ,in File : C:\AVR\te22.bas

program nie przekracza wartości ma 1801 bajtów ale na dysku 4096
podejrzewam funkcje $include "ds18b20_commands.bas"
która ma 356 bajtów ale na dysk też 4096 .

program to :
Kod:
$regfile = "m32def.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


a funkcja :
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[code][/code]
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Sro Lis 06, 2013 7:53 pm   

Ale 1801 bajtów to rozmiar czego?
Bo ograniczenie 4096 bajtów dotyczy rozmiaru kodu wynikowego (plik *.bin).
_________________
http://www.piotr94.net21.pl/
 
     
reapermax

Dołączył: 29 Sty 2013
Posty: 6
Wysłany: Sro Lis 06, 2013 8:20 pm   

no właśnie plik .bin zajmuje 1801 bajtów a nie wiem dlaczego wyskakuje ten błąd i nie chce się skompilować
program z jednym czujnikiem chodzi prawidłowo
dlatego myślę że coś z $include "ds18b20_commands.bas" jest nie tak

jednak $include "ds18b20_commands.bas" jest prawidłowe
więc dalej nie wiem dlaczego nie chce się skompilować
error 999
Ostatnio zmieniony przez reapermax Sro Lis 06, 2013 8:27 pm, w całości zmieniany 1 raz  
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Sro Lis 06, 2013 8:26 pm   

Spróbuj przekopiować w miejsce $include te wszystkie definicje z pliku.
Ale możliwe, że Bascom dlatego tworzy mniejszy plik, że właśnie jest wcześniej przekroczenie limitu pamięci gdzieś...
_________________
http://www.piotr94.net21.pl/
 
     
reapermax

Dołączył: 29 Sty 2013
Posty: 6
Wysłany: Sro Lis 06, 2013 8:35 pm   

A jest gdzieś na stronie z lekcjami skompilowany już plik z 2 czujnikami to bym spróbował
załadować AND-Load bez bascom-AVR
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Czw Lis 07, 2013 6:25 pm   

Po kompilacji najnowszą wersją BASCOM FULL (2.0.7.6) otrzymujemy kod wynikowy o rozmiarze 4106 bajtów. Taki wzrost względem poprzednich wersji spowodowany jest użyciem instrukcji 1wsearchfirst/next - ich zestaw zużywa bardzo dużo pamięci procesora.
Załączam skompilowany dla ATMega32 program k3.bas.

k3_m23.zip
Pobierz Plik ściągnięto 435 raz(y) 7 KB

_________________
http://www.piotr94.net21.pl/
 
     
reapermax

Dołączył: 29 Sty 2013
Posty: 6
Wysłany: Czw Lis 07, 2013 7:13 pm   

Załadowałem skompilowany program i działa poprawnie . Dzięki bardzo :) mogę przetestować czujnik zewnętrzny .
Moja wersja Bascom-Avr 2.0.5.0 bulid 34 . W wolnym czasie wgram nowszą wersje i będę testował czy błąd dalej będzie występował .
PS .
Program pokazuje 2 temperatury t1 i t2
T1 - czujnik dodatkowy
T2- czujnik wdrukowany w płytkę
Jest to losowe przypisanie id czujników ?
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Czw Lis 07, 2013 8:45 pm   

Ale ten błąd jest spowodowany ograniczeniami wersji DEMO - możesz się go pozbyć tylko kupując pełną wersję.

Przypisanie czujników zależy od ich numerów seryjnych (ID) i algorytmu wyszukiwania 1-wire.
Za każdym razem TEN ZESTAW 2 czujników zostanie wykryty w taki sam sposób (w tej samej kolejności). W profesjonalnych aplikacjach numery czujników wyszukuje się tylko w czasie pierwszego uruchomienia (najczęściej podczas instalacji/serwisowania urządzenia) i potem zapisuje w pamięci EEPROM, aby przypisanie było jednoznaczna i aby wykrywać ewentualne uszkodzenia czujników.
_________________
http://www.piotr94.net21.pl/
 
     
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