Spróbuj takiej zmiany. [syntax=asm]EXT_INT0: pushr16 inr16,SREG pushr16 ;twój kod popr16 outSREG,r16 popr16 reti[/syntax]
Czy: Kod C - Tak, chyba że wymusisz update "ręcznie". 4\/3!!
Witam, słabo znam te procesory, musisz więc sprawdzić w dokumentacji, moim zdaniem problem nie bierze się z kolejności wysyłania ale z kolejności odczytu. Generalnie, ośmiobitowe procesory przy dostępie (odczycie i zapisie) do szesnastobitowych timerów wykorzystują (dla zagwarantowania jednoczesności obu bajtów) specyficzny mechanizm. Starszy bajt nie...
Mnie wychodzi, że to nie jest tryb CTC tylko normalny. Po drugie na przerwanie compare trzeba zezwolić w rejestrze TIMSK - bit OCIE0 - masz < zamiast << stąd problem. Jak masz jakieś wątpliwości co do konfiguracji, to użyj symulatora AVR Studio. Można sobie w nim też ustawić tryb pracy i odczytać wartości rejestrów kontrolnych dla niego i potem...
To że wpiszesz F_CPU cos tam nie oznacza że procesor "magicznie" zacznie działać na 16MHz Atmegi mają 8MHz oscylator wewn i do tego ustawiony podzielnik 8. CZyli działają na 1MHz 1MHz / 64 / 25000 = 0.67HZ i tyle właśnie dostajesz. Aby mieć 16MHz to musisz mieć zewn oscylator + ustawic fusy Zresztą poczytaj o innych rejestrach timera bo nie tak się...
11 podstawień u mnie vs. 24 u Ciebie - miłośnik długiego kodu się znalazł, he, he. ;) Plus - u mnie wiadomo, co jest w rejestrach timera, a u Ciebie - nie ;) I ostatnia różnica - mi kod działa. Wiem, na niestosowne żarty mi się zebrało, a tu Kolega w niedoli... No ale przynajmniej starałem się pomóc.
No,ale nie podałeś jaki procesor. W Bascomie można ustawić rejestry Timera "ręcznie"- a nie przez config. Zamiast czegoś takiego: "TCCR1A = &H00 'See datasheet for details "TCCR1B = &H0C 'See datasheet for details można ustawić to po "bascomowemu"- patrząc w DS. set TCCR1A.cs12 set TCCR1A.wgm12 Itp. Zamiast config ustawiasz poszczególne bity w rejestrach...
Taktowanie timera ma byc nie z event system, lecz z zegara IO bez preskalera (TCC0_CTRLA=TC_CLKSEL_DIV1_gc). Można też pomyśleć o ustawieniu rejestru PER timera.
poszukaj sobie w timerze 1 takiego bitu o nazwie MOE P.S. Skoro używasz przykładu, to czemu nie skorzystać z funkcji konfigurującej wyprowadzenia, tak aby nikt nie musiał się zastanawiać co robisz i czy na pewno wszystko? P.S.2. Zerowanie wszystkich rejestrów timera jest całkowicie zbędne. Jeśli czujesz przemożną chęć resetowania timera, to w RCC masz...
(at)minitronik Najprostszy procesor - podajesz na wejście timera te impulsy, programujesz timer tak, że po zliczneiu do 56 generuje przerwanie zmieniające stan wyjścia na niski - do tego służy rejestr compare w timerach. Drugi taki rejestr programujesz na 4 i przerwanie z tego zdarzenia compare wystawia stan wysoki. Ot i cały program. W sumie na dyskretnych...
Nie korzystałem nigdy z trybu asynchronicznego, ale właśnie w tym, że jest on asynchroniczny wydaje mi się, że leży Twój problem. W szczególności myślę tutaj o dostępie do rejestrów timera w tym trybie. Poszukaj na ten temat informacji. Może tu coś znajdziesz: http://www.atmel.com/dyn/resources/prod_... Drobna rada: [syntax=c]//zamiast...
Wygląda, że masz podobny problem jaki ja miałem niedawno na procesorze STM32F030R8... Zapomniałeś tylko dopisać, że ustawiłeś samodzielnie bit UDIS w rejestrze CR1 timera, który właśnie coś takiego powoduje. Nie wiadomo jednak po co go ustawiłeś.
Masz dwie metody: 1) Łatwiejsza - Ustawiasz Clock mode, timer na zero, timer alarm, timer na odliczanie minut, wpisujesz do rejestru alarmu timera 15, czekasz na przerwanie. Po przerwaniu zerujesz rejestr alarmu, zerujesz flagę alarmu i zerujesz timer. Control status register (0x00) = 0000 X1XX Timer register (0x07) = 0 Alarm control register (0x08)...
Prz zboczu narastającym odpal timer, i ustaw przerwanie na wyzwalanie zboczem opadającym. W obsłudze przerwania zatrzymujesz timere i odczytujesz wartośc oraz wyzerowujesz go przygotowując do następnego odczytu. Znając częstotliwośc zegara oraz wartośc prescalera i odczytaną wartość z timera znasz okres od zbocza narastającego do opadającego. Niby...
No tak ty wiesz jak zachowuje sie C. Ja wiem że z poziomu asemblera panuję na nad wszystkim co robię łącznie z długością kodu. Ale mam takie wrażenie ze jak coś zapisane w asemblerze to mniej więcej wiem ile to w hexa, Przy C to już dużo więcej (śmieci). W Basic to dużo za dużo. Ale się może mylę tak było kiedyś dla aplikacji. Tylko asembler AVR jest...
Zostaw tam hc595 i dobuduj stopnie tranzystorowe. Czemu upieracie się przy dodatkowych rejestrach? Arduino ma wystarczającą ilość GPIO aby nie stosować dodatkowych rejestrów. Aby dobrze zrobić multipleksowanie z rejestrami timer musi inicjować transmisję spi, która oczywiście działa na przerwaniach. To ma zrobić początkujący? Tego to często nie potrafią...
Dla taktowania 8MHz, ale możliwe że trzeba zmodyfikować nazwy Pwm i Compare [syntax=basic4gl]Config Pinb.0 = Output Pwm0a = 70 Config Timer0 = Timer , Prescale = 1 , Compare0A = Toggle , Clear Timer = 1 Do Loop End[/syntax] a na rejestrach timera [syntax=basic4gl]DDRB = 0B00000001 'DDRB.0 = 1 (wyjście) OCR0A = 70 TCCR0A = 0B01000010 'COM0A1 COM0A0 =...
... Proszę o szczegóły. Dlaczego oczywiste jest, że timer że 16-bitowy odliczy 1s? Zakładamy że taktujemy kwarcem 4MHz. Jeden takt to 1/4 000 000=0,25us. 16 bitów to 65536 cykli. 65536cykli*0,25us=16,384ms Proponuję więc zliczyć 100 cykli 10-cio milisekundowych. ilość cykli = 10ms/0,25us=40000 cykli. Wpisujesz więc do timera 40000 i czekasz aż się...
Co do instrukcji barierowych to tylko wiem ze są takie i mają coś pożytecznego robić np zmusić proca do wykonania zalegających w cachu instrukcji np zapisu STM32F0 nie mają żadnego cache. Punktem wyjścia jest program bez tych instrukcji który też nic nie wpisuje do rejestrów. Widzisz tą podświetloną na żółto linijkę? Tam właśnie zatrzymał się układ....
Tablicami NVIC się nie przejmuj. Korzystaj z funkcji dostarczonych przez CMSIS, w tym przypadku nie warto stosować rejestrów wprost. Konfiguracja Timera OK, choć kolejność nie należy do poprawnych. Przyjrzyj się jeszcze rejestrowi EGR. Przerwanie? Brak kasowania flagi skutkuje ciągłym jego wywoływaniem. Flagę kasuje się na początku przerwania. I taka...
Należy: - zadeklarować zmienną globalną np. LICZNIK i nadać jej wartość zera, - włączyć przerwania od przepełnienia Timer0, - w funkcji przerwania należy zwiększać wartość zmiennej LICZNIK o jeden Aby poznać liczbę impulsów wystarczy pomnożyć LICZNIK*256 i dodać do niego aktualną wartość rejestru licznika timera, czyli jak sądzę counter0 (nie znam BASCOM).
Kolega aster11 podał najprostsze rozwiązanie (to z setkami, dziesiątkami w różnych rejestrach). Jeżeli timer zrobi swoje odczytujesz jego wartość, zamieniasz na BCD i odpowiednio dodajesz do setek, dziesiątek itd. I te rejestry po kolei na LCD :wink: Jak pisałem pod '51 w ASM to korzystałem z gotowców dt. przekształceń na www.8052.com.
Chodzi o to, że po pierwszym przerwaniu TCNT1 będzie miał wartość 0, czyli zliczy potem 65536 impulsów. Zaś do generowania, jak Ty chcesz, przerwań co określony odcinek czasu służy tryb CTC. Wtedy w rejestrze OCR ustawiasz ilość impulsów, które chcesz zliczyć, i wygenerować odpowiednie przerwanie.
Po pierwsze - jeśli chcesz się przekonać czy kod działa to go uruchom i to sprawdź. Po drugie - nie wiem po co tak bardzo grzebiesz w rejestrach timera, wpisujesz jakieś własne wartości do TCNT0 i TCCR0 w przerwaniu, jaki to ma cel? Uruchom przerwanie i zapomnij o nim: [syntax=c]#define KEY_UP(PINB & (1<<3))//PB3 - przycisk UP - do masy. ......
Witam, zmienna "b" jest 8 - bitowa, w pewnym momencie wykonuje się mnożenie 128 * 2 = 256, czyli dla 8 bitów zero. Warunek b > 128 nigdy nie jest spełniony. Tak na szybko, chyba ten warunek trzeba zamienić na b == 0, ale lepiej to przemyśl. Pozdrawiam
A jaki konkretniej problem masz? Nie możesz włączyć timera, pogubiłeś się w rejestrach i bitach...?
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...
Witam. I przystępuję do rzeczy :wink: Config Timer0 = Counter = Internal , Mode = 1 Co to jest za tryb :?: Chcesz zliczać impulsy na P3.4 czy cykle maszynowe :?: Load Timer0 , S Ta instrukcja nie spowoduje przepełnienia sie T0 po 5000 taktach ale po 34696 ,ponieważ załaduje rejestry TL0 i TH0 wartością 120(Hex 78 ) gdyż stosowana jest tylko w trybie...
Jeśli uC ma taką możliwość, to można. Poczytaj, jak się programuje rejestry timera.
1 kHz to praktycznie nic. Nie rozumiem, dlaczego proste ładowanie rejestru CCR zastąpiłeś wywołaniem funkcji, która wykonuje mnóstwo dziwnych czynności. Zmiana współczynnika wypełnienia wymaga wyłącznie zapisu rejestru CCR. Timer programuje się tylko raz na początku - potem tylko ładujesz wypełnienie i ew. okres. Prawdopodobnie to każdorazowe zbędne...
14:20:25.471> X 14:20:26.405> X 14:20:27.342> X 14:20:28.340> X 14:20:29.276> X 14:20:30.211> X 14:20:31.147> X 14:20:32.084> X 14:20:33.099> X 14:20:34.033> X 14:20:34.969> X 14:20:35.967> X Teraz widać że timer nie dochodzi do 1 sekundy. Ale te wartości markera czasowego pochodzą nie z programu lecz z systemu operacyjnego, tak? Więc włóż je sobie......
Wzorowy temat - są wszystkie istotne informacje, m.in. to o jaki układ chodzi! Niby wszystko działa, ale zawsze na starcie, zaraz po uruchomieniu Timera występuje przerwanie od przepełnienia. Tak jakby jakaś flaga byla ustawiona. To nie jest przerwanie od przepełnienia, tylko od "update event". Jeśli przed uruchomieniem timera wywołasz owy "update event"...
Timer 0 w atmedze8 nie ma pwm. Powinieneś użyć Timera 2, czyli rejestrów TCCR2 i OCR2.
Kiedyś napisałem prosty przykład użycia Timera w trybie CTC dla AVR w AVR Studio w języku C. W załączniku znajduje się ten gotowy kompletny program powodujący przerwanie od porównania (Compare) co około 250 ms i generujący przy okazji falę prostokątną na wyjściu OC0A. Otrzymujemy w ten sposób przebieg prostokątny na tej nóżce o okresie 2 Hz (2x250 ms...
[syntax=asm] .device ATmega32 .include "m32def.inc" .def temp= r16 .def counter= r17 .org 0 RJMP start .org $016 ;wektor przerwania dla przepełnienia timera RJMP przerwanie start: ldi temp, high(RAMEND) out SPH, temp ldi temp, (1<<CS00) | (1<<CS02) ;konfiguracja preskalera i zegara out TCCR0, temp ;w rejestrze TCCR0 (ustawienia główne timera)...
Zanegować wyjście komparatora możesz odwracając sygnały podane na wejście + i - komparatora - czyli przekonfigurować musisz rejestr multipleksera wejść AC. RESTART powoduje rozpoczęcie zliczania timera od zera, nie zmienia zawartości rejestrów PER i innych - tym różni się od resetu, który zeruje timer i przywraca jego konfigurację do stanu domyślnego....
margas4542 zaopatrz się w program TimerCycles ze tej strony: http://www.wkretak.pl/downloads.php?cat_... Dzięki temu obliczysz liczbę cykli czyli to co zapisuję się do rejestru OCR1A. Jeśli chodzi o timery to po pierwsze preskaler(czyli część obwodu timera który dzieli impuls zegarowy tj. zmienia rozdzielczość timera) jest ustawiony na 1 mówi o tym...
#include <avr/io.h> #include <avr/interrupt.h> // funkcje sei(), cli() #include <stdlib.h> volatile int a=0; ISR(TIMER0_OVF_vect) { a+=1; } int main( void ) { //rejestry od timera 0 TCCR0 = _BV(CS02)|_BV(CS00);//pr... 1024 TIMSK = _BV(OCIE0); //włącza przerwanie...
Moj błąd :-) faktycznie to nie ten rejestr. Pomogło i teraz działa zarowno timer jak i sam modbus :-)
zobacz na stronę http://www.avrbeginners.net/ Dobrze udokumentowane przykłady i opis dziania AT90S i ATMEGA Timery,UART,rejestry itp.
...płytka zawiera pojedynczy 16-bitowy, zaawansowany timer z kontrolą ślepej strefy... Ślepej strefy? Chyba chodzi o programowany czas martwy dla wyjść komplementarnych. Ew. o buforowanie rejestrów timera i przepisywanie ich wartości przy UEV.
Ja też dorzucę swoje 5 gr :) Poniżej delay oparte o timer, chcąc wykorzystać inny timer należy LPC_TIM0 zamienić na inny np. LPC_TIM1. [syntax=c] #include "LPC17xx.h" #include "lpc17xx_gpio.h" #include "lpc17xx_timer.h" void delay_us(uint32_t czas) { TIM_MATCHCFG_Type MatchConfigStruct; LPC_TIM0->IR = 1; // zresetowanie flagi przerwania od rejestru...
Pod ten drugi procek podpięte jest wyjście USART z XMEGA, dzięki czemu masz je widoczne w systemie jako wirtualny port szeregowy. W ten sposób możesz łatwo komunikować się z XMEGA za pomocą USART. Co do zmiany bitów portów IO - w XMEGA masz rejestry SET, CLR i TGL związane z portem, jeden ustawia bity, drugi kasuje, a trzeci zmienia na przeciwne. Dzięki...
Witam. Timer mikrokontrolera '51 taktowanego zegarem 11.059200 MHz zliczy w ciągu jednej sekundy 921600 impulsów. Ze względu na wielkość timera (2 bajty) może Kolega zliczać setne części sekundy - ustawić przerwanie co 9216 impulsów. Każde wywołanie przerwania zwiększy zmienną o 1, czyli mamy w niej wynik pomiaru z rozdzielczością 0,01 s. Rozwiązanie...
Oczywiście, przeczytaj o module ICP timera. W momencie wystąpienia zdarzenia, licznik timera jest przepisywany do rejestrów ICP. Rozdzielczość jest zależna od częstotliwości taktowania timera. Twoje rozwiązanie nie może prawidłowo działać, bo czas liczysz w pętli, a ta z kolei ma różny czas wykonywania (zakładam, że korzystasz z przerwań).
http://www.electronics-lab.com/downloads... w tym linku masz program AVR calculator ustawiasz czestotliwosc kwarcu i pokazuje ci wynik co masz wpisac w rejestrach timera.
Sprawdzaj flagę w rejestrze TIFRx bez włączania przerwania w TIMSKx.
To jakiś cud, biorąc pod uwagę, że pokazany program nic przez UART nie wysyła. Czy zweryfikowałeś częstotliwość zegara procesora (np. miganie diodą w przerwaniu timera)? Na rejestrach BSRR i BRR nie wykonuje się operacji logicznych, bo nie ma to żadnego sensu.
Chyba coś masz jakiś dziwny datasheet. Tutaj masz link do tego, którego ja używam - [url=www.atmel.com/Images/doc2545.pdf]Li... Od strony 156 masz pełny opis rejestrów dla tego timera. A program spróbuj zmienić tak: [syntax=c]TCCR2A=(1<<COM2A1)|(1<... TCCR2B=(1<<CS20);[/syntax] Po tych zmianach...
Do włączenia trybu CTC dla timera 0 służy bit WGM01, a nie WGM02 jak w timerze 1. Z kolei bit WGM01 jest w rejestrze TCCR0A: [syntax=asm] ; start timer in CTC mode ldi r29, (1<<WGM01) out TCCR0A, r29 ; CTC ldi r29, (1<<CS00) out TCCR0B, r29 ; no prescaling [/syntax]
To co potrzebujesz to zwykłe zliczanie impulsów w czasie. 1. Start timera. 2. Jeśli timer nie odliczył zadanego czasu to zliczasz impulsy. 3. Jeśli timer odliczył to przepisujesz zliczone impulsy to rejestru wyświetlanego na panelu( z jednoczesnym przeskalowaniem na np. godzinę), zerujesz wartość rejestru w którym zliczałeś i restartujesz timer. Czas...
Mam problem ze zliczaniem czasu przez timer w układzie PCF8583. Na starcie programu ustawiam timer: I2cstart I2cwbyte 162 I2cwbyte 0 'rejestr kontrolny I2cwbyte &B00000100 'alarm aktywny I2cstop I2cstart I2cwbyte 162 I2cwbyte 8 'rejestr kontrolny timera I2cwbyte &B01000010 'zapis rejestru alarmu 'odmierzanie sekund ' włączony alarm timera I2cstop I2cstart...
Przepisuj na bieżąco stany timer-ów do rejestrów podtrzymywanych (HR). Po włączeniu zasilania przepisuj te rejestry do timer-ów. Jako triggera do przepisania po włączeniu zasilania użyj np. bitu pomocniczego P_First_Cycle na zbocze narastające.
Jeszcze jedno pytanie: do czego Ci rejestr Timera przy instrukcji warunkowej if() podczas obliczana całki Ei?
Witam, Kilka uwag: 1. nie skonfigurowałeś trybu pracy timerów (rejestry TCCRxA, TCCRxB) Po resecie timery pracują w trybie "Normal", natomiast w twoim przypadku znacznie lepszy byłby tryb "CTC" 2. ustawiłeś prescaler a 1 a nie na 1024 3. brak zachowania stanu PSW i rejestrów w przerwaniach. W twoim konkretnym przykładzie nie spowoduje to błędu ale już...
Więc musisz kontrolować naliczoną dodatkowo wartość i odejmowac od wartości wpisywanej w rejestr timera w przerwaniu. Tak ja to widzę.
A słyszał kolega kiedyś o czymś takim jak nota aplikacyjna PDF do procka? bez czytania tego - zawsze będzie kolega spędzał wiele dni i nocy nad rozwikłaniem tak prostej "zagadki" a wystarczy zajrzeć do noty procka ATtiny2313 (przecież jest w necie za free) - zajrzeć do interesującego cię rozdziału n/t Timera0 a dokładniej: 8-bit Timer/Counter Register...
Nie mogę się zgodzić - Reset Timer on Match powoduje jedynie wpisanie do rejestru timera wartości 0. Zatrzymanie timera uzyskuje się przez 3 bit - Stop Timer on Match 4\/3!!
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
Wyżej sam sobie odpowiedziałeś. Timer pracuje w trybie, w którym zapis "OCR1A = dzielnik" nie zapisuje wartości "dzielnik" do rejestru tylko do bufora, a wartość okrojona do ośmiu bitów zapisywana jest do OCR1A przy przepełnieniu timera.
A nie lepiej uruchamiać i zatrzymywać timer przerwaniem i potem przeliczać wartość z rejestru timera na czas...?
Mam pytanie poboczne, które jednak jest powiązane ze sterowaniem tych diód: czy w stmie do 16 bitowego timera (tim3) mogę przepychać po 8 bitach z tabeli uint8? (oczywiście DMA jest skonfigurowane na transfer bajtowy). Mimo to przeglądając rejestry wygląda na to, że dane są ułożone po 8 bitów, ale do rejestru timera transferowane są mimo wszystko dwa...
wszystko sie zgadza tylko ze polecenie load timer0, 100 wcale nie powoduje wpisanie 100 do rejestru timera tylko 256 -100 czyli 156!
Po wyzerowaniu licznika należy wyzerować bit zerowania. Nie miałbyś tego problemu, gdybyś zamiast bezsensownych |= używał podstawień do operacji na rejestrach timera.
Chcę napisac własny program z wykorzystaniem Timerów. Na początek proszę o wytłumaczenie dlaczego w poniższym programie: 1. wykorzystano podzial częstotliwości zegara (po preskalerze 256) 250/125 zamiast wykonac jedno dzialanie? 2. uzyto wartość początkową Timera0 = 250 przed Petlą do Loop End . O ile wyjaśnienie podane przez Tomq jest błędne(!) Load...
Bit ARPE w rejestrze CR1 timera.
A moje pytanie, czy przy takim algorytmie, pomimo tego że nie wykorzystuje przerwań a na pinie mam częstotliwość którą chciałem procesor będzie miał jeszcze "czas" na po prostu realizację programu ? Czy tak skonfigurowany timer wykorzystuje procesor ? Widzę że timery to twoja słaba strona, więc napiszę ci troche ... Wszystkie timery w AVR mają możliwośc...
Może spróbuj przed włączeniem taktowania timera ustawić bit (Bit 0 UG: Update generation) w rejestrze EGR [syntax=c]TIM3->EGR = TIM_EGR_UG; [/syntax] Pozdrawiam
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.
Czy czasem nie uszkodiłeś tych kwarców podczas wydłubywania? Sprzwdź jeszcze raz program oraz czy masz dobrze ustawione rejestry timera. Czy właściwie odczytujesz informacje z timera.
Ostatni raz '51 (konkretnie at89c2051) programowałem jakieś 7 lat temu i nie pamiętam już nazw rejestrów itp. Twój program działa tak: MOV TMOD, #02H; //ustawiasz timer w odpowiedni typ pracy MOV TH0, #0FAH; //ladujesz starsza czesz rejestru timera wartoscią początkową NOP; //nie robisz nic CPL P1.0; //zmieniasz stan pinu na przeciwny MOV TL0, #0EBH;...
Trzeba je ustawić jako wyjściowe w rejestrze PORTx_DIR, a także odblokować odpowiednie kanały PWM (bity CCxEN) w rejestrze timera CTRLB. W XMEGA E5 także skonfigurować funkcję kanału.
Witam, próbuje wykonać prosty odtwarzacz midi w oparciu o mikrokontroler atmega8535. Bazując na przykładach z internetu udało mi się temat jakoś wstępnie ogarnąć. Niestety na atmedze nie uruchamia mi się zegar o który oparte mają być programy. Wszystko jakby "wisi". Dodam że programuję w C w środowisku Code Vision AVR. W celu zlokalizowania problemu...
1. (PC) Wyślij ramkę z rozkazem z do odpowiedniego uP. 2. (uP) Zeruj rejestr PER timera za każdym odebranym bajtem. 3. (uP) Po odebraniu ostatniego bajtu - czyli po przerwaniu od przepełnienia timer'a, który ustawiłem na 50ms - analizuj odebraną ramkę. 4. (uP) Jeśli ramka jest poprawna to postaw flagę zezwalającą na wysyłkę danych do PC. Przyznam że...
ami- 99-timer data setup- brak komunikacji z układem timera. Skasuj zawartość cmos. prawdopodobnie wpisuje bzdury do rejestrów timera, i ten głupieje.
A co to niby jest, jak nie adres: &TIM2->CCR1 Inna rzecz, że kompletnie nie rozumiem, po co chcesz używać DMA do przeładowania rejestru timera, zamiast zrobić to po prostu w przerwaniu timera.
Może chodzi o tryb w którym THx służy do przeładowania TLx są to dwa rejestry timera ale tego samego timera? Innej możliwości nie widzę. Przy prędkości 32kbs inny tryb pracy jest niecelowy.
To raczej inaczej się robi. Wykorzystaj piny ICP i przypisane im rejestry. Timer musi pracować z częstotliwością zależną od wymaganej przez ciebie rozdzielczości pomiaru czasu. W przerwaniu odczytujesz zamrożone stany rejestru i masz pomiar w tyknięciach licznika timera.
Jeżeli chciałeś zastosować moją metodę, to źle skonfigurowałeś przetwornik ADC. Niepotrzebnie włączyłeś auto wyzwalanie. Autowyzwlanie stosuje się tylko w trybie free running dla jednego kanału. Gdzie u mnie w kodzie programu było włączanie przetwornika co przerwanie od timera „ADCSRA |= (1 << ADEN)”; . Przetwornik włącza się tylko...
Timer musi być czymś taktowany. Nie myl taktowania CPU z taktowaniem peryferii. Jak zaglądniesz do noty i opisu rejestrów timera 0, który wykorzystujesz to po kolei je skonfiguruj tak jak należy i problem zniknie.
Zatrzymanie timera - wystarczy do rejestru TCCR... wpisać wartość 0 :-) Dodano po 2 dokumentacja ATmega16. str. 114/115
Nie zmieści mi się zewnętrzny kwarc, dlatego pytanie dotyczy tego, co oferuje na pokładzie procek. Czyli pytanie brzmi: jakie kombinacje wewnętrznego zegara i preskalerów dadzą mi ( i jakie) najbliższe częstotliwości tej wymaganej tj. 38kHz. L Ale to się bardzo prosto wylicza ;) np ustawiasz sobie taktowanie wen. oscylatorem 8MHz (bo moim zdaniem dodawanie...
Pomysł ze zgłaszaniem przerwań sto tysięcy razy na sekundę jest zpełnie chybiony, to po pierwsze. Mierz czas timerem. Po drugie, sprawdź w manualu, jaka jest minimalna wartość rejestru ARR umożliwiający poprawną pracę timera. U Ciebie wartość ta wynosi prawopodobnie 0. Po trzecie, jest w języku C takie słowo kluczowe na literę 'v', o którym co chwila...
Witam. Jesteś pewny, że program, który piszesz to piszesz go w C++? A nie w C? Poszukaj w dokumentacji uC, ustawień rejestrów Timera, jest tam wszystko opisane. A jeśli piszesz w C to podeślę Ci za moment linka z polską dokumentacją i sensownym tutorialem.
CTC. COMPA regulacja okresu , COMPB regulacja wypełnienia. COMPB/COMPA współczynnik wypełnienia. Mogę prosić o przykład ustawienia rejestrów TIMERA 1 dla ATMEGA32 ???
PT i ET są typu DINT i zajmują po dwa rejestry każdy, więc np.: %R1 nachodzi na %R2.
Szczerze to nie wiem jaki jest tego powód. Ja też spróbowałem i uzyskuje tylko cytowane czasy 1s, 99s 99min - totalny brak reakcji na zmiany w rejestrze timera. Tajemnicza sprawa.
Timer1 jest używany jako pwm. Sprawdź czy bez wywoływania pwm dla tego timera jest on wstępnie skonfigurowany - odczytaj po prostu jego rejestry.
Tak, jest wszystko włączone, pytanie czy wszystko w rejestrach timera jest jak trzeba. Chciałbym wykorzystać funkcje API dostarczone przez STMa, sprawdziły się dla innych peryferii (SPI, USART, GPIO, DMA...) jednak nie ma nigdzie przykładu konfiguracji timera w trybie compare.
Domyślam się, że trzeba urzyć innego Timera do obsługi PWM, ale nie wiem którego używa odbiór IR. Poczytałem trochę o Timerach i dla PWM najczęściej stosowany jest tryb CTC. Albo nie do końca zrozumiałeś to co czytałeś, albo autor tej informacji wstawił wierutną bzdurę! Zarówno CTC jak i PWM są to oddzielne tryby pracy timerów w AVR i ich funkcjonalność...
Wasz kod nie działa głównie z tego powodu, że rejestry timera są 16-bitowe, więc liczba 83999 raczej się w nich nie zmieści No ale kto by czytał te BEZSENSOWNE i ZŁOŚLIWIE ostrzeżenia kompilatora... 4\/3!!
Innej metody w takowym przypadku nie ma - to znaczy jest ale dla stałych znanych ustawien (lub wyliczonych dla jakichś danych wejściowych). Zapisywane są wyliczone wartości w tablicy a jedynie przeładowywane rejestry timera (jaką metodą to już sprawa autora programu). Widziałem sporo takich rozwiązań
Ano, timer SCT co prawda jest bardzo mądry, ale ponad 20 linii kodu w celu uruchomienia głupiego PWM robi wrażenie. Trzeba po kolei zaprogramować: rejestry timera, układ generowania zdarzeń na podstawie działania timera oraz układ generowania przebiegów wyjściowych na podstawie zdarzeń. Poezja...
Edytowałem posta i dodałem obliczenia. Zmylił mnie trochę ten zapis: Load Timer0 = 250 Rozumiem że to spowoduje odliczenie 250 taktów, a nie wpisanie tej wartości do rejestru timera. Dawno do Bascoma nie zaglądałem.
Sprawdzałem, wychodzi na to że te kanały a raczej 'Strumienie' jak to się nazywa w F4 są właśnie do tych konkretnych kanałów timera, co zresztą CubeMX sam mi 'zaproponowal' podczas wyklikiwania konfiguracji. Wg mnie na 80-90% problem leży gdzieś w konfiguracji DMA ponieważ sam TIM1 działa dobrze i generuje komplementarny PWM. Zależy mi jednak na DMA...
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?
Masz jeszcze jedno (chyba najprostsze) rozwiązanie. Widzę że używasz uarta. Zrób sobie pętelkę która będzie zwiększała zmienną , wpisywała ją w rejestr timera, wysyłała ją przez uart, i czekała np 500ms. Patrz kiedy układ będzie miał największy zasięg i spisz sobie wartość timera, lub kilka wartości i średnią wylicz.
Dokładnie. Ale może gdzieś istnieje jakiś kompilator C, który traktuje rejestr Timera w trybie 16 bitowym jako jeden, choć po cichu i tak rozdziela daną na dwa. np: unsigned int timer16; timer16 = 0xFEDA; Ale napisałem może... Prywatnie takiego nie widziałem. Pozdrawiam.
SSPIF ustawia się niezależnie od GIE, natomiast przerwanie wystąpi wówczas gdy ustawiony jest SSPIE, w rejestrze PIE1 oraz PEIE w rejestrze INTCON. Po zakonczeniu obsługi przerwania timera, ustawiona flaga SSPIF wywoła obsługę przerwania od MSSP
Czesc, Mam problem z wywołaniem przerwania od comparacji timera w ATmedze 168. Przerwanie jest zglaszane gdyz testuje flage w rejestrze TIFR1, jednak pomimo tego nie jest wykonywane. Ustawialem juz chyba wszystkie handlary ale nie ma efektu. Z gory dzieki za pomoc. Ponizej przedstawiam wazniejsze czesci programu. ISR(TIMER1_COMPA_vect) { TRIAK1_ON;...
rejestr cd4094 thunderbird rejestr rejestr przerzutnik
opinie mastech zasilanie manipulatorów integra kopia zapasowa plików
sterownik movera sterownik movera
Ariston Clas One Boiler Motherboard No Power: SMPS, Fuse, and Power Rail Faults Niebieska dioda LED nie świeci – diagnostyka, Sharp, LG, Samsung, uszkodzenie, wymiana