Masz poniżej zawartość dwóch plików, które trzeba podmienić: [syntax=c] #include <util\atomic.h> #include <util\delay.h> #include <avr\io.h> #include "1wire_basic.h" uint8_t Error; uint8_t PinMask; void OW_SendBit(bool bit) { ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { DDRB |= PinMask; _delay_us(3); if(bit) DDRB &= ~PinMask; _delay_us(60);...
nie zagłebiajac sie w kod, wydaje mi sie ze to jest ten delay_ms. ma prawo wystepowac cos takiego ze siedzisz w delay'u to juz sie zmienil czas ale minie spory kawałek sekundy zanim odswiezysz wyswietlacz.. na test usun delay'a, jak pomoze to zrob to czekanie na timerze
Witam, Wstrzymaj się z bascomem na razie. Wynik jaki otrzymałeś tzn: 16, 197, 244, 1, 2, 8, 0, 128. nie dokońca jest zły. Koledzy słusznie Ci napisali że pierwszy bajt jak powinieneś otrzymać powinien być 0x28 ale w przypadku użycia 12 bitowego czujnika DS18B20 a Ty odebrałeś 0x10 w Hexie więc ja wyrokuję że Ty poprostu korzystasz z czujnika DS18S20...
Powrócę jeszcze do tematu. Timery programowe to objaśnił Mirekk36 w swojej książce oraz artykułach i wideo poradnikach, bardzo dobrze je się stosuje. Jest to proste, wystarczy ustawić jakiś timer w tryb CTC i wywoływać przerwanie co jakiś zamierzony czas (stosuje około 10ms). F_CPU/Prescaler/100 Zaokrągloną wartość wpisujemy do rejestru OCRx. W przerwaniu...
Witam Dokonałem tej zmiany i także wyrzuciłem zmienna S na Lcd i dalej program nie działa tak jak bym chciał. ................ Jest ok zmieniłem znak ''<" i działa . Do swojej podstawki programującej mam podłączone 2 przyciski do pin d.0 pierwszy do pind.1 drugi gdybym chciał zmieniać progi załączania pind.7 tymi przyciskami (czyli regulować temperaturę...
a po co ci takie duże zmienne uint16_t decicelsius; uint16_t subzero, cel, cel_frac_bits; tam zdaje sie powinny być unsigned char no i tu hd44780_putInt((decicelsius/100), 10,0); chyba powinno być (decicelsius/10) - jak sama nazwa wskazuje decicelsius zwraca wartość w dziesątych stopnia np. 26.5°C -> 265
Zbudowałem ostatnio kilka urządzeń z wykorzystaniem pinu WR wyświetlacza. Ta biblioteka nie jest szczęśliwa. Jest dużo nowsza i w dodatku z możliwością użycia dowolnych pinów biblioteka. Jest włączana automatycznie jeśli jako ostatni parametr/pin napiszesz WR = PIND.3 (przykład) Użyta zostanie biblioteka "lcd4busy_anypin" Przykład z moich kodów: Zapomniałem...
Podpięte w trybie normal czy parasite? Pokaż kod. Timingi ok?
Mozliwe. Dodales rezystor? Jeszcze masz taka zmienna err w bascomie, poczytaj troche o niej.
No nic dziwnego, w ustaw_czas robisz call do wys_czas który wbrew obiegowej opinii wyświetla temperaturę;] i... ustawia kursor kilka spacji za *C :) a potem sobie reta do ustaw_czas gdzie już jak widać LCD "Ustaw czas" :) Ot i tajemnica;] Pozdro ;] Dodano po 1 PS lowerline sux, ja bym używał locateów na twoim miejscu ;-) Poza tym funkcje są fajnejsze...
Nie kojarzę już przy jakiej okazji otrzymywałem ten błąd. Ale zaproponować Ci mogę skorzystanie z tych kodów:[url=http://www.stsystem.elektroda... czujnik, [url=http://www.stsystem.elektroda.eu/pr... czujników. Kody działają w 100%, pochodzą z wdrożonego rozwiązania. Przyjrzyj...
...czyli najpierw zamieniam 0x33(READ_ROM) na 0xFF(znajdź pierwszy) to zamiast numeru ID ds-a wyświetla mi FF FF FF FF ... Co robię źle ?... Ha, żeby to było takie proste. "SEARCH ROM" - to jest zaklęcie, które powinno Cię zainteresować. Poszukaj, bo to dość ... popularny temat.
https://obrazki.elektroda.pl/1760348500_... Witam. Mam już w posiadaniu kolejny czujnik temperatury DS18B20. Czujnik ten podłączyłem zgodnie ze schematem umieszczonym na zdjęciu. Do jednej dużej podpiąłem 5V, do drugiej Dane (pin cyfrowy np: 13) oraz GND, z Arduino. Dodatkowo umieściłem rezystor 4,7k ohm, w celu dokładnego odczytu...
Blad odczytu z DS18B20 objawia się odczytem temperatury -127 st., tyle, że może to również oznaczać błąd czujnika, brak łącznoeci itp., więc nie jest to jednoznaczne z brakiem zasilania. Pozdr
Jesteś jednym z pionierów bo sprzęt drogi i mało popularny, więc sam musisz sprawdzić co się dzieje. Pierwsze co bym sprawdził, czy piny IO działa OK - miganie LED, potem kup sobie jakiś analizator Saleae (klony na Allegro kilkadziesiąt PLN), w programie Saleae Logic masz dekoder 1-Wire, możesz podejrzeć co się dzieje na magistrali, czy to Arduino nie...
Zbyt duzo razy widzialem zapewnienia, ze "wina w 100% nie lezy po mojej stronie", aby w nie uwierzyc :) Byc moze tak jest, pokazanie nam swojego kodu nie zaszkodzi, a moze ktos cos zauwazy niewlasciwego. No i nie napisales, czy inne funkcje (zapis/odczyt wewnetrznego EEPROM) dzialaja poprawnie.
nie wiem czy coś ze mną nie tak czy z tym forum, ale piszę tą odpowiedź drugi raz, albo odpowiedziałem w innym temacie ... użyj tej funkcji, u mnie działa to jest dla DS18 S 20 (niepotrzebnie wkleiłem , ale niech już zostanie) float zamien_temp(unsigned char MSB,unsigned char LSB) { float ftmp; if(MSB==0x00)//dodatnia,lub 0 {...
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ą.
Masz tu dokument z Texasa na temat zalet i wad różnych sposobów łączenia takich czujników: http://www.ti.com/europe/downloads/2-%20...
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)
problem tkwi w tym, że program masz do obsługi układu DS1820, a podpięty masz DS18 B 20 (różnią się one rozdzielczością i sposobem zapisu temperatury w rejestrach). W internecie znajdziesz masę programów pod BASCOM i nie tylko obsługujących ten termometr.
usuń delay(1000); z sensors.requestTemperatures(); i wykonaj opóźnienie na timerach
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]
Nie to sprawdzałem. Wygląda to jakby procedury odczytu DS-a działały bo ta temperatura wyświetlana -0.1 o tym świadczy. DS jest zasilany z 3,3V i wyczytałem że przy takim zasilaniu rezystor podciągający linie DQ ma mieć około 2k i taki mam. Ale z rezystorem 4,7k też nie działało. Gdzie to wyczytałeś? Datasheet nic na ten temat nie mówi, poza "Can be...
Moje doświadczenia z wifi, tymi modułami i gotowymi bibliotekami nie są zbyt dobre. Natomiast popinguj sobie, zobacz też czy z poziomu access pointa widzisz utratę połączenia (włącz może jakiś dodatkowy poziom logowania). Jest sporo kart wifi zasilanych z USB, więc i to powinno dać radę. A jak chcesz żeby ktoś oglądał kod, to wrzuć go w "syntax" wraz...
To nie powinno być więc trudne. W pole can_frame.can_dlc wpisujesz rozmiar typu float, a następne wypełniasz tablicę can_frame.data , np. can_frame.can_id .
Masz rezystor podciągający? Niektórzy o nim zapominają.
Zajrzyj też [url=http://www.elektroda.pl/rtvforum/to... Tu była podobna dyskusja na ten temat. Pozdrawiam
Uściślijmy jeszcze czy w kodzie który działa też nie masz wartości $framesize, $swstack i $hwstack? Rzeczy należy eliminować sukcesywnie. Dopisałbym te brakujące rzeczy od razu zamiast je podejrzewać... !EDIT! Zapomniałem o tym a już się w tej sprawie kontaktowałem kiedyś z Supportem :D Słowo Hbyte jest słowem używanym przez wewnętrzne procedury Bascom....
Witam, W załączniku schemat sterownika. Tu kilka zdjęć z innego tematu. http://www.elektroda.pl/rtvforum/topic30... Jutro postaram się wrzucić jakieś dokładne zdjęcia, obecnie nie mam możliwości. Szafa Rittal posiada kilka rzędów aparatów 1 rząd - styczniki sieć-przetwornica, zabezpieczenia(eski), zasilacz 24V 2 rząd - sterownik - Główna płyta+moduł...
Tutaj masz gotowy przykład bez użycia float-ów (oszczędność pamięci): http://mikrokontrolery.blogspot.com/2011...
Ja miałem podobne problemy i okazało się, że to z powodu funkcji czasowej delay_us. Zastąpiłem ją inną i wszystko zaczęło chodzić OK. Zastosuj tą: void delayus(unsigned char t) //parametr t od 0 do 255. { do{asm("nop");}while(--t); } W miejscu gdzie masz zdefiniowaną częstotliwość oscylatora wpisz też: #define F_CPU 8000000ul
Opis magistrali 1Wire masz w helpie. Poniżej kod na obsługę dallasa DS18B20. Config 1wire = P1.0 'konfiguracja magistrali 1wire Config Lcd = 16 * 1a 'konfiguracja wyswietlacza Deflcdchar 1 , 4 , 10 , 4 , 32 , 32 , 32 , 32 , 32 'znak stopnia Dim T1 As Single Dim T2 As Single Dim B1 As Byte , B2 As Byte , R As Byte Dim Tmp As String * 6 Dim Znak As String...
http://www.teslabs.com/openplayer/docs/d... Nie ma możliwości, żeby to nie pomogło.
a 8MHz masz?:> Sprawdź PCB Rezystor 4.7kΩ masz na linii danych? Może podaj konkretnie co pokazuje sie na lcd. "Przyczepiliście się" :D do sprzętu , a żaden z Was nie zajrzał do kodu ;) A błąd ukrył się sprytnie , w deklaracji zmiennej T1 , która powinna być typu Integer , a jest ... :?: Piotrek
Przy odczycie DS18B20 jest zalecane wyłączenie wszystkich przerwań.Spełniasz ten warunek i to jest przyczyną "mrugnięcia" (Timer przestaje pracować). Pozdrawiam
A w jaki sposób wyszukujesz te czujniki? Należy to zrobić przez SEARCHROM, zapisać gdzieś wszystkie adresy, a przy odczycie temperatury wywoływać kolejno te adresy. Wyszukiwanie wszystkich układów: unsigned char ow_search_address() { uint8_t conf_mask[8]={0}; uint8_t i, j, retcode; unsigned char dev_num; for(j=0;j<3;j++)...
Mam taki kod: "Config Lcd = 16 * 2 Config 1wire = P3.4 Dim Bd(9) As Byte Deflcdchar 0 , 24 , 24 , 32 , 32 , 32 , 32 , 32 , 32 Cursor Off Dim T As Integer Dim Ulamek As Integer Cls Do Gosub Ds1820 Locate 1 , 1 Lcd T ; "," ; Ulamek ; Chr(0) Loop End Ds1820: 1wreset 1wwrite &HCC 1wwrite &H44 Waitms 250 Waitms 250 1wreset 1wwrite &HCC 1wwrite &HBE Bd(1)...
Częstotliwość sterującego sygnału PWM musi być znacznie niższa od częstotliwości sieci. Z punktu widzenia przejść przez zero częstotliwość sieci jest równa 100 Hz, więc częstotliwość sterującego PWM musi być wyraźnie niższa. Prędkość nie zależy od częstotliwości sterującego PWM, ale od jego współczynnika wypełnienia . Można zacząć od 1 Hz, chociaż przy...
Wstałem rano z wyspaną głową i patrzę na Twój kod przy kawie. Deklarujesz 80 bajtów na adresy czujników. Start każdego adresu określasz tak, że mnożysz razy dziesięć wartość zmiennej "Zmienna" Pierwszy Dallas zajmuje więc komórki 10,11,12,13,14,15,16 i 17 Siódmy Dallas zajmuje 70,71,72,73,74,75,76 i 77 ... i tutaj zadeklarowane 80 bajtów się kończy......
Przepraszam, że dopiero teraz ale jestem w delegacji. Minęły dwa dni a Twój termometr nie działa... Możesz słuchać każdego. Ja proponuję takie rozwiązanie które zajmuje dosłownie dwie minuty jeśli robiło się to wczesniej. Sprawa jest w pełni odwracalna. To nie ślub z kobietą :D Więc co szkodzi spróbować? Kiedyś może sam komuś pomożesz. Należy zacząć...
Ten kod napisałem na podstawie dokumentacji temometru i dokumentu opisującego interface 1 wire od atmela: A do dokumentacji AVR-ka zaglądałeś :?: Zastanów się, czy można uzyskać niski stan na magistrali 1wire, jeżeli pin do niej podłączony jest ustawiony jako wejście :?: [syntax=c]unsigned char _DS18B20_ReadByte() { _DATA_DDR &= ~(1 << _DATA_WIRE);//...
Witam, jakby ktoś posiadał pdf 11/2004 to bardzo bym prosił o podesłanie..tez walcze z ds-em.. allegroos(at)o2.pl
Ja również miałem problem z multiplesowaniem wyświetlaczy i jednoczesnym odczytem 1wire. Pomysł z wyłaczeniem przerwań od timera na czas transmisji 1wire okazał się prawidłowy. Ponieważ w trakcie pomiaru świeci się jeden wyświetlacz aby efekt był nie zauważalny możemy dokonywać pomiaru temeperatury rzadziej. Oto mój programik : $regfile = "m8def.dat"...
Kasować licznik- a nie przerwania- na początek. Kasować licznik i musisz zastosować dwie flagi, inaczej nie da rady. Jedna sprawdzająca czy już możesz odczytać dane, drugie sprawdzająca czy już możesz wysłać żądanie odczytu:)
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...
mialem podobny problem umnie wariowal przy odczytywaniu temp ponizej 15 stopni problem był w 1 wire za dlugo czekalem na odczytanie znaku nieszcesne 1 μs jak zmniejszylem czas to poszlo
1. linia danych jest podciągnięta do plusa?, sprubuj zasilić go "normalnie" 2. jak czesto robisz pomiar, manual podaje że nie powinno sie tego robic częściej niż co 750ms. 3. nie wiem jak zwiekszyć precyzje odczytu w bascomie
A co to za cudaczne obliczenia :wink: ... unsigned char wynik1=0; unsigned char wynik2=0; wynik1=read1w(); wynik2=read1w(); reset1w(); float temp=0; if((wynik2)!=0){ //temp ujemna wynik1=~wynik1; temp=wynik1+1; //dlaczego /2 i gdzie się podział wynik2 ? temp=-temp/2; //??? } else{ //temp dodatnia...
Cześć, Na tej stronie, którą podałeś pliki nie ściągają się tako *zip tylko txt , po otwarciu, których wyskakują krzaki. Próbowałem tego: http://www.codeforge.com/read/10437/ds18... Ale co chwila niezadeklarowane zmienne wywala, i rzeczywiście nie są one zdefiniowane w żadnym .h [C++ Error] DS18B20.h(22): E2141 Declaration...
Dokładność pomiędzy rzeczywistą temperaturą a wskazaniami tych czujników według noty wynosi 0.5st Może wykonaj jeszcze test umieszczając czujnik na przewodzie. Co tak dokładnie mierzy temperaturę w Twoim pokoju że ufasz bardziej temu urządzeniu? Wszystko zależy gdzie te urządzenie mierzy temperaturę. W sezonie grzewczym myślę że w różnych miejscach...
Po pobieżnym przyjrzeniu się programowi nasuwają mi się takie wnioski. 1. Zadeklarowałeś wejścia, ale zostawiłeś je jako "pływające". Powinieneś port-y przycisków podciągnąć do plusa, czyli ustwić stan wysoki =1 2. Nie widzę deklaracji dla magistrali 1wire dla DS-ów i całej procedury odczytu i zapisu danych do pamięci. Być może to celowe na tym etapie,...
Podciągnij linię zewnętrznym opornikiem 4k7 do +5V, Ustaw na tej linii stan niski i steruj kierunkiem. Szybko można przerobić jak poniżej: [syntax=c]#define CLR_DQ sbi(OW_DDR, OW_NUM);cbi(OW_PORT, OW_NUM); //0 na wyjscie #define SET_DQ cbi(OW_DDR, OW_NUM);cbi(OW_PORT, OW_NUM); //1 na wyjscie[/syntax]
teraz działa mi już publikacja : RSSI, IP, SSID Tylko coś w HA namieszali, że jak mam definicję jednostki unit_of_measurement: " " to pomimo, iż widzę w MQTTExplorer wartości to nie widzę w HA. Ja czekam na sieć alternatywną i wykonywanie kopi ustawień wraz z kalibracją. Potem może być odczyt DS18B20
Str. 100 i 101. Rejestr TCCR0, bity COM00 i COM01.
Witam !! Przeszukalem elektrode ale nie znalazlem bledu jaki popelniam...Mam cyfrowy termometr DS18B20, podpinam go tak jak na obrazku ponizej. Wbiajam program do procesora AT89S8252, kwarc 12 Mhz i nic, na LCD widnieje wartosc 0 :( Bede wdzieczny za wszelka pomoc !! http://www.elektroda.pl/rtvforum/files-r... Dim Bd(9) As...
jesli sie nie myle to żle obliczasz temperature dla DS18B20 dla DS1820 było by ok,a dla DS18B20 to chyba trzeba najpierw podzielic przez 10 a potem pomnożyć przez 16,może specjalisci sie wypowiedza na ten temat.Pozdrawiam
Cześć. Podczas pracy z tymi czujnikami, kiedy znajdują się w zakłóconym środowisku, co jakiś czas dojdzie jednak do jego zresetowania się i poda temperaturę +85C (domyślna zawartość rejestru po resecie zasilania). Wydaje się, że nie ma innego sposobu jak tylko sprawdzać czy odczyt wynosi +85 i po prostu go nie uwzględniać. Ale co wtedy kiedy akurat...
Jak zrealizować w esphome odczyt temperatury z ds18b20 tylko w czasie załączenia danego urządzenia. Również odczytane dane były wysyłane do HA tylko w czasie włączenia urządzenia i to w interwale czasowym np 5 sek.
Czyli DS pewnie jeszcze zyje :) A czy na tej twojej uniwersalnej płytce zrobiłeś podciągnięcie do zasilania 1-wire tj. czy dałeś opornik podciągający np 3,3k od 1-wire do 5 V ??? pozdr KN
Oto odpowiedź: http://mikrokontrolery.blogspot.com/2011...
Miałem problem z odczytem z 1 ds18b20 i problem tkwił w opóźnieniach (standardowa biblioteka nie jest najlepsza) http://www.elektroda.pl/rtvforum/topic98... nie jestem znawcą ale pomogło.
Może układ gasika zamontować na styczniku.
Nigdy w przerwaniu nie użyłem "wait" i nie użyje.
Kolego a wiesz, ze DS18B20 i DS1820 to nie te same układy. Inne są dokładności, konfiguracje itd.
wg helpa bascoma masz: Gosub podprogram 'wywołanie .... .... a oznaczenie podprogramu podprogram: .... .... Return sub wymaga wcześniejszej deklaracji i wywołania poprzez call poza tym możesz mieć kłopoty ze zmiennymi oznaczonymi samymi cyframi w załączniku masz termometr który zrobiłem dla koleżanki (robiony na szybko więc nie jest specjalnie zoptymalizowany)...
Więc pojawia się pytanie jak sprawdzać kolejne bity w kolejnych przebiegach "pętli" (w przypadku procedury zapisu) oraz jak ustawiać logiczne 1 w kolejnych bitach przy kolejnych przebiegach "pętli" (w przypadku procedury odczytu). Jeśli chodzi o zapis to zrób tak, że sprawdzasz, czy najmłodszy bit w rejestrze jest wyzerowany, jeśli tak to ustawiasz...
Na pierwszy rzut oka w Twoim kodzie, jak i u autora, nie ma żadnej manipulacji trybem wyjścia portu - pinu. Po wrzuceniu tego na STM32F722RE okazuje się, że nie ma to znaczenia. Przy ustawieniu trybu pinu na wyjście z open drain, odczytanie rejestru IDR daje poprawne działanie, bez zmiany trybu na wejście. Sprawdziłem to na porcie A i pinie PA0. Nie...
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);...
Instrukcja odczytuje 8 bajtów unikalnego numeru i zapisuje je w tablicy począwszy od wskazanego indeksu w stronę narastania indeksów. Czyli jeśli wskazuje się 1 to numer pierwszego czujnika jest w komórkach od 1 do 8. To znaczy, że powinieneś napisać: Z = 9 Adres(z) = 1wsearchnext()
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...
po pierwsze wez w palce czujnik i sprawdz czy temperatura sie podniesie po drugie wstaw do programu funkcje error bo jezeli wskazuje 15 to znaczy ze odczytales z czujnika temperature 15 stC
Załączam sprawdzoną, działającą bibliotekę do 1-Wire. Opóźnienia są policzone dla kwarcu 16MHz. Skoro Ty wykorzystujesz kwarc 1MHz to wystarczy, że podzielisz przez 16 argumenty funkcji opóźniających. Jakbyś miał z tym problem to napisz. Gratis dorzucam też sprawdzoną i działającą funkcję do odczytu i konwersji temperatury z czujnika DS18B20. // odczytanie...
Ta sama reakcja ... odczyt 0x0101 ... Z tego co zauważyłem w tym artykule a Atmel'a, to większość "ramek" ma ~70us ... więc czas raczej dobry ... W trakcie odczytu bitu musisz zmieścić sie przed upływem 15us od chwili zainicjowania odczytu, po 15us dane moga być nieaktualne (Parametr t RDV ), ale to i tak nie zmienia faktu że masz zły odczyt. Dodano...
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)...
Timera nie trzeba, w sumie program wygląda jakby był napisany bez przemyślenia, strzelam że się zawiesza przy oczekiwaniu na dane które nigdy nie przychodzą.
Jeżeli stosujesz funkcję typu delay1us(X) (rozumiem, że sam ją napisałeś) to pamiętaj, że wejście i wyjście oraz pętle odliczające też trzeba uwzględnić. Polecam zrobić na potrzeby ds'a funkcje o określonym czasie trwania (będzie ich raptem kilka), bo jak zmienisz taktowanie to może się okazać, że wyżej wymienione dodatkowe opóźnienia mogą mieć znaczenie...
Masz podciąganie linii danych?
Pokaż chociaż kawałek kodu to zobaczymy jak to zrobiłeś. Do przemyślenia podam kilka przybliżonych wartości. Odczyt 9 bajtów z DS18B20 (razem z CRC) trwa ~7ms Odczyt tylko dwóch bajtów ~3ms Multipleksowanie 4 LED7Segment to najcześciej 200Hz czyli co 5ms Obsługa wyświetlaczy w przerwaniu trwa ~ 5 us przy 8MHz Napisz przerwanie optymalniej a Dallas nawet...
Witam Mam problem ze skompilowaniem w Bascom 8051 procedur do DS18B20 B1 = B1 / 16 ,obliczenia wyłącznie... B2 = B2 * 16 , dla temperatur dodatnich. Być może dla Ciebie , przecinek i średnik to to samo - dla Bascome nie ;) Piotrek
Ok, temat rozwiązałem. W pętli której podmieniam wartości był warunek <7, w powinien być <8. Gdy adres był na nieoryginalnej pozycji ostatni bajt adresu się nie zgadzał.
Przeczytać opis protokołu 1-wire? Generalnie odczyt zawsze jest z termometru wybranego poleceniem np. MatchRom. Czyli wysyłasz polecenie MatchROM, następnie ROMCode termometru, któy cie interesuje i dokonujesz odczytu.
Masz tu procedurkę odczytu i wyliczenia temperatury. Prościej się nie da. Nie wiem w czym piszesz, ale sama procedura (bascom) jest czytelna.
Łączę to w ten sposób: https://obrazki.elektroda.pl/9438237900_... Czyli źle. Przeanalizuj to co napisałem o pullup i wyniki pomiaru multimetrem. Sprawdź jakie napięcie mikrokontroler traktuje jako poziom niski a jakie jako wysoki. Wskazówka: Zobacz w innych projektach jak włącza sie klawisze i jak je obsługuje. Prawie zawsze napięcia...
Wszystkie "delaje" nalezy uzależniać od częstotliwości kwarzu a z doświadczenia wiem że odczyt DS18b20 mozna uzyskać prawie na dowolnym F oscylatora.
Program z pewnością można dostosować do konkretnego egzemplarza ds1820, tylko ze to dużo więcej fatygi niż kupienie sprawnego.
Kwarcu brak, pracuje na wewnętrznym oscylatorze. 100 ms niestety nie pomogło. A te kable to mogą być takie długie? Wiem, że dla 1 Wire moze być nawet 100 m a dla HD44780?
Nie powinieneś odczytywać (getTemp) temperatury częściej niż wysyłasz żądanie (requestTemperatures) jej odczytu, bo wtedy odczytujesz ostatnio zapamiętaną wartość w DS18B20. Program też nie sprawdza, czy wystąpił błąd odczytu. Przeanalizuj sobie przykłady w: https://github.com/milesburton/Arduino-T... Ponadto...
Ma to duże znaczenie bo jeśli takie nodemcu z ds18b20 ma chodzić non stop to trzeba brać pod uwagę ilość cykli odczytu termometru ds18b20 która jest limitowana i po której termometr zwyczajnie przestaje działać. Dobrze, że moje DS18B20 o tym nie wiedzą, bo już dawno przestały by działać. :) Od 2018 roku co 10 sekund. Po prostu trafiłeś na złe sztuki,...
Waitms 750 musisz mieć przed odczytem.
Może ten się nada. http://www.polpunkt.pl/termometr-wifi-ds...
Witam próbuje obsługi 1-Wire na przykładzie termometra cyfrowego DS18B20, niestety odczytana temperatura nijak ma się do tego co powinno być, mianowisie dostaje same "1", Pliki biblioteki 1-Wire [syntax=c] #ifndef OWI_H_ #define OWI_H_ // Ustawienie pinu który bedzie pinem OWI #define DDR_OWI DDRD #define PORT_OWI PORTD #define PIN_OWI PIND #define...
Po prostu trzeba odjąć te 3 stopnie przed wyświetleniem temperatury. A jak często odczytujesz temperaturę? Zbyt częsty odczyt powoduje nagrzewanie się czujnika. Pozdrowienia -teedd
Witam. Zaczolem ostatnio zabawe z czujnikiem temperatury DS18B20 podlaczonym do Atmega8. Wszystko gra ale chcialbym sie dowiedziec w jaki sposob mozna zmienic ustawienie dokladkosci pomiaru bo odczyt temperatury przy ustawieniach fabryczne jest zdziebko przydlugi. Czy takie nowe ustawienie czujnika trzeba zapisywac za kazdym razem jak uruchomie uklad...
Witam. Mam problem z błędnym pomiarem temperatury. Termometr pokazuje temperaturę ok 56-58 stopni(?) w temperaturze pokojowej. Sprawdzałem na innym modelu i nadal mam to samo. Po dotknięciu temperatura wzrasta, więc prawdopodobnie nie jest to spowodowane jakimś nagrzewaniem się układu. Kod napisałem w oparciu o ten artykuł: http://www.jaglarz.com/ja/elektronika/ds...
Nie napisałeś, że chodzi o PIERWSZĄ konwersję ;). Robi się ją przy inicjalizacji urządzenia po czym włącza timer by dał flagę do kolejnych odczytów.
Witam. Skleiłem z przykładowych programów odczyt z 10-ciu czujników DS18B20. [syntax=c] /* Fill in information from Blynk Device Info here */ #define BLYNK_TEMPLATE_ID "TMPxxxxxx" #define BLYNK_TEMPLATE_NAME "Device" #define BLYNK_AUTH_TOKEN "YourAuthToken" // Include the libraries we need #include <ESP8266WiFi.h> #include <OneWire.h> #include...
main.c [syntax=c]#define F_CPU 16000000UL //definiujemy F_CPU na 16MHz #include <avr/io.h> #include <util/delay.h> #include <avr/io.h> #include <stdlib.h> #include "HD44780.h" #include "DS18B20.h" char str[17]=" Termometr "; int main (void) { double temp; /* W tablicy zapisywane będą dane odczytane z układu ds18b20 */ unsigned...
A co to ma być :!: :?: : for(uint8_t i=0;i<8;i--) i-- :?: Myślę, że problem tylko w tym i sprawa oczywista, bo pobierało tylko jeden bajt. Nie możesz poprzedzać komendy 0x33 przez 0xCC, bo w jednej ramce może być tylko jedna komenda ROM!
Hmm, ja swego czasu popełniłem matrycę LED przemiataną ręcznie z ATMega8 1000Hz przemiatania w przerwaniu i odczyt ds18b20 w oparciu o machanie pniem IO z blokowaniem przerwania - nic nie było widoczne dla oka :)
ds18b20 odczyt ds18b20 błąd odczyt ds18b20 odczyt przerwa
blokada drzwi pralka sprawdzić gorenje windows uruchamia chkdsk radia wojskowe
wiertarka bułgarska lokalizator przewodów
Wybór grzejnika olejowego na prąd: marki i funkcje Naprawa pokrętła Thermomixa: czyszczenie i konserwacja