Witajcie, Zastanawia mnie pewna sprawa; czas zapisu do pamięci EEPROM w AVR-ach to 3-4ms. Czy w przypadku kiedy mam do zapisania więcej niż jeden bajt, po każdym poleceniu EEPROM.write() powinienem wrzucić delay ustawiony na 4ms żeby dać czas procesorowi na zapis? Czy mogę odpalić np pętlę, która od razu, bez żadnych opóźnień zapisze np 64 bajty? Jak...
Nie przerwiesz pętli for, while, do while jeśli nie będziesz w każdym obiegu pętli sprawdzał stanu, który ma to przerwać. Ta część: if (irrecv.decode(&results)){ long int decCode = results.value; się nie wykona w żadnej takiej pętli. Musiałbyś obsługę tego przenieść w przerwanie, czyli cyklicznie co np. 10ms sprawdzać stan (irrecv.decode(&results),...
A czy przerwanie zdąży się wykonać zanim wystąpi następne? Masz OCR0=2.
SIGNAL(SIG_OVERFLOW0) - w ten sposób definiowały obsługę przerwania jeszcze nasze babcie i jeszcze za ich czasów wprowadzono nowy sposób - ISR(TIMER0_OVF_vect) 3-sekundowy delay w przerwaniu? "Super" pomysł.
Porada: napisz to od nowa. W obecnej wersji masz delay w przerwaniu EXTI i brak przerwania timera do obsługi wyświetlacza.
IMHO to nie jest dobry pomysł. Z jaką częstotliwością taktujesz CPU? Uwzględnij latencję wejścia w przerwanie i to, że coś to przerwanie może blokować. A ty być potrzebował nie rozdzielczości 1 us lecz takiej dokładności co IMHO jest bardzo trudne do zapewnienia. Także nie tędy droga.
w ten sposob pozbylem sie delaya w ogole Jeżeli nie masz żadnych delay w loop() to tym bardziej możesz przenieść obsługę przycisku w to miejsce. Proponuję użycie EasyButton: https://github.com/evert-arias/EasyButto... Funkcja read() z tej biblioteki też nie wprowadza żadnych delay(), a detekcję naciśnięcia przycisku można sobie elegancko podpiąć pod...
Z początku wydawało mi się trochę nadmiarowe patrząc po cyklach CPU wskakując w przerwanie co przesłany bajt, dlatego wolałem sprawdzać czy już się wysłało w pętli Jeśli będziesz wysyłał dane odpowiednio szybko, to przerwanie od TC będzie tylko jedno - na samym końcu. Jeśli użyjesz DMA, to właśnie tak będzie, jeśli nie, to tak czy iak co bajt będziesz...
Źle podchodzisz do problemu - zmienna i (czyli numer wyświetlanej cyfry) powinna być zmienną globalną, którą w przerwaniu od timera zwiększasz, a następnie wykonujesz blok switch (i) { ... }. Oczywiście delay w przerwaniu to "bluźnierstwo" :) Preskaler ustaw sobie na 64, wtedy przerwanie od timera dostniesz ok. 400x na sekundę, czyli odświeżanie całego...
Jakie środowisko? Zakładam, że CooCox, ponieważ w innych takie rzeczy raczej nie występują. Odkąd pamiętam, to taki zapis zawsze poprawnie konfigurował SysTick do generowania przerwań co 1ms (1000Hz): [syntax=C] #include core_cm4.h #define FREQUENCY 168000000ul // lub dowolna inna, ale prawdziwa ///... jakiś fragment programu... if (SysTick_Config(FREQUENCY...
To przerwanie w którym wykonujesz odświeżanie musi działać z dużą częstotliwością, a co do używania delay w przerwaniu napisałem Ci już wcześniej - w każdym wywołaniu przerwania zapalasz kolejną cyfrę, która świeci się do momentu kolejnego wystąpienia przerwania. W kolejnym przerwaniu zwiększasz sobie jakiś licznik, który teraz wskaże na drugą cyfrę,...
Przecież wiesz, że delay w przerwaniu nie powinieneś stosować to dlaczego ponownie je tam wstawiasz? Przyjmij wreszcie postawę, że delay jest be i przestań go używać, oraz że do odliczania odcinków czasowych należy wykorzystywać timery. Patrząc na to co zaproponowałeś powyżej nie wiesz natomiast, że: - wchodząc w przerwanie przerwania są blokowane (flaga...
problem leży w odbieraniu bajtu Masz całkowita rację, używasz kodu blokującego (_delay_ms()), który powoduje, ze raczej się nie wstrzelisz w tą chwilę, kiedy wysyłany jest z PC upragniony bajt. Zgadza się, ma rację, ale ty, szanowny lordzie ;) racji nie masz, bo przecież pokazana funkcja USART_ReceiveByte czeka do skutku aż bajt zostanie odebrany,...
W zasadzie program działa, ale... to wszystko. Można to zrobić o wiele lepiej. podobno nie powinno stosować się funkcji delay w celu realizacji opóźnienia. Tak. O wiele lepiej jest to zrobić na przerwaniu timera. Poza tym, lepiej jest zadeklarować tablicę z której będziemy wczytywać wartości portów, a w funkcji obsługującej to wszystko tylko przesuwać...
Oj, przejrzałem pobieżnie kod - uwierz mi - skasuj go. W C jest coś takiego jak funkcje - wykorzystaj to, kod, który masz jest kompletnie nieczytelny. Każdy normalny promotor by to coś uwalił chociażby za to. Co do szybkości działania - pokaż kod funkcji odpowiedzialnych za komunikację z czujnikami. Z kodu, który masz: - funkcjie piszące do LCD są zapewne...
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...
IRQ tester https://obrazki.elektroda.pl/3243423400_... IRQ Tester to proste narzędzie, głównie do testowania czasu odpowiedzi na impulsy, lub czasów międzyzboczowych dostarczonego sygnału. Program został napsiany na ukontroler AVR Atmega168, a jego głównym zadaniem jest funkcja multiwibratora monostabilnego, którego działanie polega...
dziękuję Dodano po 5 . ładny https://obrazki.elektroda.pl/7767676000_... QIO bit-banged do HLK-B30. log z D12 Dodano po 6 . Niestety, jeśli nacisnę restart lub reset zasilania na U, przyczyną restartu jest zawsze przerwanie pinu. naprawiłeś to? Zawsze mam Pwr lub Rbt
Czy ten programik korzysta z przerwania? Tak bin ładujesz od 0x2000. Program używa przerwanie 20ms do odmierzania czasu trwania nut. Dołączam listing: [syntax=x86asm] ASxxxx Assembler V02.00 + NoICE + SDCC mods (Zilog Z80 / Hitachi HD64180 / ZX-Next / eZ80) Page 2 Hexadecimal [24-Bits] 3 .include /nuty1,625.asm/ 1 ;http://www.michalkaszczyszyn.com/pl/les...
Używam arduino ide ale jestem zielony. Wiedzę wchłaniam bardzo powoli. Myślałem że to będzie łatwiejsze. Na razie to udało mi się napisać prosty program .Po załączeniu attiny odmierza ona 7 minut a potem jedna dioda mruga co 10sekund a druga co 30. Oczywiście wszystko na delay więc szału nie ma. Coś podobnego mam teraz na NE555 w połączeniu z CD4060...
Nigdy nie korzystałem i nie śledzę rozwoju AI, więc mam pytanie. Czy i ewentualnie jak dobrze, modele językowe radzą sobie z pisaniem programów w asemblerze, np. mikrokontrolerów 8-bitowych? Coś tam generują, ale nie sprawdzałem w rzeczywistym układzie. DeepSeek wygenerował coś takiego: Poniżej znajduje się przykładowy program w asemblerze dla mikrokontrolera...
Przerwanie co 10ms { Pomiar adc 3 kanałow Przeliczenia wielkości Zmiana PWM } Wyświetlacz wywołany z main z delay około 100ms. Zmienia się tak : [youtube]http://www.youtube.com/watch?v=... Dolna linia : współczynnik wypełnienia 0-511, Napięcie, Prąd
Witam, Napisałem: "Widzę też, że nie masz takich samych czasów dla każdej cyfry/wyświetlacza." - na filmie widać, że "miganie" cyfr zależy od ich pozycji, a tak nie powinno być. To się robi na przerwaniach, aby uniezależnić się od głównej pętli. Przerwanie zawsze wywołuje się powiedzmy 30 razy na sekundę i wyświetla kolejną cyfrę. Przeanalizuj kod,...
(at)Piotr79611 Na ARM delay jest już realizowany przy pomocy timera - SysTick. Stąd zresztą wynika kolejny problem - jeśli przerwanie przerwie delay i samo odpali delay to wszystko się pokaszani. Także zmień sposób rozwiązania problemu. Możesz w przerwaniu włączyć te diody, jednocześnie odpalić timer, który wywoła przewanie gaszące diody.
Wybacz, że nie rozumiem wielu rzeczy. To pierwsze w sumie spotkanie z arduino. Tak, potrzebuje dwa kierunki, bo walek do ktorego będzie przylorzony enkoder potrafi (na postoju) minimalnie sie cofnac i jesli nie zmniejsze tego licznika w tedy, to po ruszeniu do przodu, przekaznik bedzie w innym "miejscu" się załaczać. Co do wałka do ktorego bedzie przyłożony...
ok ok co do testu chciałem sprawdzić czy jak zatrzymam wszystko używając delay to czy przerwanie się nie wykona na szczęście się wykonało co świadczy że zdarzenie czyli zmiana stanu pinu nie jest sprawdzane przez procesor. Dzięki Dodano po 19 Teraz dam taki bardziej praktyczny przykład np kiedy chce pobierać dane szeregowo to zamiast dawać if w pętli...
Oczywiście, że delay będzie opóźniał pętlę loop. Akurat z Serial to nie ma znaczenia, bo to jest robione na przerwaniach w Arduino, nawet jak loop jest zablokowany to po odbiorze czegoś na uart robi to sprzętowo, odbiera bajt, przenosi do bufora i zgłasza przerwanie, zaczyna odbierać kolejny. W tym czasie funkcja obsługi przerwania odczytuje ten bajt...
Ja nie próbuję zbudować kompletnego kitu AVT 2623 tylko wykorzystać moduł sterujący w innym układzie stąd inne wyprowadzenia. Póki co zmontowałem sobie pełen układ wykonawczy oraz na płytce prototypowej elementy sterujące. W moim układzie informacja o przejściu przez 0 jest na PD2 (tak jak w oryginale) natomiast wyjście sterujące jest na PB0. Jeśli...
Poniżej funkcja przerwania, która działa w pętli do momentu wciśnięcia przycisku Pin7 Wiesz że przerwanie to funkcja która z założenia powinna wykonywać się maksymalnie szybko? Używanie komunikacji, pętli oczekujących na coś lub funkcji delay to proszenie się o kłopoty. Poczytaj najpierw o idei używania przerwań a potem napisz to tak jak powinno być.
Więc już działa poprawnie. Teraz powstał inny problem którego się nie spodziewałem, aczkolwiek jest problem z przerwaniem, a dokładniej wstawiam kod programu Jeśli aktywne są przerwania to delay będzie opóźniał. Pokaż całość programu.
Jeśli nie delay, to zastanawiam się jak inaczej to rozwiązać... Ustawić przerwanie od timera, albo przenieść delay do głównej pętli programu.
W każdym programie jakoś musisz obsługiwać upływ czasu, na pierwszej lekcji do zamigania led użyłeś delay, do paru innych prostych programów to też wystarczy, ale generalnie należy to robić na timerze. Jest to tak oczywiste, że w Arduino zrobili do tego gotowe funkcje, w AVR C masz sobie to napisać sam. Czyli w obu uC masz mieć timer wybijający rytm...
1. Wobec tego korzystaj z funkcji opóźnień dostępnych we FreeRTOS. 2. Nic dziwnego, że opóźnienia tak działają - system ma swój timer i procedury obsługi przewań, a one zajmują czas procesora. 3. OneWire tak na pewno nie obsłużysz. Zajrzyj do najnowszej EP - zobaczysz, jak można to zrobić. Na pewno nie z delay(), a przerwanie timera obsługującego 1W...
Może masz jakiś lepszy pomysł kolego jak zrealizować takie zadanie nie używając funkcji dealy? :) To sposób wybrałeś. Dobrze sie domyślałem. Akurat robię coś takiego i akurat teraz na AVR. Uruchomiłem przerwania od obu zboczy na wejściu INT. Do wejścia tego podłączony jest układ wykrywania zera. Przerwanie to zeruje timer 1. Do OCR1A wpisuję wartość...
(at)szelus Wiekszość startupów ma ten sam adres obłsugi tych wyjątków. Dlatego nazwą się nie sugeruj o ile nie zostały napisane ich handlery Nie wiem jak za bardzo działa "Instrution Stepping Mode", Nie. Normalnie wykonuje to na uC Macie pomysł co może być winą albo jak dojść do problemu? 1. Jeżeli masz zainstalowany Atolloc albo CubeIDE to znajdź...
W przerwaniu delay na 10 sekund? Przerwanie ma działać jak najkrócej. Do poczytania: http://mikrokontrolery.blogspot.com/2011...
(at)marek-czarny Programowanie nie jest dla osób szybko się irytujących. Rozwiązując problem, rozwiązuje się go po kolei. Obsługa LCD wprowadza znaczące opóźnienia, zapewne w kodzie tych funkcji masz delay lub oczekiwanie na jakiś stan. Efektywnie odpowiada to sytuacji w której delay, w dodatku losowy, wpakowałbyś do pętli głównej. Może tego nie dostrzegasz,...
Czyli mam wygenerowac sobie przerwanie na timerze i wtedy uruchamic ta funkcje, ktora napisalem? Tylko teraz pytanie brzmi, co ile ms mam generowac te przerwanie?
Kolego Chivo ja korzystam obecnie z enkodera dfrobot df400 ma 400 impulsów na obrót, czasem bywały problemy z nim ale znacznie przewyższa tanie impulsatory. Wracając do tematu opracowałem kod który działa mniej więcej tak jak bym chciał. Czujnik odległości optyczny odbiciowy działa na pinie 12, na pinie 2 korzystam z impulsów enkodera. Podczas gdy obiekt...
P.S: W timerze delay jest mi potrzebny bo wysyłam dane po rs485 i muszę odczekać czas ze względu na konwerter. Wiesz dobrze, że wcale nie musisz do tego używać delay'a... 4\/3!!
Jaka jest aktualna częstotliwość zegara? Jak często uruchamiane jest przerwanie? Ile trwa naciśnięcie przycisku? Musisz zmieniać opcje tylko kiedy przycisk został naciśnięty, nie przytrzymany. Dodaj do przerwania warunek sprawdzający poprzedni stan przycisku. Pomyśl nad wyeliminowaniem delay. Aktualna częstotliwość zegara 1MHz , przerwanie z tego co...
Stała rada - żadnych delay(), tylko przerwanie timera i zmiana sterowania serw w tym przerwaniu. Nie rozumiem? Co jest złego w dawaniu po 1, 2 stopnie po bardzo małej przerwie? Bo gdy timer odlicza, to mikrokontroler może wykonywać inne zadania. W przypadku funkcji delay(); może jedynie czekać aż ten delay się skończy.
Wykonuje się 16384 razy, ale jak wywołam jednorazowo inne przerwanie i w nim dam jakiś delay (wiem, że tak się nie robi) to częstotliwość spada do 8192Hz. Ktoś zna przyczynę dlaczego tak jest? Nie podajesz jaki delay taki efekt generuje. Zapewne jest tak, że przerwania gubione są przez fakt, iż flaga przerwań nie jest buforowana. Jeśli więc wystąpi...
Witam, napisałem obsługę zewnętrznego przerwania, które się wykonuje bezproblemowo, jednak po obsłużeniu przerwania program nie wraca od razu w miejsce z którego przerwanie zostało wywołane. Oto kod: [syntax=asm].INCLUDE "m16def.inc" .DEF acc = r16 // akumulator .EQU SYS_FREQ = 1 .CSEG .MACRO delay1sek // delay 1 sekunda na 1MHz ldi r17, 0x09 9 delay3:ldi...
...jak było napisane wcześniej, każdy czujnik osobna linia przerwań Ale po co osobne linie przerwan? Wystarczy jedno przerwanie od wszystkich czujnikow plus sygnal z czujnika na wejscie (jezeli duzo czujnikow to uzyc 74hc165). Algorytm prosty. Przerwanie, sprawdzenie wejsc czujnikow (wykrycie czujnika) i zapalenie diod dla danego czujnika. Proste jak...
Dałem tam tego delay(55) bo czujnik musi mieć czas na konwersję. Więc delay powinien być pomiędzy wydaniem komendy "mierz", a przejściem do odczytu. Czyli co najwyżej powinieneś wydłużyć "_delay_ms(15);". Jeśli zaadresujesz urządzenie I2C do odczytu, to ono decyduje o tym kiedy odpowiedzieć. Jak dasz w swoim kodzie delay, to jedyny efekt jaki osiągniesz...
(at)tmf No a z tym moim delay co jest źle? Zobacz co się stanie jeśli przerwanie wypadnie w momencie porównania zmiennych - zrobi się sieczka. Porównanie musi być przeprowadzone atomowo.
Problem w tym, że autor tematu nie tworzy konkretnego rozwiązania, tylko poznaje przerwania (patrz tytuł) i z tym związane możliwości, zależności lub ich brak, problemy, itp. W ten sposób na pewno nie pozna i nie zrozumie niestety. A już jakies kombinacje z delay w pętli glównej + przerwanie timera to należy tępić w Jego głowie w zarodku
Muszę zrobić tak że niezależnie od ilości czasu otwarcia wyrażonego w ms pierwsza część czyli pick (pierwszy stan na oscyloskopie) zawsze ma wynosić 1ms a reszta to naprzemienne otwarcie/zamknięcie w tempie które uniemożliwia zamknięcie cewki. Pierwszy pik możesz zrobić po prostu używając delay w microsekundach, kolejne piki używając PWM Caość można...
Przesądy... ;) Nie "jak najszybciej" a "odpowiednio szybko"; np. jedyne w systemie przerwanie zgłaszane co 100 us może być obsługiwane przez 99 us i wszystko będzie ok. A co do diody - cały kod, który robi to, co trzeba w przerwaniu zgłaszanym co 10..20 ms, wygląda tak (na STM32F0): [syntax=c]static uint8_t bstate = 0, led_timer = 0; bstate = (bstate...
delay pamięć delay pamięć funkcja delay relay delay
potencjometr condor digital natural motion schemat światła ducato
przecinarka plazmowa schemat grzanie oleju palnik
Napięcia zasilacza w drukarce Epson L800 Jak odblokować piekarnik z trybu demo - Ariston, Samsung, Bosch