Potem, jak chcesz to dziel przez 10 i na float ... Float? O zgrozo 1,5kB w plecy :) Tak to się robi: http://mikrokontrolery.blogspot.com/2011...
Podejrzewam, ze jest jakis bład w algorytmie interpretacji odczytanych ajtów z termometru. Z ciekawosci wlazlem na http://pdfserv.maxim-ic.com/en/ds/DS18B2... i jest tam tabelka przykładowych wskazań dla wybranych temperatur. Nie znając programu niemożliwe jest powiedzenie czegos wiecej. pozdrawiam
hexen2k, z tego co przeanalizowałem, to ten fragment dokumentacji, który przytoczyłeś jest zrealizowany w moim kodzie (?): Zgadza się :) michalko12 ma rację, sprawdzasz za późno: http://obrazki.elektroda.pl/2352154200_1... 3us na krótkiej lini powinno zadziałać, jednak przy dłuższych magistralach może być problem. IMHO lepiej sprawdzać...
Zajrzyj też [url=http://www.elektroda.pl/rtvforum/to... Tu była podobna dyskusja na ten temat. Pozdrawiam
Ja zawsze tak robię i to niezależnie czy czujniki są podpięte w trybie parasite czy normalnie. To oczywiście działa bez najmniejszych problemów i jak pisze kolega wyżej tak wręcz powinno się robić ;)
Ja bym obstawił że to wina zasilania pasożytniczego. Jako że one nie są selektywne to ładują się wszystkie podczas transmisji, za mocno może przysiadać napięcie a przez to źle dokonuje się konwersja temperatury.
Witam, Jeśli dobrze rozumiem: char * itoa ( int value, char * str, int base ); itoa zapełnia Twój buf który jest tablicą (dokładniej buf jest wskaźnikiem do pierwszego elementu tablicy buf[n]). więc wywołaj: void display(uint8_t init,char l1,char l2,char l3,char l4) gdzie l1 -> buf[0] (lub *buf) gdzie l2 -> buf[1] (lub *(buf+1)) gdzie l3 -> buf[2] (lub...
Zacząłbym od tego: Otrzymujesz wartość zmiennej temperatura równą np. 1871819,25. Jak przemnożysz to przez 16 to okaże się, że wyrażenie (temp1 + (temp2*256)) zwraca wartość 29 949 108. Teoretycznie zmienne temp1 i temp2 nie powinny przyjmować wartości większych od 255, więc wartość maksymalna wyrażenia (temp1 + (temp2*256)) = (255 + (255*256)) = 65535....
Nominalny czas konwersji temperatury przez DS18B20 to 750 ms, czyli wszystko się zgadza.
to jest ten problem: http://www.elektroda.pl/rtvforum/topic88... Wydaje mi się, że nie dajesz czasu na konwersję temperatury.
MPLAB v6.50 - tris działa bez zarzutu. Kompilator czepia się natomiast tego co mi podajesz (i co podaje też dokumentacja PICa :) ) a DSa dalej nie mogę zmusić do współpracy... Dodano po 11 Dobra ... właśnie udało mi się zapisać i odczytać rejestry TH i TL więc wracamy do tematu przewodniego. Dlaczego nie działa konwersja temperatury?!?
A ile trwa wysylanie/odbior danych z DS'a? Tylko tyle czasu powinna zajmowac procedura obslugi DS'a (nie liczac sposobow z wykorzystaniem sprzetowego RS'a jako portu do obslugi 1wire - wtedy moze jeszcze mniej) Nie czekasz czasem w martwej pętli na zakonczenie konwersji temperatury?
Pokaż cały program. Masz podłączone w trybie parasite, musisz więc ustawiać stan wysoki na linii danych podczas konwersji temperatury.
Witajcie, chciałbym lekko odgrzać kotleta i poprosić o wskazanie błędu przy próbie wyliczenia temperatur ujemnych. Odczytuję czujnik DS18B20 w maleńkim ATTINY13 (zmienne float właściwie odpadają) i co około sekundę wysyłam wynik poprzez UART. Dla temperatur dodatnich - dzięki uprzejmości p. Podkalickiego i jego "odchudzonej" biblioteki DS18B20 działa...
Urządzenie dalej przy pierwszym uruchomieniu programu odczytuje 85'C. Nie może być inaczej, skoro pierwsze czytanie temperatur wykonujesz przed wysłaniem polecenia konwersji ;)
Tutaj masz gotowy przykład bez użycia float-ów (oszczędność pamięci): http://mikrokontrolery.blogspot.com/2011...
Oto odpowiedź: http://mikrokontrolery.blogspot.com/2011...
+85 zdarza się tylko wtedy gdy procesor się resetuje i odczytuje od nowa numery DSów. Nie, zdarza się również wtedy, kiedy sensor DS18B20 traci chwilowo zasilanie, a proces konwersji temperatury był wcześniej zainicjowany.
Było już sporo przykładów na forum. Sam to wyłuskałem z przykładów konwersji temperatur z DS18b20. Np. cos takiego: godzina = Makebcd(godzina) Jednosci = Temp And &B00001111 Shift godzina , Right , 4 Dziesiatki = godzina
Witam, wydaje mi się, że wysyłasz polecenie konwersji w trakcie trwania wcześniej wywołanej :-). Proponuje aby to się działo gdy Flaga_odczyt = 1 a nie wywołane z pętli Do Loop i najpierw odczyt DS a potem konwersja. Przydałoby się zatrzymać TIMER0 na czas konwersji. Jeśli bardzo chcesz skrócić czas konwersji to proponuję podłączyć DS trzema przewodami....
Witam Oto kod czy ktoś mógłby rzucić okiem gdzie jest błąd? Ogólnie wyświetla przez cały czas 85 stopni. Tak wygląda sama konwersja w czujniku: void LCD_18b20_multidrop(/*unsigned char posx, unsigned char posy,*/ unsigned char *adrr) { unsigned char i,tablica[4]; signed char alarm; int temp; ow_reset(); ow_byte_wr(0xCC);...
Po rozkazie konwersji temperatury musisz odczekać około 750ms.
Witam Co do przeliczania wartości na temperaturę nie będę się wypowiadał bo w wielu publikacjach było to prezentowane. Natomiast zajmę stanowisko w sprawie wyświetlacza LED. Proponowałbym z obsługi przerwania usunąć procedurę pobrania znaku do wyświetlenia. O wiele lepiej zrobić to w programie głównym. Zbyt długie przebywanie w obsłudze przerwania może...
A może za często dokonujesz pomiarów. Spróbuj gdy konwersja temperatury jest co 10 - 20 sekund.
Dokladnie ta funkcja jest wykonywana w 5us wiedz drobne korekty w ustawieniach czasow i mam caly kod. Mam caly kod obslugi DS18B20 wlasnego autorstwa. Odczyt ROM, zapis rozdzielczosci, konwersja temperatury itp. Pozdrawiam.
chodziło mi o odczyt bitu, źle to ująłem. Niestety zabawa lutownicą nie rozwiązała mojego problemu, tak jak to miało miejsce w przypadku bohatera "lektury". EDIT: zmieniłem wartość rezystora pull-up o połowę ( połączyłem równolegle 2x4,7k). Teraz po zapisie scratchpada i odczycie go otrzymuje wartość zgodna z zapisywaną, czyli coś sie ruszyło. Nadal...
Przy 1 urządzeniu na 1Wire nie ma potrzeby używać ani SearchROM, ani MatchROM, ani ReadRom, tylko wystarczy SkipROM. 1. Reset1Wire 2. Jeśli Reset poprawny to SkipROM (0xCC) i ConvertT (0x44) 3. Odczekanie czasu na konwersję 4. Reset1Wire 5. Jeśli Reset poprawny to SkipROM (0xCC) i ReadScratchpad (0xBE)
Chyba zapomniałeś o wysłaniu polecenia konwersji ;) 1Wwrite &hcc 1Wwrite &h44 <<<<----- WaitMs 250 WaitMs 250 WaitMs 250 1Wreset 1Wwrite &hcc 1Wwrite &hbe
A kto ci każe używać delay? DS ma możliwość sprawdzenia czy konwersja jest już gotowa. Poza tym można do obsługi 1-wire użyć np. UART i całość zrobić w przerwaniach, zapisując odczytany wynik do jakiejś zmiennej.
85 ST jest wartością domyślną wpisaną do rejestru w którym przy kolejnych konwersjach DS wpisuje już zmierzoną temp i przy pierwszym pomiarze zawsze taka liczbę odczyta. Może gdzieś nie łączą przewody i czujnik traci na chwile zasilanie i wpisuje to wartość domyślną.
Nadmieniam iż po konwersji czekam 1s .
Help bascoma faktycznie podaje możliwość wpisania wartości do 65535. To jednak nie działa. Np. poszukaj kodu do obsługi ds18b20 (tam potrzeba 750 ms na konwersje temperatury) - zawsze używa sie 3 x waitms 250. Tak to już jest, teoria a praktyka to 2 różne sprawy... ps spróbuj zmienić config portb.2=output na config pinb.2=output. Fusebity służą do konfiguracji...
AVE... Załaduj poniższy plik do swojego PICa 16F886... Podłącz DS18B20 do pinu PORTB.5 Podłącz pin PORTB.0 przez rezystor 470Ω do pinu 2 portu szeregowego, oraz masę układu do pinu 5 portu szeregowego. Odpal jakiś program terminalowy i skonfiguruj go do odbioru danych z portu szeregowego z baudrate=2400. Po włączeniu PICa najpierw otrzymasz numer...
...Czy istnieje jakiś sposób, aby ostateczną zmienną 'Ss' (string) zapisać w zmiennej typu Single (lub innej?) aby umozliwic porównanie jej z tą zapisaną w eepromie? A może ktoś zna inną metodę na rozwiązanie tego problemu? Z Twojej wypowiedzi wynika , że nie wiele masz wspólnego z programowaniem uC - ale mniejsza z tym. Zmienna string jest potrzebna...
Zrób [url=https://en.wikipedia.org/wiki/Metho... temperatury i doprowadź wyświetlanie temperatury do porządku. Aby uzyskać wartość jednostek przy konwersji temp lepiej użyj operatora modulo.
Powinien wymusić jedynkę na czas konwersji.
(...) odczytu temperatury. Jaki zaproponowałbyś kod (AVR GCC), aby nie trzeba było używać delay'a (może pooling lub maszynę stanu) ? Przy okazji przedstaw optymalną (bez zmiennoprzecinkowych liczb) konwersję danych ze scratpad'a na stopnie (może być złożeniem liczb całkowitych jako stopnie i części ułamkowe). Do obsługi termometrów DS18B20 bez blokowania...
Jak rozumiem, nie działa w sensie pokazuje stała wartość temperatury? Zapomniałeś wrzucić polecenie startu konwersji temperatury. Dopiero po nim czekasz na zakończenie konwersji i dajesz MatchROM oraz odczyt temperatury.
Może to Ci pomoże w zrozumieniu: 1wreset 1wwrite &HCC 1wwrite &H44 Waitms 750 1wreset 1wwrite &HCC 1wwrite &HBE T(1) = 1wread(2) Shift T(1) , Right , 4 Shift T(2) , Left , 4 Temp = T(1) + T(2)
http://mikrokontrolery.blogspot.com/2011...
Ten kod jest do DS1820 a nie do DS18B20 i brakuje czasu oczekiwania na konwersje temperatury przez czujnik. Poszukaj na elektrodzie było to wiele razy opisywane co i jak z tymi czujnikami trzeba robic zeby dziłało.
Printf + float na tym procesorze to proszenie się o problemy. Te para ma spore wymagania pamięciowe i można się przejechać przy małych procesorach. Wszystko jeszcze zależy od tego z których bibliotek korzystasz. Konwersję temperatury z DS można wykonać w prosty sposób bez używania floatów. http://mikrokontrolery.blogspot.com/2011...
Pokaż jak podłączasz czyjniki Dodano po 1 Nie analizowalem programu ale czy ustawiasz taką samą dokładność konwersji?
Dziwne, u mnie wszystkie sterowniki chodzą na 8MHz i DS nigdy nie ma za mało czasu. Może po prostu nie dajesz mu czasu na konwersję (750ms)...
Hej! Zobaczcie jak ja to robię, może komuś sie to przyda: 'Powiedzmy ze zmienna Liczba(single) wynosi 22.62555426 Temp = Int(liczba) ' dzieki temu poleceniu odcinam czesc setna czyli ' zmiennej Temp(byte) przypisuje liczbę 22 Liczba = Frac(liczba) ' dzieki temu poleceniu odcinam czesc ' dziesiętną czyli zmiennej Liczba(single) przypisuje ' liczbe 0.62555426...
To wydaje się być ok, chociaż100 us to sporo. Pokaż jak wygląda wysyłanie i odbiór bajtów i przede wszystkim procedura wyświetlania, bo ciekami mnie jak robisz konwersję na float/fixed point, bo podejrzewam, że tu masz błąd. W przypadku problemu z OW magistrala jest w stanie wysokim, a nie niskim, stąd też powinieneś mieć odczyty typu same 0xff, a nie...
witam,w ds1820 wartosc odczytanej temperatury dzielimy przez 2 a w ds18b20 dzielimy przez 16,ponadto 2 ds1820 ma rozdzielczość 9bitowa a ds 19b20 9 lub 12bitowa i czas konwersji dla ds18b20 wynosi 750ms a dla ds1820 200 ms
Na temat fuse bitów był osobny temat wałkowany i to dobrze ale narazie ich nie ruszaj bo "uwalisz" procka. DS-y są "wyczulone" na czas w którym następuje konwersja i jesli bedzie nieodpowiedni(wg noty 750ms) to DS moze wariowac i w ogole nie mierzyc(nie zdarzy wykonac konwersji). Jesli chodzi o ADC to w zasadzie różnica jest taka ze przy standardowym...
1. Trzeba uważać na funkcje delayms i delayus, ponieważ mają one ograniczenia - tzn. nie można tam wstawić dowolnie duże liczby. Szczegóły w delay.h 2. U mnie ciekawy problem się pojawił w czasie konwersji temperatury - ponieważ układ był zasilany pasożytniczo. Nieważne jak kombinowałem z pullupami - zawsze to samo. W końcu po wystawieniu "1" na nóżce...
Przyczyną wskazania 85'C może być tylko nie ukończona konwersja temperatury. W układach tych pamięć wyników przed pomiarem jest wypełniana właśnie wartością 85'C. Spróbuj zwiększyć czas między rozpoczęciem pomiaru, a jego odczytem. Niby masz 900ms to powinno wystarczyć, ale możliwe że trafiłeś na DS'a z kiepskiej partii lub zwykłą podróbke.
a wszystkie 9 bajtów odczytane z ds-a ma wartosc FF ? ewentualnie czas konwersji temperatury zwieksz do 2 sekund
http://lmgtfy.com/?q=ds18b20+85+degrees DS sygnalizuje w ten sposób błąd/brak konwersji. Podłącz mu +5V do nóżki zasilającej i sprawdź ponownie.
[syntax=c]sensors.readTemperature[/synta... odczytuje temperaturę. Co wywołuje start konwersji? Robi to ta funkcja? A może inna? Podpowiedź. Konwersja dla DS18B20 to, zależnie od rozdzielczości, 100..700ms. Czas mozna zmierzyć na wiele sposób, oscyloskopem, rejestratorem logicznym, timerami.
DS18B20 potrzebuje 750ms do konwersji temperatury. Jak nie dajecie tego opóźnienia to otrzymujecie temperaturę nie z danego pomiaru a z wcześniejszego pomiaru(zakładając że odpytujemy czujnik o temperaturę w odstępach czasu co najmniej 750ms). Jeżeli komuś to nie robi różnicy to oczywiście nie musi dawać opóźnień.
Czyli mam pewny pomiar wszystkich czterech temperatur co 3s i raczej nic nie przyspieszę w tym temacie? DS umożłiwia aktywne sprawdzanie zakończenia konwersji. Dzięki temu możesz odczytać czasami szybciej niż po tych 750 ms. Co do pomiaru 4 temperatur - wysyłasz do wszystkich mierników polecenie konwersji (możesz dać skip ROM i potem polecenie konwersji),...
http://mikrokontrolery.blogspot.com/2011...
Znam dobrze ds18b20 ale o trybie ciągłej konwersji temperatury nie słyszałem ani nie czytałem. Zresztą jak to sobie wyobrazasz ?. DS wykonuje pomiar i co z nim robi dalej, przecież jemu ten pomiar jest do niczego nie potrzebny, a wysłać na zewnątrz może tylko jako SLAVE.
co prawda w C, ale zasada ta sama: http://mikrokontrolery.blogspot.com/2011...
"chyba" to słowo klucz;) nigdzie tam nie liczysz CRC z otrzymanych danych (danych o temperaturze +reszta scratchpadu) PO konwersji musisz odczytać te 9 bajtów i z pierwszych 8smiu bajtów obliczyć CRC i porównać z dziewiątym. Poza tym ty odczytujesz wartość temperatury PRZED zleceniem konwersji (komenda &H44), co trochę nie ma sensu. Pozdrawiam, GSM
Może zamiast dochodzić czy zawyża czy nie zawyża? co się dzieje? - pokaż po prostu frgment kodu odpowiedzialny u ciebie za odczyt temperatury i jej konwersję - bo może tu masz nadal błędy?
W nocie katalogowej tego układu jest podany czas jaki maksymalnie może upłynąć od wysłania rozkazu konwersji temperatury do podania strong pullup. Stosowałem tę metodę na avr bez żadnych problemów. Sprawdź czy naprawdę procesor wystawia duży prąd na port. Nie napisał kolega nic o tym co oznacza stwierdzenie "nic takie rozwiązanie nie daje". Nie wiadomo...
odczytu dokonuje co 500ms, więc to chyba nie problem z zbyt krótkim czasem Na jakiej podstawie tak twierdzisz? Zapoznałeś się z opisem układu. Maksymalny czas konwersji dla rozdzielczości 12-bitowej (domyślnej) wynosi 750ms.
Po pierwsze odpada drugi procek. Po drugie temperatura jest na ds18b20 i konwersja jest ustawiona na 750ms. Po trzecie zegar wyświetla co do sekundy więc setne nie są istotne. Chcę tylko żeby mi sekundy wyświetlał ładnie, a nie z różną częstotliwością (zacina się na jakiejś, potem nagle przeskakuje szybciej). Wolałbym na przerwaniach...
Poszedłem po rozum do głowy i zastosowałem sprawdzanie CRC8 . Okazało się że konwersja temperatury w układach DS18b20 przebiegała poprawnie a uszkodzeniu ulegały dane podczas zczytywania ich z układów. Po sprawdzaniu sumy kontrolnej pomijam błędne dane i wyświetlam tylko prawidłowe dane. Chociaż tym przerwaniom także muszę się przyjrzeć. Zatem zrobiłem...
Może daj odrobinę większy czas na konwersję temperatury, np. 800ms, bo dawanie "na styk" może powodować jakieś problemy; a w ogóle warto sprawdzić, czy występowanie błędu zależy od robienia konwersji temperatury. Plus jakiś mały delay (np. 50ms) po odczytaniu temperatury. Temperaturę czyta prawidłowo?
W ciągu mniej niż 10us musisz wystawić jedynkę na linii z diodą i utrzymać ją przez cały czas trwania konwersji (tyle ile w karcie katalogowej podano) i przez ten czas magistrala jest zablokowana dla jakich kolwiek transmisji. Potem kasujesz jedynkę z wyjścia z diodą i działasz normalnie dalej. Przez tę diodę podawane jest zasilanie potrzebne do pracy...
Jeśli termometr będzie w przerwaniu np co 1 sec, to możesz usunąć : " Waitms 750 'przeczekaj czas konwersji" To opóźnienie będzie tylko spowalniało powrót do pętli głównej. Konwersja i tak się dokona bo przecież program będzie tam skakał co sekunda. Różnica jest tylko taka, że przy pierwszym włączeniu zasilania do układu termometr pokaże 85 stopni....
Cześć. Mam mały problem z pomiarem/wyświetlaniem temperatur ujemnych z wykorzystaniem czujnika DS18B20. Korzystam z bibliotek: <OneWire.h> <DS18B20.h> Ujemna temperatura jest na wyświetlaczu pokazywana jako dodatnia - tzn. jest tylko wartość a nie ma znaku +/-. Czy DS18B20 zwraca wartości ujemne? Czy brakuje mi tylko warunku np.: jeżeli...
Może ten artykuł wyjaśni Twoje wątpliwości: http://mikrokontrolery.blogspot.com/2011...
na allegro sie nie kupuje takich częsci :D Myslisz ze dlaczego to ktos sprzedawał? Bo wadliwe... Powiem więcej: gość opychający te częsci moze kupił "próbkowa" serie lekko "innych technicznie" czujników za psie pieniądze... Poza tym: zainwestuj 7.50 w NOWY czujnik ( ze sklepu, nie allegro) i zobacz czy masz taki sam rozrzut. Jesli tak, to a) masz cos...
A propos float oraz wyświetlenia temperatury na LCD: http://mikrokontrolery.blogspot.com/2011...
A propos tego fragmentu: [syntax=c]float temp=0; temp=(float)(temp1+(temp2*256))/16; dtostrf(temp,1,1,buf); lcd_puts(buf); [/syntax] http://mikrokontrolery.blogspot.com/2011...
Sądzę, że wielkość opóźnienia w delay() w poniższym fragmencie jest nieco zbyt optymistyczna, jak na czas potrzebny do zakończenia konwersji. [syntax=c] ds3.write(0x44, 1); // start conversion, with parasite power on at the end delay(100); present3 = ds3.reset(); [/syntax] Spróbuj przetestować z 500 ms albo lepiej sprawdzaj, czy zakończyła się konwersja...
Na magistrali 2-przewodowej bez "strong pullup-a" (odsyłam do karty katalogowej) może (choć nie musi) występować znaczny błąd pomiaru nawet rzędu kilku st. C oraz znacznie wydłuża się czas konwersji. Pamiętajcie o tym, sam się kiedyś naciąłem.
No tak, tylko kolega nie planuje drażnić gekona w terrarium włączając/wyłączając mu np. światło co 1 sekundę ;) A pamiętaj co do pomiaru temperatury, że konwersja zabiera czas. Na DS18B20 jest to od niecałych 100 ms (9bit) do 750 ms (12bit) przy czym można wydać polecenie pomiaru temperatury i odczytać dopiero "za jakiś czas" czyli możesz otrzymać przesunięcie...
Witam Kolego Unreal89. Pracuję pod Bascomem 8051 i nie spotkałem się z funkcją, o której wspominasz. Przejrzałem pliki help'a i tam również nic nie znalazłem. Zainteresowany jestem z jakiego powodu odpada komenda "fusing"? Dla czego pytam? Pozwolę sobie obszerniej skomentować zaprezentowany listing. 1. Termometr DS18B20 przechowuje informacje o temperaturze...
Witam! Szukam jakichkolwiek informacji na temat sposobu pomiaru temperatury przez DS18B20 i temu podobnych układów. Nie chodzi mi o sterowanie magistralą 1-wire lecz o samą konwersję temperatury na wartość elektryczną (termopara/pirometr/czujnik rezystancyjny czy co tam siedzi w środku). Byłbym wdzięczny za wszelkie informacje na ten temat bo w data...
Z 8 czujników DS18b20 jesteś wstanie wszystkie pomiary odczytać poniżej 1 sekundy. W czasie konwersji tych 750ms możesz w twoim układzie wykonywać inne czynności, nie czekać na czujniki. W skrócie: 1) Reset magistrali 2) Wyślij rozkaz globalny do pomiaru temperatury we wszystkich czujnikach 3) Czekasz 750ms (w tym czasie robisz sobie inne rzeczy). 4)...
Można też zrobić tak: obsluga_termometru: gosub Odczytaj_temperature gosub Inicjuj_termometr return Bez żadnych opóźnień odczytać i od razu zainicjować konwersję kolejnej wartości a wykonywać podprogram np. co sekundę. PC
To nie jest stała temperatua;) Wygląda jakbyś nie robił żadnej konwersji - to jest pierwszy wpis po załączeniu urządzenia do rejestrów wew. ;)
Witam. Może temperatury są złe bo programy są dla ds18b20 a nie dla ds1820. między ds18b20 a ds1820 jest spora różnica jeżeli chodzi o konwersje temperatury. Poszperam w swoim archiwum i postaram się wstawić odczyt tem. dla ds1820. Po chwili. Poszperałem i znalazłem coś takiego, nie są to moje programy ale znalezione w sieci( nie pamiętam gdzie) wiem...
Witam! 1. czas na konwersję 750 ms, jest to maksymalny czas potrzebny tylko wtedy, gdy mamy czujnik podłączony tylko dwoma przewodami, a wiec przy zasilaniu "parazytowym" i przy maksymalnej rozdzielczości pomiaru. 2. w przypadku kiedy czujnik jest podłączony trzema przewodami, ten czas może być skrócony do około 20 ms. 3. ten czas nie oznacza, że trzeba...
Dzięki zumek -- ale tyle czasu nikt nie odpowiadał, że zagoglowałem się na śmierć prawie i w końcu znalazłem już teraz super jak dla mnie rozwiązanie.... nie dość, że działa sprawnie i szybko wyszukiwanie urządzeń na magistrali - to jeszcze zawsze ładnie sprawdzana jest crc8 - a do tego co ciekawe automatycznie rozpoznawanie czujników DS1820, DS18S20...
atom1477 --> ja nie krytykuję kodu (tzn nie krytykowałem - nawet jeszcze nie spojrzałem na niego) ;) nie zaperzaj sie tak, toż widzę że krótszy. .....Ale powiedz mi gdzie masz w tym krótki kodzie oczekiwanie na konwersję, co najmniej 750ms ??? bo jakoś nie widzę.
Witam! Najogólniej mówiąc musisz te 4 bity podzielić przez 16, natomiast jeśli masz ujemną temperaturę to robisz to samo a następnie otrzymany wynik odejmujesz od 1.
Wszystko zależy od tego co dalej z tym chcesz robić. przerzucić wartość temperatury do jednej zmiennej do pomiaru i zadawania wartości w regulatorze PID avr221. Tam na wejściu wartości zadanej i odczytanej są typy int16_t.
dzej_dzej : im wieksza temp. (np. >63) tym dluzej trwa konwersja temp. zwieksz opoznienie pomiedzy wyslaniem komendy konwersji a odczytem danych z DS'a ja zwiekszylem z 300ms do nawet 0,5 s. i jest od razu lepiej. Pozdrawiam Bart.
Podczas odczytu DS'a musisz dać pauzę pomiędzy rozkazem rozpoczęcia konwersji a odczytem temperatury (standardowo 750ms). Przy czym musisz to rozwiązać sprytniej niż zwykłym waitms...
Witam nie czekasz na obliczenie temperatury powinno być waitms 750 . Wstaw waitms 750 w miejsce gdzie masz 'przeczekaj czas konwersji
Znalazłem artykuł na ten temat http://mikrokontrolery.blogspot.com/2011... Wniosek - google nie gryzie :p Zamykam
A zmieszałeś opornik na 1-wire podciągający? Kabel ekranowany ? Dłuższy czas na konwersje wyników daj. Według producenta 660m 1-wire wyciągniesz i więcej pamiętać należy o przekroju przewodu aby...
Właśnie doczytałem się w dokumentacji - w czasie konwersji temperatury i operacji na EEPROMie ds18b20 (inne ds18x20 pewnie podobnie) potrzebują wydajniejszego zasilania niż przy pozostałych zadaniach (search ROM, match ROM, read scrachpad etc.). Dallas zaleca podłączanie termometru bezpośrednio pod zasilanie w czasie tych "męczących" operacji jeśli...
odczyt temperatury z DS18b20, dokładność do 0,5 stopnia. A o jaką konkretnie funkcję z libm chodzi? Dziękuję, zaznajomię się z tematem.
Na pewno nie wina samego DS'a - na 100% i daję sobie głowę obciąć ;) ... tylko że w ten sposób najłatwiej sobie zawsze wytłumaczyć tajemnicze zjawiska powodowane źle napisanym kodem przez samego siebie :( Też obstawiam winę kodu, ale nie mogę się tam dopatrzeć żadnego błędu i już parę innych sposobów konwersji próbowałem - wynik nadal ten sam.
Z dwojga zlego wole zegar 4MHz... Zmienilem wewnetrzny oscylator na 4MHz i zmienielem w deklaracji: #define F_CPU 4000000UL #define CYCLES_PER_US ((F_CPU+500000)/1000000) // cpu cykli na mikrosekunde ...teraz w ogole nie wykrywa mi czujnika. Zumek ratuj, Ty umiesz nawet z fusów wróżyc. :D O czym zapomnialem? ----------------------------------------...
DS18B20 potrzebuje na to min 750ms. To znaczy 750ms to jest maksymalny czas konwersji temperatury przy rozdzielczości 12 bitowej. Nie koniecznie taka jest wielokrotność stałej czasowej takiego czujnika związana z odpowiedzią na skok jednostkowy. Jest to zależne od rodzaju zastosowanej obudowy.
Można wyświetlać temperaturę w podmenu "wybór_Ds" ale trzeba zmienić cały program. Chyba nie jest tak trudno zapisać sobie cztery ID czujników i wiedzieć później który gdzie przypisać. Najlepiej osobno podłączać każdy czujnik i na naklejce na kablu przy czujniki zapisać jego ID. Wiedząc gdzie jakie jest ID czujnika można już mu w podmenu przypisać odpowiednią...
Dzięki tmf z odpowiedź. Mam pytanie dotyczące łączenia instrukcji programów w całość . Chodzi mi o to że robię sobie termometr w którym odczytam sobie temperaturę wewnętrzną ,zewnętrzną a także napięcie swojego akumulatora i czas,datę z układu DS1307.W jaki sposób połączyć kilka plików to ze sobą w sposób profesjonalny? Czy wszystko ująć w jednej pętli...
W tym wątku jest bardzo szybki algorytm konwersji liczb całkowitych i ułamkowych na bcd. Nie potrzeba do tego floatów. http://www.elektroda.pl/rtvforum/topic18...
Z czujek ds18s20 też da się odczytać temperatuę dokładnie tak jak w ds18b20 (części ułakowe są w 6 bajcie) A co do konwersji temperatury to widze że jest zrobiona na piechote. http://www.elektroda.pl/rtvforum/topic18... Bardzo fajny sposób. Aż sie zdziwiłem że tak można konwertować także części ułamkowe. Myśle że zajełoby to mniej pamięci niż...
ds18b20 konwersja temperatury ds18b20 konwersja konwersja temperatury ds18b20 ds18s20
wygłuszanie pomieszczeń pasek rozrząd citroen step7 manager
Lokalizacja odpowietrznika układu chłodzenia Ford C-MAX Aktywacja sterowania głosowego w ISUDAR