dlaczego od wartości Load odejmujemy 1 ? Bo liczniki używają też wartości 0, więc jeśli chcesz mieć przykładowo 5 cykli, to wpisujesz do licznika wartość "5 - 1". Licznik w efekcie odliczy 4-3-2-1-0 - razem pięć (;
Witam, zaprojektowałem soft-start 3-fazowy sterowany mikrokontrolerem stm32. Steruje poprzez odliczanie po przejściu przez zero sinusoidy na trzech fazach. Gdy mam połączone żarówki w trójkącie to wszystko działa ok. Tzn. płynnie steruje jasnością. Natomiast gdy podłączę silnik indukcyjny to przy pewnej wartości czasu wpada w wibracje, taki jakby rezonans...
Jakaś dokumentacja jest w katalogu firmware procka. Są tam też jakieś przykłady. Jest taka fajna pozycja o STM32 z wykorzystaniem CubeMX: https://www.carminenoviello.com/masterin...
Najprościej - odliczasz impulsy w przerwaniu timera. I tak przy każdym kroku masz zmieniać okres timera, więc każdy krok musisz programwo obsłużyć.
A co to jest ? [syntax=c] SysTick_Config(SysTick_FREQ/1); [/syntax] SysTick to 24 bitowy licznik, SysTick_Config służy do zaprogramowania wartości od której odlicza on w dół, po przejściu zero generowane jest przerwanie i SysTick odlicza znowu od wartości wcześniej zaprogramowanej u ciebie jest to (SysTick_FREQ/1).
No tak widzę, bo jest jeden wspolny rejestr ARR. Czyli muszę zapuścić 6 timerów. Dam radę:) Dzieki za pomoc i nastepny stopień "rozjaśnienia";) To jeszcze jedno pytanie - linijka "TIM4->CR1 |= TIM_CR1_DIR;" jest zbędna, to znaczy że w tym trybie kierunek odliczania jest ustalony zawsze w dół? Albo nie ma znaczenia?
System Workbench for STM32 mam zainstalowany, zależy mi na programie startowym kolegi Freddie Chopin bo w SWFstm32 ma własną inicjalizację zegarów i odliczanie czasu systic nie zgadza się z tym co jest w programie a chcę uruchomić hd44780 gdzie potrzebuję dokładnych czasów. Chyba że koledze chodzi o coś innego? Pozdrawiam
W takim razie napisz port STM32 samemu. W katalogu /demo/BARE znajdują się 2 pliki portserial oraz porttimer, musisz uzupełnić implementacje funkcji w nich zawartych (w komentarzach jest opisane co dana funkcja ma robić). Nie jest to trdune bo są to funkcje konfigurujące usart i timery, zatrzymujące i startujące transmisje/odliczanie, więc napisanie...
Chciałbym w jakiś sposób przechodzić w tryb uśpienia, ale potrzebuję też odmierzania czasu z dokładnością do 1ms, i inaczej niż pobieranie SysTick z taką częstotliwością nie potrafię tego rozwiązać, tym bardziej, że chciałbym, żeby drugi stm32 podłączony do tego poprzez moduł RF (na SPI) też tak samo odliczał czas, próbowałem na RTC, ale tam jest dokładność...
Jeżeli nie potrzebujesz dokładnych opóźnień a takich Π•oko, to IMHO delay na pętlach w zupełności wystarczy. Timerów w stm32 niby wiele...ale prawie zawsze, w większych aplikacjach znajdzie się szczytniejsze dla nich zastosowanie. Z drugiej strony stosowanie pętli opóźniających na ARM-ach trąci profanacją :) Jeżeli nie interesuje Cie korzystanie...
(at)rafz i czym się różni czekanie na zmianę stanu na pinie RW od czekania aż licznik skończy odliczać? Oprócz faktu że w tym drugim nie używamy pinu RW. Przede wszystkim tym, że jak sobie to rozpisze z opóźnieniami to będzie widział jak to czasowo wygląda i gdzie ten czas będzie mógł zaoszczędzić o ile potrzebuje ;) A init, który jest wykonywany zazwyczaj...
oba przerwania wykonują się z taką samą częstotliwością, niezależnie od tego co wpiszę w Pulse Nic dziwnego :) Przecież oba mają tę samą podstawę czasu, czyli rejestr TIM1->CNT. Jedyna różnica jaką mógłbyś zobaczyć, to moment przełączenia wyjścia lub pojawienia się flagi przerwania. Ale nie zobaczysz, ponieważ niezbyt szczęśliwie dobrałeś czasy 0 i...
Ustawienia kanałów CC nie mają bezpośredniego wpływu na pracę timera. Jeśli timer ma odliczać do jakiejś wartości, używa się do tego rejestru ARR (PSC dla dzielnika). Zasadniczy tryb pracy timera określa CMS oraz DIR z rejestru CR1, od przepełnienia timera można ustawić przerwanie UI. Jeśli kanał CC jest ustawiony jako compare (praca jako wyjście),...
Do poczytania https://stm32.eu/2018/04/25/7-stm32cube-... Azymut (kąt kierunku w jakim porusza się obiekt w stopniach) można wyłuskać z ramki GPRMC, Odbiornik sypie danymi przez UART po włączeniu zasilania. Wystarczy ze strumienia ramek wydobyć interesujące nas dane. W praktyce czekamy na odpowiedni znak i jeśli się pojawi odliczamy...
Po ponad tygodniowej przerwie STM32 znowu zagościł na moim biurku. Aktualnie walczę z Timerem, na szybko skonfigurowałem go tak aby odliczał do góry, teraz chciałbym aby było z niego wyzwalane przerwanie. Z tego co wyczytałem w przeróżnych manualach udsotępnianych przez STM trzeba to zrobić w rejestrze ISERx, pytanie tylko co podstawić za x i pod którym...
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...
Witaj Kolego Szczywronek ! Oczywiście, mam nadzieję, że wiele razy już czytałeś jak piękną robotę odwaliłeś pisząc swój poradnik. Myślę, iż słowo poradnik jest nieadekwatne do tej książki, którą wydałeś w domenie PUBLIC DOMAIN. Wielki szacunek i wielkie podziękowania, za włożony trud! Nie mniej jednak w rozdziale 1.4 (uwagi końcowe) dałeś przyzwolenie...
Zapytam tu o inną jeszcze sprawę, bo nie chcę dla tego drobiazgu zakładać nowego tematu. Muszę ustawić timeout ramki, jezeli po odpowiednim czasie odbiornik nie odpowie, to transmisja zostaje przerwana z flagą błędu. Chcę do tego użyć timera, np.TIM4. Uruchomiony bedzie w najprostszej konfiguracji zwykłego licznika, ładowanego przed rozpoczeciem transmisji....
A co i z czym miałoby się gryźć przy jednym przerwaniu? Przekombinowujesz. Podałem rozwiązanie, które (bez zmiennych czasów) wymaga trzech linii kodu w funkcji main (wywołanie SysTick_Config, ustawienie SleepOnExit i _WFI()) i po 5 linii kodu na przekaźnik w obsłudze przerwania. Nie ma żadnych powodów, by przy tak niekrytycznym czasowo działaniu urządzenia...
Jeśli chodzi o F4 to: W ADC kalibracja jest już automatyczna (albo jej w ogóle nie ma bo nie znalazłem o tym informacji w manualu), doszło parę nowych rejestrów, ogólnie minimalnie się różni szczegóły w RM. Ustawienie SPI działa skopiowane z F1. Timery w trybie trójfazowego PWM, enkodera, i zwykłego odliczania działają po skopiowaniu kodu z F1. W F4...
Jeżeli używasz HAL, to musisz też uruchomić LSE albo ręcznie przerobić kod na używanie LSI. HAL używa LSE do odliczania czasu przy korzystaniu z FatFs. Gdybyś pokazał jak skonfigurowałeś interfejsy, zakładka Configuration, to wtedy można powiedzieć coś więcej. Możesz też próbować okrężną drogą i poszukać w sieci materiałów z ubiegłorocznych warsztatów...
Z pomocą angielskiej strony udało mi się stworzyć sinusoidę za pomocą PWM. Zrobione to zostało w ten sposób, że jeden timer co jakiś czas odlicza czas w którym DMA wysyła wartości wypełnienia do drugiego timera. Tablicę również znalazłem gotową, zawierała ona 128 wartości, czyli próbek. Po przefiltrowaniu przebiegu PWM przez filtr RC dostałem sinusa....
Pytanie jak zrobić, aby przycisk resetował licznik do zera i odliczał od nowa. Wystarczy w funkcji "pod przyciskiem" przeładować rejestry: Pytanie czy jeżeli brama zostanie otwarta z innego źródła niż przycisk a licznik się przepełni to jak uniknąć jej samoczynnego zamknięcia? Najprościej chyba uruchomić TIM1 w funkcji "pod przyciskiem" i zatrzymać...
Rozumiem że Microchip został użyty jako przykład, w dodatku poradnik przetłumaczony. Nie mam nic przeciwko, bardzo dobra robota, nie dziwi mnie brak komentarzy bo co tu komentować? Świetnie opisane, nic tylko używać... Ale popatrzyłem na to i zapytałem siebie czy mnie jara, coś by trzeba skomentować i jedyne co uwiera podczas lektury to Microchip i...
A może coś takiego (w załączniku)? I przykładowy programik mrugania dwiema diodami... [syntax=c] #include "stm32f10x_io.h" #define LED GPIOA__ODR void TIM1_UP_IRQHandler(void) { if (TIM__UIF(TIM1)) // przerwanie 'update'? { TIM__UIF(TIM1) = 0; // zerowanie flagi LED[0] = LED[1]; // zmiana stanu LED0 LED[1] = ~LED[1]; // zmiana stanu LED1 na przeciwny...
Witam, Napisałem program, w którym do odliczania czasu używam SysTick'a i przerwania od niego. Gdy skompiluję i zapiszę program do pamięci Flash, program ten działa jak należy i możliwe jest jego debugowanie. Jeśli skompiluję i wpiszę program do pamięci RAM, to program nie działa poprawnie, a debugować go można jedynie do momentu wystąpienia przerwania...
Częściowy sukces. Metodą prób znalazłem gdzie tkwi problem. Okazuje się, że nie działa prawidłowo funkcja Delay_ms(). Procek zamiast odliczać krótkie opóźnienia zapętla się w nieskończoność. Na chwilę obecną rozwiązałem ten problem wklejając kod tego dema do innego programu w którym prawidłowo działa podobna funkcja opóźnienia i program w końcu ruszył....
SysTick jest chyba najprostszy, jedna linijka kodu aby 'zapuścić'. Obsługa przerwania SysTick nie wymaga niczego - żadnego kasowania flag itp. dlatego w prostych projektach jest najczęściej używany jako timer delaya. Nie wymaga także skomplikowanych obliczeń - tylko zegar, podział przez 8 lub brak podziału, podział przez wartość odliczania - i koniec....
Najlepiej zrobić to w obsłudze przerwania od timera. Tak jak pisze kolega Alagner - licznik ustawić na np. 100Hz, a w obsłudze przerwania muszą być liczniki programowe realizujące odliczanie czasu - pierwszy liczy do 100, co daje na jego wyjściu 1s, a następny może już odliczać sekundy, następny minuty, godziny, itd... Jednocześnie w tym przerwaniu...
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...
Witam, Na wstępie zaznaczam, iż nie miałem do tej pory dużo wspólnego z układami ARM, stąd też taki mogłoby się wydawać banalny dylemat. Do rzeczy: -Na 6 wyprowadzeniach (PB10 - PB15) mikrokontrolera STM32L152RBT6 uzyskać chcę przebieg jak poniżej: http://obrazki.elektroda.pl/6696132300_1... - t1 jest czasem pomiędzy zewnętrznym zdarzeniem...
Witam, już dobrych kilka godzin zastanawiam się, dlaczego timer 1 nie działa tak jak chcę. A chcę, poprzez poniżej przedstawione funkcje włączać żarówkę po odliczeniu przez timer na czas też odliczany przez timer. Konfiguracja timera 1: void Tim1_config(void) { RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; TIM1->CR1 |= TIM_CR1_ARPE; TIM1->CR1...
Witam, Chciałbym zapytać jaka jest zależność RTC i Systicka. O ile tak owa jest? - Kwarc 12Mhz (HSE_VALUE=12000000 , #define SYSCLK_FREQ_HSE HSE_VALUE) - Kody źródłowe poniżej - Keil - RTC zasilam z HSE (LSE nie trybi z przyczyn fizycznych) - STM32F103RBT6 - STMF4_Discovery jako debugger po SWD Problem: 1) A więc problem jest taki iż po wgraniu programu...
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.
Witam, Od razu pisze że nie jestem mistrzem w pisaniu programów, a z stm zaczynam swoją przygodę. Chce wyłączyć przerwanie od EXTI na przykład po obsłudze tego przerwania: Do wyłączenie/wyłączenia przerwania np. od Timera jest TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); //TIM IT enable Generalnie chodzi mi o to że muszę zrobić detekcje sekwencji...
Nie należy odliczać na timerze sprzętowo 5 sekund, bo i tak musisz odliczać na timerze czasy krótsze do innych celów - 5 s odliczysz programowo w przerwaniu timera zgłaszanym np. z częstotliwością 100 lub 1000 Hz. Preskaler wygodnie jest ustawić tak, żeby okres zegara wejściowego timera wynosił np. 1 us lub 10 us - wtedy łatwo liczy się i programuje...
W jakim celu pisać ręcznie po rejestrach, jeżeli wystarczy wywołać jedną krótką funkcję z core_cm4.h?? Jeżeli już to konfiguracja chyba powinna wyglądać tak: [syntax=C] SysTick->LOAD=(100*72) - 1; //100us (at)clk=72MHz NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); // set Priority for Cortex-Mx System Interrupts SysTick->VAL...
https://obrazki.elektroda.pl/7335795800_... Przedstawię tutaj płytkę ESP32-2432S028R oferującą przede wszystkim duży kolorowy wyświetlacz LCD TFT 2.8" oparty o sterowniki ILI9341 (wyświetlacz) i XPT2046 (rezystancyjny panel dotykowy, wraz z rysikiem), a to wszystko za raptem około 50 zł. Pokażę tu jak można przykładowo obsłużyć ten...
http://obrazki.elektroda.pl/3796073600_1... I Opis ogólny urządzenia: Chciałbym przedstawić mój projekt bazujący na mikrokontrolerze STM32 dokładnie na modelu STM32F11RET6 http://www.st.com/content/st_com/en/prod... Jest to sterownik dla urządzenia...
Jakiego typu jest absolutnie absurdalny i perwersyjnie wypaczony pomysł, aby mając OSa robić takie delay'e w wątkach ??? Również o podobną perwersję zakrawa wykonywanie przerwania timera co mikrosekundę tylko po to, zeby zmniejszać tam jakąś zmienną. Wez timer, skonfiguruj go jako one-shot, skonfiguruj mu takt na 1us, do ARR wpisz chciany czas w us,...
http://obrazki.elektroda.pl/8875559300_1... Chciałbym przedstawić mój projekt na konkurs świąteczny bazujący na płytce Nucleo 64 z mikrokontrolerem STM32 na modelu STM32F411RET6 WiFi komunikujący się z telefonem z systemem Android do coraz bardziej popularnych diod WSRGB2811 zamontowanych na świątecznej choince. Dokładnie to łańcuch...
Na TIM1 mam zrobiony timer do odliczania opóźnień... Od tego jest SysTick, albo TIM6 lub TIM7. Co JTAGa, to RM0008 rev.14, str. 172: Tabela 37. Debug port mapping
cytat z twojego przykładu: [syntax=c]__IO uint16_t CCR1_Val = 40961; __IO uint16_t CCR2_Val = 27309; __IO uint16_t CCR3_Val = 13654; __IO uint16_t CCR4_Val = 6826; uint16_t PrescalerValue = 0; [/syntax] PS. odliczyć sekundy już trudniej widzę nie można.
Witajcie, Z nowym rokiem nowe wyzwania :) Zwracam się do Was z pytaniem, czy moja koncepcja jest słuszna... Otóż, potrzebuję zbudować urządzenie, które będzie zasilane bateryjnie (docelowo 2xAA), które ma tylko zliczać impulsy zewnętrzne w ciągu każdej godziny działania urządzenia. Po odliczeniu godziny ma te informacje przesłać po rs485 dalej.Tych...
Sprawdzalem, co jest w rejestrach SystTicka: Pod adresem 0E000E010 jest wartosc 07 00 00 00 (po skonfigurowaniu) i 07 00 01 00 (po odliczeniu czasu) - czyli OK Może ktoś ma pomysł o co chodzi? Czy czegoś brakuje? Nie jest OK! Zamiast 07 powinno być 03 ! SysTick control and status register (STK_CTRL) Bits 31:17 Reserved, must be kept cleared. Bit 16...
Jeśli oba mają preemption 0 (a domyślnie wszystkie przerwania tak mają, chyba, że w STM32 jest inaczej niż wszędzie), to nikt nikogo nie może wywłaszczyć. Serdeczne dzięki za wytłumaczenie jak działa mechanizm priorytetów NVIC. Z tego rozumiem, że można zdefiniować maksymalnie 16 przerwań , które mogą się wzajemnie wywłaszczać (grupa 4) ? Subpriorytet...
0. Czy zmieniałeś konfigurację pinów połączonych z JTAG (PA13,PA14,PA15, PB3,PB4)? 1. Jeżeli tak, to ustaw BOOT0 = 1 i BOOT1 = 0 i próbuj się połączyć za pomocą ST-LINK Utility i skasuj pamięć uC. Możesz, jak mówi Freddie, robić to pod sprzętowym resetem. 2. Jeżeli nie będziesz mógł się połączyć w ten sposób, to możesz jeszcze skorzystać z wbudowanego...
dea jest taka, że należy skonfigurować Timer1 na FastPWM z rejestrem ICR1 jako Top (czyli licznik będzie liczył do wartości tego rejestru). Należy tak dobrać preskaler i wartość ICR1 by licznik przekręcał się co 20ms a więc np. preskaler 1024 i ICR1 15625 (a raczej 15624 bo licznik liczy od zera). Przy tych ustawieniach otrzymujemy granulację 1,3 µs/tick,...
Odstęp nie będzie miał ściśle określonego czasu, a ani jednego bitu więcej w ramkę nie upchniesz, nawet gdyby miał określony czas, bo nie zmienisz wartości bitu startu ani stopu UARTa. Te 30% "wolnego" czasu procesora zajmie kodowanie danych do transmisji. Ciekawe, czy się wyrobi... - niekoniecznie moim zdaniem, zwłaszcza, że występują tu i dane 12-bitowe...
Rozwiązałem część problemu (źle rozumiałem adresowanie w Packet Memory ale dzięki zerowaniu tego obszaru pamięci podczas resetu USB i podglądu w debugerze + podglądnięciu jednego z przykładów zrozumiałem jak to działa) i otrzymuję teraz prawidłowe żądanie GET_DESCRIPTOR. W trakcie pisania tego postu też w końcu doszedłem do tego co robię źle... błąd...
Podsumowujac wszystko to powinno to wygladac mniej wiecej tak - staralem sie juz dobrac odpowiednie wartosci z plikow naglowkowych: /***************************************... /* */ /* SystemTick */ /* */ /***************************************... /***************** Bit definition...
Muszę zrobić programowego mastera SPI, Fmax 18MHz. Nie mogę ustawić portów na wolniejsze taktowanie, bo mam na nich kartę ethernetową (zestaw ZL26ARM) i z ARM jest taktowana karta (50MHz). Transmitowane będzie po kilkanaście, kilkaset bajtów co ok 100ms. No ale tak krótkich czasów - dla zegara 18 MHz - przecież nie odliczysz inaczej niż najbardziej...
Prosty timer z nastawą czasu. 0. Elementy: * wyświetlanie na 3 cyfrowym 7 seg. wyświetlaczu * krańcówka * triak * eeprom * buzzer * 2 przyciski 1. Zasada działania Nastawa zapisana w pamięci eeprom, przy włączeniu zasilana wczytana z powrotem. Przy rozwartej krańcówce: *rozłączony obwód triaka *nastawa czasu 1-999 sekund za pomocą + oraz -. Przy zwartej...
https://obrazki.elektroda.pl/7656017200_... O komputerach jednopłytkowych czy stare komputery były lepsze od współczesnych platform rozwojowych i SBC? Nie lubię Arduino I to jest jak najbardziej prawda. Arduino to platforma, która miała dać łatwy dostęp do programowania elektroniki ludziom, którzy nie znają się ani na elektronice,...
Witam, Przymierzam się do napisania sterownika na popularny termometr DS18b20 i chcę stworzyć funkcję generującą opóźnienia opartą na timerze. Wszystko pięknie, ale mam problem z flagą: Dodano po 16 Okey, problem rozwiązany- niepotrzebny był nawias w warunku w pętli while. Przepraszam za zaśmiecanie- temat do kosza albo do zamknięcia :) Dodano po 26...
Witam, Oto wszystko poniżej wg dokumentacji , ale nie działa. W symulacji nie następuje zmiana stanu kanału 4 mimo, że licznik odlicza. Taktowania oraz GPIO oczywiście ok . W czym może tkwić problem? TIM1->CR1=0xA0; //ARPE, CMS=01 TIM1->CCMR2=13<<11; //OC4M=110(PWM MODE 1) OC4PE=1 TIM1->CCER=1<<12; //CC4E =1 TIM1->PSC=0;...
zmywarka odliczać odliczać impuls odliczać minuta
renault megane bezpiecznik wycieraczka matryca projektora yamaha filtr paliwo
Wymiana pękniętego ekranu w telewizorze Manta LED 32LHN89T Resetowanie błędów w zmywarce Bosch SRS45T62