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...
Proszę bardzo, przykładzik jest lekką modyfikacją liczenia czasu w przerwaniu z książki Wiązani. [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 8000000 Config Timer0 = Timer , Prescale = 256 On Timer0 Przerwanie Dim Licznik8ms As Word Dim Flaga As Bit '1 juz czas, 0 jeszcze nie Enable Interrupts Enable Timer0 Load Timer0 = 250 Do 'wyslanie komendy...
A kto ci każe używać delay? DS ma możliwość sprawdzenia czy konwersja jest już gotowa. Poza tym można do obsługi 1-wire użyć np. UART i całość zrobić w przerwaniach, zapisując odczytany wynik do jakiejś zmiennej.
Jaki masz kwarc? Przed loop daj 100ms przerwy.
Czego byś nie robił odczyt nie będzie błyskawiczny, przynajmniej z gotową biblioteką do Arduino. Wg mnie wszystko co zajmuje pętlę loop na dłużej niż 1ms jest wolne, ale da się z tym żyć. Jeśli Ci blokuje na 750ms to zapewne używasz biblioteki DallasTemeprature. Można wyłączyć oczekiwanie na pomiar metodą DS18B20.setWaitForConversion(0); (po begin),...
No to tak: Jeżeli dobrze czytam program to masz 4 przyciski, timer ustawiony tak aby przerwanie od niego występowało co 50 Hz i nic poza tym. Używasz tylko przerwania od Timera - boisz się innych? Czy może to tylko nieznajomość AVR. Aż prosi się żeby przyciski działały pod INT0 / 1 - zewnętrzne przerwanie i po kłopocie. Następnie _delay_ms(750); zamienił...
Przypisywać powinieneś wartość zwracaną przez metodę getTempCByIndex - tak jak to robisz wyświetlając wynik, a nie metodę requestTemperatures która tylko wykonuje pomiar do zmiennej wewnątrz klasy a później nie zwraca nic (dlatego void). Poza tym twój kod jest tak samo zły jak wspomniany delay - poczytaj o przerwaniach.
Można oba odczyty dać do przerwania. Zliczać je i co któreś przerwanie robić odczyt. Czyli timer, np. przerwanie co 250 ms - co 3 przerwanie robisz odczyt temp. (w pierwszym dajesz polecenie konwersji, w 3 odczyt), co 8 przerwanie odczyt wilgotności.
Ja robiłem multipleksowanie 8 cyfr i odczyt 2 ds_ów i jedynie co to trzeba liczyc CRC bo jesli przerwanie wystąpi w chwili komunikacji z ds_em to wyswietla głupoty. Pozatym zero migania lub przerw w działaniu wyswietlacza.
Witam ! Zostałem poproszony o zamknięcie tematu, co czynię. Problem został rozwiązany poprzez porządne połączenie wszystkich czujników. W kostce połączeniowej robiło się zwarcie, albo przerwa. Pozdrawiam ! PL
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...
Oliczenia są ok, pamietaj tylko o ustawieniu przecinka w odpowiednim miejscu. Grzesiek. Ps. w Twoim programie procek czeka bezczynnnie przez 1s, można to zrobić na przerwaniach - jak? poszukaj na elektrodzie, było już kilka razy.
Wszystko działa :) Jako bit kontrolny ustawiłem 0xAA zamiast 0x55 i śmiga aż miło. Poniżej działający kod odbiornika i nadajnika. Temat do zamknięcia. Nadajnik [syntax=c]/*Obliczenie prędkości transmisji*/ #define BAUD 2400 #define MYUBRR (((F_CPU / (BAUD * 16UL))) - 1) /*Dołączenie bibliotek*/ #include <stdio.h> #include <avr/io.h> #include...
Witam, przekopałem się przez wiele tutoriali, postów, wątków, i nie znalazłem rozwiązania, więc postanowiłem opisać własny problem. Mianowicie: mam podłączone do Atmegi8 dwa wyświetlacze 7seg multipleksowane, oraz termometr cyfrowy DS18B20. Chciałem aby zmierzona temperatura była wyświetlana na tych 7seg, oczywiście ze względu na dwa wyświetlacze jedynie...
Ten plik o ile się nie mylę to jest sama biblioteka, w dodatku niekompletna ponieważ kompilator wywala całą masę błędów :/ Edit. I jeszcze jedno znalazłem kolejny przykład spróbowałem skompilować i tym razem dzieją się takie cuda: http://scr.hu/8e6i/jt5tp kody: DS18B20.h [syntax=c]#ifndef DS18B20_H #define DS18B20_H /* DS18B20 przyłączony do portu PA0...
Powrócę jeszcze do tematu. Timery programowe to objaśnił Mirekk36 w swojej książce oraz artykułach i wideo poradnikach, bardzo dobrze je się stosuje. Jest to proste, wystarczy ustawić jakiś timer w tryb CTC i wywoływać przerwanie co jakiś zamierzony czas (stosuje około 10ms). F_CPU/Prescaler/100 Zaokrągloną wartość wpisujemy do rejestru OCRx. W przerwaniu...
Nie wiem czy chcesz się nauczyć czy potrzebujesz program. Na początek te uwagi: 1. Nie wiem co tam robi dyrektywa $eeprom. Jest niepotrzebna w tym kodzie 2. Zmienna Ds jest zwiększana w przerwaniu niezależnie od tego czy jesteś w Menu czy nie. Tak więc po powrocie z Menu już na pewno nie zdążysz załapać się na warunek If Ds = 2 i wyzerować jej wartość....
Jak na mój gust to ty nie wychodzisz z obsługi przerwań. W przerwaniu masz "delayms(DS18B20_TCONV_12BIT);" (to jest pewnie 750ms...) jeżeli przerwanie się wywołuje częściej niż co 750ms (+ew czas na obsługę LCD itd.) to w praktyce procesor działa tak: 1.uruchamia się w main(); 2.... 3.Włączenie przerwania sei(); 4.Wywołanie przerwania 5.Długo trwa przerwanie......
W OW_Reset po wyslaniu RESET_PULSE (ktory zreszta powinien trwac 480us, a nie 450) za dlugo czekasz pomiedzy koncem RESET_PULSE a poczatkiem badania PRESENCE_PULSE. Kolejna rzecz - po wykryciu PRESENCE_PULSE nie dawaj stalego opoznienia tylko probkuj magistrale az wroci do "1" - oczywiscie z zabezpieczeniem przed zwarciem do "0" - zeby program sie nie...
Nie, nie, delay to porażka, wykorzystaj funkcję millis() np. tak : [syntax=c]unsigned long czas; const unsigned long przerwa = 60000; // 60 sekund void loop() { if ((unsigned long)(millis() - czas) >= przerwa) { czas = millis(); // tu pomiar temperatury i ustawienie przekaznikow } } [/syntax] To samo możesz zrobić dla wyświetlania danych na LCD, bo...
A kto powiedział że musisz go wyłączać? Istnieje lepszy sposób: robisz sobie flagę którą resetujesz w pzrerwaniu od timera. Potem wystarczy dodać coś takiego: Set Flaga : While Flaga = 1 : Wend Takie coś wstawiasz tam gdzie wcześniej musialeś wyłączać przerwania. Działa to tak że uc czeka aż wykona się przerwanie i dzięki temu wiemy że miało...
Być może jestem na to za głupi i się nie nadaje. Rozumiem to tak że jeśli ustawiam pin 3 na INPUT to jest to pin wejsciowy z domyslnie zerem logicznym czyli 0V. Źle myślisz, poczytaj o funkcji pinMode. Jak podlaczylem tak jak opisalem to rozumiem to tak że czekam na zbocze rosnace i z tego względu dalem przerwanie z RISING. Dobrze ale jak poczytasz...
Witam serdecznie, wspomnę, że jestem początkującym "programistą" i jest to moje 1 poważne starcie z uC. Planuje wykonać pewne urządzenie, które będzie wyświetlało temperaturę na LCD oraz przy wciśnięciu przycisku, będzie wyświetlał się losowy napis z tablicy na LCD. Niestety otrzymuję błąd przy kompilowaniu. Tytuł postu poprawiony
przerwy wynosza ~1s czyli ok, fuse bity sa ustawione na zewnetrzny kwarc a co do napisu to wyswietla sie "Error" ... :(
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...
Pokaż chociaż kawałek kodu to zobaczymy jak to zrobiłeś. Do przemyślenia podam kilka przybliżonych wartości. Odczyt 9 bajtów z DS18B20 (razem z CRC) trwa ~7ms Odczyt tylko dwóch bajtów ~3ms Multipleksowanie 4 LED7Segment to najcześciej 200Hz czyli co 5ms Obsługa wyświetlaczy w przerwaniu trwa ~ 5 us przy 8MHz Napisz przerwanie optymalniej a Dallas nawet...
Witam, Czy istnieje możliwość przerwania wykonywania przerwania ale nie innym przerwaniem tylko zupełnie, tak jak działa break w pętlach? Chodzi o to, że chciałem sobie zrobić takie prowizoryczne menu i jednym przyciskiem wybierałbym pozycje. W tej chwili robię to tak, że wywołuję przerwanie przyciskiem i w ciągu sekundy jeśli nacisnę jeszcze raz ten...
Czujniki to DS18B20. Czytam je co 10s przez mills() Poza czujnikami używam Arduino do włączania światła, jeśli wcisnę button i trafię na odczyt czujnika, co wypada dość często to lag wynosi ok +- 1 s. Chciałbym aby reakcja była natychmiastowa. Działa to wszystko ale jest denerwujące.
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.
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...
[syntax=c]/* Plik "main.c" PD4,PD5,PD6,PD7 - przyłączone czujniki ds18b20 PA0-PA6 - wyswietlacz LCD */ #include <stdio.h> #include <avr/io.h> #include <util/delay.h> #include "hd4478.h" #include "ds18b2.h" #include <avr/interrupt.h> char str[20]; char inout[20]=" IN OUT "; /* Zmienna przechowuje aktualną wartość temperatury */...
jednak tak napisałem algorytm aby dane z termometru były czytane sekwencjnie w przerwaniach Testowałem również obsługę DS18B20 w przerwaniach w ESP32 na FreeRTOS i symulowanie krótkotrwałych zaników zasilania czujnika praktycznie zawsze generuje problem 85. Niezależnie od egzemplarza czujnika, który użyłem do testów. Ale coś musi być skopane skoro...
Po co te klawisze w przerwaniu sprawdzasz ? I czemu tak dużo jest w tym przerwaniu .Licz tam sobie tylko czas , a sprawdzanie klawiszy zrób w pętli głównej. Odczyt ciśnienia, temperatury i wilgotności musze zrobić z przerwami, wiec klawisz w tym czasie nie sa obsługiwane.. wilgotność mam z przerwa 1s, ds18b20 podobnie, ciśnienie raz na sek, wiec wszystko...
Tu potrzebna jest zmiana koncepcji rozwiązania. Zacznij od skrócenia przerwania obsługi wyświetlacza do jakichś max. 10..12 linii. Co sekundę w obsłudze wyświetlacza inicjuj start pomiaru temperatury, a po np. 800 ms inicjuj odczyt temperatury z czujnika. Całą obsługę DS18B20 zrób w postaci automatu w przerwaniu drugiego timera. Wtedy obsługa DS nie...
Natychmiast, to raczej nie - DS18B20 potrzebuje czasu na przetwarzanie. Ale można tak: za każdym razem, gdy algorytm czytania z DS18B20 wymaga, żeby zaczekać, zrobić wyświetlenie 1 cyfry wyniku (przy kolejnych wywołaniach kolejne cyfry) i odczekać np. 0.01 sekundy - pewnie to wystarczy do sensownego pokazywania. I można czytać "w kółko": po zakończeniu...
zrobiłem mała próbę . jak pisałem 3 przewody bialy czerwony i zielony. podczas wlaczonego sterownika odłączyłem przewód : biały - pykanie z przerwami - po ponownym połączeniu przewodu odnajduje czujnik i pokazuje odczyt zielony - sygnał alarmowy z przerwami - po ponownym połączeniu przewodu restartuje sterownik i czujnik dziala poprawnie czerwony -...
Nie wiem co rozumiesz przez stwierdzenie: " aby regulacja temperatury była zależna od czasu", jak i kiedy realizujesz obsługę przerwań ale błędy odczytu temperatury prawdopodobnie są wynikiem zakłócania cyklu odczytu ds-a przez przerwanie od timera. Poczytaj o zależnościach czasowych 1-wire. Jest to interfejs asynchroniczny i musisz zapewnić aby poszczególne...
Witam, pracuję nad czujnikiem temperatury do silnika pewnej maszyny. Mam dwa problemy. 1. Czy istnieje sensor temperatury typu DS18B20 (1-wire) o zakresie do 200 C ? 2. Czy istnieje możliwość wyeliminowania mrugania czterech wyświetlaczy 7seg ? Jak to zrealizować w C ? Wyświetlacze gasną podczas wykonywania pomiaru temperatury przez DS18B20. Zmontowałem...
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...
To chyba jakiś primaaprilisowy spóźniony żart. Cały program nadaje się do śmieci: 1. Wyświetlanie realizujemy w przerwaniu timera, każde przerwanie na jedną cyfrę (cyfry lecą w pętli) 2. wzory cyfr zapisujemy w tablicy, a nie jako 10 funkcji... To mnie przekonuje do udziału tego kodu w konkursie na najgorszy program roku 3. Od razu w przerwaniu od odświeżania...
(...) 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...
Troszkę mnie nie było :) pętla główna wygląda teraz tak: while(1) { _delay_ms(1000); toggle(IO_PORT, LED1); LCD_HOME(); err_1w=W_RESET(); LCD_1(err_1w); W_SEND_BYTE(0xcc); W_SEND_BYTE(0x44); _delay_ms(1000); err_1w=W_RESET(); W_SEND_BYTE(0xcc); W_SEND_BYTE(0xbe);...
Kasować licznik- a nie przerwania- na początek. Kasować licznik i musisz zastosować dwie flagi, inaczej nie da rady. Jedna sprawdzająca czy już możesz odczytać dane, drugie sprawdzająca czy już możesz wysłać żądanie odczytu:)
Problem rozwiąże, odmierzanie czasu przez timer, a nie przez wait czy delay (nie znam BASCOMa). Jak już ktoś wspomniał odczyt i zapis bitu na 1-wire jest dość krytyczny czasowo. Miałem z tym problem w assemblerze i ADuC841. Przerwanie od multipleksowania wyświetlaczy skutecznie zakłócało transmisję. Polecam też sprawdzanie CRC, żeby ustrzec się przed...
Dołącze się do dyskusji. Ja u siebie mam sterowanie ds18B20 ustawione w przerwaniu. Dodatkowo jest to procedura obejmujaca wszystkie rozkazy sterujace pracą czujnika czyli do proceduryt podaje czego chcę od DS18b20 i właczam przerwanie potem program główny ma za zadanie sprawdzic czy procedura odczytu zostałą ukonczona a w buforze mam dane z DS18b20....
Dzięki za zainteresowanie. Odczyt temperatury następuje co 1,3s i nie wyobrażam sobie jakbym miał zwiększyć go do np 5s czy o zgrozo - 10s. To stanowczo za długa przerwa a coś czuję że tyle właśnie potrzeba. W ostateczności do przyjęcia pod warunkiem, że przyniesie efekt:( Muszę to sprawdzić. U mnie żaden z kilku uszkodzonych czujników nie śmiga już...
(at)Duch_, kiedyś był już tu podobny temat i tam był wsad upubliczniony jeśli dobrze pamiętam. Nie wiem czy akurat o tym samym projekcie myślimy, ale nasz forumowy Kolega (at)niveasoft coś podobnego popełnił, o W tym projekcie zastanawia mnie to: "może pracować w trybie odczytu tylko dwóch bajtów lub dziewięciu z CRC" A co jak odczytam 3 albo 5? "Nie...
Nigdy w przerwaniu nie użyłem "wait" i nie użyje.
Jaki zysk z tego ze cały odczyt w przerwaniu? W/g mnie żaden. I do tego przerwanie co 1 sek? dla mnie bzdura. Niech sobie przerwanie bedzie co sek ale w przerwaniu zrobic tylko inkrementacje dowolnej zmiennej. Reszte przepisac do głownego i sprawdzac czy ta zmienna sie zmieniła a w przypadku zmiany wykonać odpowiedni odczyt w zaleznosci od warosci tej...
Witam Was. Mam taką prośbę. Otóż chciałem uruchomić czujnik temperatury, ponieważ LCD udało mi się uruchomić tak więc postanowiłem iść dalej za ciosem :>. Niestety układ nie działa. Przedstawię kod i opiszę co i jak. led.c <- tak się nazywa tymczasowo główny plik. Kod: #define F_CPU 16000000 #include <avr/io.h> #include <util/delay.h>...
Po około godzinie przerwy - wszystko raczej wystygło - układ działa bez błędów :) Jak narazie % błędów nie przekracza 0.00% :) Wygląda na to, że przewody się wygrzały i teraz już będzie ok :) Ps. Zamówiłem DS2482S-100+ u chińczyka. P.W.L.
Prosze bardzo, zmenne oraz main. Zakomentowane linie sluza do odczytu temperatury z ds1820, wyswietlania jej na LCD czy tez zapiswanie do eepromu. [syntax=c]#include <avr/io.h> #include <util/delay.h> #include <stdio.h> #include <stdlib.h> #include <util/twi.h> #include "hd44780.h" #include "ds18b20.h" #include "i2cds1307.h"...
Czy na pewno nie ma przerwy na magistrali 1Wire ? Ten program jest sprawdzony i należy szukać błędu w połączeniu i konfiguracji. Czy Atmega jest nowa tzn. bezpośrednio ze sklepu ?
Wsadź odczyt pod jakiś label np: odczyt: "wyłącz przerwania" "dokonaj odczytu z ds" "włącz przerwania" return w programie zamiast całej formułki : 1wreset 1wwrite &H55 1wverify Dsid1(1) 'wysyłamy adres pierwszego czujnika If Err <> 1 Then 1wwrite &HBE Tp = 1wread(2) Wywołuj tylko label...
Poczytaj sobie o nieblokującym odczycie temperatury np. tutaj http://akademia.nettigo.pl/ds18b20/ . Przerwania sprzętowe zostaw do enkodera, ew. bramki SMS -jeśli takich w ogóle wymaga.
Wiem o tym, mi chodzi to że muszę odczytać temperaturę z DS18B20 i wyświetlić ją na stronie, chce się tym odczytem zająć co kilka sekund w przerwaniu żeby nie tracić czasu podczas wysyłania strony.
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...
Ten "walec" to rezystor 0.1om. tzw. bocznik który jest potrzebny do odczytu oporności całej elektroniki, którym zajmuje się LM358. Ten element który jak mówisz mostek, to nie jest mostek. Jest to bezpiecznik 630ma. Wygląda tylko jak mały mostek. Całe zasilanie jest na 3 przewodach białych jak widać na zdjęciu. Zasilacz którego użyłem to impulsówka z...
To już trochę wygląda na voodoo Z rzeczami z tego świata zwykle sobie radzę :D Na pewno użyłeś digitalPinToInterrupt()? tak Próbowałeś na innym pinie niż D4? Przełączenie przerwania na inny pin sprawia, że nie działa ono wcale. Może lepiej przenieść ją do loop() - wtedy jest większa kontrola nad rozróżnieniem stanów włączony/wyłączony i lepiej panuje...
Mam taki o to problem. W przerwaniach Timera0 jest odczyt z DS18B20 i multipleksowanie 4 7Segmentowych wyświetlaczy. No to rzeczywiście masz gigantyczny problem ponieważ ty nie masz czegoś tam w przerwaniach Timer0 :( ..... ty CAŁY program z pętli głównej przeniosłeś do przerwania - i dziwisz się że coś dalej nie działa - że inne przerwania coś nie...
Jak już poznałem lib do DS18B20 to przeraziłem się, gdy okazało się, że ignoruje CRC. I tak się rodzą plotki w necie, a wszystko przez brak wiedzy o bibliotece OneWire, na które bazuje biblioteka DS18B20. Ale to już jest off-topic. Co ma wspólnego lib OneWire do CRC? OneWire nie liczy CRC! Tak samo OneWire nie obsługuje bądź nie EEPROM w DS18B20! OneWire...
Wszystkim czujnikom chcę wydać komendę konwersji a następnie po 10 sekundach chcę odczytać wszystkie 15szt, wydać polecenie konwersji odczyt po 10s i tak w kółko. Jednak moja ATMega ma wiele innych rzeczy do roboty w głównej pętli i nie chcę aby odczyty temperatur zajmowały jej sekundę czy dwie z tych 10s. Obecnie na 15szt LM35 i wewnętrznym ADC uzyskałem...
Jeśli źle umieściłem temat to bardzo proszę o przeniesienie. Kod który wklejam : http://obrazki.elektroda.pl/7428430100_1...
Nie działa ci pierwszy sposób ponieważ deaktywujesz watchdog po watchdogu:) tzn nigdy nie dojdzie to tej linijki kodu ponieważ zawsze wcześniej się zresetuje. Daj wdt_disable() na początku programu (a napewno przed włączeniem watchdoga). Ja tak zrobiłem i działa bez problemu. A swoją drogą używałem resetu ponieważ mam dziwny proble, może tu mi ktoś...
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,...
Walcze już z tym dziadostwem n-ty wieczór i nie mam już pomysłów co tu zrobić. Przeczuwam że jest coś nie tak z odbiorem (lub transmisją) ponieważ w zmiennej do której zapisana jest temperatura jest ciągle ta sama wartość w chwili obecnej mam 159, wcześniej miałem b7,dużo różnych krzaczków i na początku -0.1. Mógłby ktoś zerknąć w timeingi z datasheeta...
To fakt, chodzi o program w Bascomie. Konkretnie wykorzystuje Bascomowy zegar z kwarcem 32767 Hz, z tego co wiem, pracuje to na Timerz 2. Co jedną sekundę odczytuje temperaturę z 4 DS18B20 na jednej magistrali. Nie wiem czy to wykorzystuje timer i który. Do tego w przerwaniach wywoływanych przepełnieniem Timera 0 lub 1, które miały występować z częstotliwością...
Witam. Piszę sobie sterownik temperatury w Bascom '51 i mam problem z przerwaniem. Otóż serce układu to AT89C52 do niego jest podłączony RTC DS1678. Ustawiłem RTC, aby na wyjściu INT generował co sekundę impuls. Podaję ten impuls na wejście INT0 procesora. W obsłudze przerwań dałem ustawienie zmiennej Bit na 1, na podstawie jego inicjuję w pętli głównej...
Mam zwykłą 51ke z odpalonymi praktycznie wszystkimi przerwaniami, dodałem tam 1wire i wychodzi delikatny problem. Żeby jedno z drugim się nie gryzło na czas wysyłania lub odbierania bitu wyłączam przerwania. Pomiędzy odbieranymi/wysyłanymi bitami przerwania są włączone po to aby procesor mógł wrócić do ważniejszych zajęć. Nota DS18b20 mówi że czas pomiędzy...
Mój pierwszy post więc zacznę od "dzień dobry wszystkim". Od paru dni bawię się atmegą. Zrobiłem sobie termometr na 18B20. Ponieważ właśnie spaliłem kontroler wyświetlacza podpinając go przypadkowo bezpośrednio do zasilacza(sic, czas ogarnąć kabelki, bo wstyd) to mam czas zapytać jak poprawić wskazania termometru. Po pierwszym podłączeniu wskazywał...
Witam, wiem, ze postów na temat tych układów jest masa, ale nie udało mi sie znaleźć rozwiązania. Problem: Zbudowałem układ, który ma pełnić rolę sterownika akwarium, wyposażony w rtc i czujnik ds18b20. Zaprogramowałem odczyt temperatury i czasu(sprzętowe TWI) oraz obsługę wyświetlacza. Aktualnie podczas pracy układu co 3 sekunda wyświetlana na wyświetlaczu...
http://obrazki.elektroda.net/40_12347177... Jako miłośnikowi Jedynego Słusznego Systemu Operacyjnego nie dawało mi spokoju, że dla Windowsa jest Lampomittari http://www.elektroniikka.org/thermometer... a pod Linuksem pozostaje digitemp. Mając więc kilka dni wolnego i chęć poznania Gtk napisałem programik, który wizualizuje dane...
Dodaje poprawnie listing programu. [syntax=basic4gl] 'OSTATNIE ZMIANY 08,10,2014 'Problem z blednie wysylanymi danymi 'Problem z wylaczaniem sie sterownika $regfile = "m32def.dat" $crystal = 7372800 $baud = 19200 $include "Config_MMC.bas" $include "CONFIG_AVR-DOS.Bas" $hwstack = 128 $swstack = 128 $framesize = 128 '**************KONFIGURACJA LCD*****************...
Ok, a teraz jeszcze jedna sprawa: Zmodyfikowałem trochę program by wyświetlał na multipleksowanych wyświetlaczach LED 4x7 odebraną komendę. Jak zwykle trochę chodzi, ale nie do końca - założenie jest takie: odbiera komendę z rc5 i wyświetla ją na led, efekt jaki uzyskuję: odbiera komendę, wyświetla na ułamek sekundy, potem wyświetla 95, czasem się zdarzy,...
Sugerowałem się zdaniem: O trybie overdrive nie marzę, wystarczy standardowa prędkość. Robię między innymi emulator DS2431. I co mam napisać, że zgodność 50%? Ze działa ale bez overdrive? To jak zaemulować DS18B20 bez wewnętrznej pamięci eeprom lub możliwości odczytu sposobu zasilania. DS2431 jest pamięcią eeprom, ale można włączyć tryby, które są...
- Wyświetlanie temperatury z 4 czujników: -wody w basenie -powierzchni dachu -zewnętrznej -wewnętrznej w domu Pamiętaj o zabezpieczeniu ESD. Najlepszy jest DS9503. Jak nie chcesz aby awaria jednego czujnika nie zablokowała wszystkich, zrób osobne magistrale. Doskonale do tego nadaje się DS2482-800. Jak nie chcesz się wykosztować, to użyj uC z odpowiednią...
Jak ma być szybko, to nie zasilaj termometrów pasożytniczo. Wtedy konwersje możesz uruchomić we wszystkich jednocześnie: RESET SKIP ROM POMIAR a odczytywać sekwencyjnie: RESET MATCH ROM 1 odczyt 1 RESET MATCH ROM 2 odczyt 2 .itd Jak "bardzo" silnie podciągniesz magistralę, to możesz zasilać także pasożytniczo. Natomiast sekwencja: RESET MATCH ROM 1...
Jeśli używasz jakiegoś przerwania wyłącz je na czas transmisji danych pomiędzy uC a Dallasem.
Teraz widzę że chyba za mało wiem o przerwaniach zawsze wydawało mi się że przerwanie to sleep które całkowicie blokuje mikrokontroler na ten czas, biorę się do czytania. Czyli w takim razie można sterować grupowo poprzez PWM? czyli PWM z mikrokontrolera idzie do MOC3021 a ten podaje tą (lub taką z którą sie wyrabia) częstotliwość do BT138 a ten z kolei...
Witam, od jakiegoś czasu próbuję stworzyć sobie zegarek z termometrem + napięcie akumulatora do auta. Wszystkie programy osobno działają bez zarzutu. Problem zaczął się z chęcią wprowadzenia przełączalnych ekranów i wprowadzeniu przerwań. Doczytałem że przerwania skutecznie psują komunikację z DS'ami przez co temperatura się nie odczytuje. Ogólnie to...
Witam! Od kilku dni siedze i nie mogę nic wymyśleć :( Bez ogrudek - podaje źródło: $regfile = "m16def.dat" $crystal = 8000000 'definiowanie zmiennych i stałych Dim T As Integer Dim Licznik_przerwan As Byte Dim Dioda As Bit 'konfigurowanie interfejsu 1Wire Config 1wire = Portd.1 'konfiguracja wyświetlacza Config Lcdpin = Pin , Db4 = Portc.6...
Witam Śmiem zapytać co to za zapis: 1wwrite &HCC , 1 , Pind , 2 ? No raczej wszystkie linie związane z odczytem i zapisem do DS'a są krótko mówiąc zje****. Pozdro Moze i tak, nie twierdze ze jestem orlem, daleki jestem nawet od powiedzenia ze 'umiem' ;) Podlaczone mam 2 czujniki (na d.2 i d.3) i w ten sposob odwoluje sie do kazdego z nich. narazie...
W sumie z przerwaniami nic nie robiłem, nie wiem czy mają być włączone czy nie? Korzystałem z gotowego przykładu z CodeVision. A z jakim zegarem mam testować ten czujnik 4 czy 8Mhz? Zaraz się zabieram za odpalenie tego programu. Dodano po 51 Brakuje deklaracji zmiennych TEMP_RESTART, enkoder switch(enkoder) { case 0x0A: temperatura_zadana=TEMP_m100;...
Witam. Jestem w fazie pisania programu z zegarem DS3231 i atmegą16. Mam podłączone wejście INT0 atmegi z wyjściem INT/SQW DS-a. Podciągnięte rezystorem 10k do 5V. I nie wiem co robię źle ale procesor nie reaguje na sygnał przerwania z DS-a. Powiem szczerze że nigdy nie korzystałem z przerwań zewnętrznych ale znów ustawienie tego nie jest skomplikowane...
excray tak jak mówiłem, problem nie leżał w kodzie, czy schemacie. Czujnik reaguje tylko gdy częstotliwość taktowania jest 1000000, przy 8000000 nic nie mierzy(tak jest u mnie). Procek musiałem ustawić na Atmega16a i wtedy zmienić obsługę przerwania z SIGNAL(SIG_INTERRUPT0) na ISR(INT0_vect) i wszystko działa. Temat do zamknięcia.
Mogę naprowadzić: zapominasz o kodzie, który widziałeś, a który korzysta z delay() i robisz wszystko od nowa na przerwaniach. Problem w tym, że przerwanie związane z obsługą DS18B20 powinno wywłaszczać przerwanie wyświetlacza, co na ATmega w zasadzie jest niemożliwe. W związku z tym wypada rozejrzeć się za obsługą DSa przy użyciu UARTa, co daje pewne...
taktowanie procesora: 16MHz atmega32a main.c: [syntax=c] int main(void) {/* sprawdzamy ile czujników DS18xxx widocznych jest na magistrali */ czujniki_cnt = search_sensors(); /* wysyłamy rozkaz wykonania pomiaru temperatury * do wszystkich czujników na magistrali 1Wire * zakładając, że zasilane są w trybie NORMAL, * gdyby był to tryb Parasite, należałoby...
Już któreś z kolei podejście do tematu jednak dalej brak rozwiązania Problem wygląda tak: Potrzebuję termometr na dwóch DS 18B20 Na razie zaprzęgłem jeden i w pętli co kilka sekund (czyli co kilka pomiarów) wyświetla mi 0,0 st C lub inną absttrakcyjną wartość np 95,5 przez jeden pomiar. Próbowałem różnych rozwiązań na chwile obecną program wygląda mniej...
hmm... a może samo sterowanie fazowe masz spierniczone i tu jest pies pogrzebany ? Problem jest banalny, w kodzie, którego analiza to katorga (dlatego nie zagłębiam się) ma 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...
Udało mi się znaleźć obsługę 1-wire w kursie EP dla '51 (wiec myślę, że do '52 też się nada, bo podobna struktura uC). Jednak największą trudność sprawiają mi opóźnienia, a dokładniej ich tworzenie. Chciałbym skorzystać z wewn. timera, ale nie wiem jak. Szukałem, ale nie znalazłem tego w języku C. Oczywiście są książki i zaczynam myśleć nad kupnem jakiejś...
Ja bym wyszukiwanie zrobił tak Dim Ids(64) as Byte 'Maksymalna liczba czujników * 8 Dim I as Byte Dim J as Byte Dim L as Byte Dim Count as Byte Dim TempCount as Byte ' Wyszukiwanie Count = 0 TempCount = 1wirecount() If TempCount > 0 Then I = 1 J = I + 7 Ids(1) = 1wsearchfirst() Do If Ids(J) = Crc8(Ids(i),...
Witam po długiej przerwie, zacząłem budowę urządzenia, które będzie mierzyło temperaturę rurki miedzianej od ogrzewania centralnego i przypominało, aby poniżej 40* zejść do piwnicy i podłożyć, aby nie wygasło. Czujnik już przygotowany, więc zabrałem się za przygotowanie kodu, aż tu nagle w ogóle nie znajduję czujnika, tzn. 0 reakcji na linii 1Wire,...
$crystal = 4000000 'deklaracja częstotliwości pracy kwarcu $regfile "attiny2313.dat" 'model procesora dla którego jest ten program Deflcdchar 1 , 14 , 17 , 17 , 14 , 32 , 32 , 32 , 32 ' definicja znaki stopnia Config 1wire = Portd.5 ' konfiguracja portu PD.5 jako wejścia magistrali 1-wire Dim Odczyt(2) As Byte , A As Byte , Licznik...
A co pisze dokładnie na czujniku? DS1820, DS18S20 czy może DS18B20? To akurat nie ma żadnego znaczenia bo w kodzie kolegi ani nie ma bezpośredniego adresowania ani konwersji temperatur. To jest tylko przeszukiwanie magistrali pod kątem podłączonych urządzeń. Na zdjęciu (trochę ciemnawe więc musisz mi uwierzyć na słowo) masz przykład. W płytkę stykową...
To będzie termometr do basenu(mierzenie temperatury wewnątrz i zewnątrz). Jeszcze programu nie napisałem, "studiuję" artykuły związane z timerami i przerwaniami, żeby nie brać się za to bez odpowiedniej wiedzy :) Myślę, że jak dam w pętli programu instrukcję if, która będzie sprawdzała kiedy nastąpi przerwanie i czy µC wyrobi się z odczytem temperatury...
Cześć. Wielokrotnie już elektroda ratowała mnie pomocną ręką, mam nadzieje, że i tak dziś będzie. Staram sie napisać własną obsługę dla ds18b20 dla atmega8. Sporządziłem wstępny kod "biblioteki" (gdy zacznie działać zrefaktoryzuje kod celem jej uogólnienia). Jak narazie jedyna funkcja która mi działa to reset i presence pulse. Dalej w zasadzie odczytuje...
Tak trzeba czekać, ale to nie jest absolutnie żaden problem. Można to zrobić na kilka sposobów, jednym z nich jest właśnie wystawienie flagi, ale są sytuacje gdzie cały odczyt można tam wcisnąć. Nie pamiętam już co było powodem, ale właśnie w jednym ze swoich sterowników odczyt umieszczony był w przerwaniach razem z multipleksem i czymś tam jeszcze....
Nic nie miga. Nie miga, bo pewnie wydajesz komendę pomiaru temperatury, czekasz na koniec konwersji co trawa nawet 0,7 sekundy, to samo dla drugiego termometru, więc "już" po 1,4 sekundy odświeżasz LCD. Masz w programie obsługę klawiatury, UART czy innych peryferii? Jeśli tak, to czy nie ma opóźnionej reakcji na zdarzenia? Program powinien działać...
Głównie chodziło mi o sposób wysyłania poleceń 1 wire: Disable Int0 'wyłączenie przeszkadzającego przerwania 1wreset 1wwrite &HCC 1wwrite &H44 Capture = 1 Enable Int0 'załączenie przerwania po wszystkim Jeśli nie wiesz, które przerwanie może powodować u Ciebie problemy z 1 wire to możesz wyłączyć globalną obsługę przerwań. Czas po rozkazie odczytu temperatury...
Zrobiłem sobie w ramach przygotowania do większego projektu termometr na ds'ie, temperaturę wskazuje pięknie gdyby nie jeden mały szczegół. Sypie błędami. średnio co 5 sekund wyskakuje mi temperatura 500st, 80st. ect ect. Tu moje pytanie: czy da się to wyeliminować programowo, czy zrobiłem jakiegoś babola w programie? Program: #include <avr/io.h>...
odczyt ds18b20 ds18b20 odczyt odczyt klawiatura przerwa
wymiana pasty procesora volvo silnika opinie pralek bosch
pralka samsung wibracje punto wspomaganie problem
Czerwona lampka zasilania - przyczyny i rozwiązania Radmor 5421 5422 instrukcja serwisowa PDF – schematy, regulacje, pobieranie