ds -> write scratchpad
return ((scratchpad[1] << 4) | (scratchpad[0] >> 4));//obliczanie dla DS18B20 return ((scratchpad[0]>>1... // obliczanie dla DS1820 (nie B!!) Ja tak zmieniam temperaturę - oczywiście scratchpad to tablica 9 bajtów odczytanych z czujnika.
Czy można przez konwersję BCD wyciągnąć znak (temperatura dodatnia/ ujemna) . Spróbuj dopasować sobie ten code. [syntax=basic4gl][/syntax ... $regfile = "m8def.dat" $crystal = 4000000 $baud = 9600 $hwstack = 32 $swstack = 16 $framesize = 40 Dim Scratchpad(9) As Byte Dim Temp As Integer At Scratchpad Overlay Dim Ds18b20_temp...
//return ((scratchpad[1] << 4) | (scratchpad[0] >> 4));//obliczanie dla DS18B20 return ((scratchpad[0]>>1... // obliczanie dla DS1820 (nie B!!) Tu masz fragment mojego kodu - może masz coś nie tak z konwersją temperatury już w uP? Ja miałem podobne...
Witam, prawdopodobnie błąd tkwi w kolejności podawania odebranych bajtów do funkcji liczącej CRC: crc = crc8_update(0x00,data Podajesz tam bajt 0, 1, 3, 2, 4, 5, 6, 7 Niestety nie bardzo mam czas na analizę Twojego kodu więc jeśli nadal będziesz miał problemy z liczeniem sumy załączam swój sprawdzony kod: [syntax=c] _U8 drv_1wire_crc8(_U8 *buffer, _U8...
Przed Copy Scratchpad , daj 1wreset. Piotrek
No może z tym producentem trochę przesadziłem, ale sam kiedyś robiłem testy i działało, ale zdarzały się relatywnie znacznie częstsze błędy CRC niż w przypadku odczytu po 750ms (w takich samych warunkach zakłóceń). Z drugiej strony nic też nie wiadomo o tym, jak dane są przepisywane z rejestru sensowa do obszaru scratchpad.
Mam problem jestem początkujący napisałem program który ma za zadanie regulować włączanie wiatraka i czas z jakim ma dmuchać , jednocześnie mierzy temperaturę i nie działa tak jak powinno : Temperatura pokazuję co jakiś czas błędny pomiar np 124 , 32 , 98 procek się resetuje chińskie znaki raz na jakiś czas w programie można było ręcznie zmieniać czas...
Procedury działają robrze z DS1820, natomiast nie za bardzo chcą działać z DS18B20. Wydaje mi się, że dlatego, że DS1820 jest ustawiony standardowo w tryb 9-bitowy, a DS18B20 w tryb 12-bitowy. Stosując DS18B20 wysyłam rozkaz WRITE SCRATCHPAD [4Eh] a potem 00011111b, jednak to nie daje poprawnego odczytu. Czy ktoś stosował DS18B20 w tym układzie ?
Witam, chciałbym spytać Was o poprawność zmiany rozdzielczości czujnika temperatury DS18B20 na 9-bit. Zmieniam to w nastepujący sposób: Zacznę od ostatniego pytania: To nie są bity - raczej bajty, i sa to tylko TH i TL i są wpisane tylko do Scratchpad. To by wystarczyło dopóki nie wyłączysz/reset processora. Musiałoby to pozostac częścią programu....
Aby zmienić rozdzielczość i/lub temperatury alarmowe w DS18B20 , należy: 1)odczytać scratchpad 2)zmienić rozdzielczość w bajcie konfiguracyjnym(bajt nr.4 licząc od 0) 3)zapisać do scratchpada 3 bajty , w kolejności: TH ,TL , CONFIGURATION 4)skopiować scratchpad do eepromu Można pominąć kroki 1 , 2. Ustawienia zostaną zapamiętane w wewnętrznym eepromie...
Po załączeniu zasilania dane są kopiowane z pamięci EEPROM do scratchpada, możesz zapisać nowe dane do scratchpada i będą one aktywne do czasu zaniku zasilania. Odczyt z EEPROM'u (wpisanie do scratchpada) można wywołać zdalnie poprzez polecenie Recall E2. Wnioski są zatem oczywiste że podczas resetu układ odczytuje ustawienia ze scratchpadu.
Teraz dopiero dopatrzyłem się, że przy starcie raz wywala wartość 85 stopni co nie powinno mieć miejsca. To jest zupełnie normalne że pierwszy odczyt może wskazywac 85°C. Patrz: uwaga pod tabelą na str. 3 datasheet: *The power-on reset value of the temperature register is +85°C Może ci się takze pokazac 0°C , - jako jeden z poczatkowych odczytów gdy...
Teraz jak zmieniłem bibliotekę do ds18b20 to mam wynik -0.0625, czyli tak jak by ta zmienna temp_word miała cały czas 1 i nie zmieniała swojej wartości [syntax=c]/*****************************... * file name: temp_sensor.c *********************************/ #include <avr/io.h> #include <stdint.h> //#define F_CPU 7372800UL #include <util/delay.h>...
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...
I1 = 1wread(2) tu pobierasz tylko 2 bajty (wartość temperatury), a powinieneś pobierać wszystkie 9 http://www.datasheetcatalog.org/datashee... Strona 6 Figure 7 tak wygląda Scratchpad tego termometru. z pierwszych 8miu bajtów liczysz CRC8 i porównujesz bajtem 9tym (CRC8 obliczone przez termometr), muszą się zgadzać. Pozdrawiam,...
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...
Pliczek do odczytu termometru z [url=http://www.elektroda.pl/rtvforum/to... tematu. [syntax=c] //**************Plik ds18b20.h****(xyz.isgreat.org)**********... int nrpin; // numer pinu sensora ds #ifndef DS18B20_H #define DS18B20_H /* DS18B20 przyłączony do portu AVRa */ unsigned char ds18b20_ConvertT(void); int ds18b20_Read(unsigned...
Witam Zaczynam zabawę z z atmegą 16 i czujnikiem DS18B20 i mam jak każdy na tym forum mały kłopot............ hm co jest nie tak ? . Prosił bym o podpowiedz Spróbuj ten, troche zmieniony code: [code][syntax=basic4gl] $regfile = "m16adef.dat" $crystal = 1000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Rs = Portc.7 , E = Portc.6 , Db4 = Portc.5 , Db5...
Kod razem z bibliotekami skopiowałem ze strony. /* Plik "main.c" KURS AVR-GCC cz.5 (xyz.isgreat.org) Termometr cyfrowy, przykład nr. 3 (schemat i opis działania w artykule) atmega16 (1MHz) */ #include <stdio.h> #include <avr/io.h> #include <util/delay.h> #include "hd44780.h" #include "ds18b20.h"...
Prawdopodobnie dlatego że ten czujnik używa kodu U2. Tutaj więcej informacji. [url=http://mikrokontrolery.blogspot.com... EDIT: Napisz jeszcze co oznaczają zmienne (szczególnie scratchpad)
Dodam, że pamięci zaczyna brakować, gdy chcę wykonać instrukcje if. Jeśli daje ją w komentarz to program używa 20.2%, a z nią 131% i data 206%. [syntax=c] /* Plik ds18b20.h (xyz.isgreat.org) */ #ifndef DS18B20_H #define DS18B20_H /* DS18B20 przyłączony do portu PD7 AVRa */ #define SET_ONEWIRE_PORT PORTB |= _BV(5) #define CLR_ONEWIRE_PORT PORTB &=...
Zbytnio mi ta odpowiedź nie pomogła... To chyba niezbyt dokładnie przeczytałeś(zrozumiałeś) dokumentację DS18B20 :cry: Przypatrz się tabelce i zobacz, gdzie znajduje się rejestr konfiguracyjny, w którym zapisane jest, z jaką rozdzielczością ma "pracować" nasz DS. http://obrazki.elektroda.net/29_12275171... Zakładając, że nie znamy wartości...
[syntax=c] int16 t16; int16 tTemp; t16 = (buf[0] | buf[1] << 8); tTemp=(t16*10)/16; [/syntax] "buf" to odczyt "scratchpad" termometru. Zmienna tTemp zawiera temperaturę w 0.1st, to znaczy np. 13.5 to będzie 135. Potem, jak chcesz to dziel przez 10 i na float albo dzielenie przez 10 z resztą i bez reszty, tylko trzeba znaku pilnować: [syntax=c]...
Po co odczytujesz 10 bajtów? Przecież DS wysyła tylko dwa po zapytaniu o temperaturę. Mad Bekon, mylisz się. Nie ma czegoś takiego jak zapytanie o temperaturę. Jest komenda REED SCATCHPAD, po której można odebrać od DS'a całe 9 (nie 10) bajtów. Faktem jest, że tylko pierwsze dwa to temperatura. Poza temperaturą scratchpad zawiera również dwa bajty...
Zobaczyłem ten temat dopiero teraz (długo mi zeszło) ale widzę, że suma kontrolna CRC SCRATCHPAD, który chcesz wysłać jest zła. Dla 770100007fff0910 powinno być 97.
witam, po raz kolejny powtarzam temat, nie znalzałem rozwiązania wertujac inne dlatego piszę. Złożyłem termometr wg kursu AVR GCC. I nie działa naturalnie tzn. na wyświetlaczu pokazuje się jedynie napis Termometr a kiedy odłącze czujnik pojawia się wartość temperatury czasem 0.0C a czaem 800C. Na czujnik nie reaguje. Wyświetlaz obsługuje hd44780 i działa...
W bibliotece DallasTemperature, w funkcjach odczytu temperatury są sprawdzane CRC dla odczytanego scratchpada. Tą która mam odczytuje tylko dwa bajty, bez crc.
fajny kod:) Tylko czy wyliczanie crc z scratchpada i numeru seryjnego różni się? bo dla scratchpada, moja procedura chodzi bezbłędnie, tylko z numerem seryjnym problem...
Kolego Granat:) Dla Twojej informacji zacytuję Ci fragmenty noty aplikacyjnej układu DS18B20 "MEMORY The DS18B20’s memory is organized as shown in Figure 7. The memory consists of an SRAM scratchpad with nonvolatile EEPROM storage for the high and low alarm trigger registers (TH and TL) and configuration register. Note that if the DS18B20 alarm...
A najlepsze z tego wszystkiego jest to: char temp[10]; int16_t temperatura; ... DS18B20_read_scratchpad(0, (uint8_t *)&temperatura, 2); dtostrf(temperatura,1,1,temp);
Okej rozumiem , dziękuję za pomoc ;) Jeszcze przy okazji , aby nie robić nowego tematu specjalnie. Czy możecie sprawdzić program obsługi tego ds18b20? Program ma sterować diodą i optotriakiem podłączonym do PB1 oraz pośrednio (przez optotriak) triakiem do którego podłączona bedzie grzałka i w zależności od temperatury z czujnika DS18B20 uklad ma utrzymac...
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, Nie działą dalej:( The 1-Wire bus must be switched to the strong pullup within 10μs (max) after a Convert T [44h] or Copy Scratchpad [48h] command is issued, and the bus must be held high by the pullup for the duration of the conversion (tCONV) or data transfer (tWR = 10ms). No other activity can take...
no rzeczywiście ten _delay w pętli to przesada. Co do ds18B20 znalazłem jego polski opis może się przydać :) mogę wysłać emilem. Ok czaje write scratchpad [4Eh] ale jak podać mu dane żeby popłyneły do niego tzn te 80 stopni
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...
Witam przeczytaj dokładnie datasheet ds18b20 żeby ustawić rejestry TL i TH i Config,w najprostszej postaci musisz zrobić tak: -reset lini 1-wire -skipp rom 0xCC -write scratchpad 0x4E -teraz kolejno zapisujesz 3 bajty TH TL i Config i to tyle, jak sprawdzić alarm doczytasz sobie w nocie katalogowej zmiana np rozdzielczości i wpisnie przykładowej wartości...
timer zlicza czas w jakichś tam odstępach i dodaje do licznika +1. (wyeliminowano przepełnienia timera) . Jeśli jest impuls z halotronu (magnes kręci sie na łyżkach wiatromierza) to znaczy ze wykonano jeden obrót, i wtedy ten czas jaki zleciał do momentu przejechania magnesu, (np 1/50 sekundy) przeliczam na prędkość. Tylko do tego timera używam. Biblioteka...
Czesc wszystkim, Mam problem z poprawnym działaniem termometru na 7-segmentowym wyświetlaczu. Załączam film - no nie chce się bardzo rozpisywać. Generalnie to nic złego w bibliotekach multipleks. Coś z kodem jest nie tak prawdopodobnie w dsb1820. Poniżej załączam kod. Proszę o pomoc. Pozdrawiam. Dodam tylko, że temperatura jest wyświetlana poprawnie...
Pliczek do obsługi DS18B20 bez odczytu kodu :) może Ci się przyda [syntax=c] //**************Plik ds18b20.h****(xyz.isgreat.org)**********... int nrpin; // numer pinu sensora ds #ifndef DS18B20_H #define DS18B20_H /* DS18B20 przyłączony do portu AVRa */ unsigned char ds18b20_ConvertT(void); int ds18b20_Read(unsigned char []); void OneWireStrong(char);...
Wiem że temat już ma już trochę czasu ale podepnę się widząc że pare osób go śledzi. Czy w tym ostatnim kodzie nie powinno być jeszcze 1wwrite &H48? bo kolejno mamy reset, skip rom, zapis do scratchpadu, bajt th, bajt tl, bajt ustawień, i brakuje funkcji kopiującej ze scratchpadu do pamięci nieulotnej EEPROM, chyba że się tutaj coś mylę.
Co więcej, nigdzie przy odczycie temperatury nie ma juz sprawdzania CRC, Funkcja getTemp() wywołuje za każdym razem funkcję isConnected(), która z kolei czyta scratchpad i weryfikuje jego zawartość, w tym CRC: Dodano po 4 w większości funkcji (poza jedną, readscratchpad) nigdzie nie jest sprawdzany rezultat resetu, Do tego celu służy właśnie druga...
To duże opóźnienie w procedurze inicjalizującej jest po to by zobaczyć mignięcie diody. Wskazuje mi to, że coś się dzieje i że impuls obecności się pojawił. Nie ma to nic wspólnego z 1-wire. No chyba, że to coś przeszkadza. Jednak inicjalizacja działa dobrze. Impuls obecności się pojawia. Po dodaniu # pojawiła się jakaś sensowna wymiana. Widać, że '51...
Gdyby ktoś szukał sprawdzonego rozwiązania do zmiany rozdzielczości to polecam ten kod w c plik configds.c [syntax=text] // modified version to read DS18B20 in bit banging // // 24 May 2014 // Daniel Perron // // Use At your own risk // 7 August 2014 // Add arg parameter to select the GPIO pin // Add the priority function from Adafruit DHT22 c code...
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...
mm nie widzę deklaracji DDR - kierunków działania portów. Domyślnie są one ustawiane jako wejścia, a ustawianie ich za pomocą PORTB = 1 i PORTB = 0 to włączanie i wyłączanie Pullupa (który już de facto masz na magistrali). Poza tym nie wiem jak chciałbyś w ten sposób zapisać 0 :) Niżej masz wycinki mojego programu: (ATMEGA8) #define OW_IN DDRB &=...
Dziwne wartości z DSa masz na 80% z powodu zakłóceń linii. Nie czytasz całego scratchpada a tylko samą temperaturę, więc jeden przekłamany bit wystarczy żebyś dostał i wyświetlił śmieci. Czytaj cały scratchpad - on się konczy sumą kontrolną, więc po odebraniu danych możesz sensownie zweryfikować, czy to, co dostałeś, ma sens. [syntax=C] static const...
znalazłem coś takiego oblicza crc z np. DS18B20 lub iButon static __inline__ uint8_t _crc_ibutton_update ( uint8_t __crc, uint8_t __data ) [static] Optimized Dallas (now Maxim) iButton 8-bit CRC calculation. Polynomial: x^8 + x^5 + x^4 + 1 (0x8C) Initial value: 0x0 See http://www.maxim-ic.com/appnotes.cfm/app... The following...
czyli jak przykładowo dam: .... czyli flaga zmienia stan co ok. 1s,..... Z przedstawionej informacji wynika że masz w systemie tylko jeden układ DS, więc nie ma potrzeby go adresować (&H55-match ROM). wystarczy 'skip ROM'. Jeżeli flaga jest używana tylko do obsługi odczytu temperatury, to nie ma potrzeby aż tylu jej stanów (0/1/2/3; -wystarczy 0/1)....
Witam, otóż posiadam czujnik dallasa ds1820 nie ds18b20 i mam taki problem ponieważ nie mogę znaleźć żadnego kodu by odczytać temperaturę, próbuję korzystać od ds18b20 ale wynik mam równy 4. Oto kod: main.c [syntax=c] if(ds18b20_ConvertT()) { /* 750ms - czas konwersji */ _delay_ms(750); /* Odczyt z układu ds18b20, dane zapisywane są w tablicy ds18b20_pad....
Panowie mam debilne pytanie bo nie rozumiem tego a sporo się naszukałem i nie znalazłem wyjaśnienia. Chodzi mi o to: kody rozkazów do ds18b20 w manuału są takie: ' 1 Wire commands: ' 1. Read ROM - 33h ' 2. Match ROM - 55h ' 3. Search ROM - F0h ' 4. Skip ROM - CCh ' 5. Alarm Search - ECh ' Convert T - 44h ' Read Scratchpad - BEh ' WriteScratchpad - 4Eh...
Wolałbym się pobawić tymi bibliotekami, które już jako tako znam. Przeglądałem te po których wspominałeś, ale przyznam że była to dla mnie czarna magia. Mam nadzieję, że na mojego posta trafi osoba, która również korzysta z rkavrlib. Aby bardziej rozjaśnić sprawę wrzucę jeszcze kilka kodów z których powyższy program korzysta. obsluga onewire [syntax=c]#ifndef...
Program ogólnie poprawny, choć: 1. Zamiast Waitms 750 postaraj się wszystko ztimingować na timerze. 2. Nie ma żadnych przeciwwskazań, żeby w normalnej aplikacji DS był blisko kwarcu. A co ma poza tym eeprom ds'a do odczytu temperatury? EEPROM jest zapisywany wtedy i tylko wtedy gdy wywołasz komendę zapisu konfiguracji temperatur alarmów i rozdzielczości...
Nigdy nie zmieni :( DS jest grzecznym chłopcem(?) więc wykonuje tylko polecenia i odpowiada gdy jest pytany , poza tym milczy jak grób :wink: Pzdr. Piotrek Sz. To radze poczytac pdf'a :) CONVERT T This command initiates a single temperature conversion. Following the conversion, the resulting thermal data is stored in the 2-byte temperature register...
Poniżej cytat z datasheet : "CONVERT T [44h] This command initiates a single temperature conversion. Following the conversion, the resulting thermal data is stored in the 2-byte temperature register in the scratchpad memory and the DS18B20 returns to its low-power idle state. If the device is being used in parasite power mode, within 10 µs (max)...
To jest kod z kursu i nie wiem czy mogę go tak umieszczać na forum ale najwyżej jeśli to niezgodne z regulaminem to proszę usunąć [syntax=c]/* Plik ds18b20.c (minimum kodu do odczytu temperatury z ds18b20) xyz.isgreat.org */ #include <avr/io.h> #include <util/delay.h> #include "ds18b20.h" /***************************************...
Witam, czy ktoś z użytkowników forum spotkał się z funkcją wyszukującą termometry DS18b20 na magistrali 1wire za pomocą komendy ALARM SEARCH [0xEC]? W moim zamyśle cała procedura wyglądałaby następująco: 1. za pomocą komendy SKIP ROM i WRITE SCRATCHPAD ustawienie w SCRATCHPAD'ach wszystkich urządzeń na magistrali takiej wartości rejestru Th, by wszystkie...
To z 1296_merge_19c501f2bad3 i Maxim DS18B20 i 4,7k ohm - P10 - PowerSave 0 Info:CFG:D S1820 - poproszono o konwersję - Pin 10 Info:CFG:D S1820 - Pin=10 temp=+24.87 Info:CFG:D S1820 - High=1 Low=142 Val=398 Tc=2487 -- Odczyt CRC=8d - obliczono:8d Info:CFG: Info:CFG:D S1820 - zapytano o konwersję - Pin 10 Info:CFG:D S1820 - Pin=10 temp=+24.87 Info:CFG:D...
Po wielu bitwach stoczonych nad "projektem" zjedzonych nerwach i spalonym jednym czujniku, układ działa... pomijam fakt błędnego podłączenia wyświetlaczy, jednak główną przyczyną było zupełnie co innego - błędne odczytanie wartości temp z scratchpad'a oraz brak definicji F_CPU w pliku ds18b20.c Podczas walki z programem, po prawidłowym zapisaniu formuły...
Dzień dobry, Korzystam z gotowego kodu na komunikację przez protokół 1-wire oraz odczyt temperatury z czujnika DS18B20. Dla tego kodu prubuję zmienić rozdzielczość czujnika z 12bit na 9bit. Proszę o weryfikację kodu, a w zasadzie miejsca moich zmian, czy w dobrym miejscu kodu zmieniam wartości bajtów rozdzielczości czujnika? Oraz czy w ogóle robię to...
wiem wiem, że tak to się robi mam to napisane w programie dokładniej ten fragment jest za to odpowiedzialny: ................. Tyle, że czujnik ds18b20 nie podaje temperatury tak po prostu do procesora np.: 20 stopni Celsjusza tylko trzeba to troszkę przekonwertować za co odpowiedzialna jest ta część programu: fajnie miło i przyjemnie jeśli temperatury...
(at)MArSTER_1 A możesz powiedzieć jak to mierzyłeś? Bo wydaje mi się, że zakrzywiasz czasoprzestrzeń ;) Time slot wynosi min: 60us, max: 120us czyli ~0.5ms - ~1ms na bajt. [MATCH ROM]+8*[ROM CODE]+[READ SCRATCHPAD]+9*[SCRATCHPAD] i mamy 19 bajtów do przesłania po 1W + czas resetu ~1ms, co daje z grubsza od ~10ms do ~20ms na jeden czujnik. Jeżeli zrezygnujemy...
typedef union dallas_rom_id_U { long long id; u08 byte[8]; } dallas_rom_id_T; #ifndef ds18b20_h #define ds18b20_h //----- Include Files ----------------------------------------... "global.h" //----- Defines ----------------------------------------... #define ds18b20_rev 3 // family...
Witam wszystkich, w temacie mikrokontrolerów nie jestem zbyt mocny, dlatego proszę o pomoc. Postanowiłem zbudować termometr dwupunktowy na ds18b20 i wysterować multipleksując IW-18. Poniższy program działa, jego mankamentem jest losowy zanik pomiaru w jednym (IN) albo drugim (OUT) czujniku, czasem przekłamuje na sekundę pomiar, podając 80 stopni, jednak...
Proszę bardzo. Nie wiem jak to mogło się popsuć jak działało. A może z uC jest coś nie tak? [syntax=cpp] /* Plik ds18b20.c (minimum kodu do odczytu temperatury z ds18b20) xyz.isgreat.org */ #include <avr/io.h> #include <util/delay.h> #include "ds18b20.h" /***************************************... unsigned char ds18b20_ConvertT(void)...
Witam. Mam czujnik temperatury DS18B20. Przeszukałem ½ forum i nie znalazłem tego czego szukałem. Mój problem polega na tym, że nie wiem jak odczytać temperaturę z tego DS-a. Podaję polecenie na 1wire, aby odczytać pamięć SCRATCHPAD, ale co dalej?? Zrobić jakąś pętlę, która będzie zapisywała te 2 bajty temperatury(chodzi o rozdzielczość 12-bitową)??Jak??...
(at)gozbi - czytasz dwa bajty scratchpada to zrób z nimi tak (oczywiście nazwy zmiennych dopasuj do swojego kodu: T1 = Makeint(sc(1) , Sc(2)) T1 = T1 * 10 T1 = T1 / 16 Panowie - w kwestii głównej ma ktoś jakieś sugestie??
Sprawdź przykładowy kod do pomiaru czasu trwania funkcji: Zamiast tego nieszczęsnego delay(1000) lepiej użyć funkcji bibliotecznej bool isConnected(const uint8_t* deviceAddress) w cel weryfikacji, czy sensor jest gotowy do odczytu po wcześniejszym wykonaniu requestTemperatures() . Nazwa tej funkcji jest nieco myląca, ale robi to co powinna: czyta scratchpad,...
Witam Testuje czujniki temp ds18b20 3 sztuki na jednej magistrali. Mam już ich rom code i odczytuje ładnie temperaturę . Jak sprawdzić czy dany czujnik jest wpięty czy nie lub uszkodzony. Niby prosta sprawa a nie mogę sobie z nim poradzić Proszeę o pomoc. [syntax=c] while(!OneWireReset()); OneWireWriteByte(0xCC); // SKIP ROM OneWireWriteByte(0x44);...
Jeśli "Family not discovered", to DS18B20 jest wykrywany, ale jedna ze zmian w sterowniku przestała działać dla niektórych fałszywych czujników, nawet jeśli działały wcześniej. Testuję z pojedynczą partią DS18B20 z Aliexpress i nie działa tylko na NiceMCU, ale spróbuję ponownie. Za chwilę dodam zrzuty ekranu. Dodano po 13 . 1538_merge_331bfab0a8a5...
Witam serdecznie. Mój cel jest dosyć prosty - zbudować termometr oparty na uC ATmega128 wykorzystując czujnik DS18B20. Sprawa wydawała się banalna - wydawała się, gdyż niestety do tej porty nie potrafię sobie z tym poradzić. KOD: Identyczny jak ten ze strony http://hobby.abxyz.bplaced.net/index.php... (oczywiście ze zmienionym pinem 1wire):...
Ja mam to u siebie zrobione na maszynie stanów - niestety program jest napisany w ASM i a PIC'a, więc nie nadaje sie do bezpośredniego przeniesienia, ale istotny fragment mogę zamiescic: [syntax=asm] ;---------------------------------------... ; Odczyt temperatury z DS1820 - Match ROM bra uL_ResPres ; State=9 - reset/presence...
... 1wreset 1wwrite &HCC ' skip ROM 1wwrite &H4E ' writescrstchpad 1wwrite ' tutaj po kolei 3 bajty jest prawidłowa? Brakuje jeszcze jednego polecenia , czyli Copy Scratchpad (&H48) .Zajrzyj do pdf-a DS-a , by dowiedzieć sie czemu ono służy , oraz jakie wymagania czasowe stawia , w zależności od rodzaju zasilania czujnika. Piotrek
czy czas od zainicjowania do odczytu (ds'a) może być większy od 750ms Question Jeśli tak to jaka jest jego maksymalna wartość Question Nie ma maksymalnego czasu. Dane czekają w "scratchpadzie" przetwornika aż je odczytasz lub do czasu, kiedy przetwornik otrzyma następną instrukcję (np. znowu 0x44 - "CONVERT T"). A 750ms to czas dla rozdzielczości 12bit....
Widze ze kolega ma jeszcze bledsze pojecie o tym czujniku niz ja, polecenie przepisania notatnika do eepromu to Copy Scratchpad 48h Druga sprawa w notce aplikacyjnej nic nie pisze ze musze wysylac wszystkie 3 bajty ... pytanie czy rzeczywiscie nie musze ?! Jezeli ktos przeprowadzil udane doswiadczenia z zapisem i odczytem eproma DS18B20 w Bascomie to...
... Mozliwe ze mam błedy w kodzie. Wykrywa mi 2 czujniki, ale temperatury sa takie same. Gdy przeliczam CRC nic niepojaiwa się na LCD. Ano są błędziki :wink: Przeanalizujmy: ... '---------------petla glowna-------------- Do Konwert 'Dotyczy wszystkich urządzeń Waitus 200 '#####################czujnik 1## 1wverify Ds2(1) 'Czy jest na magistrali...
W temperaturze pokojowej około 20-22st. C. atmega czasem pokaże ponad 300st, lub poniżej -40. Popatrz uważnie na swój code. Komunikację z DS masz w dwóch bardzo krótkich sesjach: 1- żądanie konversji temperatury, i druga. 2. odczyt tej temperatury po konversji. Wydawałoby się że to jest znikomy ułamek czasu nie wiele znaczący(?), lecz jest warunek...
Witam, Napisałem prosty program do odczytu temperatury z DS18B20 jak poniżej, jednak odczytuje on wartości temperatury jedynie do około 57st.C. Powyżej tej temperatury same jedynki. Przekopałem dokumentację i jedyne co mi przychodzi do głowy, to alarmy, ale odczyt SCRATCHPAD nie wskazuje na to aby były włączone. Czy ktoś ma jakieś sugestie? [syntax=basic4gl]...
To już wiadomo wszystko. W aplikacji wyraźnie jest napisane!!! Note 1: For parasite-powered DS18B20s, the master must enable a strong pullup on the 1-Wire bus during temperature conversions and copies from the scratchpad to EEPROM. No other bus activity may take place during this time. W trybie Parasite-Powered DS18B20 niestety tak sie nie zasila czujników!!!...
Problem rozwiązany. W datasheet zalecany jest rezystor podciągający ok. 5k. Jednak dalej, jest informacja, że podczas niektórych operacji (m.in. przy konwersji temperatury) zapotrzebowanie na prąd, może wynieść 1,5 mA. 5V/5kohm = 1mA max. Zmiana rezystora na 3,3k rozwiązało problem. Szkoda tylko że maxim jest mało konsekwentny w swojej dokumentacji...
Do 1wreset : 1wwrite &HCC : 1wwrite &HBE Odczyt(1) = 1wread(2) T = Odczyt(2) Shift T , Left , 8 T = T + Odczyt(1) Shift T , Right , 4 1wreset 1wwrite &HCC 1wwrite &H44 Liczba = T Gosub Wyswietlanie Loop W tej pętli jest brak określenia czasu aby czujnik mógł przeliczyć temperaturę i wstawić ją do scratchpada...
Widzę, że większość pytań o d18b20 jest w tym dziale więc chyba tutaj najsensowniej zadać pytanie. Mam 10 termometrów ds18b20 podłączonych w trybie parasite. Problem jest tym, że odczytanie po kolei wszystkich zajmuje trochę czasu. Z tego co się orientuję, to pomiar temperatury wygląda tak, że wysyłamy do termometru polecenie Convert T i czekamy z wysokim...
Witam, jestem początkujący więc proszę nie krzyczcie na mnie. Chciałem zrobić termometr na atmega16, z temperaturą wyświetlaną na 3 7-segmentowych wyświetlaczach LED (trzeci to 1 liczba po przecinku). Z głębin internetu udało mi się wyłuskać coś takiego: main.c [syntax=text]#include <stdio.h> #include <avr/io.h> #include <util/delay.h>...
Witam, Jakiś czas próbuję doprowadzić do ładu mój termometr. Odsyła on sygnał po resecie, jednak próba odczytania temperatury kończy się fiaskiem. Działam na procesorze Atmega8, do opóźnień używam bilblioteki util/delay.h (WinAVR). Termometr podłączony jest na stałe do zasilania. Ten kod napisałem na podstawie dokumentacji temometru i dokumentu opisującego...
Witam, Z tej stronki [url=http://mirley.firlej.org/node/1137]... dowiedziałem się jak obsługiwać moduły komunikacji radiowej RFM12B. Przykład nadanika: [syntax=vbnet]$regfile = "m8def.dat" $crystal = 8000000 '8MHz $hwstack = 70 $swstack = 70 $framesize = 160 '$noramclear Config Submode = New Config Watchdog = 512 '512ms Start Watchdog '---------Constants---------------------...
Witam Mam 7 układów DS18B20 i chciałem dokonywać ich odczytu w kolejności. W przerwaniu od Timer0 ustawiam co 4 sekundy flagę, która ma spowodować wywołanie programu odczytu. ................ Tylko, że wstawienie tego w Case nie ma chyba sensu, bo w momencie wyboru z Case, dane jeszcze nie są obliczone. Pierwsza uwaga to nie dajesz wymaganego czasu...
Ludzie może mi odpowiedzieć jak sie zczytuje tą temperaturę chodzi mi o młodszy i starszy bajt. Jest coś takiego jak Read scratchpad BEH i jak tą komendą odzytać te dwa bajty. tam jest 8 bajtów obok bajtów temp są dwie wartości 50H i 05H czy to są adresy zpod których się zczytuje tą temperature
... to moze on sie poprostu caly czas resetuje ?? Kochasiu :!: Żeby zresetować rejestry temperatury w scratchpad , to musiałbyś odłączyć zasilanie od DS-a lub jeśli masz zasilanie pasożytnicze(linią DQ) , to musiałbyś na tej linii utrzymać stan niski , przez >960uS. Spróbuj zwiększyć czas konwersji , do 850ms. Piotrek
Piotrek_P napisał: Co do zamieszczonego kodu to nie wiem czy Ci się źle wkleił bo kilka piewszych linii nie jest "zakomentowanych". Już poprawiłem, błąd przy wklejaniu. majeranek53 napisał: Czy włączyłeś optymalizację kodu: -Os Dzięki wielkie to właśnie pomogło. Teraz mogę bez problemu zaprogramować atmęge. Oczywiście odwdzięczam się za pomoc. Teraz...
(at)niveasoft Przecież odczytując scratchpad masz w nim bajt określający konfigurację, który zawsze jest różny od zera bo 5 najmniej znaczących bitów ma wartość 1. W dodatku CRC jest przesyłane jako 9 bajt, więc wcześniejsze 8 musisz odczytać, aby dostać CRC. Kolejna sprawa - przy zwarciu magistrali błąd powinna wywalić już funkcja resetująca magistralę...
hym.. nie wiem czy rozszyfrowywac wszystko po kolei, jesli uznasz za stosowne napisz. powklejam kolejne wywolania. Funkcja ktora pisze (zle dzialajaca) wyglada tak: void ds18x20::pobierz_kod(uint8_t kood[8]) { if(!reset()) return ; write_byte (0x33); for(uint8_t i=0;i<8;i--) { kood[i]=read_byte();...
Mniej więcej zrozumiałem.. ideę zrozumiałem Linia 1-Wire musi być przełączona na silne podciąganie 10us (max) po wydaniu komend Convert T (44h) lub Copy Scratchpad (48h) i magistrala musi być utrzymywana przez czas konwersji (tconv) lub czas transmisji danych (twr=10ms). Żadne inne działanie nie może mieć miejsca na magistrali 1-Wire kiedy włączone...
Witam. Napisałem poniższa bibliotek do obsługi DS18b20. Po wysłaniu sygnału RESET (0xF0) otrzymuje od czujnika temperatury sygnał PRESENCE (0xE0). Problem napotykam w chwili odczytu danych z scratchpada. W tablicy w której mam przypisane dane z czujnika są zera ;/ [syntax=c] void one_wire_init(void) { RCC->APB1ENR |= RCC_APB1ENR_USART2EN; RCC->AHB1ENR...
Ok, to ja dorzucę swoje trzy grosze :) Przede wszystkim, aby procedury _delay_* działały poprawnie należy włączyć optymalizację kodu np -O1 Sprawdź może to powoduje problem. Po drugie, na czas odczytu i zapisu magistrali warto zablokować przerwania, tak żeby procedura obsługi przerwania nie rozjechała czasu poszczególnych okien. A na koniec moje procedury,...
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ą...
Mam problem, podłączyłem dwa czujniki i nie mogę odczytać temperatury. Czy schemat odczytu wygląda tak: 1) Reset 2) write H55 - aby powiedzieć kto ma słuchać poleceń 3) Podaje adres czujnika 4) write HBE dla odczytu scratchpad 5) Odczyt scratchpad do zmienych 6) Reset Mam jeszcze pytanie, co tak właściwie robi 1wverify, co on weryfikuje? Czy połączenie...
Podobny problem zgłaszam..:( Korzystam z następującego gotowca : #include <avr/io.h> #include <stdlib.h> #include <util/delay.h> #include <stdio.h> #include "serial.h" //#include "HD44780.h" #ifndef F_CPU #define F_CPU 8000000 #endif #define WE 4 #define PORT_1wire PIND #define SET_1wire DDRD&=~_BV(WE)...
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...
(...) 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...
Witam, moze ktos przesledzic ten kawaleczke kodu (BASCOM) i powiedziec co jest nie tak ? Problem tkwi w tym ze odczytywane temperatury sa ok (wystarcz mi dokladnosc do 1 st C) jednak jak odlacze ktoregokolwiek DS'a to Tin = Tout zamiast wpisac wartosc 99 (w taki sposob wykrywam ze uszkodznieu ulegla ktorys czujnik) Program to kawalek kodu ktory ktos...
termostat ds18b20 rozdzielczosc ds18b20 ds18b20 mirekk36
zawiasy lodówki amica maszyna schemat klejenie żywicą metal
Programowanie biorytmów na Arduino GIGA Display Montaż śrubunku mosiężnego z zaworem zwrotnym przy bojlerze C.W.U.