Masz rezystor podciągający? Niektórzy o nim zapominają.
Problem jest w sprzęcie a nie w programie. W układzie brakuje kondensatorów ceramicznych 100nF na pinach zasilających uC, LCD, czujnika, wejściu ADC. Nie widzę też filtru na AVCC oraz jakiegokolwiek tantala/elektrolita na zasilaniu. Popraw zasilanie a zamiast analogowego czujnika użyj cyfrowego np DS18B20 na 1Wire.
Oczywiście ,że $crystal nie przestawia wewnętrznego oscylatora ale informuje kompilator z jaką częstotliwością pracuje procesor. Częstotliwość swojej Atmegi przestawiłem za pomocą Bascomowego programatora (stk200).Ustawiłem 0011 i kliknąłem na Write FS i od tej chwili przy zczytywaniu(otwarcie zakładki lock and fuse bits)programator podaje wartość...
$crystal = ? ;)
czytałem wolniej i efekt ten sam:(
Witam. Realizuję właśnie odczyt temperatury na płytce Nucleo z wykorzystaniem ds18b20. Mam następujący problem. Odczytując LSB i MSB z czujnika pojawia się błąd w postaci tego że MSB ma wyższą wartość niż można by było zakładać. Po odczycie temperatury wyrzuciłem sobie obydwie wartości na konsolę przez UART. W temperaturze pokojowej widać że LSB się...
... do czego służy przycisk... Wciśnięcie tego przycisku, powoduje jednokrotne wykonanie programu głównego. DS1990A - odczytanie ID DS18B20 - odczyt temperatury
Nie myślałeś o DS18B20 1wire do odczytu temp?
Masz na myśli odczyt wbudowanego ADC? Szczerze mówiąc to kiedyś się tym bawiłem i nie pamiętam problemów z ADC, chociaż mogłem po prostu nie zauważyć. Pamiętam że problem z odczytem to był z DS18B20 pod 1wire, pierwszy odczyt był zawsze do kitu, następne jednak były OK, ale to raczej nie był błąd Bascoma.
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);//...
Już sobie poradziłem: 1. nieprawidłowa kolejnośc: reset, wymuszenie przetwarzania i odczyt 1wire 2. użyłem kompilatora fastavr32.exe No i wszytsko jest OK :) FastAVR, coraz bardziej mi się podoba.
6x ds18b20; Ale Kolega nie będzie używał overdrive Co więc oznacza Praktyka mówi że 1wire ma jeszcze bardzo szybki reset. Tak że układ i2c <> 1wiire na pewno się wyrobi. ? W czym ma się wyrobić I2C<>1wire?
Gdyby nie biblioteka "1-wire" to obciążenie procesora byłoby bliskie zeru. Kernel ma obsługę 1wire i odczytu temperatury z DS18B20, wystarczy załadować odpowiedni moduł modprobem, więc nie trzeba robić tego w userspace.
Czy tak może być? Nie. Po komendzie: "1wwrite &H55" Spodziewana jest komenda wpisu adresu adresu device do której odnoszą się dalsze komendy, ponadto: Błędem jest stosowanie tejsamej flagi (niby stopniowej) do wielu operacji bez jej kasowania. Zauważ że flaga=1, lub flaga =2 utrzymuje sie przez dłuższy czas, o wiele dłuzszy niż 'przewinięcie 'pętli...
hmm powiem tak ja tez na poczatku mialem z tym problem (ds18b20) ale problem sie zozwiazal, opoznienia --- ale jedno, ale nie przestawilem na kwarc zewnetrzny i prawdopodobnie cos bylo nie tak 1wire bo bez poprawiania programu - zadzialalo ;)
piszesz portd.0 i jest ok. moze przyslij listing to sie zobaczy. sprawdz w EP 11/2004 tam jest prawie wszystko na temat 1wire
Witam, Nie będę się znał to będzie okazja się czegoś nowego nauczyć. "Nie róbmy nic - nie będziemy mieć nic." Kolega wyżej pisał że warto przejrzeć jak to wszystko wygląda. I mi będzie łatwiej i może i WAM jak będzie potrzeba. Może ktoś temat obserwuje z podobnymi umiejętnościami i nie popełni tych błedów co ja. Wklejam pdfy. Słuszna uwaga. Jak pisałem...
A jest jakaś inna opcja przez którą nie mogę połączyć się przez ten 1wire z ds'em?
Witam, Czasówki 1wire do zmiany. Sprawdzaj CRC numerów seryjnych.
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...
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)
Zmniejszyć rezystor podciągający, skorzystać z CRC, zmodyfikować czasy w kodzie obsługi. Bzdurny odczyt to brak weryfikacji CRC, tylko. Ilość błędnych ramek można zmniejszyć poprzez korektę okien czasowych 1wire, szczególnie na długich przewodach. W trybie pasożytniczym nieprawidłowy pullup na czas konwersji zwróci temp. 85. Rezystor pociągający ma...
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,...
Cześć! Mam problem z pogodzeniem obsługi 4 wyświetlaczy LED (multipleksowanych za pomocą ATMEGA32) i odczytem temperatury z Dallasa :( Programuje w BascomieAVR. Jest możliwość korzystania z obsługi przerwań (TIMER0) w celu multipleksowania wyświetlaczy i równocześnie "rozmawiać" szyną 1wire z czujnikiem DS18B20 bez konieczności wyłączenia wyświetlaczy...
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);...
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ą...
Jednak pojawił sie mały problem. W sposób jaki podłączyłem adapter wykrywa tylko 2 czujniki, może być podłączonych kilka ale wykrywa tylko 2. Proszę o podpowiedź co z tym tematem można począć? Ogólnie zależy mi na podłączeniu 8 czujników 1wire ds18b20 przez usb. Pozdrawiam
Na pewno wysyłanie bajtów jest złe - opóźnienie pomiędzy SET_DQ na końcu wystawienia jednego bitu a CLR_DQ przy następnym bicie - jest (a właściwie go nie ma) zdecydowanie za małe. Odczyt też zresztą jest niepoprawny - na jeden bit powinno przypadać dla bezpieczeństwa 60us, tutaj jest 18us w funkcji ow_read_bit oraz kolejne 9 w ow_read_byte - nawet...
Oczywiście , że wpisując : Config 1wire = Porta.1 zablokujesz odczyt z Porta.0 Musisz przed odczytem z Porta0 , wpisać w programie Config 1wire = Porta.0 a następnie gdy będziesz odczytywał z Porta.1 wpisujesz linie Config 1wire = Porta.1 Czyli , najpierw konfiguracja z której linii potem odczyt.
Wklej komenty 1wire, bo ten fragment kodu nic nie mówi.
Zgaduję, że kompilator nie analizuje częstotliwości kwarcu przy konwersji poleceń 1wire bo w tym wypadku kompilacja polega na podstawieniu gotowych procedur w asm. ... Dobrze zgadujesz :wink: , ale dotyczy to Bascom8051.Dla BascomAVR, parametr "$crystal" ma niebagatelne znaczenie ,gdy używamy poleceń 1wire. Polecenia te działają dla szerokiego zakresu...
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...
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",...
Witam. Przede wszystkim jak wysyłasz instrukcje do termometru aby zrobił pomiar to musisz odczekać 750ms, w przeciwnym wypadku będzie błąd odczytu. Po odczekaniu tego czasu resetujesz linie 1-wire i robisz odczyt wartości.
Podczas odczytu DS'a musisz dać pauzę pomiędzy rozkazem rozpoczęcia konwersji a odczytem temperatury (standardowo 750ms). Przy czym musisz to rozwiązać sprytniej niż zwykłym waitms...
Płytkę trzeba by prześledzić na spokojne lecz widzę, że kolega chce wykonać płytkę dwustronną a więc przydały by się przelotki jeszcze:) Jeśli chodzi o napięcie 5.6V zostało ono uzyskane przez autora dzięki zastosowaniu diody w masie stabilizatora. Kiedyś wykonywałem ten zegar i DS18B20 został podłączony na 3 przewodach. Rezystor 4k7 musi być obowiązkowo...
Całego kodu nie mogę podrzucić, bo: - nie mam odczytu z eepromu, - nie wiem, czy zapis do eeprom ma być jednorazowy w momencie programowania procesora, czy ma być jednorazowy po pierwszym uruchomieniu programu, czy ma być wielokrotny w dowolnym momencie np. po zmianie termometru i wciśnięciu - dajmy na to - dowolnego guzika, - nie mam zrealizowanego...
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...
Może Reset 1Wire przed Skip ROM (0xCC) i Convert T (0x44) ?
(...) 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...
na wbudowanych timerach może być problem bo na czas odczytu temperatury z 1wire nie mogą się właczyć żadne przerwania
Witam. U mnie ten program pracuje na wewnętrznym oscylatorze 1MHz. Sprawdź czy masz dobrze podłączony DS do pinu zadeklarowanym w programie. Config 1Wire = Portd.5 i tu ma być podłączony DS.
Pt100 i DS18B20 to całkiem różne czujniki temperatur i o ile sam wskaźnik/regulator nie jest przystosowany do obsługi obydwu rodzajów czujników to nie da się ich zamieniać. Czujnik Pt100 jest czujnikiem rezystancyjnym. Zbudowany jest z cienkiego drutu platynowego, którego opór elektryczny się zmienia pod wpływem temperatury. Im większa temperatura tym...
Po odczycie powinna byc resetowana magistrala 1wire i wynik dzieli sie przez 2 nie przez 16 jak to jest w DS18B20
Piszesz o testowaniu po kolei każdego bitu. O jakie bity chodzi? Bo tego nie załapałem. Jeśli piszesz o możliwych czterech stanach to co masz na myśli dokładnie? Idea jest taka, po instrukcji Search ROM dokonujesz dwa odczyty (w sensie magistrali 1wire, czyli odpowiednie impulsy odczytujące), najpierw urządzenia które mają pierwszy bit zero zwierają...
Nie podałeś zbyt wielu szczegułów. Odbiór robisz poprzez cykliczne sprawdzanie czy coś jest w wuforze wejściowym, za pomocą TTimer? Jeżeli tak to wyłącz na chwile timer i sprawdź czy aplikacja się dalej wiesza. Nie pytam o szczegóły sprzętowe, takie jak dopasowanie RS232 do 1wire, bo napewno to zrobiłeś?
Program do czujnika temp ds18b20 ktory mierzy z dokladnoscia dwoch miejsc po przecinku. Sprawdzony ale tak jak juz koledzy mowili wyniki po przecinku bardzo czesto skacza Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32 Config Pind.7 = Output Config Pind.4 = Output Config Pind.5 = Output Config Pina.6 = Output Config Pina.7 = Output Set Portb.0 Set...
Stosuję odczyt DS18B20 w przerwaniu, dlatego, że przerwanie rozkładało mi transmisję 1wire. Przerwanie jest wyzwalane z częstotliwością 100 Hz, przez częstotliwość sieci 220 V i służy do obsługi ściemniacza. Transmisję 1wire umieściłem w tym przerwaniu, żeby uniknąć jej zakłócania właśnie przez to przerwanie. Co przerwanie wykonywana jest kolejna instrukcja...
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...
Witam. Chciałbym odczytać temperaturę z czujnika DS18B20 przez długie i krótkie migania diodą. Np gdy mamy temperaturę 25 stopni to dioda sygnalizowała by dziesiątki za pomocą dwóch długich piknięć a jedności poprzez 5 krótkich. Dopiero zaczynam zabawę z Bascomem i kompletnie nie wiem jak się za to zabrać. Poniżej wklejam fragment kodu z odczytem temperatury....
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...
Pozwolę sobie zapodać link do posta, w którym jako złącznik wrzuciłem kompletny przykład do komunikacji po 1Wire. Przykład obejmuje zarówno odczyt z DS1990 lub z DS18B20, w zależności co się wykomentuje w "mainie". Przykład chodzi na zegarze 4MHz, więc będziesz musiał sobie jedynie przerobić funkcje opóźniające (waitus), aby jej wywołanie waitus(60);...
Witam Który z procesorów z serii Attiny ( bo atmega 8/16/32 to bez problemu ) nadawałby się do pomiaru/odczytu DS18B20 oraz przesyłania przez UART ( w ramach testów przez RS232, a docelowo przez RS485 ) ? Programowy UART można chyba uruchomić na większości, gorzej z obsługą 1Wire
Witam, Potrzebuje odczyt temp z kilkunastu czujników temp np ds18b20 na PC(najtaniej?), z odległości ok 300m, i tutaj mam pytanie; czy wpięcie konwerterów rs485<>1wire w takim układzie zadziała? [ds18b20] --- [konwert. 1wire<>rs485] - - - [konwert. rs485<>USB] --- [PC z programem LogTemp lub jakiś inny] próbowałem z samym 1wire ale...
Przerwanie_0: 'co 2ms If Liczniczek_przygotowanie_odczytu < 400 Then Incr Liczniczek_przygotowanie_odczytu If Liczniczek_przygotowanie_odczytu >= 400 Then 'co 800ms odzyt DS Liczniczek_przygotowanie_odczytu = 400 Flaga_przygotowanie_odczytu = 1 End If End If Flaga_dodatkowa = 1 'do wykorzystania w innym sub- też co 2ms- to Twoje sterowanie...
Nie pytaj dlaczego , tylko podnieś F_CPU do >1 MHz(w procu oczywiście też) (np. 4MHz) i sprawdź ponownie.Przy 1 MHz ja też miałem kłopoty , ale juz od 2 do 16 wszystko działało :D Dobrym sposobem jest też , kilkakrotne próbkowanie magistrali 1wire - teraz tak zawsze robię ;). Piotrek
układ się spodziewa danych w standardzie 1wire. W dokumentacji o tym jak podłączać 1wire do rs232 jest napisane jak to się robi że układ rozumie dane wysyłane przez rs232 jako dane 1wire. sory z gory ale nie jestem elektronikiem i jakos mimo tego ze poszukalem i poczytalem to nadal malo rozumiem.mozesz mi to wytlumaczyc na jakims przykladzie odczytu...
1. Nadajnik to Arduino + 433mhz + DS18B20 2. Odczytać wartość z DS18B20, wysłać np. "20" (stopni C) 3. Odebrać na odbiorniku Arduino wartość np. "20" 4. Przekazać drogą przewodową informację po lini 1wire w takim formacie jak robi to standardowo DS18B20 Czyli coś w stylu przedłużenia odczytu temperatury.
Atmegę kupiłem na allegro, posiada ona wbudowany Kwarc i Bootloader. ATMega nie posiada wbudowanego rezonatora kwarcowego, lecz wewnętrzny oscylator. Nie ma też wbudowanego bootloadera. Czy pin 11 jest odpowiednim pinem do podłączenia 1Wire? W jakiej obudowie jest ATMega DIP28, czy TQFP?
A to to co? Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Porta.1 , Db7 = Porta.0 , E = Portd.2 , Rs = Portd.3 Config 1wire = Portd.0
Obsługa 1wire w przerwaniu to porażka do tego jeszcze waitms. W przerwaniu ustawiaj tylko jakąś flage i na jej podstawie czytaj 1wire w pętli głównej. W trakcie odczytu blokuj przerwania - i tak nie są wtedy potrzebne.
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...
...Kiedyś wyczytałem że można podłączyć je na osobnych portach i w trakcie programu po poleceniu config 1 wire przełączać z którego chce się robić odczyt... A teraz nie możesz wyczytać w helpie , że to co piszesz jest nieprawdą :?: ;) Config 1wire jest dyrektywą "jednarazowego użytku" :idea: By osiągnąć to o czym marzysz ;) , należy używać alternatywnej...
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...
Na pewno masz źle zrobioną obsługę 1wire: [syntax=c]// zczytanie bit z magistralii unsigned char read(void) { unsigned char PRESENCE = 0; CLEAR_1Wire; // ustawienie w stan niski DQ _delay_us(2); // odczekanie 2us SET_1Wire; // zwolnienie magistralii _delay_us(15); <------------ // odbiór jedynki lub zera if (bit_is_set(PORT_1Wire, WE)) PRESENCE =...
A ja osobiście proponuje zrobić proste sterowanie i odczyt linii z użyciem dwóch tranzystorków bipolarnych. 1Wire będzie chodzić i nie będą na kontrolerze robić wrażenia przepięcia.
Jak najbardziej. Filozofią jest jednak użyć wyszukiwarki na forum by znaleźć wszystko co napisano kiedyś na temat tej pary. Napięcie zasilania układów 1Wire lepiej nie podpinać bezpośrednio do napięcia Vcc mikrokontrolera. Może to skutkować błędnym odczytem, albo brakiem komunikacji.
Generalnie cały ten twój układ trzebaby przeprojektować. Jeśli blokujesz przerwania na 750ms przy wyświetlaniu multipleksowym to nie spodziewaj się dobrych efektów. Postaraj się najpierw zrozumieć jak coś działa. W tym przypadku obsługę OW musisz zrobić sprzętowo, wykorzystując np. UART, co rozwiąże problemy z zależnościami czasowymi. Przykłady multipleksowania...
Człowieku... :) Nie musi być bardziej prawidłowo :) Ma działać. Cały program jest gotowy. Pominąłem odczyt DSów w przerwaniach, bo nie działało, i zrobiłem po prostu, po zapytaniu przez RS. I tak może być. Trzeci raz piszę, że odczytuję komendy z RS poprzez input. No przecież to nie będzie działać w przerwaniu. A przerabianie tego na jakieś inne procedury...
Tak dokładnie. Testowałem to na skrętce około 60m , 4 czujniki i na kilku kondensatorach typu 100nF, 10nF ... bez kondensatorów miałem spore problemy z odczytami po zamontowaniu kondensatora w moim przypadku 27pF (inne wartości w zasadzie nie poprawiały sytuacji) przy czujniku na ostatnim czujniku problemow brak :). Z moich obserwacji wywnioskowałem...
Skonfiguruj prawidłowo magistralę 1wire, czasem może być problem z krótkim opóźnieniem. W dokumentacji pisze żeby czekać 0,5s, ale czasem trzeba więcej. Wydłuż czas opóźnienia, a powinno chodzić. Pozdrawiam
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...
A ile czekasz od rozkazu konwersji do odczytu? DS18B20 podczas konwersji pobiera dość duży impuls prądu. Jeżeli MASTER nie wymusza jedynki na linii 1Wire podczas transmisji, albo po niej (w stanie spoczynku), to napięcie na tej linii mocno spadnie i DS się zresetuje. Na szczęście BASCOM właśnie tak robi, ale możliwe że nie każda wersja.
Jarosław J --> po pierwsze postaraj się jak najszybciej robić odpowiednie wcięcia w kodzie to będzie łatwiej nie tylko nam tutaj na forum analizować twój kod - ale tobie samemu będzie łatwiej a to jest nawet ważniejsze ;) po drugie masz tam gdzieś w tej swojej pętli głównej coś takiego: Convallt ' "Convert ALL T on the 1w-bus" Waitms 1 czyli...
A to niby dlaczego nie wolno stosować waitms ??? U mnie jakoś działa przy wielu czujnikach na jednej linii i co to ma wspólnego z wysyłaniem przez uarta ? W tym przypadku waitms nie zakłóca obsługi przerwań, wiec nie widzę problemu. Kolega namieszał trochę w procedurze "odczyt". Na początku wyszukujesz czujniki na linii 1wire, a później, w procedurze...
$regfile = "m8def.dat" $crystal = 'Częstotliwość rezonatora Config Lcd = 'Sam nie wiem co wpisać Config Lcdpin = 'Konfiguracja LCD Cls Cursor Off Cls Deflcdchar 1 , 32 , 12 , 18 , 18 , 12 , 32 , 32 , 32 Cls Dim A(2) As Byte Dim T(3) As Byte Dim Temp As Byte Config 1wire = Port 'Konfiguracja magistrali 1-wire Do 1wreset 'Inicjalizacja...
Witam Do kolegi MarasK Witam nierozumiem zabardzo odcinanie zasilania na 2 sekundy czyli pomiar robisz co 2 sekundy?Mógłbyś coś bardziej rozwinąć temat co i jak? Pozdrawiam Nie - sprawdzam co 1s temperaturkę i jeśli pomiędzy kolejnymi odczytami wartość zmieni się o więcej niż 5 stopni (wystarczyłoby 2st w zupełności, ale u mnie odczyty zmieniały się...
Z krótkiej lektury Twojego kodu wynika jedno - nie znasz "zasady działania" DS18B20 :( Za pomocą rozkazu 1wire 0x33(READ ROM) , nie można odczytać ID , jeśli na linii jest >1 układ.Do tego służy rozkaz 0xF0(SEARCH ROM).Po wtóre , sprawdzanie stanu magistrali 1wire , by wykryć koniec konwersji , nic nie da. Procek musi "zapytać" czy konwersja dobiegła...
Witam, chcialbym sie podlaczyc po ten topic gdyz mam pewien problem z obsluga DS1820 i DS18B20 z ATMega128 Mianowicie, po podlaczeniu w trybie 2wire (1 - GND, 2 - PinB.7/PinE.7 itp., 3 - Vcc 5V) do ATMega128 z kwarcem zewnetrznym 10MHz (innego uzyc nie moge) po wykonaniu komend w Bascom AVR: config 1wire= portb.7 dim rgn(8) as byte 1wreset wait...
Można podłączyć te Lm35, ale musisz zastosować multiplekser analogowy do przełaczania wejścia komparatora z jednego czujnika na drugi, i musisz się liczyć dodatkowo z nie lajlepszymi parametrami takiego termometru i to conajmniej z dwóch powodów. Lepiej bedzie jak zastosujesz czujniki DS18B20 na 1wire, bedzie dużo prościej i bardziej dokładnie.
Witam. Mam problem z poprawnym odczytem temperatury z czujnika DS18B20. Otóż na ATmedze328 wszystko działa poprawnie. Używając tej samej biblioteki na ATmega32 wartość raz wynosi 0.0 C a raz różne dziwne wyniki np. 6548 itd. Dodam, że DHT11 działa, więc odmierzanie czasu przy użyciu 1wire jest poprawne. Nie wiem, gdzie może tkwić problem. (at)edit -...
Witam Jestem w trakcie pisania programu i napotkałem na problem z częstotliwością ponieważ gdy ustawiam na 8Mhz DS18B20 przestaje działać, brak odczytu natomiast przy 1Mhz działa bez zastrzeżeń. Ds18b20_1: Config 1wire = Pind.6 1wreset 1wwrite &HCC 1wwrite &H44 Waitms 750 1wreset 1wwrite &HCC 1wwrite &HBE Bd(1) = 1wread(9) 1wreset T = Makeint(bd(1)...
Trochę zajęło mi znalezienie co jest nie tak... ale w końcu do tego doszedłem, może się komuś przyda. Problem rozwiązałem stosując kwarc 4,4 Mhz (lecz samo zastosowanie kwarcu nie było przyczyną rozwiązania problemu), następnie przeliczyłem czasy dla tej częstotliwości, a to co pomogło to wydłużyłem czasy trwania ramek w 1wire. Widocznie jeżeli czujnik...
Oto mój program wykorzystujący LCD w trybie 4-bitowym, śmiga jak ... Jest tam obsługa LCD i 1wire, procedurki LCD łatwo wyłowić :) // ****************************************... // Project: Obsluga układu DS18B20 // Author: Zbigniew Chrobot // Module description: pomiar temperatury z DS18B20 kwarc 4MHz // wyswietlanie na...
Program Kompiluje sie dobrze jednak nie wyświtla wyniku pomiaru No od kompilacji programu do wyświetlenia wyniku jest jeszcze parę kroków :wink:. Co znaczy nie wyświetla? Czy nic nie wyswietla, czy źle wyświetla, czy w ogóle coś wyświetla? (to ostatnie jest pewne bo nigdzie nie widzę żebyś konfigurował lcd'ka). Jak jesteś początkujący to proponuje...
1. znaczniki [code ][/code ] 2. masakralnie pomieszane wszystko: a) odświeżanie wyświetlaczy do przerwania b) odczyt temperatury z cli(); i sei(); do pętli głównej to co do czytelności kodu czy na pewno masz wszystko dobrze podłączone, + rezystor 4k7 na lini DQ 1wire?
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,...
Chwilowo straciłem ten kod postaram się go znaleźć ale opierałem się na projektach z internetu. No bez jaj. Na 99% nic nie masz tylko czekasz na gotowca. Ale dobra, zlituję się na święta :D Pomijając całą beznadziejność kodu do multipleksowania wyświetlacza, takie coś powinno działać: $regfile = "ATTiny2313.dat" $crystal = 8000000 Dim Jednosci...
Jeśli podajesz w programie do której końcówki jest podłączony czujnik to nie przejmuj się tym co podaje bascom ale dla świętego spokoju tam też to zmień. Obowiązkowo zmień rezystor na 4,7kΩ. Po za tym masz jakiś dziwny ten programik. Spróbuj na tym(wczesniej zmien rezystor): $regfile = "m32def.dat" $crystal = 8000000 Config Lcdbus = 4...
Witam. Mam zamiar wykonać pomiar temperatury czujnikami DS18B20. 4 czujniki na osobnych pinach, przewody max.10m, zasilanie 3V3 parasite, bez MOSFETA. Czy ktoś ma doświadczenia z tymi czujnikami na magistralii 3V3? Procek to LPC1113, którego piny są 5V tolerant. Czy lepiej wykorzystać podciąganie 4k7 (lub mniejsze) do 5V czy w zupełności wystarczy 3V3....
I tu już klapa. Nie mogę sobie pozwolić na to aby w przypadku awarii czujnika ponownie grzebać w programie. To musi działać tak że odpinam uszkodzony czujnik i wpinam nowy. Potem restart modułu i wszystko działa.. Nie chcę się upierać, że odczyty wszystkich czujników na jednej magistrali to najlepszy sposób ale kurka wodna ;) .... dla mnie większym...
Witam wszystkich, robię prosty układzik na uC atmega. Zadaniem go będzie odczyt temp z czujnika ds18b20 i ustawianie zewnętrznego przetwornika dac po spi. Wszystko praktycznie napisałem, bo części programu były wykorzystywane w innych układach, które pracują, z spi problemu nie ma, z odczytem ds też. Ale chodzi o to, żeby cały układ pobierał jak najmniej...
Witam, podłączam 4 czujniki temp ds18b20 poprzez 1wire do atmega32. Chciałbym zapisać ich id do eepromu a potem odczytać z tablicy. [syntax=basic4gl]Dim Id1(8) As Byte zapis: For C = 1 To 8 Step 1 writeeeprom id1(c), c Next C odczyt: For C = 1 To 8 Step 1 readeeprom id1(c), c Next C wyswietlanie: For C = 1 To 8 Step 1 Lcd Hex(id1(c)) Next C[/syntax]...
Nie wiem czy ten czas konwersji coś wprowadza do sprawy? Na biurku działa mi na 8 DS'ach, jak ustawie 10 ms odczyt jest dużo szybszy niż jak ustawie np 1000 ms. Pomiary są identyczne. Nie mam wpiętego opornika na linii 1Wire Proponuję, abyś zapoznał się z DS: https://datasheets.maximintegrated.com/e...
A ja bym zaczął od użycia funkcji SZUKAJ - jest taka u góry. Jakbyś jej użył to znalazłbyś zapewne informację, że 1wire nie chce działać jak jest sterowana z uC AVR z wewnętrznym generatorem poniżej 4MHz . Funkcje z CodeVisionAVR działają. Nie jestem jedynie pewny czy jest obsługa DS18B20...
Mam dziwny problem z ATmega8515 i obsługą szyny 1wire w Bascomie AVR 11.7.4. Prosty program zbudowany w oparciu o nieznacznie zmodyfikowany przyklad z helpa do odczytu temp. z ds18b20 działa na AT90S2313, a nie działa na ATmega 8515. Sposób podłaczenia jest ten sam, próboałem też konfigurować szynę 1wire na różne porty. Problem jest zawsze ten sam -...
Jestem autorem emulatora czujników DS18B20 na 1Wire. Można nim ustawić sobie temperaturę którą ma symulować. Bardzo przydatne do testów urządzeń. Po prostu nie trzeba czujników mrozić lodem ani przypalać zapalniczkami ;) https://bart-projects.pl/1wire.html Obydwa mastery prawdopodobnie cyklicznie testują gniazdo pastylki. Jeśli nic nie odczytają czyli...
Bascom, bo z C stawiam dopiero pierwsze kroki. Config 1wire = Portb.0 1wreset 1wwrite &HCC 1wwrite &H44 Config 1wire = Portb.1 1wreset 1wwrite &HCC 1wwrite &H44 'odczyt waitms 750 Config 1wire = Portb.0 1wreset 1wwrite &HCC 1wwrite &HBE temp(1) = 1wread(2) T = temp(2) Shift T , Left , 8 T = T + temp(1) T1 = T * 0.0625...
Transmisje z DS wykonuje 5 razy i sprawdzam, czy zawsze przychodzi to samo. Mam aktywne przerwanie timera, ktorz relizuje zegar czasu rzeczywistego. Po kazdym odczycie dwoch pierwszych bajtow wykonuje reset lini 1wire. Rzecz w tym, ze nie dostaje roznych odczytow tylko zawsze 0. Zauwazylem, ze 0 dostaje sie tez jak sie zewrze linie danych do masy. PL
W Twoim przykladowym kodzie nie tylko są już bieżące problemy z zachowaniem czasu prawidłowych okien komunikacyjnych (jesli nie używasz uarta) ale wystąpią też inne przyszłe problemy z powodu popularnej implementacji "na skróty" jaką realizujesz. Pierwsza uwaga: jaki masz pullup'a na linii? Nie widzę w Twoim kodzie zapewnienia "silnej 1" najpóźniej...
ds18b20 1wire ds18b20 odczyt atmega 1wire ds18b20
instrukcja navigon koszt montaż domofon płyta indukcyjny samsung tranzystor
logitech kabel układy zasilające
Awaria sterowania hamulcem w MAN Lion's City Łożyska i uszczelniacze do piły Faworyt RG 5300 18A