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...
Nominalny czas konwersji temperatury przez DS18B20 to 750 ms, czyli wszystko się zgadza.
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....
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
co prawda w C, ale zasada ta sama: http://mikrokontrolery.blogspot.com/2011...
Po rozkazie konwersji temperatury musisz odczekać około 750ms.
A o to mój kawałek kodu : ow_reset(); write_byte(0xcc); // pomin czytanie nr write_byte(0x44); // nakaz pomiar temperatury waitms(250); waitms(250); waitms(250); ow_reset(); write_byte(0xcc); // pomin czytanie nr write_byte(0xbe); // zadaj odczytania temperatury tempL = read_byte();...
A może za często dokonujesz pomiarów. Spróbuj gdy konwersja temperatury jest co 10 - 20 sekund.
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....
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)
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.
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.
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...
Witam. Wydaje mi sie ze masz cos naknocone z czasami. Po pierwsze to nie masz podanego makra: #define F_CPU 16000000UL po drugie wydaje mi sie ze: " void _delay_ms (double __ms) Wstrzymuje działanie programu na __ms milisekund, używając _delay_loop_2(). Makro F_CPU powinno zawiarac częstotliwość zegara w hercach. Maksymalne możliwe wstrzymanie to 262.14...
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...
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.
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...
Powinien wymusić jedynkę na czas konwersji.
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)
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.
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)...
http://mikrokontrolery.blogspot.com/2011...
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
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....
http://mikrokontrolery.blogspot.com/2011...
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...
Trochę teorii w temacie: http://mikrokontrolery.blogspot.com/2011...
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.
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),...
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.
"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
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...
[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.
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?
(...) 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...
...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...
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...
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...
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.
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...
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ą.
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...
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.
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...
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.
Może ten artykuł wyjaśni Twoje wątpliwości: http://mikrokontrolery.blogspot.com/2011...
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)...
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...
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...
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...
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...
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.
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
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...
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ą...
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.
http://mikrokontrolery.blogspot.com/2011...
Z tego co widziałem, to funkcja z pliku ds18b20 zwraca temperaturę jako int16_t czyli ze znakiem. Nie wiem jak to przekonwertować ani co dostanę po konwersji (jak znam życie to wynik będzie odniesiony do 1024 i jeśli 22 stopnie w przypadku int16 będzie częścią 512 bitów tak po zmianie typu na uint16 będzie częścią z 1024) Co do wartości bezwzględnej...
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.
Znalazłem artykuł na ten temat http://mikrokontrolery.blogspot.com/2011... Wniosek - google nie gryzie :p Zamykam
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...
Przy samych jedynkach było by wskazanie 0 (a dokładniej -1/16, wartość binarna FFF.F) 85*C jest zwracane jak układ nie zdążył z konwersją. Nawet jak poprzednia konwersja się udała i poczekasz tą jedną sekundę, to po rozpoczęciu nowej konwersji i zbyt wczesnym odczycie nie otrzymasz nawet wartości z poprzedniej poprawnie przeprowadzonej konwersji. Bo...
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ż...
Napisane na szybko nie sprawdzałem ale chyba powinno działać. [syntax=basic4gl] $regfile = "m8def.DAT" 'deklaracja procesora, w tym wypadku Atmega8 $crystal = 1000000 'deklaracja cześtotlwiości pracy (wew oscylator 1MHz w zupełności wystarcza) '*************************************WA... 'Pamiętać o podłączeniu...
ds18b20 konwersja temperatura ds18b20 konwersja konwersja temperatura
wytrzyma kondensator dźwięk jednej słuchawce lenovo amplituner przygasa
zgrzewarka transformatorowa renault mascott
Fiat Ducato nie gaśnie po wyjęciu kluczyka – stacyjka, przekaźnik, elektrozawór STOP BZP650C12 – zamienniki diody Zenera 12V 5W: 1N5349B, BZT03-C12, BZD27C12