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...
Niedawno pisałem takie oprogramowanie w C - sterowanie fazowe triaka a odczyt takze był z ds'a. Także miałem ten problem co autor tematu - jedno z dobrych rozwiązań to zastosowanie maszyny stanu, gdzie zmiana kolejnych stanów jest uzależniona od przejścia sinusoidy napięcia sieci przez zero(inaczej:maszyna taktowana jest przerwaniem zewnętrznym ). Samo...
Z tego fragmentu nie wiadomo czy używasz przerwań. Może wywołujesz jakieś przerwanie i jego obsługa zajmuje tyle czasu , że przychodzi następne przerwanie i program się pętli ( jedyne co robi to obsługuje przerwanie )
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...
Po pierwsze nie rozumiem dlaczego odczyt 4 czujników miałby trwać 4*750ms? Przecież po start conversion czekasz te 750ms (albo krócej, przecież masz pooling czujnika) i kolejno odczytujesz 4, ale już bez opóźnień. Więc całość będzie trwała 750ms + parę ms na odczyty. Kolejna sprawa - wykorzystaj timer. Tu napiszę coś co jest radą ryzykowną i być może...
Tak, ale klawiatura jest częściej skanowana i trzeba odczekać jakiś czas aby DS przekonwertował temp. a to przerwanie które używam jest od PCF8583
- Starujesz pomiar temperatury w DS18B120. - ustawiasz jeden Timerów na 750ms i odblokowujesz przerwanie od niego - wykonujesz inne działania - gdy upłynie 750ms zostanie zgłoszone przerwanie i będziesz wiedział że możesz odczytać zmierzona temperaturę JarekC
pier- w tym programie który Ci podałem masz wykorzystać zmienną "flaga_dodatkowa" do sterowania wyświetlaczem w sub- a nie w przerwaniu Timer2. Timer2 wyłącz. I daj program po przeróbkach. Żaden kwarc na to nie pomoże- trzeba korzystać z przerwań.
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....
Tak przerwania mogą zakłócać. Na czas wysyłania komend 1w wyłączaj przerwania jeśli możesz.
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.
Problemem było chyba to, że nie włączyłem globalnych przerwań.
netsecurite.pl - czytaj uważnie . Nie napisałem , że nie korzystam z timer'ów , ale jaki jest sans obsługi przerwania przez 2 sekundy (WAIT 2) gdy timer wywołuje przerwanie co np. 2milisekundy ?
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...
Wyczytałem, że czas odczytu czujnika to 750ms To zależy od ustawionej rozdzielczości dla sensora: https://obrazki.elektroda.pl/2866156500_... Chodzi o czas potrzebny na ustabilizowanie się pomiaru (konwersji) od momentu zażądania pomiaru do odczytu temperatury. Dodano po 6 Używając przerwań czasowych (TIMER1 co 1ms), Przerwanie...
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...
A co robi to przerwanie od zegara?
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.
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.
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
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...
Dodaj flagę , zwiększaj ją w przerwaniu, a w pętli głównej sprawdzaj czy osiągnęła już równowartość 750ms.
Witam. Może spróbuj tak po wywołaniu przerwania ( u Ciebie co sekunda) Odczytaj termometr DS. A następnie wydaj rozkaz pomiaru temperatury. W następnym przerwaniu odczytasz go o tak w kółko.
Sprawdź zależności czasowe w programie , sprawdź czy przerwanie nie powoduje konfliktów .
Obsługę LCD także w przerwaniu. Obsługa ds18b20 też robi swoje, więc także w przerwaniu (UART).
A jeszcze takie pytanie - dlaczego obsługa DS18B20 w przerwaniach jest lepsza niż za pomocą standardowej biblioteki?
Wiem że zaraz mi się oberwie od innych ale na szybko to pokombinuj z wartością OCR0 - zwiększ ją np do 150 , po drugie możesz przełączyć na inny preskaler mniejszy niż 256. Lecz nie spodziewał bym się wielkiego efektu. Aby otrzymać pożądany efekt musisz zmienić plik ds18b20.c i zamiast wyłączać i włączać przerwania w funkcji temperatura musisz je włączać...
Do przycisku daj jeszcze kondensator z 20nF, bo bedziesz jednym pstryknieciem wyzwalal wiele przerwan
"Zbyt dużo" - to może być 200 linii, ale nie 10 czy dwie, jak w Twoim przypadku. Ja bym raczej radził nie pakować kodu do pętli głównej, o ile potrafisz zrobić obsługę DS18xx w przerwaniu.
Proste: Bylejaki kod obsługi DS18B20 bez użycia przerwania timera lub sprytnego użycia UART nie może działać poprawnie, jeżeli reszta oprogramowania korzysta z jakichkolwiek przerwań aktywnych podczas komunikacji z DS18B20.
Tak na szybko, włączasz przerwania ale ja nigdzie nie widzę żadnej obsługi przerwania.
Odblokuj przerwania przed pętlą główną za pomocą polecenia "sei();" bo inaczej nie będzie działać.
A masz jakiś timer, który możesz wykorzystać? Jeżeli tak to na przerwaniach zrób multipleksowanie, a w petli głównej pozostałe funkcjonalności.
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...
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.
Niestety nie pomaga, jeśli tylko fragment procedury przechodzi z włączonym przerwaniem już się dzieją cuda,a wszystko wraca do normy gdy wyłączę przerwanie na czas wykonania całej procedury.Ale co mi z takiego timera gdzie większość czasu będzie wyłączony
Witam Co do przeliczania wartości na temperaturę nie będę się wypowiadał bo w wielu publikacjach było to prezentowane. Natomiast zajmę stanowisko w sprawie wyświetlacza LED. Proponowałbym z obsługi przerwania usunąć procedurę pobrania znaku do wyświetlenia. O wiele lepiej zrobić to w programie głównym. Zbyt długie przebywanie w obsłudze przerwania może...
Jak np mam kilka innych procedur które zabierają dużo czasu. Np pomiar ds18b20 albo wyświetlanie na LCD a chciałbym je wykonywać co pewien ściśle określony czas.
Przerwanie_0: 'co 2ms If Liczniczek_przygotowanie_odczytu < 400 Then Incr Liczniczek_przygotowanie_odczytu If Liczniczek_przygotowanie_odczytu >= 400 Then 'co 800ms odzyt DS Liczniczek_przygotowanie_odczytu = 400 Flaga_przygotowanie_odczytu = 1 End If End If Flaga_dodatkowa = 1 'do wykorzystania w innym sub- też co 2ms- to Twoje sterowanie...
Prawdopodobnie obsługa DS18B20 realizowana jest przy pomocy przerwań, Ty masz w przerwaniu liczone takty przepływomierza - stąd mogą być zakłócenia. Taki trochę urok Arduino IDE że łatwo w nim coś stworzyć, ale nie masz pełnej kontroli nad tym co robią dane biblioteki.
Spróbuj DS18B20 przepiąć pod D3, a na D6 odpal button. Pozdr
Timer w przerwaniu obsługuje wyświetlacz LED i inkrementuje zmienną byte, która w pętli głównej w instrukcji Case wybiera konkretne funkcjonalne fragmenty programu do wykonania, których wykonanie czasowo mieści się pomiędzy przerwaniami od timera. W przerwaniu od timera ustawia się także flaga przerwania, która uruchamia za pomocą If Then instrukcję...
Może w tym czasie kiedy czytasz DS-a zachodzi przerwanie i rozsynchronizowuje transmisję.
Może ja wyjaśnię jaśniej. Generujesz przerwanie od timera np. co 800ms, czy 1s. I w przerwaniu wykonujesz operacje: 1. Odczyt temperatury do zmiennej 2. Komenda Convert_T Odpowiadając na Twoje pytanie - 750ms to MINIMALNY czas między CONVERT_T a odczytem (dla 12-bit). Więc odczyt po 1, 2, 3600 sekundach po CONVERT_T nie jest błędem. Dzięki takiej metodzie...
Problem rozwiązany. Wystarczyło zrobić nowy przewód LCD - układ i już działa. W starym było prawdopodobnie jakieś przerwanie. Natomiast za problem z DS18B20 odpowiedzialny był brak rezystora podciągającego linię Data do plusa zasilania.
Ja tylko nie wiem, po co przerwanie ADC. Od początku piszę - odczytywać Wynik ADC i startować nową konwersję w przerwaniu timera. Jedno przerwanie może zawierać całą funkcjonalność (poza DS18B20, który kłóci się ze wszystkim - może by go tak UARTem potraktować?)
Do czego służy funkcja[syntax=c]TIM2 init function[/syntax], która co prawda i tak odnosi się do TIM3? Jak sterujesz wyświetlaczem, multipleksujesz? Jeśli tak to w czasie komunikacji z DS'em proponuję wstrzymać wszelkie zbędne przerwania.
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.
No to pomyśl... Dużą częstotliwością taktowany dsPIC? Najszybsze mają 40MIPS, myślisz że przerwanie co 40 instrukcji to dobry pomysł? 4\/3!!
Podaj więcej szczegółów: - jak zrealizowana jest transmisja z kompem (na przerwaniach?), - jakie dane transmitowane są z kompa (z jaką częstotliwością), - jak często dokonujesz odczytu z DS18B20 Bo wpłynąć może...
Wyłączyłem obsługę przerwań i dalej nic.
Mój błąd, zapomniałem zdefiniować PLATFORM_GPIO_MAX. Dodano po 1 . Beta, bez zaimplementowanego ota https://github.com/NonPIayerCharacter/Op... Flash binarny przy 0x080000 Dodano po 12 Obecnie nietestowane funkcje: uart, przerwania gpio, czujniki i2c, ds18b20, dht11 Działa: wifi, mqtt, wejście...
Tak, zrobiłeś babola, ale rzeczywiście nie pytałeś jak go naprawić. Wyżej dostałeś sensowne odpowiedzi na pytanie którego bezpośrednio nie zadałeś. Jeszcze raz: nie czekaj na pomiar. Obsługa DS18B20 to od kilku do kilkunastu milisekund. Wracając do Twojego pytania: przerwanie po otrzymaniu danych: [syntax=c] ISR(USART1_RX_vect) { int data = 0; ... }...
To postaram się napisać rozwiązanie a Ty jeśli możesz napisz czy będzie ono dobre. Widzę to tak że powinienem wgrać orginalny kodz nettigo o ktorym pisałem kilka postów wcześniej czyli z pinem 3 ustawionym w tryb INPUT_PULLUP i przerwaniem reagującym na zbocze FALLING. Przewód który podpinałem pod 5V podpinam pod pin 3 a przewód który podpinałem pod...
Nie bardzo mam teraz ochotę zgłębiać kod ponownie, ale pamiętam że w Twojej wersji Timer odmierzał czas 20s i kiedy nadszedł czas to w przerwaniu mierzył temperaturę Dallasem DS18B20 i w dodatku pisał od razu po wyświetlaczu :D Dlatego jedną ze zmian było to, że Timer tylko ustawia flagę by dokonać pomiaru i go wyświetlić. Tak więc dopóki nie jesteś...
Weź pod uwagę takie problemy: 1. zminimalizuj drgania styków przycisków (tzw. debouncing) programowo lub sprzętowo używając kondensatorów 2. przerwanie od enkodera wywołuj stanem FALLING lub RISING (Ty masz LOW co jest bardziej podatne na drgania przycisku zwieranego do masy) 3. zmienna globalna "time" użyta w przerwaniu powinna być typu volatile (Ty...
Można też stosować flagę ustawianą bądź kasowaną w przerwaniu aby stwierdzić czy wystąpiło przerwanie. Na ogół jednak wyłącza się przerwania na czas komunikacji tak jak ty to zrobiłeś.
Spróbuj ponownie ds18b20/dht, wprowadziłem pewne zmiany w sposobie konfiguracji gpio. EDIT: DHT prawdopodobnie nie zadziała, nie ma jeszcze wyłączenia przerwań dla esp w kodzie. EDIT2: Nawet się nie uruchamia. Pchnąłem aktualizację, teraz uruchomi się na każdej platformie, która ma ENABLE_DRIVER_DHT (jest włączona na LN, ale "wyłączona" w kodzie). EDIT3:...
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...
Czy w przypadku STM32f1 sprzętowym generatorem impulsów jest SysTick? Jeśli tak to czy nie będzie problemu z przerwaniami rzędu us?
Nie da się dobrze zrobić obsługi wyświetlacza jeśli podczas wyświetlania blokujesz przerwania, a robisz to w związku z obsługą DS18B20 - stąd to pulsowanie. Jaką masz częstotliwość przerwań timera? Jeśli większą od 1200 Hz, to właśnie na tym tracisz jasność.
Witaj, Jeżeli otrzymujesz odpowiedź z układu typu 255 czyli 0xFF to oznacza że masz błędnie napisane procedury niskopoziomowe prawdopodobnie czasówki. Na początek sprawdź czy przypadkiem nie masz ustawionego zegara zbyt niskiego 1[MHz] wewnętrznego. Aby funkcje opóźniające biblioteczne chodziły prawidłowo potrzebne jest z 4[MHz] a dobrze jest 8 [MHz]....
[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 */...
A nie prościej byłoby do obsługi 1-wire zaprząc USART? Wtedy masz góra jedno przerwanie/bit, a jeśli jest DMA to można całość zupełnie zautomatyzować.
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.
Witam, 1. Mam nie lada zagwozdkę z obsługą zegara PCF8563p przez Atmege32 + wyświetlacz LCD. Sam zegar działa dobrze. Poprawnie wpisuje datę i godzinę. Problem pojawia się z odczytem. W PCF ustawiam wyjście na 1Hz, które jest połączone z Atmegą jako przerwanie INT0. Co kilka razy, przy resecie uC, gdy program startuje od nowa, to czas zaczyna się niepoprawnie...
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...
http://obrazki.elektroda.net/22_12752238... Witam. Dzisiaj chciałbym zaprezentować mój projekt zegara VFD na lampie IW-18. Jest to kontynuacja wątku kolegi Pier -> http://obrazki.elektroda.net/95_12752233... Wszystko tak szybko się odbywa że wyświetlacz w ogóle nie miga :D Program został napisany w BASCOMie - zajmuje ~64% pamięci Flash....
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.
Tak przerwania mogą zakłócać komunikację 1wire. Na czas komunikacji z DSem blokuj przerwania.
Mimo to wydaje mi się że ID powinno dobrze czytać a tak nie jest. A może mam zastosować inną bibliotekę z przerwaniami albo dodać timer?
Witam, W moim zegarze przerwanie występuje z częstotliwością 800Hz a mimo to 1wire pracuje bez problemu obsługując 2 czujniki DS18B20. Do tego dochodzi UART (podczerwień) - też w przerwaniu - przez który mogę albo ustawić zegar albo przywołać wyświetlanie temperatury (pobudzanie dowolnym pilotem IR). Dodam, że cały program zajął 461B - w asm oczywiście...
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...
Twój kod jest fundamentalnie błędny. Nie możesz w sposób asynchroniczny zapisywać tablicy data w pętli głównej i wysyłać jej zawartości w przerwaniu. Pomyśl co się dzieje jeśli jednoczesny dostęp do tej tablicy uzyskuje dtostrf i przerwania - robi się sieczka. Taki dostęp wymaga utworzenia semafora lub prościej atomowo skopiować tablicę data do miejsca...
Zgodnie z obietnicą wstawię kod programu w języku Bascom. Wiem że jest w nim wiele błędów i moich złych nawyków choćby brak przerwań, funkcji, itp.
Czy "wysylka" odbywa się w przerwaniach ? Spróbuj je na próbę wyłączyć i sprawdzić wówczas działanie (np. wysyłając odczytaną temperaturę po UART, albo na LCD). Ogólnie instrukcja WAIT + przerwania nie zawsze działa poprawnie.
Miałem podobny problem z Atmega8 + DS18B20 + zegarek. Ustawiłem priorytet przerwania zegara na najwyższy ale przez to czasami zdarzało się że był błędny odczyt z czujnika temperatury. Rozwiązałem to w następujący sposób. Część odpowiedzialna za odczyt temperatury pracowała w pętli głównej i odczytywałem wartość z rejestru timera. Kiedy timer "zbliżał"...
Pewnie przerwanie przerywa Ci jakąś procedurę zapisu/odczytu na 1-wire które są newralgiczne czasowo i NIE POWINNY być przerywane i stąd ten problem.
No to przed diodą, dlatego podłącza się to nie tam gdzie masz cap, a tam, gdzie masz napięcie które "zaniknie" po odłączeniu zasilania... Innnymi słowy: mostek-> | -> dioda-> cap-> układ [tutaj pomiar] I podłączasz to nie na ADC tylko na int... masz w tym momencie sprzętowe przerwanie po zaniku zasilania;)
Nie analizując kodu przeszkadzają zapewne wszystkie instrukcje Wait, Waitms itp. Ogólnie zasadą jest, ze w programie nie powinny występować tego typu opóźnienia - stąd obsługę DS'a zrób na przerwaniu timera.
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...
Zamiast wyłączać przerwania możesz zastosować pewien trik. Mianowicie zadeklaruj sobie jakas flage. Gdy konczy sie przerwanie zresetuj ja. Wtedy bedziesz wiedzial ze sie zakonczylo i ze masz troche czasu do nastepnego. Potem piszesz cos takiego : Set Flaga : While Flaga = 1 : Wend To umieszczaj w miejscu gdzie masz odczyt temp. Pamietaj o tym...
na wbudowanych timerach może być problem bo na czas odczytu temperatury z 1wire nie mogą się właczyć żadne przerwania
Witam Wszystkich. Ucz się przerwań. Naprawdę wielu rzeczy nie da rady zrobić bez przerwań, np. termometr z wyświetlaczem multipleksowym - odczyt z ds18B20 trwa ileśtam ms, w tym czasie wyświetlacz nie działa, cały program jest zatrzymany i czeka... coś jak delay(). Czy na lampach NIXIE +termometr+ sterowanie BT. Faktycznie moc obliczeniowa spada, ale...
to zrób emulator DS18B20 Robiłem 1-wire Slave na ATmedze. Nawet ciekawe zagadnienie. Posiłkując się kodem dla 1-wire Slave (na przerwaniach) robiłem też LED i LCD na 1-wire...robiw To zrobienie dobrego emulatora DS18B20 nie będzie problemem. Czy udałoby się zrobić taki emulator zasilany z magistrali 1-Wire? Mógłby być bez LCD albo z e-ink.
a jaki czas przetwarzania pomiaru ma wymieniony czujnik? bo np. w przpadku ds18b20 trzeba czekać 750 ms,
Jeśli zrobisz obsługę OW na przerwaniu timera baz głupotek typu delay, to nie będzie tam oczekiwań i nie będzie to zakłócało wyświetlania. Jeśli dobrze zrobisz wyświetlanie, to nie zakłóci to obsługi OW na przerwaniu timera. Więc pewne szanse powodzenia są.
Jeśli termometr będzie w przerwaniu np co 1 sec, to możesz usunąć : " Waitms 750 'przeczekaj czas konwersji" To opóźnienie będzie tylko spowalniało powrót do pętli głównej. Konwersja i tak się dokona bo przecież program będzie tam skakał co sekunda. Różnica jest tylko taka, że przy pierwszym włączeniu zasilania do układu termometr pokaże 85 stopni....
Trzeba zrobić emulator DS18B20 podłączony do urządzenia które chcesz "oszukać". Ten emulator musi sobie "rozmawiać" radiowo z modułem, który będzie np co sekundę odczytywał DS18B20. Do Arduino są biblioteki emulujące między innymi DS18B20 (gdzieś na Elektrodzie był link do nich). Nie wiem czy dział to na przerwaniach, jak nie to będzie problem z komunikacją...
Zmieniłem w Burn-o-mat port na com7 i zaczęło się wczytywać jednak operacja ta trwała jakieś 15 min i przerwałem ją, o stwierdziłem, że to trochę za długo. Nie wiem dlaczego tak się dzieje.
Miałem podobny problem, zastosowałem się do sugestii lechoo. Przerwanie obsługiwane jest u mnie co 0,2s więc sposób zadziałał. Teraz termometr + timer współpracują bez problemu (żegnaj 85oC) Dziękuję i pozdrawiam
Może wychodzi jednoczesne przesyłanie danych z ds1302 i ds18b20, przesyłanie danych z ds1302 podczas pomiaru przez ds18b20, albo podczas wysyłania na wyświetlacz, i sygnały wzajemnie się zakłócają? W obsłudze przerwania nie należy robić opóźnień - zamiast tego należy zapisać informację, która spowoduje odpowiednią akcję z opóźnieniem, np. wpisać 2 do...
Witam ponownie. No tak ZUMEK dane oczywiście będą stracone jeśli się je w pore nie wychwyci, ale wracając do Twoich propozycji powiedzmy pierwszej to masz na myśli aby przerwanie wykonywało procedurę INKEY(#1) lub INPUT jak najczęściej?? Otórz układ ma być złożony z DS18B20+ATtinny13+MAX485 ma to byc poprostu termometr moduł sieci 485 (jeden z wielu...
Bez problemu cały odczyt można zrobić w przerwaniach, łącznie z multipleksem bez szkody dla wyświetlania. Z tego co kojarzę to na odczyt z DS-a trzeba czekać około 750 ms i co _delay_ms w przerwaniu? Owszem można ale w przerwaniu ustawić tylko "flagę" a odczyt w pętli głównej. Bo nieporozumieniem jest robienie całego odczytu w przerwaniu.
"Od samego początku mam problem ze sterownikiem."...."A jeszcze jedno w kontrolerze jest włączony timer jako counter do zliczania impulsów ślimaka podajnika Przerywasz w programie procedurę wyświetlania na LCD przerwaniem od Timera.
Przecież sam sobie udzielasz odpowiedzi. Jak wyłaczysz timer to komunikacja z DS-em jest prawidlowa. Z czego mozna wywnioskować, że obsługa przerwania timera wplywa na transmisje z DS-em i oczywiscie, bo tam (w DS-ie) jest dość dokładne uzaleznienie czasowe i jeśli w takim miejscu (czytasz DS-a) wystapi przerwanie od timera to cała komunikacja idzie...
No właśnie podczas wieczornych (nocnych) testów, w kilku momentach uzyskałem odczyt z DS-a -132* czyli źle coś odmierzył w momencie wystąpienia przerwania. Poczytałem trochę Ds od DS18b20 i tematy na elektrodzie i wstawiłem pętelkę z CRC. Teraz chyba będzie działać tak jak się należy.
Kolego poczytaj o multipleksowaniu wyświetlacz 7-segmentowych. Jeżeli chcesz, aby temperatura wyświetlała się niezależnie od głównej pętli programu musisz to zrealizować w przerwaniu.
a czy da rade w bascomie stworzyć procedurę obsługi 1Wire tak by nie kolidowała z przerwaniami np.coś w rodzaju wstawki ASEMBLERA
nie przeszkadza bo całe multipleksowanie wyświetlaczy jest w przerwaniu, co najwyżej oczekiwanie będzie dłuższe niż 750 ms
serialin przerwanie delphi przerwanie przerwanie timer0
pendrive odczyt linux niebieska lampka peugeot odpowietrzający
amica pa4560a420 przełącznik hyundai
Różnice między tranzystorami BC307, BC307A, BC237B i BC413C Jak sprawdzić moc silnika ciągnika Władimirec?