Pomiar temperatury przy pomocy Ds18B20 na kilku portach
Pomiar temperatury przy pomocy Ds18B20 na kilku portach
Witam
poszukuje jakiegoś przykładowego programu do obsługi czujnika temperatury Ds18b20 na kliku portach uP atmega 8. Chodzi mi w jaki sposób przełączać piny uP aby odczytywać temperaturę np z 4 nóżek układu pod które jest podpiety czujnik temperatury .
poszukuje jakiegoś przykładowego programu do obsługi czujnika temperatury Ds18b20 na kliku portach uP atmega 8. Chodzi mi w jaki sposób przełączać piny uP aby odczytywać temperaturę np z 4 nóżek układu pod które jest podpiety czujnik temperatury .
Cała idea tych DS18B20 i podobnych cyfrowych czujnikach polega na OneWire. To znaczy, że kilka tych czujników podłączasz do jednej tylko nóżki mikrokontrolera na jednej linii danych. Więc nie wiem czemu chcesz pod 4 nóżki podłączać je.
Raczej jest sporo przykładów w Internecie zarówno programów i schematów.
P.S. ATmega8 to mikrokontroler, a nie mikroprocesor. Trochę różne rzeczy to są.
Raczej jest sporo przykładów w Internecie zarówno programów i schematów.
P.S. ATmega8 to mikrokontroler, a nie mikroprocesor. Trochę różne rzeczy to są.
Po co chcesz ingerować w program? Niech se program najpierw je wszystkie wyszuka na linii, a potem się będziesz odwoływał po numerach seryjnych.Idea jest fajna z tym 1wire ale chodzi mi o prostą wymianę czujnika w danym miejscu bez konieczności ingerowania w program.
Możesz sobie całą tabelę zapamiętać w EEPROM i sprawdzać który podmieniłeś. Bo chyba nie będziesz ich wszystkich wymieniał naraz?
Nie napisałeś o jaki język programowania chodzi. W bascom robi się to dosyć prosto:
var2 = 1WREAD( [ bytes] )
var2 = 1WREAD( bytes , port , pin)
Oczywiście w tym momencie całą idee 1WIRE diabli biorą, ale faktycznie wymiana czujnika w danym urządzeniu jest prosta, bo wystarczy wymienić czujnik i tyle, przecież urządzenie nie zawsze obsługuje doświadczony, oblatany programista-elektronik.
Program też wówczas będzie prostszy bo nie trzeba tworzyć obsługi wprowadzania numeru seryjnego czujnika do eeprom a to też troche miejsca zajmuje szczególnie jesli to Bascom:)
var2 = 1WREAD( [ bytes] )
var2 = 1WREAD( bytes , port , pin)
Oczywiście w tym momencie całą idee 1WIRE diabli biorą, ale faktycznie wymiana czujnika w danym urządzeniu jest prosta, bo wystarczy wymienić czujnik i tyle, przecież urządzenie nie zawsze obsługuje doświadczony, oblatany programista-elektronik.
Program też wówczas będzie prostszy bo nie trzeba tworzyć obsługi wprowadzania numeru seryjnego czujnika do eeprom a to też troche miejsca zajmuje szczególnie jesli to Bascom:)
Nie napisałeś o jaki język programowania chodzi. W bascom robi się to dosyć prosto:
var2 = 1WREAD( [ bytes] )
var2 = 1WREAD( bytes , port , pin)
Oczywiście w tym momencie całą idee 1WIRE diabli biorą, ale faktycznie wymiana czujnika w danym urządzeniu jest prosta, bo wystarczy wymienić czujnik i tyle, przecież urządzenie nie zawsze obsługuje doświadczony, oblatany programista-elektronik.
Program też wówczas będzie prostszy bo nie trzeba tworzyć obsługi wprowadzania numeru seryjnego czujnika do eeprom a to też troche miejsca zajmuje szczególnie jesli to Bascom:)
var2 = 1WREAD( [ bytes] )
var2 = 1WREAD( bytes , port , pin)
Oczywiście w tym momencie całą idee 1WIRE diabli biorą, ale faktycznie wymiana czujnika w danym urządzeniu jest prosta, bo wystarczy wymienić czujnik i tyle, przecież urządzenie nie zawsze obsługuje doświadczony, oblatany programista-elektronik.
Program też wówczas będzie prostszy bo nie trzeba tworzyć obsługi wprowadzania numeru seryjnego czujnika do eeprom a to też troche miejsca zajmuje szczególnie jesli to Bascom:)
Oj, zamieszanko. Ale po koli.
1. co kolega rozumie przez stwierdzenie, prosta wymiana na inny czujnik ? Wymiana na nowy, czy zamiana miejscami ?
2. na jednej linii jest to faktycznie prostsze rozwiązanie, niż na 4 osobnych.
3. dobry program w przypadku DSów, musi być i tak samo uczący się (kalibrujący), w przeciwnym razie cała idea ich stosowania traci sens.
1. co kolega rozumie przez stwierdzenie, prosta wymiana na inny czujnik ? Wymiana na nowy, czy zamiana miejscami ?
2. na jednej linii jest to faktycznie prostsze rozwiązanie, niż na 4 osobnych.
3. dobry program w przypadku DSów, musi być i tak samo uczący się (kalibrujący), w przeciwnym razie cała idea ich stosowania traci sens.
No właśnie wszystko zależy co się chce osiągnąć.
Kolega endurasek pisał, że z powodu ograniczenia pamięci programu szuka takiego rozwiązania jak w temacie, zgadzam się i wcześniej już też o tym napisałem że w tym momencie idea 1Wire traci sens, ale teraz zapominamy o tym że te czujniki są na magistrali 1wire, kolega chce je podpiąć do 4 róznych pinów, no problem, podpinamy, klient nasz pan.
W sensie elektrycznym podłączenie wielu czujników do jednej szyny jest jak najbardziej rozwiązaniem idealnym, trzeba to tylko oprogramować odpowiednio i tu wracamy do punktu wyjścia, problem z rozmiarem programu. Widać sprzęt jest w tym temacie ograniczeniem, więc jeśli by się udało to w ten sposób zmieścić w pamięci programu, to takie rozwiązanie nie jest ani lepsze ani gorsze od innych, jest to jedna z możliwości komunikacji, która producent DS-ów też przewidział.
Kolega endurasek pisał, że z powodu ograniczenia pamięci programu szuka takiego rozwiązania jak w temacie, zgadzam się i wcześniej już też o tym napisałem że w tym momencie idea 1Wire traci sens, ale teraz zapominamy o tym że te czujniki są na magistrali 1wire, kolega chce je podpiąć do 4 róznych pinów, no problem, podpinamy, klient nasz pan.
W sensie elektrycznym podłączenie wielu czujników do jednej szyny jest jak najbardziej rozwiązaniem idealnym, trzeba to tylko oprogramować odpowiednio i tu wracamy do punktu wyjścia, problem z rozmiarem programu. Widać sprzęt jest w tym temacie ograniczeniem, więc jeśli by się udało to w ten sposób zmieścić w pamięci programu, to takie rozwiązanie nie jest ani lepsze ani gorsze od innych, jest to jedna z możliwości komunikacji, która producent DS-ów też przewidział.
No ok, użyje CTRL-V:) takie coś działa u mnie, nie jest to moje dzieło, mam nadzieję, że autor wybaczy:)
Kod: Zaznacz cały
Sub Odcz_temp
1wreset Pina , 0 'reset
1wwrite &HCC , 1 , Pina , 0 'jedna kostka, więc wykorzystujemy
'rozkaz SKIP ROM
1wwrite &H44 , 1 , Pina , 0 'dokonaj konwersji
Waitms 750 'przeczekaj czas konwersji
1wreset Pina , 0 'reset
1wwrite &HCC , 1 , Pina , 0 'rozkaz adresowy SKIP ROM
1wwrite &HBE , 1 , Pina , 0 'rozkaz funkcyjny - polecenie odczytu
'DS18x20
Odczyt(1) = 1wread(2 , Pina , 0) 'odczytaj dwa pierwsze bajty
T = Odczyt(2) 'przepisz starszy bajt do zmiennej typu
'Integer
Shift T , Left , 8 'przesuń ten bajt w lewo na wyższe pozycje
T = T + Odczyt(1) 'przepisz - dodaj młodszy bajt
T1 = T * 0.0625 'wyraz w stopniach Celsjusza, wynik wpisz do
'zmiennej Single
End Sub
Inaczej. jak dobrze pamiętam, aby odczytać poprawnie adres jednego DSa, na magistrali musi być dokładnie jeden, bo inaczej na zapytanie odpowiedzą wszystkie naraz i będzie lipa.
Więc lepiej wykorzystać dwa piny, jeden do obsługi wielu DSów i jeden do uczenia, wprowadzania nowego DSa do systemu, i o takie rozwiązanie chodzi chyba koledze.
problemem natomiast jest BASCOM, który marnuje zasoby CPU na lewo i prawo, zamulając go przy okazji. Napisanie w nim zoptymalizowanego programu bez drążenia samego środowiska, tu i uwdzie z wstawkami ASM, to rzecz prawie nieosiągalna.
Więc lepiej wykorzystać dwa piny, jeden do obsługi wielu DSów i jeden do uczenia, wprowadzania nowego DSa do systemu, i o takie rozwiązanie chodzi chyba koledze.
problemem natomiast jest BASCOM, który marnuje zasoby CPU na lewo i prawo, zamulając go przy okazji. Napisanie w nim zoptymalizowanego programu bez drążenia samego środowiska, tu i uwdzie z wstawkami ASM, to rzecz prawie nieosiągalna.
W podanym przykładzie numer seryjny czujnika jest pomijany (1 czujnik - 1 pin) więc nie ma potrzeby rejestracji czujników, odpada część kodu poświęcona temu problemowi.
Do linii może być podpięte wiele DS-ów i poprawnie odczytamy ich serial, w Bascomie służą do tego polecania :
1WSEARCHFIRST, 1WSEARCHNEXT.
Oczywiście Bascom bardzo nie szanuje zasobów ale i tu znowu powiem, że nie jest ani gorszy ani lepszy, ma swoje wady i zalety, swoich zwolenników i przeciwników, natomiast podaje przykład w Bascomie chociaż faktycznie kolega endurasek nie podał w jakim języku pisze swój program.
Co do wykorzystania dwóch pinów, świetny pomysł, bardzo by to uprościło rejestrację czujnika. Z menu wybieramy miejsce pomiaru, podłączmy czujnik do "linii serwisowej", zczytujemy jego ID , a później podpinamy do magistrali roboczej gdzie mierzy już to co ma mierzyć i to też jest OK.
Do linii może być podpięte wiele DS-ów i poprawnie odczytamy ich serial, w Bascomie służą do tego polecania :
1WSEARCHFIRST, 1WSEARCHNEXT.
Oczywiście Bascom bardzo nie szanuje zasobów ale i tu znowu powiem, że nie jest ani gorszy ani lepszy, ma swoje wady i zalety, swoich zwolenników i przeciwników, natomiast podaje przykład w Bascomie chociaż faktycznie kolega endurasek nie podał w jakim języku pisze swój program.
Co do wykorzystania dwóch pinów, świetny pomysł, bardzo by to uprościło rejestrację czujnika. Z menu wybieramy miejsce pomiaru, podłączmy czujnik do "linii serwisowej", zczytujemy jego ID , a później podpinamy do magistrali roboczej gdzie mierzy już to co ma mierzyć i to też jest OK.