Zapis lub czytanie bitu "1", ma się odbyć w czasie do 15us. _delay_ ms (1); //conajmniej 1 us na sygnal do do termometru, że ma nadawać w tej lini prawidłowy jest tylko komentarz :)
W uC należy odpowiednio ustawić FUSE BITY!!! Poczytaj przyklejony temat.
Witam, walczyłem z tym samym problemem - najnowszy update Raspbianna z 7.02.2015 psuje komunikacje po 1-wire. Rozwiązaniem problemu jest dodanie odpowiedniego wpisu w config.txt. Read /boot/overlays/README. You will probably need to add: dtoverlay=w1-gpio to your config.txt, but you have to choose between that overlay and w1-gpio-pullup, and both have...
Witam Obsługuję czujnik DS18B20 w Bascomie. Czy czas pomiędzy kolejnymi poleceniami, tj. 1wreset , potem 1wwrite &H55 , potem 1wwrite &HCC ... itd. może być dowolnie długi, przykładowo -np 6 minut; 5 godzin; 10godzin czy też 10dni .... ? Oczywiście wysyła 1 polecenie, czeka, wysyła drugie itd. do końca... Czy są ograniczenia? NIE! Te czasy (timingi)...
A jak masz połączone te rezystory? Szeregowo czy równolegle? Czemu posługujesz się czyimiś bibliotekami, nie napiszesz ich sam? A to już nie można cudzych bibliotek wykorzystać? Nie wiem czy tutaj byłeś: [url=http://www.hobby.abxyz.bplaced.net/... Na dole artykułu jest gotowa biblioteka do ds18b20 działająca na 100%. W msb i lsb...
W ogóle skoro nie potrafisz odczytać tego co napisałem wyżej to znaczy że do końca nie rozumiesz co to tablica. Wyjaśnię najbardziej łopatologicznie. Wyobraź sobie, że tablica to pociąg z wagonami od 1 do 8. Każdy wagonik może przewozić daną liczbę. A cały pociąg ma swoją nazwę np. pociąg "Kopernik" Więc. Ds1(1)=9 Oznacza, że mamy tablicę o nazwie "Ds1",...
... kurczę wykorzystałem idealnie zerżnięte procedury z noty MAXima http://www.maxim-ic.com/appnotes.cfm/an_... Spróbuj tych procedur - również od MAXIM-a :D
Kiedyś przerobiłem na szybko jedną z dostępnych bibliotek na obsługę kilku ds18b20 na różnych liniach: [syntax=c] //#ifndef 1wire //#define 1wire #include "hardware.h" ////////////////////////////////////////... // ROM commands #define DS18B20_ROM_SEARCH 0xF0 #define DS18B20_ROM_READ 0x33 #define DS18B20_ROM_MATCH...
1. Z tego co widzę w datasheet od DS18B20 to linia 1wire powinna miec rezystor 4k7, więc włączanie dodatkowo rezystora wewnętrznego pewnie niewiele da. 2. Jeżeli odpowiedni bit w rejestrze PORTx (u Ciebie PORTD) będzie już miał wartość 0 to tak.
A skąd wziąć te na pewno nie chińskie. https://pl.farnell.com/search?st=ds18b20 Co do zabezpieczenia linii 1Wire to poczytałem o diodzie Zenera, czy ona nie załatwi problemu. Co do zabezpieczenia linii 1Wire to poczytałem o diodzie Zenera, czy ona nie załatwi problemu. Nie. Albo za mały prąd a jak wystarczający to za duża pojemność.
Porty L i G należą do rozszerzonych. Przeczytaj rozdział w Helpie Bascoma - Config 1Wire. Skonfiguruj dowolny pin jako 1Wire i dopisz po przecinku - Extended. Powinno się coś zmienić ;)
Po latach trochę dziwnie się czyta te opisy. Teraz już chyba lepiej władam angielskim ahahahahaha :D [syntax=vbscript]$regfile = "ATtiny13.dat" $crystal = 1200000 $hwstack = 4 $swstack = 2 $framesize = 24 '***************************************... '* WIRELESS THERMOMETER * '* WITH CIRCULAR BUFFER * '* TRANSMITTER PART Tiny13 * '* bartek.niveasoft(at)gmail.com...
W chwili gdy obsługuje 1-Wire, Bascom ZAWSZE nawet na czas generowania resetu, co trawa ok 500us, później presence, co daje razem ok 800us, zawiesza przerwania. To samo w czasie transmisji danych, transmisja bajtu to ponad 500us zawieszone przerwania. W tym czasie nie wykona się przerwanie od timera, od i cała tajemnica. Ale zabobony. Każdy może otworzyć...
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...
4 x DS18B20 :D ale też nie w jednej chwili, tylko po kolei. DS2408 - 8 I/O
Kolega jakie I2C? DS18B20 używa protokoły 1Wire. To zupełnie co innego. Jeśli jednak naprawdę myślisz o I2C i wyprowadzaniu go na zewnętrzne urządzenia to jest to średni pomysł. Ten interfejs jest zaprojektowany raczej jako interfejs do komunikacji w obrębie jednej płytki drukowanej, względnie do komunikacji między mało odległymi modułami. Nie mówię...
Obsługa 1Wire w BASCOMie nie jest obsługiwana w przerwaniach. Możesz spróbować czegoś takiego: cli 1wreset 1wwrite &H55 sei cli 1wwrite B2 sei cli 1wwrite &H44 sei Chodzi oczywiście o porozdzielanie wszystkich instrukcji 1Wire sekwencjami sei,cli.
A kto Ci powiedział że 1wire jest na małe odległości? Miałem czujnik na DS18B20 na 15 metrowym kablu i działał bez zarzutu. Kabel ekranowany oczywiście. To właśnie analogowy czujnik będzie bardziej podatny na zakłócenia.
Stara mega32 da radę, ale dla pewności taktowałbym ją zewnętrznym generatorem kwarcowym (taniocha) a nie kwarcem. Bascom to przeliczy. Widziałem 1wire jak działa z Bascom w Xmedze na 48MHz. Wystarczy dobrze zadeklarować prędkośc taktowania, co obstawiam jeśli reszta protokołów działa. Dalej obstawiam błąd w oprogramowaniu przez programistę :)
Tak. ESP8266 ma jedno wejście analogowe. By mieć więcej potrzeba np. ADS-1115. Za to DS18B20 to są czujniki cyfrowe i może być ich nawet kilkadziesiąt na jednej magistrali 1wire EspHome jest dodatkiem w którym buduje się soft do esp8266 z potrzebnymi nam modułami. Ja preferuję Tasmota, który w zasadzie wgrywasz do esp8266 i konfigurujesz późnej przez...
1. Rysuj schematy w czymś normalnym, nie ręcznie... 2. Na magistrali 1wire powinien być raczej rezystor podciągający do 5V, a nie kondensator, który skutecznie uniemożliwi komunikację :D
Czyli funkcje 'v1Wire_SendByte' i 'uv1Wire_ReadByte' służą tylko do tego, żeby wysłać odpowiedni rozkaz do termometru? Te funkcje, jak sama nazwa wskazuje, wysyłają i odczytują bajt danych z magistrali 1wire. W przypadku ds18b20 ten bajt danych to może tym rozkaz dla termometru (np. wspomniany już start pomiaru) lub dane (np. zmierzona wartość temperatury)....
Łap. Cały tydzień programuję poważniejsze sprawy i taki programik to dla mnie dosłownie rozrywka :D Bierzesz Tiny85 i programujesz Hexem lub Binem do wyboru. Podłączasz do niego DS18B20 i linijkę na MAX7219 i gotowe... żonka zadowolona. Program ma nawet wyjście diagnostyczne i wypluwa temperaturę na UART 9600bps (to żeby sprawdzić poprawnośc Dallasa)....
Do każdego czujnika masa+sygnał jako jedna skrętka, a +5V jako jeden albo dwa druty z drugiej skrętki. Tylko że przed czujnikami w celu wyeliminowania zakłóceń z szyny 5V (nieskręconej z masą i sygnałem) dałbym dławik ze 100uH a następnie kondensatory 1uF+100nF do masy. Poza tym dał bym rezysotry podciągające szynę 1Wire o wartości 1k.
Czy jest możliwy błąd podłączenia? Tutaj oczywiście zmieniłem na PB.1 Tak, wszystko jest możliwe... Spróbuj ten code: [syntax=basic4gl] 'DS18B20 - ROM reading test from single sensor DS18B20 $regfile = "m8adef.dat" $crystal = 4000000 $hwstack = 80 $swstack = 80 $framesize = 40 Config 1wire = Portb.1 'Config 1wire = Portd.5 Dim N As Byte Dim Dsid1(8)...
Witam ! Schemat musisz dopasować do tych dwóch linii programu: Config Lcdpin = Pin , Db4 = Pb.4 , Db5 = Pb.5 , Db6 = Pb.6 , Db7 = Pb.7 , E = Pb.3 , Rs = Pb.2 Config 1wire = Portb.0 Trudno w minutę narysować schemat, spróbuj sam "rozgryźć" problem, to nie takie trudne. Pozdrawiam. Stefan
Kwarc może nieznacznie odbiegać od tego podanego. Ba, może nawet się różnić o kilka MHz i komunikacja po 1wire będzie działać. Natomiast problem leży w złym czujniku 1wire. Te układy różnią się od siebie. Jak masz źródło programu to można to łatwo zmienić - albo wymień czujniki. Pozdrawiam.
OK. Uznajemy hardware za działający prawidłowo. Na 500us zwieram DQ do masy, później czekam 40us i sprawdzam czy jest stan niski. Czekam kolejne 300us i sprawdzam czy jest stan wysoki. Jeśli tak - uznaje że czujnik jest i odpowiada. Ten kawałek działa (udaje się wykryć czujnik). Tu nie widzę błędu w rozumowaniu. Może tylko wydłużył bym czas oczekiwania...
...liczyłem że podczas tych 100ms na końcu ds coś odpowie Kolego :!: Magistrala 1wire była już "wałkowana" tyle razy, że muszę odesłać Cię do podstaw. Zapoznaj się z czymś, co nazywa się TIME SLOT. Podpowiem tylko, że układy slave nie pytane ... "nie mówią". zumek
WItajcie Czy jest szansa, by w 2 kB 90s2313 zmieścić obsługę DS18B20 wraz z obliczeniami by uzyskać na LCD temperaturę z wartościami po przecinku. $regfile = "2313def.dat" $crystal = 16000000 Config 1wire = Portb.0 Dim T As Integer , Stt As String * 6 Cls Do 1wreset 1wwrite &HCC 1wwrite &H44 Waitms 800 1wreset 1wwrite &HCC 1wwrite...
Okazało się że czas trwania ściągania magistrali do zera przez układ slave (mój czujnik) jest równy około 25 us a ja ciągle zakładałem że stan będę sobie próbkował po czasie 30us. Dlaczego tak założyłem? Ponieważ gdzieś w dokumentacji pojawiła mi się informacja o tym że slave powinien "trzymać zero" na 60us więc chciałem próbkować "w połowie" - no...
Napisane na szybko nie sprawdzałem ale chyba powinno działać. [syntax=basic4gl] $regfile = "m8def.DAT" 'deklaracja procesora, w tym wypadku Atmega8 $crystal = 1000000 'deklaracja cześtotlwiości pracy (wew oscylator 1MHz w zupełności wystarcza) '*************************************WA... 'Pamiętać o podłączeniu...
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)
ło matko ;) po opisie kolegi atom1477 i po tej informacji, że "Bascom coś kombinuje" można by uznać, że napisanie sotu do obsługi 1wire to rzecz prawie niemożliwa dla zwykłego śmiertelnika. Tymczasem to co robi Bascom to absoultnie nie żadna kombinacja tylko normalne zachowanie - ponieważ to podtrzymanie stanu wysokiego na pinie portu jest niejako przygotowaniem...
Witam, mam pytanie. Może dla niektórych wydać się śmieszne i zbyt proste, jednak szukam i nie moge znaleźć na nie odpowiedzi. Załóżmy że mam 10 termometrów ds18b20 na jednej szynie. komenda schear rom określi mi ilości i rodzaje układów slave. Czy mogę w jakiś sposób podglądnąc ile ich jest oraz ten adres jaki jest zapisany w każdym z nich?? Drugie...
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,...
Problem polega na tym, że odczytujesz wartość ADC z uC zamiast z DS18xxx. Brakuje ci obsługi DS18B20. Poniżej fragment kodu działającego u mnie. [syntax=vbnet] Config 1wire = Portb.0 '0,1,2 NOP 3,4,5,6,7 works good ON MY Equipment Do 1wreset 'reset 1wwrite &HCC 'jedna kostka, więc wykorzystujemy rozkaz SKIP ROM 1wwrite &H44 'dokonaj konwersji Waitms...
Witam Udało mi się końcu dzisiaj rozwiązać problem. W jednym miejscu (_1WReadSlot(), tuż za odczytaniem bitu) ustawiłem za małe opóźnienie (25us, a powinno być 60us). Jeszcze spróbuje "pogadać" z DS18B20, i postaram się wrzucić tutaj gotowe funkcje do obsługi 1Wire. Dodano po 4 Zgodnie z obietnicą podaje gotowy projekt w WinAVR, pod ATmega8 (at) 4MHz....
Witam, zastanawiam się nad następującym zagadnieniem - czujnikiem temperatury DS18B20 w obudowie TO92. Co może u niego odpowiadać za generację sygnału na magistrali 1-wire? Czy w tej maleńkiej obudowie istnieje jakiś mikrokontroler? Jeśli to nie mikrokontroler - prosiłbym o wskazanie jaka część elektroniczna się zajmuje przetworzeniem odczytu z czujnika...
Mam problrm z zapisem i odczytem danych do DS18B20. Program wykrywa czujnik jednak po podaniu komend do pomiaru temperatury a następnie odczytaniu danych z DS w zmiennych temp1 i temp2 są same jedynki. W tej postaci na wyświetlaczu mam "Ok11111111" Kod programu: [syntax=c]#define F_CPU 1000000 /* 1MHz zegar procesora */ #define CYCLES_PER_US ((F_CPU+500000)/1000000)...
sprobuj wkleic ten program do swojego procka jezeli masz wszystko dobrze podlaczone to powinien wyswietlac temperature z dokladnoscia 1 st C Config Lcd = 16 * 1 Dim Bd(9) As Byte Dim T As Byte 'Integer Config 1wire = Portb.1 Cls Lcd "TEMP " Do Gosub Ds1820 Locate 1 , 6 : Lcd T Loop End Ds1820: 'dokladnosc 1st C 1wreset 1wwrite &HCC 1wwrite &H44 Waitms...
kod skopiowany z mojego programu. dziala bez problemu. 1wire podpiete jest pod portd.7 1wreset Bitwait Portd.7 , Set 1wwrite &HCC 1wwrite &H44 Wait 1 1wreset Bitwait Portd.7 , Set 1wwrite &HCC 1wwrite &HBE Tabl(1) = 1wread() Tabl(2) = 1wread() Tabl(3) = 1wread() Tabl(4) = 1wread() Tabl(5)...
Możesz również zrobić tak: void select_bus(unsigned char bus_nr) { if(bus_nr == 1) { ddr_reg = (unsigned char *)0x31; // DDRD bus_pin = (1<<5); port_reg = (unsigned char *)0x32; // PORTD pin_reg = (unsigned char *)0x30; // PIND } else { ddr_reg = (unsigned char *)0x34;...
Witam ! Dodaję gotowy działający program do pomiaru temperatury. ATmega8 fabryczne fuse bity ( nic nie zmieniaj ). Program sprawdziłem z liniami które wtym programie są zaremowane, ze względu na łatwiejszą konfigurację na mojej płycie. $regfile "m8def.dat" Config Lcdpin = Pin , Db4 = Portd.1 , Db5 = Portd.2 , Db6 = Portd.3 , Db7 = Portd.4...
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,...
czy na 1-wire musze za każdym razem nadawania danych do slave, wykrywac czy znajduje sie na szynie, czy tylko raz po włączeniu zasialnia.
[youtube]https://www.youtube.com/watch?v...
Witam. Problem poruszany wielokrotnie lecz nikt jednoznacznie nie określił jakie przewody. Potrzebuje podpiąć 19 czujników DS18B20 do Atmegi przez 1wire. Czujniki zasilanie są trzyżyłowo. Najdalszy odcinek ok. 30m a reszta średnio po 10m. Wszystkie czujniki będą zasilane osobnym kablem nie w szeregu i sprowadzone do lokalizacji Atmegi. Proszę o pomoc...
Witam Mam pytanie dlaczego poniższy kod nie pozwala mi dogadać się z DS18B20. Napisałem/przepisałem go na bazie opracowania Pana Cezarego Klimasz "Obsługa interfejsu 1-wire na przykładzie obsługi DS18B20". Proszę o pomoc. Dziękuję #include <string.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include...
Najprawdopodobniej problem stanowi procedura "Waitus".Wykonanie "Waitus(1)" , dla proca z kwarcem 1MHz , trwa ~23 uS(zajrzyj do pliku *.lst) , a czas tRDV(początek timeslot) wynosi max 15 uS. unsigned char slot_odbierz1w(void){//odbi... bit nadany przez urz. 1wire unsigned char bit1w; //w w jednym slocie czasowym cbi(PORT1w,PIN);...
Witam, Mam podlaczony DS18S20 do atmega8 poprzez 2 wire. I chcialbym podlaczyc go poprzez 1 wire. Z dokumentacji wiem ze trzeba w czujniku polaczyc GND z VDD. Ale jakie zmiany trzeba wprowadzic dodatkowo w ukladzie i czy wymaga to zmian w programie? Pozdrawiam Robert
Hey czyli problem jest w instrukcji Ss = Format(ss , " 0.0") wrzuć ten program i powiedz czy wszystko gra jeżeli tak będę pisał co zrobiłem. [syntax=basic4gl]$regfile = "m8def.DAT" 'deklaracja procesora, w tym wypadku Atmega8 $crystal = 1000000 'deklaracja cześtotlwiości pracy (wew oscylator 1MHz w zupełności wystarcza) 'Deklaracja portów od wyświetlacza...
Nikt nie jest w stanie mi pomóc? nie wie wiem dla czego kontroler nie porównuje wartości Rozumiem że jesteś początkujący , ale nawet Ty powinieneś wiedzieć , że nie porównuje się zmiennej binarnej(Us) ze stringiem (Tmp) :( To tak , jak byś porównywał kilogram z czerwonym :D Poza tym , ten program jest niezwykle pamięciożerny(Fusing,Single). Jeśli ten...
Witam Wiem, ze o DS1820 było juz bardzo duzo watkow ale niestesty nie znalazlem w nich odpowiedzi na moj problem. Zbudowalem sterownik wiatrakow do obudowy PC w którym jako czujniki mam wlasnie DS18B20. Czujnikow w ukladzie jest szesc, problem polega na tym ze 3 z nich dzialaja super i wskazuja temp a trzy kolejne pokazuja ciagle 85*C, zupelnie tego...
Ręce to opadają i masz rację ;) Masz błąd w definicji zmiennej do której wpisujesz ID czujników to nie jest jeden bajt tylko tablica 8x8bitów czyli 8 bajtów. Adresujesz nie istniejące czujniki bo ich adresy sa niepoprawne, wysyła procek ciagle ten sam bajt. Dim Adres1 As Byte 'adres pierwszego Dim Adres2 As Byte 'adres drugiego Dim Adres3 As Byte 'adres...
No to powodzenia z obsługą 1-wire w assemblerze. Jeszcze przez początkującego. Mój nauczyciel bawił się okrągły miesiąc i udało mu się :). I2c można dosyć prosto obsłużyć z poziomu asm, ale co do 1-wire to jak nie znajdziesz gotowca w assemblerze to sam nie zrobisz. Dla chcącego nic trudnego. Nazwy procedur mówią same za siebie. Magistrala na P1.7...
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...
Z dwoma bajtami uC i Dallas w 5ms wyrobią się spokojnie. Problemem jest brak synchronizacji pomiędzy przerwaniami generowanymi przez Timer a funkcją Waitms. Ponieważ przerwanie występuje teraz co 5ms to można w nim ustawić flagę że własnie się zakończyło. Wtedy w pętli głównej możesz sobie spokojnie liczyć te flagi. 50x 5ms = 250ms co bardzo tu pasuje....
Witam! To prawda, ze FastAVR pięknie obsługuje wyświatlacz od Nokii 3310. Wszytsko rusza od ręki. Napisałem jednak kilka linijek do odczytu bajtów odpowiedzialnych za temperaturę z DS18B20 i tu pewna niespodzianka: podczas odczytu danych wyświatlacz się resetuje. Nie wiem czy to normalne, ponieważ nie mam obecnie żanego innego na podmianę. Wyglada to...
Proponuje dodać dodatkową zmienną pomocniczą której zadaniem będzie pamiętanie że program zaczął działać nie jestem pewien tego rozwiązania z bascomem miałem doczynienia dość dawno temu ale możesz spróbować tego $regfile = "attiny25.dat" $crystal = 4000000 Config Portb.3 = Output 'przekażnik Config Portb.2 = Input 'włącznik typu microswitch...
1wire ds18b20 ds18b20 zawieszać 1wire atmega 1wire ds18b20
różnicówkę piekarnik rozlutownica denon sc7000 końcówka palnik
nawigacja vordon schemat instalacji fotowoltaicznej
Mocniejsza wieża od Philips FW590C - porównanie modeli Przekaźnik blokowania drzwi Toyota Corolla Verso 2007 - lokalizacja i diagnostyka