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
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.
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...
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
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
Tutaj masz gotowy przykład bez użycia float-ów (oszczędność pamięci): http://mikrokontrolery.blogspot.com/2011...
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...
Temat ten był już wałkowany n razy Zerknij do datasheet'a DS'a Wydaje mi się że czas po odebraniu bitu jest zbyt krótki, z tego co pamiętam to tam min 75 us powinno być Tu masz kawałek działającego kodu, przerób sobie pod swoje komendy #define ONEWIRE_PIN PB2 #define ONEWIRE_PORT PINB #define ONEWIRE_DDR DDRB static uint8_t onewire_reset() {...
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...
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);//...
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
Masz podciąganie linii danych?
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...
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++)...
Masz rezystor podciągający? Niektórzy o nim zapominają.
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ąć...
kody mam ze źródła w necie. Zamiesciłem poniżej. próbowałem ter źródła cezarego klimczaka ale efekt ten san
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...
Waitms 750 musisz mieć przed odczytem.
Układ termometru DS18B20 jest na pewno oryginalny ? Nie jest podróbką? Był parę dni temat własnie o tych układach, że podróbki stwarzają często dużo problemów z uruchomieniem i prawidłowym działaniem programów. https://www.elektroda.pl/rtvforum/viewto...
Nikt mi nie pomoże?
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...
Długość przewodu raczej nie ma za dużego wpływu na to. Spróbuj podłączyć spróbuj podłączyć czujniki obydwa tak samo do zasilania. Jeżeli będą wskazywać nadal taką różnice to będzie znaczyło że coś jest nie tak z jednym z nic, może wada fabryczna, albo przegrzanie przy lutowaniu.
SZUKAJ słowa klucze Atmega8, DS18B20, a znajdziesz aż za dużo.
Witam, mam problem, kiedyś robiłem termometr oparty na atmega8, z podpiętym lcd i czujnikiem ds18b20, działało elegancko, teraz chcę wykorzystać starą płytkę, uruchamiam a tu nie wyświetla temperatury, tekst na wyświetlaczu jest elegancko, nawet mam podpięty do portu com i też działa, a z tym czujnikiem się już kilka dni użeram i nic. Testowałem na...
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.
Dalej to samo... A czemu miało by być inaczej :?: Patrząc na Twój kod , dochodzę do wniosku , że: a) nie czytałeś dokumentacji DS18B20 b)czytałeś , ale nie zrozumiałeś Dlaczego odczytując dane o temperaturze , odczytujesz tylko 1 bajt :?: Pisałem już kilka razy na tym forum , że DS18B20 standardowo zwraca dane w postaci 16-bitowej liczby typu signed...
Jak używam funkcji z util/delay.h to mój kod zajmuje za dużo pamięci w procesorze i nie chce sie kompilować ;/ Edit: Error4region `text' overflowed by 548 bytes funkcję opóźniającą wziąłem ze strony: http://teslabs.com/openplayer/docs/docs/...
Po odczycie bajtów Msb i Lsb spróbuj dać 1wreset.
dziwny problem .. AAaaa .. a czemu skoro zmniejszyłeś rozdzielczość do 9 bitów to robisz wartość / 16 ?? / czy nie trzeba by odpowiednio zmienić działki .. ?? / Masz tu moją bibliotekę dla wielu Ds-ów ( używałem 8 ) chodzi bardzo sprawnie - miałem problemy z zakłóceniami / siały mi falowniki /. Otrzymujesz tablicę z wartościami temp w dziesiątych częściach...
Witam ! N apisałem taki program: $regfile = "m8def.dat" $crystal = 8000000 Config Portd = Output : Portd = 255 Config Portb = Output : Portb = 255 K1 Alias Portd.0 K2 Alias Portd.1 K3 Alias Portd.2 K4 Alias Portd.3 K5 Alias Portd.4 K6 Alias Portd.5 K7 Alias Portd.6 K8 Alias Portd.7 Config 1wire = Portc.5 Dim Nr_kol As Byte , A As...
...Jakieś pomysły?? Źle "składasz/sklejasz" odczytany bajt :( //procedura odczytu bajtu z urzadzenia unsigned char wire_read_byte1(void) { unsigned char bajt, tmp, i; bajt = 0; for(i = 0;i<8; i++) { tmp = wire_read_bit1(); tmp = tmp << i; bajt = bajt | tmp; } return bajt; } Ja zrobiłbym to tak: //procedura...
Google->avr printf float.
I popraw ten 33h :>
Jakiego typu jest zmienna temp?
Jest na koncu po odczytaniu wszystkiego. A kod wyglada ok? Bo juz nie wiem gdzie jest blad. rcallds_reset ldi temp,0xCC ;zaladowanie wartoťci do wyslania do ds 18b20 rcallds_nadaj_bajt ;ktora omija komendy ROMu ldi temp,0xBE ;odczytaj scratchpad rcallds_nadaj_bajt rcallds_odbierz_bajt mov t_lsb,odcz_bajt rcallds_odbierz_bajt mov t_msb,odcz_bajt ldi...
Jak myślisz co tu jest nie tak: #define OW_PORT PORTC // port na ktorym jest termometr #define SET_1Wire DDRC&=~_BV(OW_PIN) #define CLEAR_1Wire DDRD|=_BV(OW_PIN) DDRD zamiast DDRC, fakt, drobna pomylka, no to teraz ciagle mi pokazuje ze brak DS18B20...
1-WIRE jest bardzo podatne na zakłócenia, poczytaj sobie w dokumentacji DS18B20 i Bascoma o sprawdzaniu sumy kontrolnej CRC.
Ja też tego nie rozumiem. Chociaż rozumiem, że w tego typu przypadkach na 99% wina leży po mojej stronie. W C programuje dopiero od kilku miesięcy i nie czuję się jeszcze w tym zbyt pewnie. Najprawdopodobniej coś przeoczyłem. Z mojej ręki "poszło do ludzi" ponad dwie setki takich czujników, wszystkie zasilanie oczywiście parasite - innego zasilania...
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...
pin już próbowałem zmieniać, ale nie pomogło, z timerem1 też próbowałem i również kicha, ale spróbuję jeszcze raz
czytałem wolniej i efekt ten sam:(
zamykam temat:) dziękuje wszytki którzy się wypowiedzieli
no masz rację pomyliłem się tylko jak z tym odczytem ?
W funkcji unsigned char read(void) powinno być opóźnienie na pozostałą część trwania bitu. [syntax=c]unsigned char read(void) { unsigned char PRESENCE = 0; CLEAR_1wire; _delay_us(2); SET_1wire; _delay_us(15); if(bit_is_set(PORT_1wire,we)) { PRESENCE = 1; } else { PRESENCE = 0; } _delay_us(65); //tu opóźnienie wpisałem 65us ale może powinno być inne...
No program źle napisany - jakbyś dał sprawdzanie CRC to byś wyelimonował błędny odczyt.
A może masz czujnik DS18B20, upewnij się że jest to DS1820. Ale dziwne, najpierw termometr działał poprawnie a później przestał. Zastanawia mnie jeszcze to że (jak piszesz) czujnik reaguje na zmiany temperatury bo zmienia się zmienna T1, a nie da się odczytać temperatury. Ciekawe w czym jest problem.
błąd w procedurze odczytu - jak pisał przedmówca. Próbowałeś mój kod uruchomić?
Witam, mam następujący problem. Chcę zaprogramować atmega 8 tak by przy określonej temp włączyła diodę. Temp mierze czujnikiem ds18b20 wykorzystałem kod który znalazłem w sieci. Całość pisana w C [code][syntax=c] #include <stdio.h> #include <avr/io.h> #include <util/delay.h> #include "ds18b20.h" int main(void) { DDRD |=(1<<PORTD);...
Witam. Podpinam się pod temat. Także mam problem z odczytem temperatury, mianowicie cały czas mam odczyt -0.1. Kod do obsługi DS'a mam identyczny jak kolega kosa3, wygląda na to że z tego samego źródła.Smile Atmega8 mam ustawioną na 8Mhz.
W datasheet-cie DS-a jest napisane co oznacza gdy wysyła ci temperaturę 85 stopni... Jest to jak najbardziej uzasadnione, ponieważ pierw odczytujesz wartość rejestru temperatury a dopiero po tym rozpoczynasz konwersję, zawsze pierwszy wynik będzie błędny... Nie przeklejaj bezmyślnie kodu od innych. Pozdrawiam, GSM
Chyba już wiem co może być, tylko nie wiem gdzie jest źródło problemu. Doczytałem się, że po zerowaniu po włączeniu zasilania bajty odczytu temperatury są ustawiane na wartość 85.00 stopni i tę wartość udaje ci się odczytać z rejestrów DS18b20 (co świadczy, że procedury odczytu działają poprawnie). Doczytałem się jednak też, że w układzie zasilania...
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ą...
Czy wyzwalanie przerwania obsługi wyświetlacza w trakcie odczytu z DSa nie powoduje błędów? Wiadomo ze ważne jest zachowanie wtedy odpowiednich opóźnień, a przerwania skutecznie to utrudniają. Ja w podobnym projekcie na attiny2313 miałem z tym problem. Skończyło się na konieczności blokowania przerwań na czas opóźnień (tych krótkich, mających kluczowe...
Hej. Napisz dokładnie jakie czujniki masz. Z tego co wiem są czujniki DS18B20, DS18S20,DS1820. Jeśli masz zastosowane dwa różne czujniki może to być przyczyną innych odczytów gdyż informacja odczytywana z tych czujników ma różną postać binarną na przykład +25 stopni dla DS1820 ma postać 0032h natomiast DS18B20 ma postać 0191h. Pozdrawiam
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 :)
zumek w lutym napisał żeby ustawić reload=6 i nie pytać dlaczego. Dodano po 4 A odczyt ds może trwać 700ms-może stąd lepiej.
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...
Tylko że powinieneś przyspieszyć, a nie opóźnić moment odczytu. http://obrazki.elektroda.pl/7392689500_1... Chodziło mi raczej o coś takiego: [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...
Witam, Poszukuję czujnika, który odczyta temperatury rzędu 200*C ale jak dotychczas takiego nie mogę znaleźć(LM35 do 150*C, ds18b20 do 120*C). Co mogę wykorzystać do takiego odczytu przez Atmega8? Pozdrawiam
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...
cześć. a jaki masz zegar? u mnie też nie chciało chodzić, bo miałem 1mhz.przestawilem na 8mhz i dziala (chyba chodzi o dopsowanie z procedurami odpowiedzialne za zliczanie czasu). zajżyj tu: http://www.elektroda.pl/rtvforum/topic28... ja tez mialem problemy z odczytem z ds18b20.w linku któy podałem, znajdziesz kompletny kod na atmega8 dla ds18b20...
Witajcie, W oparciu o Atmegę8 zrobiłem sobie prosty sterownik. Odczytuję temp. z dwóch czujników ds18b20 i na jej podstawie steruje elektrozaworem. Chciałbym dodatkowo wprowadzić obsługę 3 przycisków. Problem w tym, że sam odczyt temp. z czujek powoduje pewne opóźnienia np. czas konwersji jest dosyć spory bo 750ms w związku z tym reakcja na przyciśnięcie...
Mam termometr na Ds1820 i Atmega8.Pracuje na wewnętrznym oscylatorze(przestawiłem na 4Mhz) bez zarzutu.Należy pamiętać o $crystal (np.4000000). Pozdrawiam!
No tak, bo ja nie mam w zamiarze mieć alarmu dźwiękowego. Więc usuń z programu także deklaracje odnosnie wymiarowania zbędnych zmiennych i uzupełnij poprawki j.w. Wytestuj program w symulatorze running "step into code" (F8) i w odpowiednich momentach kodu uzupełniaj 'ręcznie' zmiany logiczne pinów a także symulowane wartości zmiennych (np: odczyt temperatury...
Witam Panowie szukam, szukam i nic nie znalazłem. Jestem początkujący i chcę uruchomić dwa czujniki DS18b20 na jednej magistrali. Jeden działa wyśmienicie ale dwa naraz to już dla mnie wyższa szkoła latania. Proszę o jakiś kod do odczytu temp z 2 czujników (np" tem zew. i tem wew.).
Witam, mam dziwny problem, pomoże mi ktoś go rozwiązać? Chodzi o to, że buduję urządzenie, które na żądanie będzie mierzyło temperaturę układem DS18B20. Żądanie odbywa się poprzez naciśnięcie odpowiedniego przycisku na pilocie RC5. Całe moje urządzenie to dwa AVR: Atmega8 (jako dekoder RC5, który wysyła odebrany adres i komendę poprzez USART do drugiego...
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...
Czym jest spowodowany fakt iż nie dostarczając napięcia do dsa " pracując w konfiguracji dwóch linii danych z podciągnięciem i masa " na pc czujnik działa ok a po podłączeniu do up nie można odczytać danych? Komunikacja jest poprawna ponieważ jest możliwe odczytanie id dsa. Ogólnie tym, że połączenie w trybie dwuprzewodowym (pasożytniczym) wymaga bardziej...
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...
Temat pewnie był opisany na tym forum kilkukrotnie. Najlepiej skorzystać z noty katalogowej układu. Tam wszystko jest dokładnie opisane. Rozumiem, że kilka czujników chcesz podpiąć na wspólnej magistrali 1-wire bo gdy stworzysz dla każdego czujnika osobną ten problem nie istnieje. Sposoby są ogólnie na to dwa. Pierwszy -wg. mnie prostszy ale mniej profesjonalny-to...
Witam, w ramach nauki programowania uC, znalazłem kod pozwalający na wyświetlanie temperatury z DS18B20, na wyświetlaczu 1602A. Jako że na samym przeklejeniu kodu pewnie zbyt wiele bym się nie nauczył, użyłem nieco innego termometru(dokładność nie 0,1, a 0,5*C), zmieniłem układ w jakim ma się wszystko wyświetlać, zastąpiłem float przez int zmieniane...
Jest poprawa, jednak gdy temperatura spada do 0, LCD wyświetla nr seryjne DS-a, 4 razy mignie tymi cyframi, po czym wyświetla temperaturę ujemną. Przy wzroście temperatury jest tak samo, gdy z ujemnej się zbliża do zera, ok 3-4 razy migną cyfry z odczytem nr. seryjnego DS-ów po czym pokazuje poprawną temperaturę.
Ale cały projekt to nie zegarek, co określoną ilość czasu przerwanie inkrementuje główną zmienną programu, dokładnie co 3 minuty, potem następuje odczyt eepromu i sprawdzenie warunku, a główna pętla to pomiar temperatury na DS18b20
co jaki czas chcesz odczytywać temperaturę obecnie ustawiłeś program w pętle która tylko odczytuje ds-a my potrzebujemy pętlę która ciągle będzie odświeżała wyświetlacze czyli do ... tu odświeżanie wyświetlaczy loop a odczyt co pewien czas do odczytu trzeba 1. zainicjować ds-a 2. odczekać ok 750ms 3. odczytać ds-a można to zrobić poprzez taimery lub...
...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...
Po ustawieniu fuse bitów tak żeby uwzględnić $crystal=4000000 program w dalszym ciągu nie reaguje na nic. Mógłbyś napisać program do odczytu temperatury z DS18B20 i wyświetleniu jej na LCD tak żebym mógł sobie sprawdzić moje czujniki temperatury
Poczytaj kartę katalogową DS18B20 ! W kominku potrzebujesz odczytu temperatury z dokładnością około 0.1°C , a nie wystarczyłoby do 1° C. Poza tym użyj obsługi klawiatury w przerwaniu.
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...
Po przeanalizowaniu wszystkiego po raz kolejny, oraz analizując artykuł od michalko12 wygląda dla mnie to tak: skoro cały odczyt z ds'a zapisywany jest do tablicy ds18b20_pad to dwa pierwsze elementy jej to jest kolejno LSB i MSB, w LSB jest zapisywana wartość temp wraz z częścią ułamkową, a w MSB część wartości całkowitej temperatury oraz znak... i...
Z dziwnych powodów przekaźnik czasami włącza i wyłącza się na chwilę... Powiedziałbym, że to algorytm termoregulacji jest tak skonstruowany, ze jest podatny na złe odczyty z czujnika. P.S. - Nie mogłem się powstrzymać: http://demotywatory.elektroda.pl/get_ite... ;)
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...
Witaj. Zacznij od tego, że symuluj (w odpowiednim miejscu Twojego programu) prawidłowe (według Ciebie) wartości pomiaru i wyświetlaj je na wyświetlaczu. Uwzględnij newralgiczne przypadki jak np. zero oraz dodatnia i ujemna temperatura. To pozwoli Ci na ustalenie czy przyczyną są funkcje wyświetlania, czy odczytu temperatury. Następnie drążysz temat...
sprawdzenie tego kodu co napisalem No to podłącz i sprawdź ;) Sprawy do rozważenia: - Czujniki masz na jednej linii, czy na osobnych? - Czy zachowujesz odpowiednio duży odstęp czasu między poleceniem konwersji a żądaniem odczytu? - Wyświetlacz obsługujesz poprzez jakiś bufor ramki, czy bezpośrednio w CGRAMie rysujesz?
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):...
odczyt temperatury z DS18b20, dokładność do 0,5 stopnia. A o jaką konkretnie funkcję z libm chodzi? Dziękuję, zaznajomię się z tematem.
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ę...
DS18B20 może być zasilany napięciem od 3 do 5V. Ja osobiście zasilam 3.3 i nie stanowi to najmniejszego problemu. Czy aby na pewno jest to DS18b20 a nie np DS18b20p z zasilaniem pasożytniczym?, chociaż prawdę mówiąc nawet przy zasilaniu pasożytniczym układ powinien odpowiadać na reset pulse. Co do czasów osobiście w swojej procedurze reset pulse stosuje...
Witam, wg mnie błąd leży po stronie konwersji temperatury, czyli w tym fragmencie kodu: [syntax=c]temp = ((ds18b20_pad[1] << 8) + ds18b20_pad[0]) / 16.0 ;[/syntax] Musisz zerknąć do datasheet'u ds18b20 i zobaczyć jak zapisana jest temperatura w dwóch najmniej znaczących bajtach, czyli Twoich ds18b20_pad[0]...
Biblioteka której użyłeś nie ma możliwości dowolnej konfiguracji pinów. W załączniku masz bibliotekę prosto z Rosji :D Chiński wyświetlacz sam mi się uszkodził ale coś tam wyświetla :D http://obrazki.elektroda.pl/6257086800_1... Kod którego użyłem do zrobienia tego zdjęcia [syntax=vbnet] $regfile = "m8def.dat" ' specify the used micro...
Witam ponownie. Prośba jak w poprzednio. Zupełnej zmianie uległ sposób sterowania grzałkami. Obecnie problem polega na tym, że na wyjściu grzałek, bez względu na temp., nic się nie dzieje. Załączam zmodyfikowany kod: include <stdio.h> #include <avr/io.h> #include <util/delay.h> #include "hd44780.h" #include "ds18b20.h"...
Nie rozumiem czemu uparłeś się na ten kwarc zegarkowy ? Przecież zegar równie dobrze można zrealizować dzięki np. Timer1 taktowany rezonatorem kwarcowym 8Mhz. A drugi timer wykorzystać do multipleksowania wyświetlaczy. Z kolei na czas odczytu z DS'ów trzeba wyłączać przerwania, bo czasy 1 wire są ściśle określone.
Żeby być pewnym na 100% to jak odczytać temperaturę z 2 czujników DS18B20? pierwszy czujnik: 1wreset 1wwrite &H55 1wverify ID pierwszego układu 1wwrite &HBE odczekać czas na pomiar temperatura1 = 1wread(2) drugi czujnik 1wreset 1wwrite &H55 1wverify ID drugiego układu 1wwrite &HBE odczekać czas na pomiar temperatura2 = 1wread(2) Czy coś jeszcze trzeba?...
Z tego co się orientuję to pisząc temp2 = 32+(5/9)*temp; działasz na liczbach całkowitych, więc wynik będzie zawsze 32 bo 5/9 całkowite to 0. Chyba powinno być temp2 = 32.0+(5.0/9.0)*temp; Ale nie jestem pewien. Dodano po 17 Z tego co pamiętam z programowania w C to właśnie zapis "5.0/9.0" dawał kompilatorowi sygnał że dzielenie ma się odbyć na liczbach...
Siemka! Nie ma większego problemu i z paroma czujnikami. Rozwiązania tego problemu są conajmniej dwa. 1. Wrzucasz czujniki każdy na innym pinie portu mikrokontrolera i odczytujesz wynik korzystając właśnie z algorytmu dla jednego czujnika. Jedyna kwestia to tylko sekwencyjne przełączanie interface'u 1-Wire pomiędzy połączonymi z czujnikami pinami portu....
Witam ! Schemat ma błędy ( brak rezystorów np. 470om szeregowych z LEDami ), niezgodny z kodem, co najmniej w jednym miejscu: pin nr 1 ATmega8 nie powinien być podłączony z LCD tylko ( typowo ) przez rezystor np.4,7k do +5V, natomiast połączenie (LCD z ATmega8) pin nr13 LCD powinien być przełożony z pinu nr1 ATmega8 na pin nr3. Problematyczne może być...
Witam. Proponuję wszystkie operacje przeprowadzić na przerwaniach. Czyli na przykład Przerwanie od Timer 1 steruje wyświetlaniem znaków co określony czas wyświetlasz kolejny znak czas dobierasz na tyle krótki żeby nie widzieć migotania, Przerwaniem od Timer 0 odmierzasz czas dla odczytu temperatury. Pozdrawiam
Witam. Usiłuję zrobić termostat na DS18B20 i ATMEGA8.Działa mi odczyt temp. z DS, lecz sterowanie pinemC3 w zależności od zadaklarowanej temperatury w zmiennej "A" nie działa prawidłowo.Proszę o podpowiedzi czy nie popełniłem baboła.Czy takie wpisanie temperatuty do "A" jest prawidłowe. I1 = I1 * 10 I1 = I1 / 16 'If I1 > 0 Then Cls Ss = Str(i1) Ss...
Witam wszystkich. Mam problem z obsługą DS18B20 na Atmega16. Zacznę od tego, że obsługę tego czujnika i wyświetlacza segmentowego mam opanowaną, bo na Atmega8 wszystko mi działa, także sam czujnik jest w porządku. Czujnik mam podłączony w trybie NORMAL z użyciem rezytora 4,7k(takie samo podłączenie mam dla Atmega8), do PD0. W bibliotece do obsługi czujnika...
Funkcja odczytu jest wywoływana tylko tutaj w nieskończonej pętli głównej: [syntax=c] convert(); LCDcls(); temperatura=(odczyt_DS()); LCDhome(); LCDstr("Tb= "); LCDdec(temperatura); LCDsend(0xDF); LCDstr("C "); [/syntax][/code] Sama obsługa wyświetlacza raczej nie będzie tu przyczyną...
ds18b20 odczyt ds18b20 atmega8 atmega8 odczyt
at90s2313 zamiennik toyota radio zasilać iveco daily problemy klimatyzacja
wymiana baterii telefonie motorola wymiana baterii
Schemat elektryczny skuter Barton Falcon Ero 5 Skuteczność kolumn Heco Precision 300 - 90-91 dB