Czy jest możliwość takiego skonfigurowania strumienia DMA w konfiguracji pamiec do periferial żeby wyzwalany był przez timer ale dane szły do Uarta? Jest to możliwe - to że dany kanał jest przyporządkowany - przykładowo - do Timera, nie oznacza że może on wysyłać/odbierać dane tylko do/z timera. Niemniej jednak jeśli chcesz wysyłać dane do UART przez...
Witam Pierwsze linie kodu to deklaracja ustawień liczników T0 i T1. Konfiguracja dla ułatwienia została rozpisana na poszczególne bity, dlatego póżniej trzeba je przemnożyć x4 i x8 aby bity były na swoich miejscach. Dla licznika T0: CT0 EQU 0 M0 EQU 1 G0 EQU 0 T0S EQU M0 + 4*CT0 + 8*G0 oraz dla licznka T1: CT1 EQU 0 M1 EQU 0 G1 EQU 0 T1S EQU M1 + 4*CT1...
no dobra tmod skałda się z dwóch czwórek następujących bitów: GATE,C/T,M1,M0 m1 i mo ustalają tryb które znasz. C/T określa funcję c/t=1 Counter czyli zlicza impulsy doprowadzone do wejścia T(0lub1 w zalezności który licznik) c/t=0 timer zlicza cykle maszynowe (właściwie to powinno być C/ (negacja) T, tylko nie wiem jak to napisać) :) :( Gate - bramkowanie...
kurczę ja zawsze zapominam przy tym obliczaniu, że jeszcze się Timer musi przepełnić ;) - dzięki za sprostowanie tylko uprzedzę, że w twoim programie pierwszym używaliśmy (i ja używam nadal preskalera 8 a nie 64). Jak na próbę ustawiłem 64 to już była masakra dla oka ;) uuuf ok - czyli przy 8MHz i preskalerze = 8 - nasze przerwanie wykonuje się co 256us...
W Keilu dla mikrokontrolera SAB80C517A Ustawiłem timer0 w tryb pracy 1 (16 bitowy timer). Zegar ustawiony 16.0 MHz. Jakiej częstotliwości impulsy zlicza timer podczas symulacji? Generowana przerwania dają za krótkie czasy. Nota podaje, że zlicza impulsy zegara/12 . Przy w/w zegarze timer powinien się przepełnić po ok 49mS . Przepełnia sę znacznie szybciej.
Technicznie wygląda to tak: W każdym takcie zegara (np w 1/1000000 s - przy taktowaniu 1 MHz) zliczany jest jeden impuls. Timer 16-bitowy od 8-bitowego różni się tylko tym, że przepełnienie następuje po 65536 taktach a nie po 255. Ale żeby policzyć dokładnie jedną sekundę to musisz nadal odliczyć ten milion taktów. Jak widać zegar będzie leciał wiele...
Witam, mam chyba dość banalny problem z timerem T1 w ATtiny45. Otóż celem jest generowanie przerwania co około 40 ms - czyli zadanie wydaje się praktycznie śmiesznie proste. Proste było w 8051, ale AVR mi się stawia. Do tego celu zaprzągnąłem timer T1 w konfiguracji „match compare”. Przy kwarcu 8 MHz, preskalerze 2048 oraz wartości OCR1A...
Chciałbym zlecić komuś stworzenie takiego prostego urządzenia w ilości 1000 sztuk :) Chodzi mi o proste urządzenie odliczające czas od 48h w dół aż do zera, a potem stop. Musi działać na zasadzie raz włączone zaczyna odliczanie i potem nic się nie dzieje. Włączenie go musi być na zasadzie wyciągnięcia "zatyczki". tak jak to jest w nie których zabawkach....
Chodzi mi o podłączenie 2 timerów do siebie, gdy ustawiam czas na pierwszym np na 7min to na drugim tez jest on wyświetlany o szczegóły proszę pisać na PW http://obrazki.elektroda.pl/4538997400_1...
Piszę program, do czasowego wyzwalania migawki: Na pokładzie mam attiny13, tact-switcha, oraz diodę led i transoptor. Układ ma wysyłać impuls ok 300ms co określony czas. Czas ustawia się poprzez wciskanie przycisku - jedno wciśnięcie = 0.5s więcej. Dłuższe przyciśnięcie (pow. 3s) powoduje ustawienie minimalnego czasu(0.5s). Problem jest taki, że im...
Witam wszystkich, Wykorzystując 2 timery TIMER3 kanał 3 i TIMER2 kanał 2 generuję przebiegi PWM. Timery pracują w trybie FAST PWM1 zliczają do góry i wykorzystują przerwania. Niestety nie ma poszczególnych flag dla poszczególnych zdarzeń timerów. Każdy z Timerów ma po jedym globalnym przerwaniu. Koniecznie muszę wystartować oba przebiegi w tym samym...
Witam! Jeżeli programujesz w 8051 to jest to proste. Konfigurujesz Timer0 w następujący sposób: Config Timer0 = Timer , Gate = Internal , Mode = 1 Jeżeli taktujesz procesor kwarcem 11.059Mhz ładujesz do licznika wartość 4150: Counter0 = 4150 I ustawiasz przerwanie dla Timera Ważne jest aby w przerwaniu za każdym razem ładować licznik tą wartością!!!...
procesor pracuje z czestotliwościa 10Mhz czyli jeden okres trwa 1/10Mhz = 0,1us domyślam się ze jest on ustawiony z preskalerem równym 1 przepełnienie timera i wywołanie przerwania następuje gdy timer osiagnie 2^16=65536 czyli w tym przypadki 65536 - 64566 = 970 cykli 970 cykli * 0,1uS = 97us cała filozofia czas ten zalezy od czestotliwośći kwarcu,...
Witam staram sie uruchomić sprzętową obsługe encodera w stm32F4. Generalnie całość już działa problemem okazuje się sam timer. Działa inkrementacja i dekrementacja timera jednakże licznik nie chce się przepełnić zarówno przy zliczaniu w górę i w dół timer dolicza do maksymalnej wartości zapisanej w rejestrze CNT. przy zliczaniu w góre (obrocie koła)...
To po prostu fototranzystor odbiorczy+dodatkowy, i sygnał z takiego "odbiornika" (np. post #29) wrzucasz na Timer skonfigurowany podobnie jak miernik częstotliwości. Ciebie interesuje jedynie, czy jest odbierany sygnał czy nie, czyli z odpowiednim bramkowaniem, jeśli nastąpi przepełnienie Timera to sygnał jest odbierany, jeśli nie nastąpiło to brak...
to proste ; specjalnie dla urzytkowników forum elektroda :)Eagle ; przerwanie t0 z czestoliwoscą 1Hz ; dla kwarcu 4 MHz ; uC = 89s2313 .include "2313def.inc" ; definicje rejestrów ; trochę teorii ; 1 sek przy oscylatorze 4 Mhz to 4 000 000 cykle timer 0 jest 8 bitowy ; wiec 4 000 000 / 256 = 15 625 ; sprawdzamy czy prescalerem możemy coś zdziałać podział...
Pisząc program stanąłem przed problemem odbioru kodu RC5 z pilota ale z użyciem przerwania. O ile w BASCOM 8051 GETRC5 w przerwaniu działa doskonale, to w BASCOM AVR jest to kompletna porażka. Wadą Bascomowej funkcji GETRC5 jest: 1) Dziadowskie działanie w przerwaniu (niby działa ale traci pierwszy pakiet z pilota) 2) Zastosowanie jej w programie powoduje...
Z obecnym kodem dioda miga bardzo szybko. Nie mam pojęcia co robię źle, męczę się z tym od dłuższego czasu. Zamiast korzystać z dodatkowych narzędzi, które też trzeba rozumieć lepiej zajrzeć do noty układu, w której jest wyjaśnione jak to policzyć. Problem w tym, że przy taktowaniu 8 MHz, nawet jeśli użyjesz preskalera 1024, to ciągle w ciągu 1 s masz...
Witam. Ja detekcję robiłem prościej - sieć przez rezystor 47k / 3W podaję na mostek prostowniczy a wyjście mostka na diodę CNY17. Tranzystor transoptora podłączałem kolektorem do wejścia INT1 atmegi, a emiter do masy. Rezystor podciągający kolektor do +5V miał wartość 4,7k lecz uważam że równie dobrze można było go nie stosować. W programie korzystałem...
Nie znam sie na Arduino, ale ogółem ja bym to na AVR zrobił tak że ustawił timer na przepełnienie co np. 70 ms i w procedurze przerwania napisał coś na wzór tego kodu: [syntax=cpp] ISR(TIMER0_OVF_vect) //przerwanie generowane co 70 ms { if(SERWO_PWM < zadana_pozycja) { SERWO_PWM += skok; } if(SERWO_PWM > zadana_pozycja) { SERWO_PWM -= skok; }...
Tak się nie robi. Myślę że ten timer się parę razy przepełni zanim obsłuży LCD. Ustaw timer tak aby wywoływał przerwanie przy danej wartości i w tym przerwaniu dodawaj jakąś zmienną o 1 i czyść licznik.
1. Do wyznaczenia co ile następuje przepełnienie timera potrzeba znać taktowanie procesora. Dla kwarcu 12MHz timer zwiększany jest o 1 co 1us (= 12/12MHz). 2. Timer to licznik, który zlicza w górę. Wpisując liczbę do rejestrów tego licznika zlicza on od tej wpisanej wartości, czyli szybciej doliczy do maksymalnej wartości (65535) i "przekręci się" co...
Wygląda, że masz podobny problem jaki ja miałem niedawno na procesorze STM32F030R8... Sytuacja u mnie wyglądała tak: Taktowanie APB 48MHz, TIM1->PSC = 480. Co daje takt 10uS. Timer konfigurowany "po rejestrach". Zliczam impulsy timerem i czekam aż się timer przepełni: TIM1->ARR = 150 (zgłoszenie przepełnienia co 150*10uS=1.5mS) Okazuje się, że timer...
Program z założenia jest dosyć prosty: jak sygnał na wejściu zmieni się z niskiego na wysoki to startujesz Timer0, a zatrzymujesz po zmianie sygnału na niski. Porównujesz "zawartość" Timera0 z wartościami zadanymi (obliczonymi) i odpowiednio ustawiasz dwa wyjścia, po jednym na przekaźnik. Zerujesz Timer i czekasz na kolejny impuls. I to w sumie tyle....
1. W jakim celu konfigurujesz liczniki, wpisujesz im wartości początkowe, a potem wywołujesz ich zatrzymanie przez STOP TIMER0/TIMER2 skoro nigdzie indziej ich ponownie nie uruchamiasz? 2. Jakim cudem kompilator nie protestuje gdy w pętli głównej umieszczasz samo ON TIMER0/TIMER2 nie podając trzeciego słowa kluczowego GOTO/GOSUB i ostatniego ich parametru?...
Może spróbuj w ten sposób : $crystal = 4000000 Config Pind.5 = Output 'ustawienie wyjścia na pinie który standardowo sygnalizuje przepełnienie timer-a Config Timer0 = Timer , Prescale = 1 'ustawienie timer1 dzielnik 1 On Timer0 Przerwanie_timer1 'wywołanie przerwania po przepełnieniu timera Timer0 = 145 'wartość początkowa od której timer bedzie zliczł...
Nie neguję rozwiązania przerwanie-w-przerwaniu, w niektórych sytuacjach jest to rozwiązanie bardzo eleganckie i efektywne, tylko należy pamiętać aby dobrze wyłączać przerwania. Nie popieram natomiast pętli oczekującej w przerwaniu, kod warto przeprojektować względem tych pętli pozbywając się ich - czy to przez automat skończony zmieniając INT1 na przerwanie...
robisz sobie zmienna 1bajtową i na przerwaniu od timera (kiedy sie przepełni) inkrementujesz ją( zwiekszasz o 1). Wtedy łaczna ilosc zliczonych impulsów wyniesie zmienna1*256+timer. Piszesz sobie najpierw procedurke ktora wyswietli pojedyncza cyfre, nastepnie piszesz procedurke ktora wyswietli całą cztero cyfrową liczbe. Wyswietlanie robisz w petli...
Potrzebny jest Timer i przerwanie od timera. Timer ustawia flagę jak się przepełni. Np. co 1s. W petli głównej sprawdzasz czy już upłynęła 1s. Dopiero potem wolno Ci odczytać pomiar temperatury. Nie wolno stosować Waitms jeśli program ma obsługiwać więcej niż jedno urządzenia.
Tu uruchamiasz timer0 z preskalerem ... [syntax=c] //######## konfiguracja timera1 ############## TIMSK |= (1<<TOIE0); //Przerwanie overflow (przepełnienie timera) TCCR0 |= (1<<CS02) | (1<<CS00); // źródłem CLK, preskaler 1024 TCNT0 = timer_start;// //Początkowa wartość licznika //######################################... [/syntax]...
AVE... Jakiego PICa konkretnie chcesz użyć? Zasada pomiaru jest dość prosta: najpierw ustawia się któryś z timerów, by odmierzał 40 sekund i po odmierzeniu wywołał przerwanie. Potem tworzy się pętlę, która w nieskończoność sprawdza stan wybranego przez Ciebie pinu. Gdy jest tam logiczna jedynka, to dodajesz 1 do zmiennej. Gdy timer skończy zliczać czas,...
No właśnie nie ma szans na rozjechanie się wartości o 16bit, max error to np 200 po czym układ się wyłączy na błędzie (np gdy silnik utknie). Zastanawiam się nad wykorzystaniem systemu zdarzeń tak aby przechwycic jednoczesnie wartości z obu timerow. Problem jest taki że np silnik jedzie w lewo, impulsy rosną i timer rośnie, w takim przypadku mając błąd...
Załóżmy: Zegar = 8MHz Preskaler = 64 Obliczenia: 1 / (8MHz / 64) przerwanie , a w nim zwiększać niezależny licznik (jakąś zmienną). Wtedy wynik: CZAS timer nie zdążył się przepełnić , to od startu do teraz minęło 8 x 120 = 960us...
Można by ustawić przerwanie zewnętrzne na zbocze narastające, uruchomić timer i przełączyć przerwanie na zbocze opadające. Gdy pojawi się to opadające to zatrzyma timer i masz czas impulsu. Jeszcze jedynie uwzględnić przepełnienie timera, w razie jak się coś przestawi z czasami.
To, kiedy jest generowane przerwanie i jakie, nie zależy od tego, jakie napiszesz procedury obsługi przerwań, a od tego, jakie przerwania włączysz w odpowiednim rejestrze. Do każdego włączonego przerwania musisz napisać procedurę jego obsługi. Jeśli włączasz TOIE - musisz mieć procedurę timerX_ovf_vect, jeśli włączasz OCIE1A - musisz mieć TIMER1_COMPA_vect....
Witam, nie wiem czy kolega używa CubeMX, ale w tym środowisku możemy ładnie określić coś takiego jak slave mode dla timera. I teraz ten drugi timer byłby slavem względem pierwszego i dodatkowo należy mu ustawić chyba trigger source na przepełnienie timera, który jest masterem. Piszę z pamięci także mogę się mylić. Ale musi być przecież taka opcja generowania...
Pusty blok jest dlatego, że utknąłem na konfiguracji Timer0. Jeśli chodzi o rejestry, to podejrzewałem, że jest tak, jak Kolega pisze. Wartość TCNT0 = 6; trzeba będzie wpisać do przerwania Timera Przy ustawieniach: [syntax=c] TCCR0A = (1 << CS01)|(CS00); // źródłem CLK, preskaler 64 TIMSK = (1<<TOIE0); //Przerwanie overflow (przepełnienie...
A nie możesz napisać własnej procedury "Getrc5" w bascomie? Uruchamiasz PWMy, więc znasz częstotliwość przepełnienia dowolnego timera. W getrc5 sprawdzasz odstępy pomiędzy zdarzeniami na pinie odbiornika IR - trzeba wziąć poprawkę na przepełnienie timera, ale oprócz tego nic się nie zmienia. Pozdrawiam, Dr.Vee
Jakim micro metalowy. Ale ten już jest dla mnie do przyjęcia bo to może być wina też chińskiego generatorka na układzie nuvoton n76e003at20 bez kwarc wiec też ma spore pomyłki zapewne. A tak jeszcze tylko zapytam przepełnienie timera, bo w sumie minuta ma 60s ale zegar pokazuje po 59 zero a jak tu jest? zegar tyka 65535-0 czy 65534-0?
Hehe... zrobiłem to właśnie według tego drugiego sposobu... Odmierzam 40 cykli timerem i po przepełnieniu odczytuje bit (już po synchronizacji). Problem polega na tym, że taka pętla z odczytem (w pętli jest tylko oczekiwanie na przepełnienie) timera może zająć ponad 20 cykli i właśnie na tym się wszystko wykłada. Teoria wygląda wspaniale - praktyka...
Prawdę mówiąc nie widzę sensu w realizacji dzielenia przez 40 sprzętowo. Ale jak pisałem, jeśli masz wolny timer, to do rejestru PER timera za pomocą którego realizujesz QDEC wpisujesz 39, wtedy co 40 impulsów wygeneruje ci przepełnienie, które możesz transmitować przez event system jako zegar dla drugiego timera, który w efekcie będzie zliczał co 40...
Opisujesz kod inny niż wkleiłeś: [syntax=c]int main(void) { DDRD = 0xFF;//diody DDRC = 0xff;//przyciski //######## konfiguracja timera ############## TCCR0 |= (1<<CS02) | (1<<CS00); // źródłem CLK, preskaler 1024 TIMSK |= (1<<TOIE0); //Przerwanie overflow (przepełnienie timera) sei(); //Globalne uruchomienie przerwań while(1) { //...
Diody masz podpięte bezpośrednio pod porty ATmega? Jeśli tak to lepiej dołóż sobie oporniki aby nie spalić wyjść ATmegi. Bezpośrednio przy procku daj kondensator 100nF. Przed stabilizatorem np. 1000uF, a za stabilizatorem 100u (to i tak za dużo, ale lepiej więcej niż za mało). Zliczanie zrealizowałbym w taki sposób: - Odpalić któryś z wewnętrznych timerów...
... a jeśli timer przepełni się dwa razy lub więcej?
Do obliczania wpisu do timera bez wdawania sie w "teorię" służy dostępny w sieci kalk.exe. Na Timerze0 zliczane są impulsy z zewnątrz w czasie 1 s. Niestety Timer0 może zliczyć tylko 256 impulsów, a częstotliwość np. to 8MHz czyli 8000000. Musimy zliczyć zatem ilość przerwań od timera, pomnożyć to przez 256 i dodać resztkę, która została zliczona ale...
To nie Bascom jest przyczyną tylko źle napisany program ;). 1. odczyt timera1 16bit odbywa się po przez rejestr pomocniczy TEMP, ten rejestr jest też używany przez inne procedury i funkcje i jeśli jest użyty to właśnie niszczona jest wartość High timer1 bo ona tam jest wpisana gdy używasz komendy. wpisując tak timer1 do tablicy możesz gubić High timer1....
Przepełnienie timera 2 nie ma znaczenia, po prostu skrócisz czas pomiaru do np. 1ms, bo po co mierzyć dłużej? Dla 5MHz będzie to nieistotny błąd, a zawsze możesz timer rozszerzyć - w przerwaniu przepełnienia timera2 wystarczy w tym celu inkrementować kolejną zmienną. Co do przebiegu - tak, musi mieć wartośćTTL kompatybilną z zasilaniem procesora. Jeśli...
Ok, to mógłbyś mi podpowiedzieć jak skonfigurować PWM tak aby otrzymać 22050Hz (lub 44100Hz)?. Poza tym skoro mam nie używać timera to kiedy wystawiać próbki (obecnie wystawiane są w przerwaniu kiedy przepełni się timer)?. Docelowo zmienię te pliki bo rzeczywiście to jest bezsensu :)
Do pasma EKG układ w zupełności wystarczy. W kwestii punktu 4, chodziło mi o taką konfigurację licznika: - licznik zlicza w jednym kierunku, np. w górę. - Czas pełnego okresu (PSC i ARR) to trochę więcej niż czas transmisji + impuls LDAC (=210ns). - Do jednego z rejestrów porównujących ładujesz wartość, która odpowiada impulsowi LDAC, a wyjście konfigurujesz...
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...
I dobrze. Aby zmieniać wypełnienie musisz uciec się do pomocy przerwania ( to wada ,ale za to 1 timerem możesz mieć 4 zupełnie niezależne PWM). A działać może to mniej więcej tak (przykładowo): Timer0 ustawiasz na najmniejszy oczekiwany okres (rozdzielczość). Ustawiasz stan początkowy i jego przełączenie w EMR. MR ustawiasz na oczekiwaną długość stanu...
Najmocniej przepraszam, że odświeżam i podłączam się pod temat, ale nie chce niepotrzebnie rozpoczynać nowego. Mam pytanie, które dotyczy Timera, chciałbym zmieniać wartość TIM_Period podczas pracy układu (podobnie jak można zmienić wartość Prescalera - aktualizując jego wartość). Niestety nie wiem jak dokonać aktualizacji TIM_Period. Chciałbym przy...
timer przepełnić licznik przepełnić timer epson przepełnić
gniazdo samochodu schemat wymiana grzałki buderus awaria kotła
Migotanie ekranu i ograniczenia LG G3 w 2024 Błąd C074D - Czujnik kąta skrętu kierownicy