Zajrzyj też [url=http://www.elektroda.pl/rtvforum/to... Tu była podobna dyskusja na ten temat. 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ć...
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...
...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...
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....
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
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...
Witam, mam problem jak w temacie a mianowicie nie wiem jak przekonwertować pierwsze cztery bity LSB które odpowiadają za dziesiąte części stopni aby otrzymać wartość od 0do9 a nie jak jest do tej pory od 0 do 15 (0x00 do 0x0F). Prosił bym o kawałek kodu w [asm] lub jakieś info jak to ma wyglądać.
To możliwe i wydaje się jedyną sensowną drogą do celu. Wysyłasz do wszystki start konwersja, odczekujesz czas konwersji, odczytujesz termeratury. Całośc powiniwnes sie zmiescic w 1 Sek.
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...
Pewnie chodzi o to: Niezupełnie, raczej o to: :) [syntax=c]int16_t data = (msb << 8) | lsb; if (data < 0) data = -data; data = data * 5 / 8[/syntax]
No dobra ... a czy zamiast układu z MOSem nie powinno wystarczyć zasilanie z portu poprzez wystawienie "1" na czas konwersji?
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 ;)
najprościej chyba tak: Dim Dana(2) As Byte Dim T1 As Single Dim T2 As Single Dim Wynik As String * 8 If Dana(2) >= 248 Then Dana(1) = 255 - Dana(1) Dana(2) = 255 - Dana(2) Znak = "-" Else Znak = "+" End If T1 = Dana(1) / 16 T2 = Dana(2) * 16 T1 = T1 + T2 Wynik = Fusing(t1...
Oto odpowiedź: http://mikrokontrolery.blogspot.com/2011...
A ile czekasz od rozkazu konwersji do odczytu? DS18B20 podczas konwersji pobiera dość duży impuls prądu. Jeżeli MASTER nie wymusza jedynki na linii 1Wire podczas transmisji, albo po niej (w stanie spoczynku), to napięcie na tej linii mocno spadnie i DS się zresetuje. Na szczęście BASCOM właśnie tak robi, ale możliwe że nie każda wersja.
Nie trzeba nawet czytać strony jedenastej żeby się domyślić co jest grane :D Strona dziesiąta: BH1750FVI is not able to accept plural command without stop condition. Please insert SP every 1 Opecode. To oznacza że nie ma tam typowego zwiększania adresu przy wydawaniu komend. Dlatego trzeba to zrobić tak i jest to wyraźnie napisane, że zmiana dwóch bajtów...
Powinien wymusić jedynkę na czas konwersji.
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...
...
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);...
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....
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.
DS18B20 - nie ma czegoś takiego jak ciągła konwersja. takie cos wystepuje w DS1821 ( tak mnie sie wydaje ). troche teori: wysylasz do niego komende EEh ( przed tym zerujesz bit 1SHOT ) i konwersja trwa caly czas; jak chcesz odczytać temperature ro sprawdzasz bit "DONE" jesli = 1 to w rejestrach masz temperature wysylasz ( znowu ) komende AAh i odczytujesz...
Nominalny czas konwersji temperatury przez DS18B20 to 750 ms, czyli wszystko się zgadza.
Spokojnie bedzie dzialac :) Zapalasz diode wysylasz komende konwersji, i przed zgaszeniem odczytujesz temperature. Pytanie tylko po co to tak rozwiazales?
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...
+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.
Pokaż jak podłączasz czyjniki Dodano po 1 Nie analizowalem programu ale czy ustawiasz taką samą dokładność konwersji?
Z opisu wnioskuję, że DS zasilany jest poprzez pin VDD a nie linie danych (pasożytniczo). W związku z tym błąd może być jedynie spowodowany zbyt krótkim czasem oczekiwania na zakończenie konwersji.
Poza tym ds18b20 potrzebuje 750 ms na konwersję.
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.
Jakie 2s? Najdłuższa konwersja dla DS18B20 trwa maksymalnie 750 Na zdjęciu akurat nic nie widać - np. jak masz podłączony termometr, jaka wartość rezystora podciągającego. Jeśli możesz narysuj schemat nawet we Fritzing.
Jeśli wykorzystujesz pełną rozdzielczość czujników DS18B20 to czas konwersji wynosi 750ms i przez co najmniej ten czas na magistrali powinna być podtrzymana jedynka logiczna zanim zaczniesz odczyt.
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)
Tutaj masz gotowy przykład bez użycia float-ów (oszczędność pamięci): http://mikrokontrolery.blogspot.com/2011...
Jak pisał kolega (at)piotrva wystarczy użyć flagę w przerwaniu aby program był nieblokujący, więc żaden czas się nie marnuje. Osobiście odczyt zawszę robię bezpośrednio w przerwaniu dzięki czemu odpadają mi problemy z błędnym odczytem (nie rozwala mi komunikacji 1wire). Mimo niestosowania CRC nigdy nawet na długich przewodach nie mam ŻADNEGO błędnego...
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...
Witam Nie za szybko żądasz odczytu z DS18B20? Poczekaj na konwersje. Formatowanie z dwoma miejscami po przecinku, ma tylko walor poglądowy. Dokładność pomiaru to 0,5st C, raczej odczytuj z jednym miejscem. A dla estetyki dodaj 0 do wyświetlanej wartość.
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...
to jest ten problem: http://www.elektroda.pl/rtvforum/topic88... Wydaje mi się, że nie dajesz czasu na konwersję temperatury.
lepiej sobie to właśnie rozbić na dwie funkcje. Jedna uruchamia konwersje, a druga po 750 ms odczyta temperature ze wszystkich 4 czujek. tmf przecież o tym pisał gdzieś tam wysoko.
Jak ze zmiennej float wyciągnąć części dziesiętne, całości i połówki? Czy po tej konwersji wyniku będę miał dokładność 0,5 stopnia(jest to konieczność)? Po prostu nie rób konwersji, zobacz w dokumentacji czujnika jaki jest format danych i będziesz wiedział.
Te funkcje zwracają dane w U2, więc nie ma potrzeby aby osobno traktować bit znaku. itoa za dużo pamięci nie zeżre, prawie na pewno nie więcej niż jakieś domowe sposoby konwersji.
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.
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
[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.
Odwrotne podłączenie raczej w przypadku tych DSów nie skutkuje uszkodzeniem układów. O ile nie doszło do termicznego uszkodzenia struktury. Czy na 100% masz układ taktowany 8MHz? U mnie raczej skutkuje. Nie rozumiem tylko dlaczego wszyscy koniecznie chcą zawsze 3 nogi podłączać (a szczególnie początkujący) skoro dwie podłącza się ławiej i bezpieczniej....
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)...
Nadmieniam iż po konwersji czekam 1s .
Ja bym obstawił na zakrotki czas konwersji (at) za malo prądu gromadzą.
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),...
Pokaż cały program. Masz podłączone w trybie parasite, musisz więc ustawiać stan wysoki na linii danych podczas konwersji temperatury.
R5 - daj ze 4k3 i powinno być dobrze ale jak długi ma być kabel to wymaga zmniejszenia (nawet do 2-2,5k) Wciąż mnie gryzie ten TSOP, nie wiem jak jest z biblioteką PCB, będziesz musiał porównać z datasheet'em czy jest dobrze. I jak chcesz możesz DS18B20 zrobić zasilanie z 1W (nie podłączać nogi Vcc - ale to wydłuży czas konwersji) Hmm, a tak poza tym...
Z tym próbkowaniem to jest dobry pomysł, wtedy odczyt temperatury spokojnie można robić na przerwaniach licznika sterowanego impulsami z zegara, a µC może robić coś ciekawszego w czasie konwersji w DS18B20... Pzdr, LightI
Mogę wykorzystać też czujnik DS18B20, który pewnie będzie dokładniejszy (81 210 to jednak chyba coś w stylu termistora ze zlinearyzowaną charakterystyką), ale najzwyczajniej w świecie musiałbym go kupić :) A jakby tak prosto, nie zmuszając tego termometru do ludzkich zachowań. UREF = zakres napięcia max. na termistorze i przez IR wysyłamy ADCW co godzinę....
Można oba odczyty dać do przerwania. Zliczać je i co któreś przerwanie robić odczyt. Czyli timer, np. przerwanie co 250 ms - co 3 przerwanie robisz odczyt temp. (w pierwszym dajesz polecenie konwersji, w 3 odczyt), co 8 przerwanie odczyt wilgotności.
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...
Dla DS18B20 maksymalny czas konwersji dla rozdzielczości 12 bitów (1/16 st. C) to 750ms, ale wystarczy przełączyć układ na rozdzielczość 9-bitową (rozdzielczość 0,5 st. C) i czas konwersji spada do 94ms. Zresztą przecież Twój program nie musi czekać w bezsensownej pustej pętli na zakończenie przetwarzania przez czujnik - może wykonywać wtedy inne operacje.
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ą.
Chyba zapomniałeś o wysłaniu polecenia konwersji ;) 1Wwrite &hcc 1Wwrite &h44 <<<<----- WaitMs 250 WaitMs 250 WaitMs 250 1Wreset 1Wwrite &hcc 1Wwrite &hbe
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)
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.
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.
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...
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ń.
co prawda w C, ale zasada ta sama: http://mikrokontrolery.blogspot.com/2011...
Witam! W moim projekcie wymagana jest wysoka niezawodność, dlatego zdecydowałem się na zastosowanie tranzystora podciągającego MOSFET dla zasilanie czujnika DS18B20 w czasie konwersji temp. Nie mogłem jednak znaleźć nigdzie gotowego schematu z takim rozwiązaniem. W sumie, to nie jest mi potrzebny taki schemat, ale chciałem się zorientować jakiego konkretnie...
pół stopnia dostaniesz z LM35A lub LM35CA (16zł w TME) musisz tylko użyć lepszych wzmacniaczy operacyjnych. Taki OP07 kosztuje poniżej 1zł i ma offset 0.15mV max. Pomyśl też nad dokładnym napięciem referencyjnym. Czemu ci przeszkadza czas konwersji DS18B20? LM35 ma podobny czas odpowiedzi - stałą czasową rzędu sekund, zasadniczo pomiar temperatury co...
Nie bardzo. Czas konwersji jest na niekorzyść DS18S20.
A może za często dokonujesz pomiarów. Spróbuj gdy konwersja temperatury jest co 10 - 20 sekund.
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)...
Zacznijmy od tego, po co chcesz zmniejszyć rozdzielczość pomiaru? Żeby skrócić czas konwersji? Jeśli tak, to ok, zmieniasz jak wspomniano wartość rejestru konfiguracyjnego - w tym celu musisz zapisać do scratch pad, potem robisz normalną konwersję. Tyle, że... twój kod nie czeka na koniec konwersji, tylko na sztywno przyjmuje, że trwa ona 750 ms, więc...
Po rozkazie konwersji temperatury musisz odczekać około 750ms.
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....
Dzięki za podpowiedź. Czyli jak zrozumiałem to: 1wwrite &HCC - pierwszy odczyt do rejestru 1wwrite &H44 - konwersja a Waitms to czas na konwersję.
Jeżeli nic nie wpisywałeś do DS18B20 to jest on ustawiony na 12 bitów rozdzielczości. Taka nastawa będzie po każdorazowym włączeniu zasilania. Przy pierwszym odczycie po włączeniu zasilania, o ile wcześniej nie wydałeś komendy konwersji z DSka odczytasz 85°C.
Zależałoby mi głównie na tym, aby szybko reagował na zmiany temperatury (rozdzielczość może być ok. 0,5 stopnia). Obecny, który miałem pod ręką DHT11 po gwałtownej zmianie temp. wkazuje różnicę dopiero po ok 1 minucie. Termistor - musi być to czujnik o możliwie małych gabarytach i masie. Oraz fakt, że odpowiedź masz w czasie rzeczywistym, a nie po...
1.Od ID czujnika ,w kolejnosci od malejącej do rosnącej 2. Funkcja Fusing podczas konwersji z odczytu do wyświetlania temperatuyr
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
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.
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...
Można zrobić to w ten sposób by mikrokontroler zbierał dane z czujników w sposób ciągły("w kółko") i wysyłał je na żądanie do PC-ta. Oczywiście przy takim podejściu trzeba się zgodzić by przedstawiona dana mogła być trochę nieaktualna bo maksymalnie z przed 4 sekund. Przy założeniu, że dynamika zmian warunków środowiskowych takich jak wilgotność, temperatura...
Błąd w logice. Twój kod czytam tak -> Dopóki zmienna nie ma 5 to cały czas resetujemy pomiar i startujemy nowy (już Select Case byłoby lepsze). Potem próbujemy to czytać jak zmienna ma powyżej 100. No daj spokój. Są tu tego tony jak to obsługiwać. Mój/nie mój sposób to dwa suby. Jeden Startuje konwersję a drugi Czyta. Sprawa polega na tym by odwrócić...
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...
(at)ElektrodaBot Hej, mam jeszcze problem z obsługą 1Wire, chodzi o termometry DS18B20, gdzie po zadaniu pomiaru trzeba czekać do 750 ms do konwersji i 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ę...
Proszę powiedz mi jeszcze jak z tego skorzystać i co z moją konwersją - już niewiele zostało - proszę o pomoc w dokończeniu tematu.
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...
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...
Polecenie konwersji można wysłać do wszystkich na raz.
Tak na szybko, to powinieneś dorzucić do przerwania jakąś zmienną którą możnaby inkrementować i obliczyć ile takich inkrementacji jest potrzebne dla konwersji danych dla ds18b20. Potrzebujesz 750ms o ile się nie mylę, więc lepiej to dorzucić do przerwania niż stosować WAIT 1. Zlicz ilość przerwań aby Ci wyszło >750ms i daj IF'a dla odczytu DS'a. Z Wait...
http://mikrokontrolery.blogspot.com/2011...
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.
Witam nie czekasz na obliczenie temperatury powinno być waitms 750 . Wstaw waitms 750 w miejsce gdzie masz 'przeczekaj czas konwersji
A jak zasilasz? Jeśli pasożytniczo to pamiętaj że na czas konwersji pierwszego nie możesz nic robić na magistrali.
żadnej zmiany, dalej ?°C a może błąd jest w tych makrodefinicjach do obsługi czujnika czyli w plikach ds18b20.h lub ds18b20.c Skoro temp ma wartość 12 wprowadzoną przed konwersją na ciąg znaków przez SPRINTF, to znaczy, że prawdopodobnie SPRINTF... działa nieprawidłowo i tym musimy się zająć.
Czym jest spowodowany fakt iż nie dostarczając napięcia do dsa " pracując w konfiguracji dwóch linii danych z podciągnięciem i masa " na pc czujnik działa ok a po podłączeniu do up nie można odczytać danych? Komunikacja jest poprawna ponieważ jest możliwe odczytanie id dsa. Ogólnie tym, że połączenie w trybie dwuprzewodowym (pasożytniczym) wymaga bardziej...
Ale po co tak kombinować z zew. MOSFETem? Ten MOSFET na schemacie Ds'a służy tylko jako poglądowe źródło silnego poziomu H (strong H), który wg dokumentacji musi się pojawić najpóźniej 10us po poleceniu konwersji i trwać na czas tej konwersji. Aby to zapewnić wystarczy na IO wystawić poziom H, większość mcu (o ile nie jest to IO z otwartym drenem) ma...
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...
Otrzymałem odpowiedź od prowadzącego. :spoko: Chodziło o dodatkowy tranzystor na linii 1-wire zwiększający prąd i poprawiający zbocza. Będę wdzięczny za komentarz od bardziej obytych w temacie użytkowników. Czy to ma sens? (*) Komunikacja w tym wątku przypomina konwersację dwóch ludzi na występie pantomimy. Jeden z nich jest głucho-niemy, a drugi niewidomy....
konwersja temperatury ds18b20 ds18b20 konwersja temperatury konwersja temperatura ds18b20
zakładanie nowych tematów schemat prasa hydrauliczna pralka blokada polar
roleta zewnetrzna silnik czajnik naprawa
Iveco Stralis EBS 2 – funkcja portu 4 w modulatorze osiowym, tryb awaryjny hamulców Thomson T55FSL5140 TV No Power, No LED – PSU Board 40-L141H4-PWC1CG Faults