Jeśli dobrze rozumiem nazwę "Analog Comparator", to zdecydowanie porównuje on sygnał analogowy. Wyjście komparatora jest wyprowadzone tylko na bit ACO w rejestrze ACSR, na generator przerwań od komparatora oraz opcjonalnie pod Input Capture timera . Wyjście komparatora nie jest wyprowadzone na żaden zewnętrzny pin.
1. dobrze 2. zmienna counts nie jest nigdzie zerowana, to raz. pozatym algorytm IMHO jest bledny, to dwa <: idea jest taka, zeby byl on w stanie zmierzyc impulsy o dowolnej dlugosci, a nie tylko takie ktore zmieszcza sie w jednym okresie timera (ile on tam bitow ma). jednoczesnie wiec w pierwszym przerwaniu od gory (overflow) inkrementowany jest...
Może dla uproszczenia sprawdził bym, czy będzie działało przy wypełnieniu 50%. W takiej sytuacji przy częstotliwości 1 kHz przebiegi powinny mieć po 0,5ms, przy 2 kHz odpowiednio po 0,25 ms etc. Przy szybkości współczesnych MCU wypełnienie nie będzie tu problemem. Wybierz jakiś np. AVR, tóry by ci pasował, przejrzyj jego notę pod kątem dostępności...
ad 1. Użyj timerów - taktując je zegarem o odpowiedniej częstotliwości licznik timera będzie zliczał czas. ad. 2. Użyj timera :) Tylko w trybie input capture - w tym trybie licznik zlicza impulsy zegara taktującego i jest stopowany zboczem sygnału doprowadzonego do wejścia ICP timera.
Najprościej podpiąć oscyloskop i zobaczyć co się naprawdę dzieje z sygnałem po podpięciu Timera albo od razu wtórnik na tranzystorze.
Z listingu programu nie mozna doszukac sie jaka metode przyjmujesz w pomiarze RPM. Ja jakoś się doszukałem. A nie, sory. Nawet doszukiwać się nie musiałem. Liczy okres pomiędzy impulsami. Ale przerwanie to powinno wyglądać tak: Przerwanie: Zmienna = Timer1 Timer1 = 0 Wynik = 7500000 / Zmienna Return Preskaler Timera ustaw na 64. A: Capture Edge...
Skąd bierzesz sygnał wejściowy? Mam nadzieję, że nie z przycisku - wtedy będziesz miał kilka zatraśnięć timera przy każdym naciśnięciu i zwolnieniu. TIM2->SR&=!TIM_SR_CC1IF ; // Zeruję flage - to inaczej TIM2->SR &= 0; Ta instrukcja zeruje wszystkie znaczniki źródeł przerwań timera. Całkowicie niepotrzebnie używasz też: NVIC_SetPriorityGrouping( 5);...
Przecież timer liczy tak: niech MR0 = 4 to 0,1,2,3,4,0,1,2,4,0,... zatem trzeba odjąć 1. W takim razie zrób test preskaler ustaw na wartość taktowania uC, żeby do timer był taktowany 1 s natomiast do rejestru MR0 załaduj 10 a później 9 LPC_TMR32B0->MR0 = s - 1; Teraz dopiero zauważyłem, że AN jest jedno przerwanie od timera i jego wejścia CAP. Ale...
//timer 1 16bit konfiguracja (ICP1) TCNT1=0; //ustawienie poczatkowej wartosci timera 1 TCCR1B |= (1<<ICES1); //pomiar na narastajacym zboczu TIMSK |= (1<<TICIE1) | (1<<TOIE1); //zezwolenie na przerwanie od ICP i od overflow TCCR1B |= (1<<CS12) | (1<<CS10) ; //prescaler 1024...
Tutorial do avr taki znalazłem: http://avr.elektroda.eu/?q=node/8 Jak byś czegoś w sieci szukał, to raczej unikaj tutoriala z patron.net, uczy złych nawyków i jest nieco nie na czasie. Pomiar częstotliwośći na AVR realizuje się w miarę łatwo, przy wykorzystaniu timerów, jeden timer pracuje jako licznik impulsów z zewnątrz, a drugi odmierza czas, mozna...
Dysponuję autorskim protokołem transmisji danych przez pojedynczy kabel. Szybki, niezawodny, odporny na zakłócenia . Wymaga jednego timera z jednym kanałem capture i jednym kanałem match. Oczywiscie mozna to zrobić po prostu na przerwaniach programowo, ale wtedy osiągane prędkości są raczej nie... imponujące. Protokół jest zasobożerny, lecz implementuje...
Może jestem naiwny, a poza tym nie znam się na technice radiowej, dlatego zapytam: dlaczego nie można wpuścić sygnału przejścia przez zero (albo jego maksimum, albo minimum) na wejście capture timera mikrokontrolera i wykrywać przesunięcie fazy mierząc różnice czasu trwania okresu kolejnych przebiegów fali? 1 bit leci przez 20ms czyli 4500 okresów nośnej...
Masz błędny kod. Jak chcesz by program działał jak trzeba to musisz wiedzieć co robi każda linijka. Włączasz przerwanie od przepełnienia timera0, a nie maż funkcji do jego obsługi. Deklarujesz funkcję do obsługi przerwania zewnętrznego, a nie masz funkcji obsługi i nie zezwalasz na to przerwanie. Na moje oko to po uruchomieniu timera procesor się zresetuje...
Robi się to prosto na wejściu ICP Atmegi, mierzysz czas pomiędzy kolejnymi zboczami, raz jest opadające, raz narastające itd.. potem to tylko interpretacja wyników, liczenie bitów i po odliczeniu 64 bitów z transmitowanych 66, bo dwa ostatnie dla uproszczenia procedury pomijasz. wyświetlasz na LCD lub wysyłasz po RS232 do komputera, a tam wyświetlasz...
Ponieważ oprócz przypisania rejestru licznika TC do CR0 przy zmianie zbocza "chcę" wygenerować przerwanie. Za generację tego przerwania właśnie odpowiada 2 bit w rejestrze CCR. Zapis LPC_TMR32B0->CCR = wartosc ustawia tylko te bity które są ustawione w wartosc. Dlatego za każdy razem konieczne jest ustawienie 2 bitu, gdyby to pominął nigdy nie było...
PC6 (RESET) - opcjonalnie nóżka resetująca procesor PD0 (RXD) - odbiornik UARTA PD1 (TXD) - nadajnik UARTA PD2 (INT0) - przerwanie zewnętrzne PD3 (INT1) - przerwanie zewnętrzne PD4 (XCK/T0) - taktowanie USARTA albo impulsy dla timera VCC - zasilanie cyfrowe GND - masa PB6 (XTAL1/TOSC1) -do podłączenia kwarcu (wejście) PB7 (XTAL2/TOSC2) -do podłączenia...
Jakoś nie bardzo rozumiem jak Ty chcesz wykorzystać timer w trybie Input Capture Event. Ale to może dlatego, że nie używałem jeszcze nigdy tego timera TCB. Bo ja to sobie wyobrażałem tak, że chcesz wykorzystać ZCD do wyzwolenie timera który zacznie liczyć przez 10ms i zmieniać PWM w zależności od tego ile mocy ma być przekazywane. Czyli regulacja fazowa....
TEQOOZ(R) Inteligentny regulator wentylatora Wi-Fi + przełącznik dotykowy Bluetooth (biały) | Oparty na kondensatorze - bez buczenia | Kontrola aplikacji Tuya i Smart Life | Kompatybilny z Alexa, Google Home, Apple Siri | Wykończenie szkła Ten kontroler wentylatora nadaje się do indyjskich domów z oprawą Roma Informacje o produkcie KONTROLA APLIKACJI...
Włączyłem. Inne przerwania działają. Sorki, nie wklejalem całego kodu, bo nic tam nie ma oprócz testowego sprawdzania flagi w pętli while. R Dodano po 1 Ten tryb Periodic Interrupt jest bardzo niejasno opisany, bo przerwanie nazywa się Capture i raczej powinno się włączyć Capture timera. Włączone też nie działa. R
Nie wiem czy wiesz co będzie wynikiem jeśli weźmiemy dwie zmienne szesnastobitowe bez znaku i odejmiemy większą od mniejszej? Wynik nadal będzie dodatni jednak pomniejszony o poprzednią wartość tej mniejszej zmiennej. Tak więc proponuję rozważyć taki temat: Timerx w momencie pierwszego odczytu w INTx ma 65530. Nie zerujemy Tmerx . Timerx w momencie...
Używam 3 timerów, po jednym na parę bramek+ sterowanie podświetleniem wyświetlacza na PWM. Jeżeli koniecznie potrzbujesz tych przerwań i uparłeś się na ATmega8, to pomyśl o użyciu funkcji capture timera - możesz nawet nie czytać rejetru Capture, a wykorzystać samo przerwanie. Jeśli nie używasz wszystkich timerów, to 2 przerwania "zwykłe" i 2 capture...
Dobrze kalkulujesz. Co do kodu to jest zonk w tym, ze do zliczania impulsow i odmietrzania czasu uzywasz tego samego Timera0. Byc moze jeszcze gdzies jest blad lecz na chwile obecna dysponuje tylko tel. komorkowym. Funkcja Timer0_MicroSeconds musi dzialac na innym timerze niz Timer0 ! Dodatkowo lepszym rozwiazaniem byloby przepisanie stanu licznika...
Witam, Chciałbym mierzyć czas miedzy dwoma sygnałami gdzie pierwszy sygnał generuje START, a po kilkunastu mikrosekundach taki sam sygnał dochodzi z drugiego źródła i generuje STOP pomiaru. Odstęp między tymi sygnałami wynosiłby od kilku do kilkudziesięciu mikrosekund. Chciałbym do tego wykorzystać funkcje Input Capture Timera 1. Niestety Atmega328...
Poza tym Twój "prosty" układ już się rozbudował o wzorzec, układ przełączania i procesor. No to już pojechałeś. Rzeczywiście jeden kondensator to jest skomplikowanie układu. Procesor już mamy w obu przypadkach. Układ przełączania jak chcesz mieć wszystko "zautomatyzowane". Stopniem skomplikowania zaczyna już przypominać krytykowany układ, dokładnością...
Taaaaak... A gdybyś tak przez pomyłkę zapomniał w drugiej linii napisać if (przerwa) i zostawił samo else, to jak myślisz, co by się stało? Ile tysięcy razy trzeba wyświetlić "pomiar", żeby to zadziałało? Dlaczego uważasz, że jeden raz nie wystarczy? Dlaczego używasz sprintf (b. czasochłonna funkcja) do skopiowania łańcucha tekstowego z jednego miejsca...
Witam; próbuje poznać procesory Xmega, a dokładnie temat Timery. I nie mogę zrozumieć dwóch kwesti: 1) który rejestr odpowiada za podłaczenie zewnętrznych pinów procesora jako efekt działania timera w trybie PWM? Otóż, jeżeli timer ustawię na pracę w trybie single_slope lub na dual_slope , to jak mam zadeklarować aby wyjścia OCxx działały z tym timerem?...
Myrek1: DMA wyzwalasz timerem, nie zmianą stanu portu. W dotychczasowych STM32 jedynym sposobem na wyzwolenie DMA przez port jest użycie na tej linii trybu capture timera - i wtedy oczywiście DMA wykona się w kilka cykli zegarowych po zmianie stanu linii. Na 80 MHz STM32L4 jest to czas ok. 140 ns. W przypadku wyzwolenia DMA przez timer w trybie compare/PWM...
Bez sensu. Użyj timera w trybie capture i tyle. Na odpowiednim zboczu timer zatrzaśnie wartość, z różnicy pomiarów masz z dokładnością do 1 impulsu timera czas impulsu. I nie robi rożnicy jezyk programowania.
Mam ustawiony timer w Input Capture Ustawienie timera z przepełnieniem licznika IC_Timers 40000 (po prostu potrzebowałem równy czas też dla odmierzania zegarka i innych bajerów do odmierzania czasu ) przerwanie co 20ms. https://obrazki.elektroda.pl/6280175200_... Od lewej okres, czas stanu wysokiego, aktualny timer ICR1, poprzedni timer...
Wychodzi w takim razie na to, że trzeba się przesiąść na jakiś szybszy µC, najlepiej 32-bit. Niektóre timery w takich układach mają coś takiego jak PWM input capture i można z timera odczytać sobie częstotliwość i wypełnienie.
dzięki za odpowiedz, co do użycia innego timera to nie bardzo, bo chcę mieć regulowane serwo w 1024 krokach, więc na 8 bitowym timerze się nie da.... z kolei input capture wystarczył by mi 8 bitowy, niemniej tej opcji 8 bitowe timery nie mają ;( wiec nie bardzo się da, chyba tylko większą atmege128 w to wsadzić.... pozdrawiam Krzysiek
Sygnał z tacho wentylatora należy podać na wejście Input Capture MCU, ustawić timer i zbierać momenty w których następuje zmiana stanu sygnału tacho. To trzeba przeliczyć na okres, a z tego masz wprost częstotliwość. Często trzeba ją podzielić przez dwa, jako, że najczęściej masz dwa impulsy z tacho na obrót. Inna możliwość - to podać na wejście CLK...
Ale w czym problem? Wpuszczasz sygnał z DHT na wejście timera i mierzysz czasy trwania impulsów - to b. proste. Timer zgłasza przerwanie capture przy zmianie poziomu na linii danych. To jest rozwiązanie problemu, a nie pisanie kodu, który programowo odlicza czas i wyklucza możliwość robienia czegokolwiek innego podczas transmisji.
Nie mam niestety kwarcu 8MHZ i nie mam jak sprawdzić. I nie wiem czy mogę użyć wewnętrznego oscylatora. Do kontroli amatorskiego RC-serva nie jest absolutnie konieczny kwarc! Błąd częstotliwości wewn. oscylatora w porównaniu do rezonatora kwarcowego jest mniejszy niż błąd serva. Musisz przyjąc ze zwykłe servo (bez encodera) ma błąd co najmniej 0.5...
Zajrzyj do Elektroniki Praktycznej z lutego br. Parę rzeczy masz źle w kodzie. Do przyzwoitej obsługi potrzebujesz trzech kanałów jednego timera STM32, z czego jeden w trybie capture obu zboczy. żadnych innych przerwań ani opóźnień programowych nie trzeba. Timera nie trzeba zatrzymywać ani restartować - chodzi w ruchu ciągłym i sam inicjuje pomiary....
... tak naprawdę ma to być obrotomierz do motocykla . ... Priorytetem jest bardzo szybka reakcja wyniku .... Zastanów się czy nie warto wykorzystać w tym procesorze Timera pracującego w trybie Capture Mode: http://obrazki.elektroda.pl/4130623300_1... Znajdziesz w nim dodatkowo wbudowany układ redukujący szumy sygnału wejściowego oraz...
Dobrze interpretujesz - timer chodzi sobie w tle w kółko, a Ty możesz mieć przerwania od kilku wejść Capture. Z racji tego, że na jeden timer są dwa wejścia Capture, musisz użyć dwóch timerów do całej tej operacji. 4\/3!!
To już nie rozumiem, co jest źle. 1) Konfiguracja timera 2) Nie można podejrzeć zmiennej podczas debug
Jak widzę koledzy popuścili wodze wyobraźni... Mówimy o pomiarze z rozdzielczością 200 ns, we współczesnej elektronice to cała wieczność. Można sobie CPLD wrzucić (prędzej FPGA), tylko po co, skoro procesor za 2 zł ma wszelkie potrzebne funkcjonalności? Stabilizowany termicznie oscylator? Można, tylko po co. Zwykły kwarc będzie miał dokładność kilku-kilkunastu...
To się raczej nie uda przy braku transmisji zegara przez źródło danych. Ja bym popędził SPI na częstotliwości nieco powyżej 3 MHz, zrobił odbiór na DMA i programowo analizował odebrany strumień bitów. Wtedy nie trzeba generować zegar przez timer, co grozi błędną synchronizacją. Ew. można pomyśleć o włączaniu timera generującego zegar dla SPI przez bit...
Witam, Napisałem program, który docelowo miał odbierać dane z komputera przez modem BT HC-05 interfejsem UART oraz potwierdzać odebranie danej, oraz wysyłać dane z ADC jeśli przyciśnięty zostanie przycisk (w rzeczywistości jest to wycinek pewnego programu, więc niektóre zmienne etc. mogą być bez sensu). Odczyt ADC wykonuję wykorzystując przerwania capture...
Podaj zliczane impulsy na wejście taktujące licznik (Tn) a sygnał bramkujący na wejście przechwytujące (ICPn). Ustaw licznik na taktowanie z wejścia Tn. Początkowo skonfiguruj wyzwalanie przechwytywania na zbocze narastające, a gdy ono wystąpi, w procedurze obsługi przerwania input capture zapamiętaj wartość licznika (dla porządku nazwę tę wartość w1),...
Z tego co zauważyłem, mikrokontroler taktujesz częstotliwością 1MHz. Przy preskalerze 1024 częstotliwość taktowania timera będzie równa 1000000Hz/1024=976,5625Hz. Z tego wniosek, że w ciągu 1 sekundy timer zlicza 976,5625 impulsów. Biorąc pod uwagę, że timer jest 16-bitowy przepełni się 1 raz na (65536/976,5625) 67,108864 sekund. Jeśli nie musisz schodzić...
Sprytnie używając timera można napisać całkowicie nieblokującą obsługę OneWire z rozsądnym wspomaganiem sprzętowym - jeden kanał timera w trybie compare ze sterowaniem wyjściem w trybie OD, sąsiedni kanał w trybie capture z chwytaniem zboczy narastających. żadnych delay, żadnych problemów z przerwaniami. Można też obniżyć priorytety wszystkich innych...
Synchronizację kilku avr'ów na poziomie mikrosekundowym powinno się przeprowadzić bardzo łatwo. Używając timera 16 bitowego oraz naprzemiennie trybów pwm oraz przechwytywania: najpierw jeden układ ustawia, aby timer wygenerował zbocze w momencie kiedy jego timer się przepełni (użycie jakiegoś trybu pwm albo czegokolwiek) - inne procesory przyjmują sygnał...
Wystarczy zerknąć do DS i sprawdzić jak poustawiać rejestry. To jest kilka linijek kodu - uruchomienie timera w tryb input capture + przerwanie overflow od niego - uruchomienie innego timera w trybie ctc liczącego np 20ms. - obsługa przerwania w którym ustawiamy flagę (tego z ctc), że trzeba obliczyć szybkość - w przerwaniu overflow inkrementujemy jakąś...
Dlatego, że w chwili zajścia zdarzenia do ICR przepisywana jest wartość licznika timera. ICR to nie jest rejestr, który jest przez timer inkrementowany, stąd też nie ma wielkiego sensu do niego coś zapisywać. A że licznik timera się inkrementuje, więc kolejne wartości ICR to po prostu wartości licznika timera w momencie zajścia zdarzenia. Aby to zmienić...
Tzn rozumiem o co Ci chodzi, to że umieściłem wyświetlanie w przerwaniu jest błędem i jestem tego świadomy :) Ale jak zauważyłeś zaraz po uruchomieniu przerwania zeruje prescaler timera 0 a co za tym idzie przestaje on zliczać, czyli nie nastąpi przerwanie timer0_overflow. I teraz dalej ... potem zaraz przed uruchomieniem przerwania odpowiedzialnego...
Nie do konca jest tak ;] Po kazdym puszczeniu przycisku (czyli skonczeniu symbolu - kropki lub kreski) musi lecieć licznik timeouta na znak. Zeby dało się rozpoznać kiedy skonczył sie znak... W skrócie mówiąc, weź uruchom timer w trybie capture z przerwaniem na capture event, podłącz przycisk pod TMRx_CAP0, capture skonfiguruj na oba zbocza i edge sensitive...
A nie lepiej wykorzystać możliwość startu timera sygnał zewnętrznym (trigger mode) + capture dla końca? Nie do końca mam tylko pewność jakby to było pinologicznie wykonalne, ale wtedy robimy to prawie w pełni sprzętowo, wyjątkiem jest tylko przerwanie od overflow żeby zaznaczyć jego wystąpienie. Z tego co widzę na TIM2_CH1 jest też EGR. odn. pinów,...
Cześć mam pytanie odnośnie tego w jaki sposób można zliczać impulsy podawane na dowolny pin? W moim projekcie zliczam impulsy z 4 źródeł w przerwaniach zewnętrznych na liniach P0, P1, P2, P3 problemu nie było do wczoraj gdy okazało się, że muszę kontrolować jeszcze jedno wejście - też P0. Z tego co wiem nie da się w przerwaniu zewnętrznym rozstrzygnąć...
Pisałem wcześniej, że generalnie się da, ale nie bezpośrednio :) Da się w taki sposób: Szukasz w nocie, które DMA na którym kanale i źródle ma TIMx_Trig - to będzie nasz timer który wyzwala transfer. (Na F4 chyba tylko 4 timery mogą być takimi wyzwalaczami) 1 Bierzesz tenże kontroler i na odpowiednim kanale/źródle ustawiasz adresy peryferium (IDR),...
a więc przerobiłem kod tak jak umiałem #include <avr/io.h> #include <avr/interrupt.h> void setup() { Serial.begin(115200); } //Counts overflovs volatile uint16_t T1Ovs1, T1Ovs2; //Variables holding three timestamps volatile uint16_t Capt1, Capt2; //capture Flag volatile uint8_t Flag; //Initialize timer void InitTimer1(void)...
AVE... Rób prototyp od razu z dedykowaną częstotliwością zegara... Możesz też użyć modułu CCP, ustaw go w tryb Capture na każde zbocze opadające. Zamiast mierzyć długość impulsu, zmierzysz długość przerw między impulsami. W ostatecznym rozrachunku wyjdzie na to samo...
NA STM32F można też w tym celu użyć trybu timera przwidzianego dokładnie dla takiego zastosowania - "PWM input mode", z automatycznym zerowaniem timera po wykryciu jednego ze zboczy, co zapewne jest lepszym rozwiązaniem w tym konkretnym przypadku. W czym to będzie lepsze, od zaproponowanego przeze mnie capture mode z automatycznym zerowaniem po wykryciu...
witam To moje pierwsze zetknięcia z AVR`ami stąd pytanie dla wielu może wydać się banalne lecz raczej nikt mi nie zarzuci, że nie szukalem ani nie czytalem. Przeszukałem całe forum ale o o środowiesku IAR jest bardzo mało postów. Wszystko to co wyczytałem pochodzi z user manulala Iar`a. Problem polega na tym, że po włączeniu licznika/ timera 1 oraz...
Hmm, czy ATmega32 na pewno ma timer3? Rzecz w tym, że mam już gotowy układ, w którym są wykorzystane nóżki procka OCR1A i OCR1B (outputy timera1) - gdybym teraz do PWM wykorzystał inny timer, musiałbym wprowadzać zmiany w układzie, czego chciałbym uniknąć (a do tego timer2 też mam zajęty, a silniki są dwa). Mówisz, że logiczne jest, że praca timera...
Witam, pisze program w assemblerze który pozwarciu INT0, będzie wykonywać określoną czynność(łączyć się z innym urządzeniem), Ale narazie utknąłem w martwym punkcie, napisałem program który po zwarciu INT0 wywołuje przerwanie które zapala diodę podpiętą do lini PC0 5 razy i gasi(zapalenie uzyskuje poprzez ustawienie PC0 w stan wysoki). Całość funkcjonuje...
No niekoniecznie bo wkońcu napięcie możesz dać poprzez dzielnik napięcia na wewnetrzny komparator. No tak - ja bym do tego użył tego za 1.5$: https://obrazki.elektroda.pl/8220578700_... Możesz zrobić na wiele sposobów: 1. dać zewnętrze komparatory. Wtedy w input capture przechwytujesz napięcie przy 1V poprzez transmisję DMA a na drugim...
Rozwiązałem problem w następujący sposób: 1. Impulsy z enkodera podawane są na dwa wejścia timera (TIOA i TIOB) 2. Timer jest ustawiony w trybie CAPTURE 3. TIOB traktowany jest jako TRIGGER wywołujący przerwanie na zboczu narastającym i opadającym. 4. W obsłudze przerwania rozpatrywane są 4 przypadki: if(TIOA == 1) { if(TIOB == 1) { licznik--; } else...
Wyjaśnij jeszcze co to jest stan C, do czego służy i jak go definiujesz/rozpoznajesz, bo nijak tego nie idzie zrozumieć, to po pierwsze. Po drugie, możesz spokojnie przyjąć rozdzielczość pomiaru na poziomie 10 us. 1 us nic nie da, bo pojedynczy impuls nadajnika trwa min. 25 uS. Po trzecie, ponieważ użyteczne długości impulsów na wyjści TSOP nie przekraczają...
gdyby ten wątek czytał ktoś kto akurat przypadkiem nie ma właściwej książki ;) to przykłady zastosowania input capture na atmedze można często znaleźć w projektach gdzie odbierane są sygnały z pilota na podczerwień bo tam właśnie mierzy się czasy impulsów i przerw między nimi hm, właściwie to odpowiedzi są banalne: 1. tak 2. no przecież to proste skoro...
Witam! Jestem trochę świeży w ARMach. Mam gotową płytkę z LPC2136, do której podpięty są wyświetlacze LED, LCD, termometr (LM35CZ) i pare innych. Główna funkcja to zliczanie impulsów na wejściu capture: P0.10 CAP1.0 (ma to być wykorzystane do obliczania prędkości samochodu). Wykorzystuję do tego dwa obydwa timery (timer0 i timer1). Timer0 generuje przerwanie...
Tylko jest tego rodzaju problem iż atmega taktowana zegarem 16mhz przy preskalerze 8 i 8 bitowym liczniku minimalny czas jest w porządku (0,5us) maksymalny natomiast 128us więc dalej musze inkrementowac w przepełnieniu zmienną . Dodatkowo z tego co widze input capture przypisany jest tylko do timera1 ja go używam do innych celów (2 kanałowy pwm). Poradziłem...
Najdokładniej będzie zmierzyć czas pomiędzy impulsami z enkodera - możesz do tego użyć trybu input capture (ICP) timera1. Przy max. prędkości obrotowej masz ok. 100 zdarzeń na sekundę. Przy min. prędkości możesz zwiększać preskaler timera żeby wykluczyć przepełnienie bez "łapania" impulsu. Jeśli odstępy między impulsami z dekodera nie są identyczne,...
Jakieś małe opóźnienie i kolejny raz sprawdzenie stanu No przecież po to Ustawilem przerwanie co 30ms. To jest właśnie opóźnienie, którego potrzebujesz :) W kolejnych wywołaniach tego przerwania sprawdzasz sobie stan poprzedni i porównujesz z bieżącym. Jeśli są takie same, to uwzględniasz zmianę. Dodano po 8 Ewentualnie spróbuj podejścia z filtrami...
Mogę się mylić, ale w tym przykładzie kolega miga diodką wykorzystując GPIO a nie podpinając do wyjścia timera, więc gpio out pp może chyba być. Czy kol. qczek przypadkiem na koniec nie konfigurujesz ch1 w tim2 jako capture, czyli "łapiącego" i liczącego impulsy z zewnątrz? TIM_SetCompare1(TIM2, TIM_GetCapture1(TIM1) + CH1_PULSE ); Poza tym nie zauważyłem...
Witam. Programuję sobie urządzenie w którym mam zajęty cały PORTB a potrzebuję podłączyć przycisk tak aby jego przyciśnięcie wyzwalało przerwanie. Wymyśliłem, że użyję do tego pinu T1CKI z którego sygnał użyję do przepełnienia timera1 ustawianego każdorazowo na wartość 0xFFFF. Timer1 inicjalizuję w poniższy sposób: krzysiek_krm napisał: "Zapomnieliście...
...nie odrzucam sposobu mierzenia prędkości poprzez pomiar czasu pomiędzy kolejnymi impulsami. Lecz nie bardzo mam pomysł jak to zrealizować programowo. Będe wdzięczny za podpowiedzi. W sumie to jest bardzo proste, wykorzystaj do tego jakiś timer z dość dużą częstotliwością (czym większa tym dokładniejszy pomiar). Zerujesz go w momencie przyjścia impulsu,...
Proszę o pomoc, nie wiem czy dobrze kombinuję z tym Capture Mode. Próbuję cały czas to jakoś odpalić w moim programie, ale nie wiem czy czy dobrze robię. [syntax=vb]'--------------------KONFIGUR... $regfile = "m16def.dat" 'informuje kompilator o pliku $crystal = 8000000 'informuje kompilator o częstotliwości...
Pozwolę sobie odświeżyć temat dopiero teraz gdyż wcześniej nie miałem czasu:( Oprócz przerwania od przechwycenia licznika dodałem jeszcze przerwanie od przepełnienia: Do funkcji licznik dodałem: TIMSK |= (1<<TOIE1); oraz procedura obsługi przerwania: cykl1 i cykl2 ktore sa przekazane do powyższej funkcji jako argument Oto całość: cykl przekazując...
Główne różnice to obecność "zanegowanych" sygnałów wyjściowych (OCxN) z opcjonalnym deadtime oraz wejście "hamulca" (BKIN). Właśnie dlatego go szkoda. Timery w STM32 są niesamowicie rozbudowane Tym bardziej szkoda takiego całego timera jako dzielnika /2. Ale udało się-wykombinowałem. Wymagało zewnętrznego połączenia wyjścia np ch3 na który mam wyprowadzony...
Czym i jaka wersją kompilowałeś, bo mi w WinAVR wyskakują same błędy!! :-( Najnowszą wersją WinAVR. W załączniku jeszcze raz to samo, ale kompletny projekt z Programmers Notepad. Przed chwilą sprawdziłem i kompiluje się tak jak powinno ('Make All' z menu Tools). Te procedury FFT mogą stwarzać problemy przy kompilacji, jak próbowałem ich pierwszy raz...
Witam, Właśnie jestem w trakcie przenoszenia małego projekciku z doświadczalnej pajęczynki na pcb, i mam mały problem. Dotychczas używałem Timera 2 do pomiary sygnału zewnętrznego (z odbiornika modelarskiego). Wszystko było ok. Teraz musiałem użyć Timera 3 kanału 2 wyjście PC7 (procek STM32F103Vx)... no i zaczęły się problemy. Pomimo zrobienia full...
Witam, Jestem początkujący w STM32 i w ogóle w Armach więc proszę o pomoc. Zmagam się z problemem uruchomienia trybu enkodera na STM32. Działanie tego powinno wyglądać następująco: Kręcę enkoderem w prawo bądź w lewo - ulega zmianie licznik timera8 co można zaobserwować pod TIM8->CR1 lub jak kto woli cośtam = TIM_GetCounter(TIM8); Mój kod inicjalizacji...
Witam, Wpadła mi w ręce płytka prototypowa z STM32f103 na pokładzie wiec pomyślałem że spróbuję swoich sił z tym mikrokontrolerem. Jak dotąd programowałem hobbystycznie głównie 8bitowe AVR-y i z nimi mniej lub bardziej sobie radzę. Ale do rzeczy wymyśliłem sobie że w projekcie zaprzęgnę do pracy Timer2, którego zadaniem będzie po wywołaniu funkcji Beep();...
Do podlaczenia z uC wystarczy ze wykorzystasz wyjścia A i B. Sposobów sprawdzania kierunkow obrotu i impulsowe jest wiele. 1) Podlaczasz wyjscia A i B pod dowolne piny uC i w wywolaniu przerwania od jakiegos timera sprawdzasz stany tych pinow i zapamietujesz stan wyjscia np A. Np: If (A != Temp_A) then { if( A <> B ) Ile_impulsow++; else Ile_impulsow--;...
Witam. Robię sobie komputerek spalania do samochodu. Wszystko ładnie wychodzi poza czasem wtrysku a co za tym idzie - spalaniem. Występują jakieś zakłócenia i nie wiem dlaczego. Może ktoś pomoże....:) Kod: $regfile = "m168def.dat" $crystal = 16000000 ''''''''''''''''''''''''''konfiguracja portów'''''''''''''''''''''''''''''''''' Config Portd...
Witam ! Mam taki programik napisany w Avr-gcc. #include <avr/io.h> #include <inttypes.h> //alternatywne typy zmiennych #include <avr/pgmspace.h>//adresowanie zmiennych w obszarze programu #include <avr/interrupt.h>//obsługa przerwań #include <util/delay.h> #include "ffft.h" //funkcje Fouriera #include "usart.c"...
Próbowałem, ale coś robiłem źle lub o czymś nie wiem. Efekt miałem taki, że nic nie świeciło. [code][syntax=c] RCC_APB1PeriphClockCmd(RCC_APB1Periph_TI... ENABLE); void init_timer() { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TI... ENABLE); // Konfiguracja podstawy czasu....
Do sterowania sinikiem krokowym potrzebne sa 4 piny mikrokontrolera.Jesli zalozenie jest takie ze krok ma byc wykonywany co okreslony czas to bedzie potrzebna obsluga timera a konkretniej ukladu capture ktory pozwoli na dokladne odmierzenie czasu.W procedurze obslugi przerwania umieszczasz wowczas funkcje wywolujaca kolejne kroki silnika.Najlepiej ztablicowac...
Witam, Mam do mikrokontrolera podłączony układ, który w wielkim uproszczeniu dostaje sygnał PWM z uC i zwraca go z pewnym przesunięciem fazy z powrotem . Chciałbym mierzyć to przesunięcie fazowe. W tym celu podaje do tego układu sygnał o częstotliwości 40 kHz z PWM, a sygnał wyjściowy układu dołączam do wejścia CAPTURE 0.0. W trakcie działania programu...
Witam, chciałbym zczytać dane z enkoderu, mam jeden podłączony do PB6 i PB7,a drugi do PB3 i PA15 i posiadam STM32f103RE Mam 16 impulsów na obrót i nie moge nic zczytać do zmiennych. Bardzo proszę o pomoc bo siedzę juz 4 dni i nic nie działa Oto mój kod: [syntax=c] void Encoder_Config(void) { //Konfiguracja timerow //1. GPIO_InitTypeDef GPIO_InitStructure;...
Spróbowałem zrobić coś w ten deseń. Oczywiście nie działa :). [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> #include <avr/delay.h> #define PORT_ON(port,pin) port |= (1<<pin) #define PORT_OFF(port,pin) port &= ~(1<<pin) #define ICP PINB0 int wyzwalanie = 0; //zmiana zbocza unsigned int TIM16_ReadTCNT1( void...
Witam , mam nadzieję iż nie zanudziłem bez reszty.. W zestawieniu z moimi "dokonaniami asm." kolega michalko12, jest najbliższy temu co ja kiedyś robiłem . Oto wersja asm z przełącznikiem kompilacji aby kompilować jako samodzielny plik - kto chce ->ten może :D ( ta wersja to 16-timerów, 16-nasto bitowych, każdy cztery tryby konfiguracji, oczywiście...
Wydaje mi się że mnie plik wygląda okay [syntax=c] /** ****************************************... * (at)file startup_stm32f030xc.s * (at)author MCD Application Team * (at)version V2.3.0 * (at)date 27-May-2016 * (at)brief STM32F030xc/STM32F030xb devices vector table for Atollic TrueSTUDIO toolchain. * This module performs:...
Mam problem z połączeniem funkcji chodzi o to zeby wyswietlacz był aktualizowany w pętli while(1), jednak gdy umieszczę ten fragment kodu wynik=7654; LEDDIGITS Dodano po 4 Poniżej daje oryginalne kody obrotomierz: [syntax=c]/* OBROTOMIERZ v.1 Obrotomierz przeznaczony do prostych pomiarów prędkości obrotowej. Pokazuje: - czas jednego obrotu, - liczbę...
Witam. Potrzebuję W tym liczniku obrotów: [syntax=c]#include <avr/io.h> #include <stdio.h> #include <avr/interrupt.h> #include <util/delay.h> #include "HD44780.h" //tutaj ustaw własne zasady pomiaru #define POMIAR_ILOSC_IMPULSOW_NA_OBROT 4 //ilość inpulsów na jeden obrót #define POMIAR_ILOSC_OBROTOW 10 //ile obrotów ma trwać...
W tych standardach transmisji jest tak, że impulsów o danej częstotliwości jest określona ilość, więc może dobrym rozwiązaniem było by wykorzystanie Timera 1 (w wypadku np. ATmega8), czy innego który ma OCR, żeby wywołał przerwanie po zliczeniu odpowiedniej ilości impulsów. Inny timer zajmował by się zliczaniem czasu. Po przerwaniu z OCR wartość licznika...
Ja to widzę tak: W celu uzyskania 1 taktowej precyzji należy odczytać (w tym przypadku) rejestr TCNT0 dokładnie w 8000000 takcie. Można też go odczytać w innym momencie i odjąć odpowiednią ilość taktów. Tylko jaką? Kluczowy jest ten fragment dokumentacji technicznej: The interrupt execution response for all the enabled AVR interrupts is four clock cycles...
Input Capture z tego co piszesz działał by idealnie do obliczania obrotów, ale do wyliczania czasu impulsu już nie, bo reaguje na jedno lub na drugie zbocze. A ja potrzebuję znać czas trwania impulsu oraz odstępu między nimi. Przecież wewnątrz obsługi przerwania Input Capture możesz sobie zmienić zbocze. Warunek jest tylko taki, żeby obsługa przerwania...
Popełniłem taki oto kod jak poniżej. W założeniu ma to być zegarek stawiany pilotem, oraz z dwoma DS18B20. Założyłem sobie, że nie użyję żadnego Wait, ani Gosub. Mam jednak jeden problem z odświeżaniem czasu na LCD. Niby dwukropki migają co sekundę, ale sekundy nie są wyświetlane poprawnie. Przez pewien czas jest niby dobrze, ale czasem jakby pomija...
Witam. Robię miernik częstotliwości na ATmega8 z wyświetlaniem na LCD HD44780 w trybie 4-bit (mam zrobiony prototyp). Opanowałem już wyświetlanie (z obsługą BF), ale teraz przystawiło mnie z pomiarem liczby impulsów zliczanych na wejściu T1 mikrokontrolera. Wynik co prawda jest wyświetlany, lecz jest on niestabilny w taki sposób, że skaczą 2 ostatnie...
Witam, Bazuje na projekcie ze strony Freddie Chopin dla stma F4 z dodanymi bibliotekami STM32F4xx_StdPeriph_Driver. Zdefiniowałem sobie konfigurację timer'a w następujący sposób: [syntax=c]void Timers_Config(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TI... ENABLE); NVIC_InitTypeDef NVIC_InitStruct; NVIC_InitStruct.NVIC_IRQChannel = TIM1_CC_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptio...
Zamierzam regulować jasnością podświetlenia wyświetlacza LCD sygnałem z PWM. Utknąłem bo na pinie od PWM1.1 nie pojawia się przebieg PWM. Nie wiem czy padł PWM, a może błędna jego konfiguracja. Sugeruje się zaleceniami user manula The PWM is configured using the following registers: 1. Power: In the PCONP register (Table 46), set bit PCPWM1. Remark:...
Jak dam dword to kompilator wywala mi blad niechce sie skompilowac...dlatego dawalem word i moze przez to niedzialalo. Pozniej sprubuje tylko na zaplonie pobujac i sprawdzic. Ale dziwne bo nawdr gdyby tam raz na jakis czas spadlo do 4L to srednia nie wyszla by 4L. Musialo by byc przez 10 pomiarow okolo 4L. Wrzuce tez pelny kod bo teraz pisze z kom....
Szukaj pod hasłem "Timer Interrupt Capture" przykładów jest od groma nawet pod Arduino ATMEGA328..
Nie musisz odblokowywać ani obsługiwać przerwań timera. Jeśli raz włączysz wyzwalanie ADC, będzie ono włączone (raczej - co prawda STM32F1 są strasznie skopane, ale chyba nie aż tak). No ale jak widać nie działa, nawet nie wchodził w przerwanie więc nie wiem już jak to powinno być poustawiane. DMA już chyba wysyła dobrze: 00 00 00 00 00 00 00 00 46...
Proponuje TCD5.CTRLE=TC45_CCAMODE_COMP_gc; zamienić na: TCD5.CTRLE=TC45_CCAMODE_CAPT_gc; Oczywiście brakuje jeszcze sei() ale to pewnie zapomniałeś dodać wklejając na forum. Pozdrawiam Mateusz
Jeśli masz detekcję otwarcia/zamknięcia migawki to nie ma najmniejszego problemu z pomiarem. Nawet ATMega8 ma timer z możliwością pomiaru czasu - tryb capture. Podajesz sygnał na wjście timera i potem odczytujesz rejestr zawierający timestamp zdarzenia. Parę linii kodu. Ale jak wykryć otwarcie/zamknięcie migawki? Laserek i mierzenie odbicia od migawki?
video capture capture device capture bascom
oporność głośnik światła awaryjne citroen powiesić kolumna
płyta indukcyjna termistor użytkownik oldboy
Włącznik do spawarki Einhell CEM160/1-F - gdzie kupić? Kalibracja tablicy interaktywnej: przesunięcie śladu rysika