Timery i dokładne odmierzanie czasu w różnych miejscach kodu. Zamiast korzystać z kilku timerów, można w różnych blokach kodu konfigurować 1 timer i wstrzykiwać odpowiednią funkcję przerwania. Oczywiście pod warunkiem, że nie będziemy musieli odmierzać czasu dla dwóch bloków jednocześnie. Wygląda na to, że potrzebujesz po prostu callbacka w jednym...
Dla enkoderów ze stykami mechanicznymi, jeśli nie podłączasz go do uC za pomocą prostego filtru RC, wykorzystywanie timera czy przerwań to ślepa uliczka. Z racji, że takie enkodery nie generują impulsów o dużej częstotliwości, to najlepiej zrealizować odczyt programowo, np. cyklicznie w systicku sprawdzać czy mamy stan wysoki przez minimalny czas i...
Albert: dość mocno mijasz się z prawdą. Niektóre uC z rdzeniami Cortex mają sprzętowy mechanizm gwarantujący czas odpowiedzi na przerwanie, który umożliwia redukcję drżenia (jitter) przerwania o najwyższym priotrytecie do zera również wtedy, kiedy mamy w systemie inne przerwania. Jeśli użyjesz tego mechanizmu, to sam decydujesz jawnie o czasie od przerwaia...
To co opisujesz to właśnie idealne zastosowanie dla przerwań zewnętrznych, więc nie ma sensu w ogóle kombinować z timerem (jeśli nie możesz podłączyć tych sygnałów gdzie indziej, a w zasadzie tylko jednego z nich). 4\/3!!
Witam, Po inicjalizacji timera i przed jego włączeniem przeładuj timer (zapisz bit UG do rejestru EGR),a następnie wyczyść flagę w Status Register (TIM4->SR &=~TIM_IT_Update). Dopiero po tych czynnościach włącz timer - przerwanie powinno przyjść dopiero po odmierzonym czasie.
Witam, to temu, że timer 6 będzie taktowany z prędkością 2x większa niż magistrala APB1. Wytłumaczenie masz w reference manual (u mnie Doc ID 13902 Rev 11) str. 84, 85.
Witam Panowie mam takie pytanie: używając pętli for kopiowanie np 5 tys elementów z jednego bufora od drugiego trwa jakieś ~1,85ms. Mierzę to timerem robiąc przerwania co 50us. Jak używam memcpy to 5tys elementów kopiuje w 50us a dla 10 tys jest 100us . Czy to możliwe ? czy po prostu memcpy blokuje przerwania od mojego timera
Kosztem dokładności możesz zrobić to na jednym wspólnym 2-kanałowym timerze i przerwaniu EXTIi (oddzielnym dla każdego czujnika). Dwa kanały służyłyby do odmierzania czasu impulsu startowego i kasowania czujnika - wymuszenia kończenia pomiaru, a okres timera wyznaczałby cykl pomiarowy do kolejnego przeglądanai czujników.
Timerem zmierzyć możesz.
W timerach STM32 jest coś takiego jak PWM Input Mode który służy do sprzętowego pomiaru wypełnienia i okresu PWM - szczegóły są w np w Reference manual. O ile jednak dobrze pamiętam to jednym timerem sprzętowo można mierzyć tylko jeden sygnał PWM. Na jednym timierze 4 kanały pewnie trzeba będzie mierzyć programowo z wykorzystaniem Input Capture Mode
Pokaż log kompilacji po zrobieniu "clean".
Cześć Chce zrobić komunikację pomiędzy urządzeniami(podlączanymi i odłączanymi podczas pracy systemu mikroprocesorowego) a mikrokontrolerem stm32 z wykorzystaniem magistrali 1-wire. Problemem jest to, że muszę też wiedzieć gdzie dane urządzenie jest aktualnie podłączone, więc wspólna magistrala np przy pomocy USART'a odpada. Czy zrobienie oddzielnych...
Tak samo jak z timerami w STM32 z UARTami też nie ma problemu - zwykle są dwa jak nie trzy - w tych najmniejszych, bo w tych większych to jest np 5, a w STM32F4 jest 6. Ciężko znaleźć zastosowanie dla tych nadmiarowych, a UART jest na 1wire lepszy niż timery, bo cały bit jest załatwiony sprzętem jednorazowo, a z timerem trzeba to robić na kilka etapów...
Skoro nie masz problemu z timerem, to po co w ogóle o nim pisać i po co testować program który ma też przerwania od timera? Niemniej jednak na początek brawa za to, że NIE używasz słynnego i popularnego badziewia (; Wg mnie (skoro chodzi o pin zerowy), powinieneś konfigurować rejestr AFIO->EXTICR[0], a nie 1. Problemem jest manual niezgrany z plikiem...
"Natomiast odczytanie wielu kanałów 200 kSPs co 5 us to banał," Na mikrokontrolerze STM32 nie mam pojęcia jak to zrobić... Tak żeby DOKŁADNIE co 5us odczytywać 3 przerworniki 14-bitowe, z których dane odczytuje się szeregowo. Teoretycznie można to zrobić timerem z przerwaniami ale nawet wejście do funkcji obsługi przerwania zajmuje pewien czas, który...
Witam, mam ja sobie układzik na wspomnianym procku, w którym procek radośnie timerem popędza malutką przetwornicę buck (o mocy kilkuset mW). Układ działa bez zastrzeżeń, dopóki nie zatrzymam rdzenia debuggerem... Mianowicie kontroler przetwornicy oparty jest o PFM, więc czasami zatrzymanie rdzenia zbiegnie się z timerem wyłączonym (wtedy jest OK, napięcie...
zegar 56 MHz, 5us srednio trwa pobranie wyniku konwersji i zapis go do tablicy. Mierzylem timerem ile czasu zajmie pobranie 100 próbek i zajeło mu to około 500us.Też mnie to zdziwiło że obsługa przerwania trwa tak długo.
Brak Ci preloadingu (buforowania). Wytłumaczę ten fenomen tak: Powiedzmy że Twój timer liczy od 0 do 100 (taka wartość jest w ARR), a ty nagle zmieniasz ARR na 10, tyle że aktualna wartośc licznika wynosi 50. No i teraz Twój timer musi doliczyć do 65535 żeby się przekręcić i doliczyć do tych 10. Dokładnie tak samo ma się sprawa z wartością CCR. Przed...
Witam zainteresowanych tematem. Czy ktoś może mi wytłumaczyć tak troszkę łopatologicznie, krok po kroku, jak działają te dwa liczniki? // TIM3 jest masterem dla TIM4 TIM3->CR1 = 0; //CNT_EN jako TRGO TIM3->CR2 = TIM_CR2_MMS_0; //Trigger mode, wyzwalanie przez T1FP1 TIM3->SMCR = TIM_SMCR_TS_0 | TIM_SMCR_TS_2 | TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1; //Włączenie...
Pochodzi od czujnika przerwania wiązki, drgań styków nie ma : ), znalazłem że czyszczenie flagi przerwania powinno być na początku, ale to niestety nie pomaga, i nadal pozostaje problem z wykrywaniem obu zbocz a nie tylko jednego Dodano po 10 Przeszukałem forum, kilka kursów po polsku i angielsku i ten kod z pierwszego postu jest identyczny jak te z...
Pytanie brzmi, jak zrealizować moje założenie działania programu. W książkach Kardasia masz podobnież opisane coś takiego co nazywa się system czasu rzeczywistego. Weź się zapoznaj z tym tematem, przemyśl go i przećwicz. Bo to co w tej chwili robisz wynika głównie z tego, że nie rozumiesz jak konstruuje się program wielowątkowy (interaktywny, zdarzeniowy...
Tylko tak jak na stronie Arduino pisze Jest napisane. , funkcja pulseIn() "Works on pulses from 10 microseconds" co daje 100Hz bez dzielnika a z dzielnikiem tylko 400Hz. Więc jak to rozwiązać? Już napisałem, sygnał mierzony dajesz na wejście licznika. Tak można mierzyć częstotliwości do częstotliwość_taktująca_mikrokontroler / 2. W nocie katalogowej...
W prawdziwym systemie na ogół potrzebujemy coś robić (np. sprawdzać stan guzików, czujników, wyliczać sterowania dla urządzeń) z częstotliwością dużo większą niż częstotliwość migania diod sygnalizacyjnych. W takiej sytuacji mnożenie przerwań od timerów może powodować zwiększenie czasu reakcji lub rozrzutu czasu reakcji na przerwania, co często jest...
Sprawdziłem i flaga RXERIF nie jest ustawiona. Zwróciłem uwagę natomiast na coś innego. Wszystko lepiej działa jeśli timerem odpalam obsługę pakietów (ENC28J60_ExtiH) niż jak wyzwalana jest z przerwania. Dodatkowo sprawdziłem iż po połączeniu poprzez FireFox'a w buforze pozostają nie obsłużone 2 pakiety. Dziwne to gdyż zmieniłem funkcję i na początku...
Ehhh. Sprawa się poniekąd wyjaśniła. Ma być TCCR2 = 0b00001001 zamiast TCCR2 = 0b01000001. WGM21 pomyliło mi się z WGM20. Zamiast CTC był tryb PWM Phase Correct. Teraz wszystko działa bez zacinania. Dalej nie wiem czego w trybie Normal dzieli sygnał przez 4 ale może jakoś przeżyję. Przepraszam za niepotrzebne zamieszanie. Pozdrawiam EDIT: Wystarczy...
Zmagam się z drobnym problemem. Chcę zmierzyć odległość czujnikiem i muszę zmierzyć czas od stanu wysokiego na wejściu do staniu wysokiego na wyjściu. Otóż chcę ustawić wyjście cyfrowe aby co jakiś czas był na nim stan wysoki, od tego momentu powinien naliczać się czas, aż do momentu pojawienia się stanu wysokiego na wejściu. Potem wartość tego czasu...
1. Jeśli kierunek ma wartość 0 to to przerwanie nigdy nie jest wykonane. 2. Używanie biblioteki SPL dla potencjalnie szybkiego sygnału mija się z celem. 3. Jeszcze bardziej z celem mija się używanie Exti dla enkodera skoro STM32 ma timery z wejściami enkoderowymi.
Witam od dwóch dni walczę z bibliotekami Fatfs, i mam niezidentyfikowany błąd, wykończyły mi się pomysły. Sprawa wygląda tak posiłkuje się przykładami z książki STM32 w praktyce Autor: Krzysztof Paprocki. W zasadzie chce skompilować gotowy kod , (przykład R9 sd_fatfs) działam na układzie STM mini http://allegro.pl/zestaw-uruchomieniowy-...
Powrót małorolnego człowieka, a moderator burdel teraz zrobił. Zamiast zostawić potrzebne posty, to temat przeniósł do ??? Jaki mikrokontroler wybrać do... ??? Co to ma wspólnego z założonym tematem ? Jakiś nieogarnięty w temacie... Tylko spójrzmy na to obiektywnie - co kolega tymon_x sprawdził ? żeby nie było niedomówień! Otóż sprawdził (przepraszam...
Spora szansa, że problemem są priorytety przerwań. We FreeRTOS (w sumie w większości RTOSów) przerwanie które używa funkcji systemu musi mieć priorytet niższy lub równy wartości którą sobie skonfigurowałeś jako progowa w pliku FreeRTOSConfig.h. Ponieważ zwykle w tym pliku jest to skonfigurowane tak głupio, że nie wiadomo nigdy o co chodzi, na szybko...
Ok po pierwsze zdecyduj się czy używasz kanału 1 czy kanału 2 DAC bo odpalasz DMA dla kanału pierwszego DAC ale w rejestrze DAC_CR odpalasz kanał drugi. Do tego aby działał trigger inny niż software'owy musisz ustawić bit TEN1 oraz bity TSEL1[2:0] w zależności od źródła wyzwalania. Więc dla TIM6: [syntax=c]DAC->CR = DAC_CR_DMAEN1 | DAC_CR_TEN1 |...
Stos dla przerwań ustawiłeś? 4\/3!!
W STM32 domyślnie podczas zatrzymania rdzenia timery pracują, więc podczas twojej pracy krokowej zgłaszane są setki kolejnych przerwań. Aby to zwalczyć należy w rejestrze DBGMCU->CR (w manualu DBGMCU_CR) zapalić stosowny bit dotyczący stosownego timera. Niestety nie zawsze jest to możliwe (bo aplikacja może wymagać aby timer naprawdę stale pracował...
Uzupełniłem o Dodano po 8 Zmierzyłem stoperem ile czasu utrzymuje się 0 V a ile czasu 0,38 V i wyszło, że 10 s 0V poczym zmienia się na 0,38 V i utrzymuje się przez 10 s i cykl się powtarza, co ciekawe wykasowałem rejestry [syntax=c]TIM3->CCR3 = 500; TIM3->CCR4 = 500;[/syntax] i działa dalej tak samo.
[syntax=c]przerwanie_timera(void) { static uint16_t utimer = 0; if (utimer) utimer --; switch (stan_bramy) { case ZAMKNIETA: if (chcemy_otworzyc) { utimer = MAX_CZAS_OTWIERANIA; otworz(); stan_bramy = OTWIERANIE; } break; case OTWIERANIE; if (czujnik_otwarcia) { stan_bramy = OTWARTA; utimer = CZAS_OTWARCIA; } if (!utimer) // awaria break; case OTWARTA:...
Może by tak te impulsy na próbę podać na zwykły licznik/timer i zobaczyc ile zliczy na sek. i czy zlicza stabilnie? Przynajmniej bedzie wiadomo czy to problem bardziej sprzetowy, czy programowy.
może popatrz na to: https://stm32.eu/2012/04/11/timer-systic... Nie mam doświadczenia z STM32. Moja odpowiedź raczej dotyczyła licznika 4-bitowego.
Definicja tcp_timer_needed() jest w pliku tcp_impl.h, żródła w timers.c. Plik tcp_impl.h zaincludowany w tcp.c z resztą tu nic nie zmieniałem. Po dopisaniu #include "lwip/timers.c" program się kompiluje owszem i wszystko działa ale mam potem problem z kompilacją gdy chce dodać liczniki softowe pod freertos a to za sprawą includeowania pliku timers.h....
Może to na początek. [url=https://www.digikey.com/en/maker/pr... [url=https://community.st.com/s/article/...
A musisz te dane pchać cyklicznie co jakiś czas czy generalnie kiedy tylko się pojawią? Jak źle kombinuję to mnie poprawcie, ale nie lepiej byłoby wykorzystać tu FSMC i pisać po prostu pod odp. adres?
Cześć Chciałem odpalić timer i podłączyć do niego przerwanie ale napotkałem na pewien problem, a mianowicie konfiguruję sam Timer a następnie NVIC i po włączeniu zezwolenia na przerwanie procek skacze od razu do obsługi przerwania i już z tamtąd nie wraca. Umieściłem w obsłudze przerwania zmianę stanu pinu i wstawiłem breakpointa w main-ie zaraz po...
SysTimer jest wykorzystywany w FreeRTOS jako zegar systemowy. Ale jeżeli potrzebujesz timera(dla zliczania czasu będącego wielokrotnością zegara systemowego) dla jakiejs innej biblioteki możesz wykorzystać vApplicationTickHook(), gdy tylko masz symbol configUSE_TICK_HOOK zdefiniowany na 1 (plik FreeRTOSConfig.h). Funkcja ta jest wywoływana w przerwaniu...
Z warunkiem jest raczej wszystko ok, bo jak wspomniałem wcześniej przy wewnętrznym źródle taktowania timera wszystko działa poprawnie. Musiałem coś skasować podczas przenoszenia, w kodzie mam GPIOA -> AFR[0] |= (1<<5);
Jakim cudem zmiany kodu wykonywanego w pętli głównej mogą mieć wpływ na działanie tego co jest przed nią ?! Może jest coś wspólnego np. funkcja delay_ms() jest także wykorzystywana przed pętlą główną? ;) A jak wygląda delay_ms(): zwykła pętla for czy użyłeś timera?
Proste pytanie - czy przeczytałeś opis timera 1 w manualu? 4\/3!!
Ta biblioteka została stworzona po to, żeby ich nie rozumieć jako nadrzędne "wysokopoziomowe" API. Jak chcesz je znać w szczegółach to jej nie używaj i wtedy nota Ci wszystko wyjaśni. Nie mam pojęcia czemu to nie działa, analogiczny kod pisany z notą w ręku bez użycia bibliotek działa tak jak chcesz żeby działał.
Trzeba dodatkowo włączyć taktowanie bloku przerwań. Wstaw np. zaraz przed while(1) RCC_APB2PeriphClockCmd(RCC_APB2Perip... ENABLE); Jak dojdziesz do timera to też dodatkowo trzeba włączyć taktowanie RCC_APB2PeriphClockCmd(RCC_APB2Perip...
Tu też nie trzeba nic robić w przerwaniach - wystarczy zaprogramować timer. Jeśli trzeby wygenerować określoną liczbę impulsów - trzeba odliczyć je w przerwaniu timera i po kolejnym przerwaniu wyłączyć timer albo ustawić wypełnienie na 0.
Kilka wskazówek: 1. Jeśli sprawdzasz dwa piny, to sprawdzaj tylko te dwa, a nie cały port: if (GPIOC->ODR & 0x300) 2. Zamiast całego warunku if ... else , możesz po prostu odwracać stan portu: GPIOC->ODR ^= 0x300; 3. W pierwszej wersji było włączanie przerwania instukcją z CMSISa - tak było całkiem OK, więc nie ma co zmieniać. 4. Profilaktycznie daj...
Witam serdecznie, Z racji tego, iż nigdzie nie znalazłem satysfakcjonującej odpowiedzi na moje pytanie, chciałem je zadać tutaj. Mianowicie chce wyzwalać przetwornik A/C za pomocą Timera (nie określę jakiego gdyż nie chce się koncentrować na konkretnym). Piszę póki co programy przy użyciu wspomnianej w tytule biblioteki firmy ST. Z tego co już zrozumiałem,...
sterowanie timerem alarm timerem pilot timerem
klucze globo zmiana karty zintegrowanej karta pamięci uszkodzona
saeco sm6580 kabel brake radio
VW Polo 6N2 1.0 2000 brak napięcia na sondzie lambda za katalizatorem – schemat instalacji VW Polo 6N2 1.0 2000 – brak napięcia na wtyczce sondy lambda za katalizatorem