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...
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
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ć ;)
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ć.
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...
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ć...
Chyba nawet lepiej całkiem przenieść kawałek opisany jako "konwersja temp dla wszystkich dsow" przed pierwszy odczyt. Bo Twoim sposobem konwersja będzie (niepotrzebnie) wykonywana dwukrotnie. Ale ja nie jestem "Bascomiczny", więc uprzedzam, że mogę się mylić ;)
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.
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...
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...
To jest konwersja na ASCII, np. do wyświetlenia na LCD lub terminalu. Pytania, które zadajesz, nie dotyczą mikrokontrolerów, a podstaw języka C. p jest zmienną wskaźnikową, czyli adresową. *p ++ = x - to zapis x pod adres zawarty w p i zwiększenie tego adresu, tak, aby p wskazywała następny bajt bufora. Jedynka w apostrofach - to znak ASCII - cyfra...
ee no musiało pomóc, sprawdzałem u siebie i kod się zmniejszał o kilka kB pokaż jakim poleceniem ze wszystkimi flagami jakie używasz kompilujesz kod dla tych zmiennych równych 134 i 1: LS Byte: 10000110 MS Byte: 00000001 w MS Byte pięć najważniejszych bitów wskazuje na znak - zera to dodatnia, a jedynki to ujemna trzy najmłodsze bity z MS Byte i cztery...
Zakładam, że temp -127C jest błędem A dokładniej < -50C lub > 50C Naukowa metoda :-) Tak naprawdę to nie wiesz co się dzieje ma magistrali! Czy brak odpowiedzi na reset, czy złe CRC jak w ogóle jest czytane a wątpię w to. Sprawdzaj CRC! Wcześniej jednak zrób sobie log co się dzieje na magistrali: - reset - presence - search rom (tu masz crc)...
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...
No i usypiam mikrokontroler - budzi go przerwanie. A w Bascomie nie da się zrobić sleep? W Bascomie jedno krótkie polecenie i uC śpi, detekcja błędów na magistrali 1Wire- to tylko badanie stanu dedykowanej zmiennej, obróbka danych z DS18B20 i konwersja do degC z jednoczesnym dynamicznym wyświetlaniem- bajka, do tego jednocześnie obsługa dynamicznego...
Prosiłabym o wyrozumiałość i pomoc w nakierowaniu mnie na rozwiązanie problemu. Spróbuję nakierować :) Jeśli zapis ID do eeprom ma być jednorazowy, w kodzie programu deklarujesz (wcześniej innym programikiem i LCD odczytane) ID $eeprom Termometr2: 'nr seryjny termometru 1 Data 40 , 25 , 0 , 133 , 2 , 0 , 0 , 196 Termometr1: 'nr seryjny termometru...
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]
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ą...
Zajrzyj w jeden z co najmniej stu wątków na ten temat na tym forum. Wszystko zostało opisane dziesiątki razy.
Ale kombinujesz... przeglądnij to to może sam dojdziesz dlaczego CI nie działa (parę zbędnych rzeczy jak dla Ciebie ale może się połapiesz.) [syntax=csharp]using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;...
Gotowego programu nie mam, poniżej masz funkcję obsługi 1wire bez których się nie obejdziesz, musisz zrobić sobie tylko odpowiednie funkcje opóźnień, w listingu funkcje nazywają się np. waitus(x) -tzn czekaj x mikrosekund lub waitms -milisekundy, wait10us(x) -10*X mikrosekund itd. dodatkowo musisz przejrzeć aplikację i dopasować komendy, #define MATCH_ROM...
Zabralem sie za termometr ds18b20. Wczesniej korzystalem z niego, wartosc temperatury wyswietlalem na LCD'ku i wszystko dzialalo. Teraz powrocilem do ukladu z ta roznica ze wart. temperatury wyrzucam szeregowo na kompa. Problem polega na tym ze w hyper terminalu wyswietla mi caly czas jedna wartosc (88). Kiedy wyciagam, w czasie pracy, procka uklad,...
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...
Witam wszystkich przeczytałem wszystkie tematy związane z tym czujnikiem a i tak do końca nie wiem jak sie go odczytuje chcial bym by ktos na podstawie tego krotkiego programiku mogl mi wyjasnic co i jak Do Wait 1 //czekanie 1s 1wreset //inicjalizacja transmisji 1wwrite &HCC // wiem ze tak musi byc ale nie wiem do końca co to oznacza 1wwrite &HBE //jak...
https://obrazki.elektroda.pl/1078660400_... Dekodowanie Tuya JSON pozwala na automatyczną konfigurację szablonu GPIO urządzenia. W przeciwieństwie do Tasmoty, gdzie wszystkie role GPIO muszą być określone ręcznie, flasher BK7231GUIFlashTool jest w stanie wypakować konfigurację Tuya, dzięki czemu może automatycznie określić, który pin...
Witam właśnie uruchamiam urządzenie z powyższym układem. U mnie w domu temperatura powietrza jest ustawiona około 20*C, na biurku pod lampą i blisko komputera może być oczywiście cieplej. Mam kilka sztuk tego układu, dwa z "nowej" serii i jeden "antyk". Żaden z nich nie był nigdy lutowany. Wszystkie 3 sztuki pokazują temperaturę od około 27*C do prawie...
Przeczytałem chyba wszystkie posty dotyczące problemów z DS18B20 i nie znalazłem rozwiązania dla swojego problemu. W większości rozwiązaniem jest zastosowanie podłączenia trzyprzewodowego i obniżenie wartości rezystora podciągającego magistralę 1Wire, niestety w moim przypadku zastosowałem trzy przewodowe podłączenie a rezystor podciągający to 3k3 a...
Nie działa mi odczyt danych z DS18B20 Program który napsałem: // NIE DZIAŁA - odczytuje FF byte present = 0; byte data[9]; byte addr[8]; #include <OneWire.h> OneWire ds(A0); // DS18B20 pin void setup(void) { Serial.begin(9600); } void loop(void) { ds.reset(); ds.write(0x44);...
Witam Z racji wolnego dnia postanowiłem jeszcze dokładniej poznać budowę DS18B20 (czasem trzeba sobie co nieco przypomnieć). Odpalam program który zawsze działał i tu niespodzianka... DS działa prawnie do 32 stopni a jeśli temperatura przekroczy ten próg bez względu na to co jest wyświetla 85 stopni aż temperatura nie zjedzie poniżej tego progu. Problem...
Wita! Mam problem z termometrem dziwnie wskazuje w pokoju mam 29 stop. ?? i mu nie wierze bo jest max 24 patrzylem na zwyklym termometrze, czytam czytam i kazdy cos wspomina o rozdzielczosci dla serii b moj programik ... config 1wire=portb.0 declare sub odczyt_temp dim temperatura(2) as byte do call odczyt_temp cls lcd "temp:"...
Witam Kupiłem sobie DS18B20 wodoodporny z metrowym przewodem. Podłączyłem go do '51, Vcc, Masa i dane przez rezystor 4,7koma do plusa. Termometr zaczyna działać dopiero jak się go podgrzeje powyżej 30 stopni Celcjusza. Po ostygnięciu poniżej tej temperatury znów nie działa. Testowałem z drugim identycznym termometrem, ale ten drugi zaczyna działać powyżej...
na pcozatku mam pytanie czy czujnik DS18B20 ma jakies rejestry ktore nie są zerowane po wylaczeniu zasilania. Pytam bo kupilem 2 czujniki na allegro(cena 3,50) i wogole nie wiadomo co z nich odczytuje.... kazdy inaczej pokazuje. Poszedlem do kolegi, pozyczyl mi na chwile swoj czujnik i pokazuje dobrze temeperature na moim sofcie i sprzecie. Wiec kupilem...
Taka sprawa: Zasilalem termometr "pasożytniczo", ale dosyc nieuważnie przejrzałem Data Sheet od niego i nie zauwazylem, ze nalezy zapodawac high pullup na szyne przez mosfet, podczas konwersji temperatury i operacji na eepromie :( O dziwo na poczatku ds konwertowal prawidlowo i poprawnie mierzyl temp. ujemne i dodatnie, jednak z czasem zaczely pojawiac...
...
Cześć. Wielokrotnie już elektroda ratowała mnie pomocną ręką, mam nadzieje, że i tak dziś będzie. Staram sie napisać własną obsługę dla ds18b20 dla atmega8. Sporządziłem wstępny kod "biblioteki" (gdy zacznie działać zrefaktoryzuje kod celem jej uogólnienia). Jak narazie jedyna funkcja która mi działa to reset i presence pulse. Dalej w zasadzie odczytuje...
witam, robię termometr z dwoma ds18b20 i mam problem, ponieważ nie mogę wykalibrować tych pomiarów aby uzyskać dokładność do 0,1. Oraz wyświetlić wartość np. 21,5 st C. Termometr pokazuje mi 215, szukałem na forum, ale nic konkretnego nie znalazłem. Przedstawiam mój kod: 'Declare Sub Init Declare Sub Convallt ' Convert T on ALL sensors Declare Sub Odczyt_z_ds18b21...
http://obrazki.elektroda.pl/7995180000_1... Witam! Jakiś czas temu rozpocząłem naukę pisania programów na mikrokontrolery AVR w języku C++. Przeczytałem wiele tutoriali, poradników, itp., aż w końcu doszedłem do pisania własnych, prostych programów. Po kilku takich „pseudoprogramach” zdecydowałem, że teraz czas napisać coś...
(...) 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...
http://obrazki.elektroda.pl/8751319800_1... Witam, chciałem zaprezentować termometr pokojowy, który został zbudowany dla rodziców dziewczyny do monitorowania temperatury pieca. Termometr został zbudowany z wykorzystaniem mikrokontrolera Atemga8 w obudowie TQFP32, a za czujnik temperatury służy DS18B20. Płytki pochodzą z innych projektów....
http://obrazki.elektroda.pl/5636705900_1... https://filmy.elektroda.pl/37_1378532310... Termometr mikromocowy LCD ATMEGA16 Tym razem głównym celem projektu było sprawdzenie możliwości wykonania mikromocowego systemu pomiaru temperatury w oparciu o możliwie standardowe elementy, mówiąc w skrócie byłem ciekawy czy zwykły avr może być...
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.
Mam pytanie dotyczące podciągania zasilania. Jak udało się ustalić, że 4,7k to z dużo i 2k to ok, a nie np 2,2 k? Prawdę mówiąc takie hm. problemy mnie zniechęcają do konstruowania. Nie ma problemów. Problemy wynikają z braku chęci czytania not aplikacyjnych, w któych to wszystko jest wyjaśnione. Przede wszystkim - jeśli nie korzystasz z zasilania...
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);...
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?!?
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...
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.
[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.
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...
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...
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.
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...
...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...
https://obrazki.elektroda.pl/9798266800_... Zwykle przy przeglądaniu nagromadzonych skarbów w postaci części el. przychodzą mi do głowy pomysły ich wykorzystania. Tak było i tym razem. Z jakiegoś starego projektu została mi para nadajnik/odbiornik 434MHz OOK, attiny13 i kilka DS18B20, pomyślałem że na tej bazie zmajstruję prosty bezprzewodowy...
Dzięki za podpowiedź. Czyli jak zrozumiałem to: 1wwrite &HCC - pierwszy odczyt do rejestru 1wwrite &H44 - konwersja a Waitms to czas na konwersję.
A może za często dokonujesz pomiarów. Spróbuj gdy konwersja temperatury jest co 10 - 20 sekund.
https://obrazki.elektroda.pl/6483751800_... Witam, PROJEKT ostatecznie ukończony :D wersja ostateczna programów dla płytek MASTER Arduino Mega2560 i SLAVE ESP8266-12E Testowałem urządzenie przez kilka dni, w międzyczasie dokonałem kilku przeróbek, jak w kodzie tak i w połączeniach PIN itp. Usunięte zostały wykryte błędy, najważniejsze to...
Czyli zrobić tak jak kolega tmf proponuje tak? W tej chwili dokładnie tak robię, że uruchamiam procedurę pomiaru temperatury dla 3/4 czujników po kolei z osobna dla każdego: [syntax=c] // pomiary temperatury void pomiaryTEMP(void) { /* tempWejscia; // Temp1 - tempStabilizacji; // Temp2 - tempSzczytu; // Temp3 - gora tempPlaszcza; // Temp4 - kociołek...
Dobry wieczór. Przepraszam za tak dużą zwłokę, ale ostatnio miałem zakuwanie na egzaminy szkoleniowe do pracy i nie miałem kompletnie czasu by myśleć o tym:( Musiałbyś pokazać przykład swojego programu. Najpewinej efekty o któych piszesz wynikają z tego, że nie korzystasz z peryferii mikrokontrolera - m.in. timerów, przerwać itd. A na siłę starasz się...
konwersja ds18b20 ds18b20 konwersja temperatury konwersja temperatura ds18b20
bizhub c224e dysza venturi spyware doctor
przenośna stacja zasilania bosch srs55t22eu
Saab 9-5 2011 – aktualizacja nawigacji Navi 900/600, mapy Opel 2021, firmware E800 Schemat połączeń pompy paliwa Audi A3 8L 1.6 benzyna 1997 – przekaźnik J17, bezpiecznik S28, kolory przewodów