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...
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ć...
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ć ;)
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
Mała sugestia odnośnie pomiaru i wahania odczytów. Nie tak dawno robiłem odczyt z czujnika temperatury (termistora 5%), irytowała mnie strasznie szalejąca wartość pomiaru. W pierwszej chwili zrobiłem na szybko uśrednianie na podstawie zwykłej średniej arytmetycznej postaci: wynik = (N_0+N_1+...N_n)/n, ale nie dało mi to zadowalającego efektu. Aby w...
Jeśli pojawia się 85 stopni to znaczy, że nie została uruchomiona i poprawnie zakończona konwersja temperatury. Wartość 85 stopni mają czujniki "w sobie" po włączeniu zasilania. Można ją odczytać.I ty to robisz. :D
Atytmetyka 8-io i 16-sto bitowa: http://www.atmel.com/dyn/resources/prod_... i kody źródłowego do tego http://www.atmel.com/dyn/resources/prod_... Dodano po 41 i jeszcze to: http://www.atmel.com/dyn/resources/prod_...
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...
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.
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...
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...
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();...
Problem pewnie leży w procedurze. therm_read_temperature(temp); Tam zapewne masz jakiegoś delay-a ustawionego (na czas potrzebny na konwersje temperatury przez DS-a). Musiał byś pokombinować, żeby przebudować tą funkcję a delay-a wbudować najlepiej w obsługę przerwań z timera z którego korzystasz. Np. Timer przerywa częściej, za każdym razem...
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...
Wydaje mi się, że nie można podawać napięcia większego niż Vdd. A do plusa podciągałem przez R680 a nie R130. Przepraszam za pomyłkę. Dodano po 1 Jeśli masz możliwość - zaobserwuj na oscyloskopie przebieg, czy ten DS wogóle Ci coś wysyła.
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...
Wystarczy trochę pomyśleć, for (fahr = 300; fahr >=0; fahr = fahr - 20)
A jaki typ ma zmienna cels ? Proponuję użyć klasę Scanner: Scanner cin = new Scanner(System.in); cels = cin.nextDouble(); Dalej już sobie poradzisz.
Zacznijmy od tego, że ten wyświetlacz w wywołaniu lcd.str_lcd() musi mieć podany tzw. string, czyli łańcuch znaków. Nie możesz tam wstawić wprost danych, musisz je przekonwertować do typu char. Służy do tego wiele standardowych i nie-standardowych funkcji języka C. Zapoznaj się np. z takimi: itoa / ltoa / ultoa / dtostrf / sprintf i pewnie jeszcze parę...
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...
Myślę, że nie jest skalibrowany. Odczyt temperatury został przesłany przez współautora. Musimy znaleźć sposób na uzyskanie prawdziwej wartości. Może sprawdź ponownie kod źródłowy i zmierz rzeczywistą temperaturę, a następnie użyj jej do dostosowania stałej konwersji.
Są tam trzy zmiany programu: 1. Możliwość kalibracji oscylatora poprzez zmianę zawartości rejestru OSCAL (około ±1%) - dana pod adresem 3FF (teraz minimalna częstotliwość). 2. Zmiana preskalera WDT - dana 3007 pod adresem 1AE. Daje to dwukrotne wydłużenie okresu zadziałania wybudzenia mikrokontrolera (teraz około 2,3 s). Oryginalna wartość pod...
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...
wynik temperatury mam w temp_calk; jest tam wartosci calkowita; chce to wyswietlic na lcd... //liczba calkowita char temp1; char temp2; char wynik; char bajt_j; char bajt_dz; temp1=temp_calk& 0x0F; temp2=(temp_calk>>4) & 0x0F; temp2=temp2*16; wynik=temp1 + temp2; bajt_j=wynik % 10; wynik=wynik/10; bajt_dz=wynik % 10; bajt_j= bajt_j +...
Nominalny czas konwersji temperatury przez DS18B20 to 750 ms, czyli wszystko się zgadza.
(at)ditomek Niestety operacje na float są bardzo kosztowne nie tylko czasowo, ale także zajmują sporo miejsca. Pełna obsługa float to może być i 5 kB, tyle, że kompilator do spółki z linkerem są dosyć inteligentne i nieużywane fragmenty kodu są usuwane. Sens konwersji temperatury na float jest żaden, bo raz, że czujnik zwraca temperaturę w postaci...
Zajrzyj też [url=http://www.elektroda.pl/rtvforum/to... Tu była podobna dyskusja na ten temat. Pozdrawiam
zbieranie informacji z czujników na mikrokontrolerze to rzecz do wyuczenia na szybkiego: komunikacja z najpopularniejszym czujnikiem jest po szynie 1-wire: http://www.1-wire.rms.biz.pl/ konwersja: http://mikrokontrolery.blogspot.com/2011...
(at)cinek_14 Jak rozumiem masz gotową płytkę, więc to implikuje jakie masz możliwości rozwiązania problemu. Koledzy upierają się, aby wszystko wrzucić do przerwań, co IMHO nie tylko nie rozwiązuje problemu, ale go całość niepotrzebnie komplikuje. Skoro już masz płytkę, to zrobienie 1-wire na UART raczej nie wchodzi w grę. Zresztą nie jest to potrzebne....
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?
Jest tak. Podobnie w zbyt wysokich temperaturach.
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.
informującego o zmianie temperatury co 1 stopień w górę lub dół To są założenia więc co każdy stopień ma być krótki sygnał. Warunek If T >= 200 then spowoduje że przekroczenie 20 stopni spowoduje sygnał. Muszę chwilę pomyśleć. Trzeba badać także różnicę pomiędzy odczytem poprzednim a następnym. Sprawdź to: (zmień procesor, konfigurację LCD, portów,...
No mam sterownik i w nim wejścia tylko 2 przewodowe Czyli podłączenie 3- lub 4-przewodowego czujnika nic ci nie da, bo i tak będzie pracował jako 2-przewodowy. Nie mogę zmienić modułu na wersje 3 przewodową bo sterownik z hasłem i go nie pamiętam Nic nie rozumiem z tego zdania. Sterownik = moduł? Co ci da hasło, skoro - jak sam napisałeś - sterownik...
Poniżej przykład. Zwróć uwagę, że w tym przykładzie komenda konwersji temperatury występuje na końcu, a nie na początku. Odczytana temperatura będzie zatem tą która została konwertowana po poprzednim odczycie. To oczywiście nie ma znaczenia dla tego jak adresować czujniki. Powodzenia ! PL Config 1wire = Portd.6 Dim Adresy(16) As Byte Dim T1 As Byte...
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.
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...
Po rozkazie konwersji temperatury musisz odczekać około 750ms.
A może za często dokonujesz pomiarów. Spróbuj gdy konwersja temperatury jest co 10 - 20 sekund.
Przy niższym napięciu może wymagać dłuższego czasu konwersji temperatury.
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....
Temperatura 85 stopni jest domyślna i zawsze taka się znajduje w rejestrach Ds'a po włączeniu zasilania. Jeśli nie chcesz, żeby Ci się wyświetlała, to wyświetlanie daj dopiero po konwersji temperatury.
A czas konwersji temperatury jest w ms-milisekundach czy w us-mikrosekundach ?
Czasy konwersji temperatury wg noty katalogowej dla konkretnych rozdzielczości: 9-bitowa 93.75ms, 10-bitowa 187.5ms, 11-bitowa 375ms i 12-bitowa 750ms.
Pokaż cały program. Masz podłączone w trybie parasite, musisz więc ustawiać stan wysoki na linii danych podczas konwersji temperatury.
Oj, przejrzałem pobieżnie kod - uwierz mi - skasuj go. W C jest coś takiego jak funkcje - wykorzystaj to, kod, który masz jest kompletnie nieczytelny. Każdy normalny promotor by to coś uwalił chociażby za to. Co do szybkości działania - pokaż kod funkcji odpowiedzialnych za komunikację z czujnikami. Z kodu, który masz: - funkcjie piszące do LCD są zapewne...
to jest ten problem: http://www.elektroda.pl/rtvforum/topic88... Wydaje mi się, że nie dajesz czasu na konwersję temperatury.
Izolacje termiczna realizuje sie przez ogranicznie kontaktu poprzez miedz z innymi elementami generujacymi cieplo - i to zaleca producent. Duza powierzchnia miedzi IMHO nie zwiekszy inercji ukladu, bo... ma duza powierzchnie. W efekcie kazda roznica pomiedzy ta plaszczyzna a temp. otoczenia bedzie blyskawicznie niwelowana. Poza tym faktycznie te czujniki...
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...
+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.
a wszystkie 9 bajtów odczytane z ds-a ma wartosc FF ? ewentualnie czas konwersji temperatury zwieksz do 2 sekund
a jesli powiem ze tak tez próbowałem tylko ze odczyt z kodów z rc5 trwa z przerwą 600ms która musi byc pomiedzy odczytem a konwersją temperatury z ds1820 :(
Czy np podczas procedury wykonywania konwersji temperatury termometru w uC nastapi przerwanie programu glownego i skok do innego popprogramu moga wystapic jakies bledy czy nawet uszkodzenie ?
Witaj Być może masz zbyt słabe zasilanie i jak wymusisz we wszystkich dallasach konwersję temperatury jednocześnie oraz włączysz podświetlenie to masz spadek napięcia na zasilaniu i dallasy przeprowadzają złą konwersję albo powstają błędy przy transmisji.
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.
Ok, program działa. Troszkę się dzisiaj poduczyłem i napisałem program na podstawie kodu ducha dla jednego czujnika ze sterowaniem grzałką. Nie mogę natomiast sobie poradzić z konwersją temperatury, po przecinku wyświetla mi jakieś cyfry. Jak by ktoś wiedział co mam poprawić by tą temperaturę wyświetlało normalnie (do jednego miejsca po przecinku) to...
Przydał by sie jakiś kod bo z czego mozna wrozyc? z fusow? Najprawdopodobniej masz błąd w kodzie. DS ma czas konwersji temperatury i w tym czasie musisz czekac. Czekam na wiecej danych. pozdrawiam.
Witaj, widzę że trochę teori o DS18x20 Ci się przyda. Magistrala one wire której używają czujniki DS18x20 dziła tak że może być do tej magistrali podłączone wiele urządzeń ale odczyt z tych urządzeń nie jest jednoczesny tylko sekwencyjny to znaczy jeden po drugim. Ale nasuwa się pytanie skoro jest tylko jedna linia danych to jak zrobić odczyt sekwencyjny,...
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),...
Nie znam Bascoma ale postaram się coś doradzić. 1) Jak rozumiem w przerwaniu odczytujesz po kolei temperaturę na każdym z 4 czurników. Czy wyłączasz wszystkie inne przerwania na czas tej operacji? 2) Jak często generowane jest przerwanie odczytu tych temperatur? Czy podczas odczytywania temperatury dajesz czas każdemu z czujników na konwersję temperatury...
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.
Racja. Ale też to sprawdziłem - nic nie wyszło. Wykastrowałem kod i zostawiłem jedynie obsługę czujnika pieca. Czas przeznaczony na konwersję temperatury wyciągnąłem do 5 sekund. I co? G&&no :( Czy błąd tkwić może w rezystorze podciągającym o wartości 2,2kΩ?
To po to masz to przerwanie a w nim zmienną aby własnie nie czekać na konwersje temperatury. Rób po swojemu bo nie kumasz tego co ja do ciebie mówie a najlepiej umiesc wszystko w przerwaniu to nie bedzie sz potrzebował programu głownego - czysty zysk.;-)
Możesz go podkręcić, aby obniżyć temperaturę. Mam moduł ESP32-S3 przeszczepiony na ESP32-CAM i przy 240mhz może osiągnąć nawet 85C. Z tego co rozumiem tasmota ma komendę CpuFrequency. Ustaw częstotliwość na 80 lub 160 mhz, jeśli martwisz się o temperaturę.
W kodzie widziałem _delay_us(2), _delay_us(15) przy obsłudze magistrali 1W bez wcześniejszego użycia cli(). Sprawdzałeś jak długo wykonują się twoje przerwania? Dotyczy to sytuacji: //wykonanie funkcji w tym miejscu powoduje błędne wyświetlenie lecz nie powoduje migania Miganie zaś (gdy wynik pomiaru ok) jest spowodowane tym, ze w przerwaniu masz _delay_us(15)...
nie trzeba czekać prawie sekundy jak w przypadku DB na konwersję. Wyobraź sobie, że jedno z moich urządzeń używa 5 czujników ds18b20. Co gorsze dla programu, każdy z nich niestety nie jest na typowej magistrali 1w (gdzie może być podłączonych wiele urządzeń i wszystkie mogą rozpocząć konwersję temperatury jednocześnie) a każdy z nich jest podpięty...
No to sprawa się poprawia jak wyrzuce _delay_ms(750). Tle tylko, że z dokumentacji ds18b20 wynika że te 750 ms jest potrzebne na konwersje temperatury. Po wyrzuceniu linijki z opoźnieniem, temperatura jest mierzona poprawnie. Powiedzcie mi za tem czy to opoźnienie jest potrzebne czy nie?
-> Jacur, bzura, u mnie B20 bez problemu (a nawet lepiej chodzą na trzech przewodach!. Jedyne co zauważyłem to nie wielka róznica w odczytanej temperaturze -> Tomcio112 proponuej Ci odpuscić sprawdzane zakończenia konwersji temperatury. Zrób sobie najprostrzy program z rozkazem konwersji naprzemian z odczytem temperatury co powiedzmy 2 sekundy- musi...
coś takiego wymyśliłem Nie napisałeś co zmieniłeś a nie mam ochoty w grę "Pokaż 10 różnic". Zmian w wyświetlaniu nie wprowadziłeś a te udziwnienia nie ułatwiają analizy programu. Jeśli obstajesz przy swoich dziwnych rozwiązaniach to czemu pisałeś Chcę by ktoś doświadczony pomógł mi zoptymalizować kod Dodano po 5 pomysł nie wypalił z ustawianiem flagi....
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.
Po co ci te 2-a do..loop? W sectic powinneś mieć: cls wyświetlenie godziny wyświetlenie daty pobranie danych z DS-ów i ich wyświetlenie na końcu zlecenie konwersji temperatury dla DS i zlikwiduj to end sub na końcu!
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.
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?
I jeszcze czas czekania na konwersję - min. 750 ms o ile pamiętam.
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
Zablokuj przerwania na czas odczytu temperatury, powinno pomoc. Druga opcja to wykorzystać przerwanie zegara i od razu po odczycie czasu wykonać odczyt temperatury i potem wysłać rozkaz konwersji temperatury do DS. Jak podczas nadawania po 1Wire program wykona jakieś przerwanie to będą problemy z DS (przynajmniej ja takie miałem)
Ja mam taką jedną uwagę; skoro czas konwersji temperatury to 750ms to dlaczego czekasz tylko 200 ms ? Być może dlatego masz takie przekłamania w odczycie ? Zamiast dwóch identycznych podprogramów można użyć tylko jednego z przekazywaniem parametru do podprogramu. W tym wypadku było by to: portc.1 lub portc.0
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...
Załącznik z wykresami przesyłam spakowany. Zauważyłem, że podczas konwersji temperatura rdzenia procesora wzrasta z 51°C do 66°C (na I rdzeniu) oraz z 46°C do 58°C (na II rdzeniu). Poza tym zauważyłem także, że zużycie rdzeni wzrasta z 2% do 88-94% (w przypadku I rdzenia) oraz z 1% do około 70% (w przypadku II rdzenia).
Przesłanie jednego bitu trwa średnio około 60 us, odczyt wymaga przesłania ID i danych, łącznie 12 bajtów - ok. 5,7 ms. W porównaniu do czasu konwersji (nawet 750 ms) to chwila.
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 ;)
Witam. Podejrzewam że ja coś robię źle, ponieważ także na 2giej płytce mam taki problem. zmieniłem czas na 750ms bo tyle jest wymagany na konwersję temperatury, ale to nic nie zmienia, ;/ zamieszczam 20 sekundowy filmik na którym widać 2 błędne odczyty. https://filmy.elektroda.pl/43_1457897863... http://filmy.elektroda.net/43_1457897863...
Tutaj masz gotowy przykład bez użycia float-ów (oszczędność pamięci): http://mikrokontrolery.blogspot.com/2011...
Wreszcie czujnik mierzy :D mój układ wygląda teraz tak: Vdd i masa DSa do masy, DQ na uP i przez 4.7kom do Vcc. Opóźnienie doczas konwersji temperatury ok 760ms, opóźnienie podczas RESETU (wymuszanie "0") ok 600us :D układ działa poprawnie :D dzięki za pomoc :D
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ż...
Popieram przedmówcę. Ale co do DSów, skoro i tak wywołujesz w jednym momencie konwersję temperatury, czyli potem DSy trzymają w rejestrach temperaturę z tego właśnie momentu - czemu nie możesz wtedy np. przez 15 sekund pobierać danych i potem masz je już u siebie, a możesz wykorzystać za 10 minut i za godzinę. Nie uważam, aby 15 sekund miało jakieś...
Nie da się. Transmisja po 1-wire zakłóci generowanie obrazu. 1-wire zakłóci nawet odbiór po RS (chyba, że używamy 50b/s). Oj nie jest aż tak źle. To wszystko zależy od tego w jaki sposób napiszemy program. Jeśli będziemy czekać bezczynnie na konwersje temperatury to może tak być jak napisałeś. Lecz nic nie stoi na przeszkodzie aby odczyt temperatury...
Mam pytanie związane z tym termometrem - czy procek wymusza stan wysoki na linii danych DQ magistrali 1WIRE na czas konwersji temperatury, w celu realizacji zasilania typu "parasite"? Jeśli nie - to czy pomiar jest możliwy ? Czy pomiar może być obarczony dużym błędem ze względu na zasilanie czujników jedynie przez rezystory 4k7 ? "Klony" skasowałem....
To ma być sterownik ogrzewania i docelowo ma obsługiwać większą liczbę czujników, z tego względu zależy mi na tym aby to przerwanie inicjowało konwersję temperatury. Nie chcę programu głównego zatrzymywać na czas oczekiwania na konwersje, a w pętli głównej chcę umieścić jeszcze kilka innych zadań jakie ma spełniać układ. Zdziwiło mnie tylko zachowanie...
//return ((scratchpad[1] << 4) | (scratchpad[0] >> 4));//obliczanie dla DS18B20 return ((scratchpad[0]>>1... // obliczanie dla DS1820 (nie B!!) Tu masz fragment mojego kodu - może masz coś nie tak z konwersją temperatury już w uP? Ja miałem podobne...
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. Po pierwsze podczas "gadania" z DSem wyłącz przerwania (na czas konwersji temperatury znów je włacz oczywiście), nie możesz bowiem transmisji 1wire zakłucać przerwaniami, w reszcie działania programu przerwania zostaw włączone, po drugie zatrzymania przerwań moą mieć wpływ na pracę zegara....będzie się późnić. A może by tak odczytywać DSa co...
Jeśli temperatura się zmienia to winą jest procedura konwersji, jeśli temperatura jest stała to bym się zgodził że winne są timingi. Ponieważ nie korzystasz z własnych procedur komunikacyjnych najlepszym rozwiązaniem będzie pomiar timingów oscyloskopem.
Witam, Aaaaaa ten chwyt już przerabiałem, ale chyba nie do końca w ten sposób jak kolega opisał. Mianowicie robiłem odczyt DS'a w przerwaniu, ale z oczekiwaniem 750ms na konwersję temperatury, w tym momencie wychodziła już totalna kaszana. Muszę zatem spróbować zrobić samą procedurę obsługi 1Wire w przerwaniu. Spróbuję w przerwaniu obsługi wyświetlaczy...
ale np jak odczytuje temp przez ds18b20 to i tak odczyt zajmuje 750ms, idzie to jakoś obejść?? bo niestety jak jest w trakcie odczytu to i tak przyciski nie działają Odczyt zajmuje kilka milisekund, a 750 ms zajmuje dallasowi konwersja temperatury. W tym czasie mikrokontroler może robić inne pożyteczne rzeczy. Rozwiązaniem jest całkowite zrezygnowanie...
Witam. Projektuję sobie przetwornik do konwersji temperatury na napięcie. Zrobiłem coś takiego lecz wydaje mi się, że to będzie coś nie tak. W literaturze zenerki są w ujemnym sprzężeniu zwrotnym, lecz wtedy + wzmacniacza jest zwarty do masy. Nadmienię, że wyjście będzie podłączone do multipleksera 4067. W jaki sposób ograniczyć Uwyj?? Jak Ci pomóc...
Teraz mam kolejny problem. Chce korzstac z trzech czujnikow. Mam juz ich numery seryjne. Najpierw wysylam komende do wszystkich konwersji temperatury czekam jakies 3 sek. Co teraz mam wyslac aby odczytac temperature z jednego?? Numer seryjny ukladu czy cos innego?? Dodano po 55 Dobra. Nie odp. Juz zrobilem.
No to tak: Jeżeli dobrze czytam program to masz 4 przyciski, timer ustawiony tak aby przerwanie od niego występowało co 50 Hz i nic poza tym. Używasz tylko przerwania od Timera - boisz się innych? Czy może to tylko nieznajomość AVR. Aż prosi się żeby przyciski działały pod INT0 / 1 - zewnętrzne przerwanie i po kłopocie. Następnie _delay_ms(750); zamienił...
Rozdzielczość konwersji temperatury zmienia się tylko raz, po zapisaniu do EEPROMU czujnik pamięta rozdzielczosć nawet po odłączeniu od zasilania. Zmiana rozdzielczosći przy każdym odpytywaniu czujnik ajest bezsensowna i zabiera tylko czas. Po pierwsze w Twoim programie na początku zaraz po uruchomieniu powinna znaleźć się procedura odpytująca każdy...
konwersja temperatura ds18b20 konwersja temperatura ujemny ds18b20 konwersja temperatura
matryca iphone bluetooth sparowanie cienkie paski blachy
satel powiadamianie radiowe komunikacja radiowa satel
Czy Softonic jest bezpieczny? Analiza ryzyka Iveco Daily 2007 – zamiana skrzyni AGile na manual, polecane firmy, koszty, kodowanie