Liczniki 4029 mają możliwość programowania (wpisywania liczby do jakiej lub od jakiej mogą liczyć). Można by koderem BCD ustawić wymaganą liczbę i wprowadzić ją do licznika. Liczniki są dwukierunkowe, góra / dół. Mają wyjście przeniesienia CO pin nr 7. Można by spróbować wykorzystać sygnał z tego wyjścia lub zdekodować np. czterowejściową bramką stan...
chciałbym żeby timer po resecie zatrzymywał się i po ponownym załączeniu nie zaczynał od początkowej wartości, Jak sama nazwa wskazuje Reset ustawia on nowa, więc w tej formie na pewno nie zadziała. Wydaje mi się, że używanie "starych", wbudowanych timer'ów mija się z celem w dzisiejszych czasach. Chyba, że chcesz się szkolić do sterowników typu S5...
Najprościej w zewnętrznym warunku daj Timer1.Enabled:=FALSE;. Spowoduje to zatrzymanie timera.
Jest jeszcze coś takiego jak zimny start, poczytaj.
To zależy. Z opisu autora (nie analizowałem kodu) wynika, że timer jest zatrzymany, stąd kolejność nie ma znaczenia. Przy okazji mała poprawka, bo zamiast TCNT0 podałem TCCR0. Zerując TCCR0 zatrzymamy timer ponieważ w tym mikrokontrolerze są tam tylko bity preskalera.
Brak Ci preloadingu (buforowania). Wytłumaczę ten fenomen tak: Powiedzmy że Twój timer liczy od 0 do 100 (taka wartość jest w ARR), a ty nagle zmieniasz ARR na 10, tyle że aktualna wartośc licznika wynosi 50. No i teraz Twój timer musi doliczyć do 65535 żeby się przekręcić i doliczyć do tych 10. Dokładnie tak samo ma się sprawa z wartością CCR. Przed...
Zatrzymanie timera - wystarczy do rejestru TCCR... wpisać wartość 0 :-) Dodano po 2 dokumentacja ATmega16. str. 114/115
Jeśli przycisk 1 lub przycisk 2 to start timer. Jeśli oba przyciski i timer pracuje to zatrzymaj timer i pobierz z niego wartość minionego czasu. Załącz timer z opóźnionym wyłączeniem na zmierzony czas. Wyjście timera przepisz na wyjście sprzętowe.
Zaglądając do dokumentacji mikrokontrolera i wybierając jedną z dwóch możliwości: 1. preskaler timera - jedno z ustawień preskalera powoduje zatrzymanie timera czyli "No clock source (Timer/Counter stopped)." 2. zerując bit TOIE0 (jeśli użyjesz timer0), czyli Timer/Counter0 Overflow Interrupt Enable
Jeśli nie potrzebujesz dużej dokładności, to ja bym umieścił Timer na formatce. Następnie przycisk START włącza timer i jednocześnie zapisuje w zmiennej (np. pole klasy okna) aktualny czas. W zdarzeniu timera wystarczy wyświetlić różnicę między aktualnym czasem, a tym zapisanym. Pod przyciskiem STOP zatrzymać timer i po prostu wyświetlić tekst "0:00"...
Najśmieszniejsze jest to, że zapis: [syntax=c]unsigned int odleglosc=0,05; //odleglosc miedzy fotokomorkami 0,05m[/syntax] Jest w języku C całkiem poprawny, ale jego znaczenie jest zupełnie inne, niż to sobie wyobrażasz. Podpowiedź: operator "przecinek". ;)
... zgodnie z dokumentacja do Atmegi328 Tabela 15-5 mówi że wyzerowanie bitów CS12:0 powoduje zatrzymanie Timera. Rozumiem że to nie wystarcza w moim przypadku. Wystarczy, ale nie zerujesz bitów CS12:0 tym fragmentem programu. Podstawy C: http://mikrokontrolery.blogspot.com/2011...
Bo nie tak się używa przerwań zewnętrznych. Można po pojawieniu się przerwania od zbocza narastającego wystartować timer, w przerwaniu zmienić na zbocze opadające i gdy pojawi się zbocze opadające zatrzymać timer, odczytać jego stan do zmiennej volatile wykasować i ponownie ustawić na zbocze narastające. Mozna też wykorzystać oba dostępne przerwania....
Zmienną używaną w przerwaniu deklaruje się jako volatile (wykluczona z optymalizacji), inaczej będzie cyrk... volatile unsigned char licznik Ładniej by to wyglądało scalone... tzn... void czekaj(void) { licznik = 30; TCCR0 = 0x05; do{}while(licznik); } ISR(TIMER0_OVF_VECT) { licznik--; TCCR0 = 0; //wypadałoby...
Witam, mam ja sobie układzik na wspomnianym procku, w którym procek radośnie timerem popędza malutką przetwornicę buck (o mocy kilkuset mW). Układ działa bez zastrzeżeń, dopóki nie zatrzymam rdzenia debuggerem... Mianowicie kontroler przetwornicy oparty jest o PFM, więc czasami zatrzymanie rdzenia zbiegnie się z timerem wyłączonym (wtedy jest OK, napięcie...
Dawno Bascoma nie używałem ale to będzie coś takiego: On int0 czas 'przerwanie zewnetrze (wejście impulsów) do czestotliwosc=1/czas 'obliczenie czestotliwosci z czasu pomiedzy impulasmi loop czas: stop timer0 'zatrzymaj timer czas=timer0 'odczyt z timera timer0=0 'wyzerowanie timera start timer0 'ponowne uruchomienie timera return Oczywiście...
Opóźnienie - zatrzymanie timera na określoną ilość cyklów zegara. Zanegowanie - zmiana wartości w rejestrze porównywania(chyba OCRx). Zamiast 10 dajesz 255-10=245. Wystawić na innym wyjściu - zmienić timer. Pomyliłeś pojęcia myśląc, że układ sprzętowego PWM steruje na rejestrze PORTx. Takie rozwiązanie nie pozwalało by użytkownikowi na korzystanie z...
to zatrzymanie timera przed załadowaniem wartości jakby pomogło (przynajmniej nie zachowuje się dziwnie) teraz miga w równych odstępach ... Home Lcd "P=" ; P ; "us" Lowerline Lcd "I=" ; I ; "us " ; Licznik If Licznik = P Then Portd.2 = 0 End If If Licznik >= C Then Portd.2 = 1 Licznik = 0 End If ... Dobra odczepiam się od portów :) I już mówię dlaczego...
Post był raportowany. Przeniosłem z: Programowanie ogólne
bo zrobiłeś tak aby po naciśnięciu buttona1 zatrzymała się zmiana kolorów A, tak, to dla testów było, bo nie wiedziałem czy ten timer był u Ciebie od początku uruchomiony, u mnie nie... Jeżeli chcesz wyczyścić po kliknięciu drugiego przycisku, to są co najmniej dwa sposoby: 1. Albo zrób sobie jakąś flagę typu boolean, np. [syntax=csharp]bool rysuj;[/syntax],...
Chciałem Ci dać wędkę, ale wolisz rybę. $regfile = "m8def.dat" $crystal = 8000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Cls Config Timer1 = Timer , Prescale = 256 On Timer1 Odmierz_2s Dim Licz As Byte Enable Interrupts Enable Timer1 Start Timer1...
Jeszcze raz muszę napisać: Nadal w przerwaniu INT1 nie zatrzymujesz i nie zerujesz preskalera Timer2. Musisz być pewien, że timer0 i timer2 zawsze rozpoczynają dokładnie od początku. czyli by być pewnym poprawnego działania powinieneś w przerwaniu INT1: - zatrzymać oba timery, - wyzerować ich preskalery, - obliczyć co ma być obliczone, - wyzerować liczniki...
Sprawdź w manualu opis rejestru DBGMCU_CR (DBGMCU->CR). Musisz sobie w nim ustawić odpowiednie bity, aby timer został zatrzymany gdy zatrzymany jest rdzeń. Problem który obserwujesz wynika z tego, że timer domyślnie nie jest zatrzymywany gdy debugger zatrzymuje rdzeń. Jeśli np. masz przerwanie od przepełnienia co 1 sekundę, to podczas tegoż debuggowania...
Timer 2 ma ustwienia prescalera na 1 i rejestru porównawczego na 7 Zacznijmy od tego: timer w trybie CTC, preskaler 1, OCR2A=7, czyli przerwanie co 8 taktów zegara, a ile taktów trwa procedura obsługi tego przerwania? Samo wejście i wyjście z procedury zajmuje więcej czasu.
Według mnie to wychodzi tak : dla czujnika z 4 polami odbiciowymi przy prędkości 2000 rmp uzyskasz 8000 imp / min, co daje częśtotliwosć ok. 133 Hz. Przy tej wartości nie bedziesz mial problemów ze Shmittem. Wyjście z czujnika podajesz np. na wejście INT0 mikrokontrolera i w przerwaniu sterujesz wewnętrznym timerem. Po prostu przerwanie INT0 powinno...
Ponieważ występował problem w momencie, gdy zatrzymywałem silnik w momencie rozruchu. tzn. po ponownym aktywowaniu timera, OCR0 przechowywało starą wartość, czyli potrafił się uruchomić z wypełnieniem, na którym zatrzymał się silnik. Nie wyłączaj timera aby zatrzymać silnik tylko ustw OCR na 0. naturalnie bedzie "piczek" 1/256. Jeśli piczek jest problemem,...
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...
Generalnie należy pin pracujący jako PWM ustawić jako wyjście, powinno się też ustawić jego domyślny stan, który obowiązuje w chwili zatrzymania/resetu timera. Oprócz tego należy odblokować w timerze odpowedni kanał CCx. Co do pracy jednocześnie w trybie capture i compare to jest to możliwe, ale tylko w XMEGA E5.
Czy istnieje możliwość zatrzymania timera SD i ponownego uruchomienia odliczania z wartością pozostałą do odliczenia? Innymi słowy,chodzi o to aby timer po ponownym załączeniu nie liczył czasu od nowa a kontynuował odliczanie. Jeśli jest taka mozliwość to proszę o ewentualny sposób na zaprogramowanie takiej funkcji.
Czytaj wolniej bo chyba ominąłeś coś co napisałem. Powiedz mi co to ma znaczyć w odniesieniu do mojej poprzedniej wypowiedzi: Start Timer1 usuń bo tylko tu zawadza. Używa się jej tylko kiedy się najpierw Timer zatrzymało. Po konfiguracji Timer jest włączany automatycznie.
Pozwoliłem sobie narysować taki graf, będący automatem Moore'a. http://obrazki.elektroda.pl/8563104900_1... Cały Twój problem polega na tym, że musisz mierzyć czas od ruszenia taśmy do wciśnięcia STOP a potem po zwolnieniu znów włączyć taśmę na czas mniejszy od zmierzonego. Do programu możesz wykorzystać jeden timer TON.
W STM32 domyślnie podczas zatrzymania rdzenia timery pracują, więc podczas twojej pracy krokowej zgłaszane są setki kolejnych przerwań. Aby to zwalczyć należy w rejestrze DBGMCU->CR (w manualu DBGMCU_CR) zapalić stosowny bit dotyczący stosownego timera. Niestety nie zawsze jest to możliwe (bo aplikacja może wymagać aby timer naprawdę stale pracował...
Timer TCAx jest szesnastobitowy (65535 max value). Ty go traktujesz jak ośmiobitowy bo maksymalnie do PER = 249 a CMP=125. Jeśli w momencie nowego wpisu PER = 62 timer będzie dalej (-63-249) to on poleci do 65535 i dopiero się następnym razem zawinie do 62. Jesli chcesz coś zmieniać to musisz go raczej zatrzymać przed zmianą bo konfiguracje PWM mają...
Witam Pytanie 1: Zrobiłem coś takiego że jeśli odebrano znak to jest wygenerowane przerwanie Urxc następnie przed instrukcją INPUTBIN uruchamiam przerwanie Timer0 jako licznik czasu który chcę wykorzystać do przeterminowania czasu odebranego znaku. bo INPUTBIN B(1), 6 oczekuje na 6 bajtów. Jak wysyłam całe 6bajtów to działa poprawnie, a jeśli bym wysłał...
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...
Idź przez instrukcje asma zamiast instrukcjami C i zobacz co sie dzieje pod &TIM4->SR gdy wykonuje sie sekwencja rozkazow BIC i STR. Takie dwa powinny tam być. Sprawdź również, czy proces zatrzymania rdzenia zamraża timer. Jeśli nie, to timer chodzi caly czas nawet przy zatrzymanym rdzeniu, i nie zauważysz najpewniej momentu kiedy ten bit jest zerem.
Ten kod nie wykonuje modulacji. Żeby ją wykonać musisz zatrzymać timer/odłączyć jego wyjście do pinu.
Spróbuj test 1: - przed wejściem w sleep zatrzymaj timer zdejmując z niego sygnał zegarowy (czyli zatrzymanie timera, ustawiasz to podobnie jak preskaler) - dodatkowo wyłącz watchdoga jeśli go używasz - wejdź w sleep - wyjdź ze sleep, włącz timer, nie włączaj watchdoga, sprawdź czy masz generowany dobry sygnał Test 2 jeśli wciąż źle działa: - określ...
hunterhouse W AVR-ach sprzętowo można zatrzasnąć zawartość timera , ale uruchomić zliczanie trzeba programowo.Natomiast w 51-ce można uruchomić i zatrzymać timer sprzętowo.Jeśli na P3.3 jest stan wysoki i flaga GATE timera1 jest ustawiona , to timer zlicza doputy , dopuki stan na P3.3 nie zmieni się na niski.Problem jest tylko z tym , że Charly chce...
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!!
Witam :arrow: romantv - nie bardzo rozumiem o co chodzi. Domyślam się że włączasz timer, on odlicza jakiś czas, stopujesz go, następnie dalej uruchamiasz i chcesz aby kontynuował zliczanie od tej wartości co masz? Jeśli tak to nie wydaje mi się to trudne. Ta funkcja czas=czas+1 ' czas w sekundach Jak zatrzymasz timer to ta wartosc będzie cały czas przechowywana...
1) Czas masz źle policzony, rzeczywiście wychodzi 2 sekundy :) Policz jeszcze raz, np: #define F_CPU 14745000ul #define TIMER_PRESCALE 1024 #define SECONDS(s) ((s)*(F_CPU)/(TI... 2) podpięcie przycisku pod przerwanie to pomyłka - poczytaj o eliminacji drgań styków 3) po wyłączeniu diody musisz zatrzymać...
Innymi słowy jednego timera urzyć do pomiaru czasu całkowitego a drugiego do pomiaru czasu między impulsami. Czyli tak: po restarcie procka czekać na pierwszy sygnał z czujnika. będzie to inicjowało zliczanie czasu mierzyć czas między kolejnymi impulsami i w chwili przyjścia impulsu zatrzymać timer, porównywać z wartością zadaną i zerować celem ponownego...
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...
więc pisałem dlatego o czujniku Halla:) Zakładając ze wieje dość ostro koło wykona 5 obrotów czyli 5x20 impulsów a czujnik Halla zmieni tylko czas między stanami. Mając czas i obwód koła m/s łatwo obliczyć. Zbocza uruchomią timer i zatrzymają go. Przynajmniej tak mi się wydaje.
(at)stozek - normalnie w Bascom nie jest potrzebna komenda Start Timer0 bo jest on uruchamiany od razu podczas konfiguracji. Używa się tej komendy tylko jeśli poprzednio zatrzymałeś Timer poprzez Stop Timer0. Rozumiem, że zatrzymujesz timer. Tak więc zatrzymywanie timera to zabranie mu źródła taktowania. Bascomowe komendy moża wiec rozumieć tak: Start...
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.
Witaj! Uruchamiam Timer T0 w trybie 1 - jako 16-bitowy zliczacz impulsów wewnętrznego generatora zegarowego. W programie głównym na początku ustawiam: .. MOV A,#00010001B MOV TMOD,A MOV A,#00001010B MOV IE,A MOV A,#0 MOV TL0,A MOV TH0,A MOV A,#1FH MOV TH1,A MOV TL1,A SETB EA SETB ET0 SETB ET1 .. No i potem aktywuje przyciskiem znacznik TR0. Chwilę pochodzi...
Jak wykryjesz wciśnięcie przycisku to uruchom timer w trybie zliczania taktów zegara. Po wykryciu puszczenia zatrzymaj timer i sprawdź do ilu doliczył na tej podstawie wyliczysz czas. A dalej to już chyba wiadomo. To tak w telegraficznym skrócie.
A to przepraszam jeszcze dużo rzeczy nie wiem :) Czyli poczekać na zbocze narastające, wtedy w przerwaniu odpalić licznik iii no właśnie jak to zrobić żeby nie czekać w przerwaniu na stan niski żeby zatrzymać timer ??
Zatrzymanie timera jest w obsłudze przerwania TIMER1_COMPA_vect w linii [syntax=c]TIMSK &=~(1<<OCIE1A);[/syntax] W obsłudze przerwania INT0 jest wyzerowanie timera i ponowne uruchomienie. [syntax=c] TCNT1 = 0; TIMSK |= (1<<OCIE1A); [/syntax]
Witam, szukam funkcji która zadziała w sposób zatrzymania czasu timera i wznowienia go. Chodzi mi głównie że timer odpala, działa przez 30 s i na przykład wcisnę przycisk który spowoduje zatrzymanie go, i po tym jak go znowu załączę to odliczanie się wznowi od momentu ile minęło sekund przed wciśnięcia przycisku.
Proszę o pomoc w zarządzaniu już istniejącym zegarem, który rozpoczyna się codziennie o godzinie 06.00. Muszę zatrzymać programowanie timera na 24 godziny. Tylko w przypadku naruszenia określonego obszaru. Następnego dnia po 24 godzinach normalne programowanie timera będzie musiało powrócić. TIMER 1 - każdego dnia ON 06:00/ OFF 07:00 Z24 - czujnik Zatrzymaj...
Oto szkielet tego co chcesz zrobić volatile char flaga; ISR(TIMER_OFV_VECT) { flaga = 0 //zatrzymaj timer return; } if (klawisz) { if(flaga) { //timer stop akcja; flaga = 0; } else { //start timer flaga =1; } }
mklos1 : Jeśli jesteś pewien, że wpisanie 1 do TCNT0 powoduje zatrzymanie timera, a wpisanie 0 do TCNT0, to dokumentacja wyprowadzi Cię z błędu. ps. dzielenia modulo unikał bym, nawet jeśli kompilator jest w stanie to zoptymalizować.
przy pomocy bramki AND do jednego wejścia zegar a do drugiego przerzutnik jak z przerzutnika bedzie 1 logiczne to na wyjściu bramki bedziesz mial impulsy z zegara zas gdy pojawi sie zero logiczne to na wyjsciu tez bedzie zero i impulsów nie bedzie
Nie, bo to nie jest jeden zasób sprzętowy. Nie ma to żadnego znaczenia. Chyba nie rozumiesz o czym rozmawiamy skoro tak uważasz. Tu chodzi o dostęp do dwóch zasobów które razem wytarzają jakąś wartość liczbową (jeden Timer daje LSB a drugi MSB). Należy odczytać LSB i MSB z jednego momentu czasu. Czyli albo zatrzymać Timery, albo mieć sprzętową możliwość...
Najpewniej algorytm jest na tyle szybki, że wykonuje się poniżej 1ms. Wyświetla jakąś liczbę po zmianie na ElapsedTicks? Pewnie będziesz musiał spróbować tak: [syntax=csharp]if (Stopwatch.IsHighResolution) MessageBox.Show(string.Format("Czas: {0}ns", (1000L * 1000L * 1000L * (double)sw.ElapsedTicks / Stopwatch.Frequency))); else MessageBox.Show("Pomiar...
Użyj komponentu Timer. Wstawiasz go na formę, ustawiasz mu czas na 3000 (3000ms=3s), włączasz go (np. Enable=true) A w zdarzeniu OnTimer najlepiej zatrzymać timer czyli enable = false i umieszczasz polecenia jakie mają się wykonać po tych 3 sekundach. Przynajmniej ja bym zrobił cos takiego w Builderze C++ :) ale w Delphi będzie podobnie.
Grzesiu, czy czytałes i wszystko rozumiesz z ostatniego wydania (Mikrokontrolery 8051 w praktyce autora Tomasz Starecki) ?. Jeśli jesteś w stanie coś dodać do tej książki to pisz ten e-book. A tak dla ciekawości: jak można odczytać w locię (nie zatrzymany) timer aby odczytana wartość była poprawna w 100%. Podaj przykład skoro chcesz pisać książkę.
Tak, moje przeoczenie, faktycznie dokonuje pomiaru na poziomie wysokim gdyż jest wejście INTx zanegowane. Z tego co piszesz sprawa wygląda banalnie. Tylko mam pytanie jak byś proponował zapisać wartość licznika w momencie gdy następuje automatyczne zatrzymanie timera (jak wykryć ten moment)? Wiedz, że ja używam pętli, która ciągle sprawdza stan na linii...
Witam. Poszukaj mojego tematu o próbkowaniu sygnału z ADC. Jakieś półtora miesiąca wstecz. Miałem z początku podobny problem, że UART wysyłał mi złe dane. Problemem było to, że się nie wyrabiało wszystko. Musiałem zastosować tablicę próbek, odczytywać, zapełnić, zatrzymać timer, wystawić flagę, i wtedy wysłać po UARCIE całość, wyzerować flagę, ruszyć...
Jeszcze jedno. Ten program większość czasu spędza na wyświetlaniu. Wydłuż czas odświeżania wyświetlacza poprzez usunięcie Load Timer0 , 150 i zmianę w Configu timera0 - Config Timer0 = Timer , Prescale = 64. Spróbuj zmniejszyć czasy w transmisji do SAA i raczej wyłącz wyświetlacz na czas transmisji do SAA - zatrzymaj timer i wygaś wyświetlacz. Pamiętaj...
Wybacz, źródło zasilania pewnie zasilacz impulsowy 12V. Analizą tego schematu nie musicie się zajmować, zapewniam, że wszystko działa wg moich oczekiwań:). Problemem jest tylko program. Obsługiwanie timerów to moja pięta achillesowa. Jak zrobić, aby Sharp1 włączył liczenie czasu, jak zapamiętać czas przelotu obiektu pomiędzy sharp1-2, 2-3, 1-1(pełny...
No to extra. Widać już, że można zatrzymać Timer i go uruchomić. Teraz sprawdź warunek if. Wyrzuć kod w waitami jednosekundowymi i wróć do kodu z If. Tak jak pisałem poprzednio prawdopodobnie nie jest rozpoznawany w instrukcji If warunek ..And TCCR1B=&B00000000. Potrzebna jest zmienna w tym miejscu. Ale po kolei. najpierw sprawdź sam przycisk czy działa....
Jak mogę obsłużyć przerwanie tak, aby sygnał wykonywał się zadaną ilość impulsów. Np 10 impulsów i sygnał kończy gnerowanie Zadeklarować zmienną która będzie się zwiększać co przerwanie + dodać warunek który po przekroczeniu przez tą zmienną adekwatnej wartości wyłączy przerwanie bądź zatrzyma timer. Swoją drogą to nie wiem co studiujesz, ale skoro...
A nie lepiej w programie głównym inicjalizować wskaźnik, wpisywać do zmiennej długość bufora i uruchamiać Timer. A w przerwaniu walnąć to: ISR(TIMER1_COMPA_vect) { OCR1A = pgm_read_byte(*odz++); // przepisuję wartość do rejestru sumz--; if (Pierwszy_komunkat == 0) { if (sumz == 0) { sumz = Dlugosc_drugiego_komunikatu;...
Procesor ATmega8515. Silnik sterowany PWM z portu OCR1B z płynną regulacją prędkości. Działa ładnie i jak należy, ale chciałbym w pewnym momencie wyłączyć pwm i całkiem zatrzymać silnik. Robiłem to na dwa sposoby: 1) TCCR1A - zerowałem najstarsze 4 bity żeby odłączyć od pwm port oc1a i oc1b 2) TCCR1B - zerowałem 3 najmłodsze bity żeby zatrzymać timer....
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...
Ja w ogóle nie rozumiem po co ci to. Miałeś bramkować zewnętrznie timer zliczający czas wtrysku. Wtedy nie ma znaczenia początkowe ustawienie. Co sekundę sumuj czas wtrysku na sekundę: zatrzymaj timer czas_wtrysku_sek= 65535*ilość_cykli_w_ostatniej_sekundzie+... czas_w_ms=czas_wtrysku_sek/1000 gdzie: ilość_cykli_w_ostatniej_sekundzie...
Brakuje zatrzymania timera w OVF.
Platon - rzeczywiscie masz racje. Wygladaloby to chyba tak : przy kwarcu 4MHz jeden takt zegara trwa 0.25us, co daje przerwanie po 64us (0.25us * 256 taktow, przy Preskale = 1). W obsludze przerwania nastepuje np. inkrementacja jakiejs zmiennej. Po zakonczeniu impulsu i zatrzymaniu timera2 trzeba pomnozyc wartosc tej zmiennej przez te 64us. I to bylby...
ponizej kawalek 'kodu', ktory pokazuje konstrukcje jak sie robi to, czego oczekujesz, mniej wiecej to czego oczekujesz; jest to przedstawienie generalnej idei, nie gotowe rozwiazanie, musisz troche popracowac sam, by dostac pozadany efekt; rzecz jasna mozna to zrobic inaczej, taka forma wydaje mi sie najbardziej zrozumiala; oczywiscie trzeba dolaczyc...
Chodzi o to, że tylko podczas "trzymania" resetu można go ustawiać debuggerem... Niekoniecznie oprogramowanie może wspierać takie ewolucje... Na pewno jednak możesz zrobić coś takiego, że ustawiasz sobie jakąś zmienną volatile i na początku main() w zależności od tej zmiennej ustawiasz bit zatrzymania timera lub go nie ustawiasz... 4\/3!!
I to jest odpowiedź... Wystarczy wywołać ją... Oj, nie jestem pewien czy to wystarczy :!: MSDN podaje dodatkowo jako argument czas wywołania: Application.OnTime EarliestTime:=TimeValue("17:00:00") , _ Procedure:="my_Procedure", Schedule:=False http://msdn.microsoft.com/en-us/library/... Może być tak, że podanie tego...
Dzięki za odpowiedź! pomysł bardzo dobry, jednak wciąż nie rozwiązuje największego problemu takiej implementacji. Ten fragment kodu : [syntax=csharp] protected void OnChanged() { if (NewMessagesArrived != null) NewMessagesArrived(this, new MQueueEventArgs(Dequeue())); }[/syntax] zostanie wykonany w wątku timera, a nie głównym. Przy większej ilości handlerów...
Dzięki. Spróbuję poeksperymentować. Ale widząc w jaki sposób czujniki montuje sie w zderzaku, tez sam czujnik służy jako nadajnik i odbiornik, w jaki sposób to można wykorzystać w ten sam sposób w arduino? Przełączyć port na wyjście, nadać impuls, wystartować taimer, przełączyć na wejście i jak wróci impuls to zatrzymać timer? Tutaj jest schemat sensora...
To jak w "sosnie" jezeli jest dobrze wykalibrowany to po zatrzymaniu timera powinno byc 1024 miligajgerów.
Jest możliwość na jednym pinie. Na B0 możesz wygenerować 38400Hz i zatrzymywać i uruchamiać generację wpisując odpowiednie wartości do TCCRB0: mniej więcj tak jak robisz w pętli while: while(1) { TCCRB0=xx; //uruchom 38400Hz delay_us(2000); //i generuj go przez 2000us TCCRB0=0; //zatrzymaj timer delay_us(27830); //przerwa...
Wpadłem na taki pomysł ale coś mi tu nie działa może mi ktoś powiedzieć co jest nie tak???? linia P3.5 jest wykorzystywana do odczytu stanu z klawiatury wyświetlacza 7segmentowego LOOP1: CLR TR1 ;zatrzymanie timera SJMP $ LOOP: MOV C,P3.5 ;sprawdzam czy coś nacisnąłem SETB TR1 ;włączam timer CPL C ;neguje bit C CJNE C,P3.5,LOOP1 ;sprawdzam czy...
Podejrzewam że program miał kłopoty z synchronizacją z sinusoidą . Tak jak robisz tylko daj wyprostowane obie połówki sieci na nogę procka która generuje przerwanie, ewentualnie jeśli noga generuje przerwanie przy każdej zmianie stanu może być jedna połówka sinusa. Będziesz miał na każdą połówkę jedno przerwanie. I tak jak pisałem to przerwanie uruchamia...
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ć...
Timer działa tak jak sobie wyjaśniłeś. Co do programu: T0_int: call klawiatura call wyswietlacz_LED RETI proponuje tutaj zrzucic na stos przynajmniej akumulator, i przydałoby sie zatrzymać timer (bo on cały czas pracuje). T0_int: clr TR0 push A push B call klawiatura call wyswietlacz_LED pop B pop A setb TR0 RETI I nie lepiej uruchomić 16bit...
Wlaczasz timer, puszczasz petle, zatrzymujesz timer i odczytujesz czas trwania petli powiekszony o kilka cykli na zatrzymanie i start timera.
Z grubsza rozumiem, o co chodzi z przerwaniami - ale dziękuję Ci serdecznie za dość łopatologiczne przetłumaczenie ;) Największy problem stanowi dla mnie ten zewnętrzny kwarc - czy sposób, o którym piszesz, umożliwi mi korzystanie z niego? Muszę mieć po prostu pewność, że w miarę precyzyjnie mam odliczany czas co sekundę. Dodam, że jest to część bardziej...
Co do sterownika tej przetwornicy to zastosowałem STM8S. Ma on możliwość zatrzymania timera i wyłączenia mosfetów jak prąd przekroczy jakąś wartość ale nie korzystam z tego. Tranzystory są dobrane na 3A a w układzie taki prąd mógłby wystąpić tylko przy zwarciu wyjść co raczej wykluczam. Pozdrawiam
Kiedy timer jest zatrzymany (CEN=0), rejestry ARR i PSC ładują się natychmiast, bez UG Bzdury. Rejestr preskalera ładuje się DOPIERO przy UEV.
jak z innej formy (np. Form5) usunąć Form2 Jeżeli to z poziomu Form5 tworzysz i pokazujesz Form2, wystarczy zadeklarować zmienną typu Form2 i wywołać na niej zwykłe polecenie Close(): proszę również o poradę jak usunąć timera z Form1, np. Formą5 . A po co coś takiego robić?? W ogóle powinieneś używać stosowania metody Dispose() ręcznie - to jest metoda...
Też jestem początkujący i choć problem wydał mi się błahy, był niezłą zagwozdką. Ostatecznie dodałem dwa markery Zezw_siln_1 i 2. Błąd miałeś też w pętli reset timerów: jeżeli są resetowane zboczem opadającym, to sygnał musi pochodzić w tym wypadku od wejścia przypisanego do danego timera a nie przeciwnego. Aby zabezpieczyć timer przed resetem przyciskiem...
AVE... (at)Nsvinc... Zrobiłbym to tak(na PIC16F785): 1. Ustaw przerwanie pinu na zbocze narastające. 2. Gdy pojawi się zbocze narastające: - zresetuj flagę przerwania; - ustaw przerwanie pinu na zbocze opadające; - ustaw preskaler timera; - włącz timer sprzężony z głównym zegarem. 3. Gdy pojawi się zbocze opadające: - zatrzymaj timer; - zresetuj flagę...
Poi pierwsze. Do BASCOM-a jest pomoc - także po polsku, której to zresztą jestem autorem. Wersję on-line (beta) znajdziesz na mojej stronie WWW. Jak one działają? Zliczają impusy. Albo z prescalera, albo z zewnątrz. Patrz nota katalogowa. W którą stronę zliczają? Zwykle liczą w górę. W trybach PWM liczą też w obie strony. Patrz nota katalogowa. Jak...
Witam W Twoim programie wszystko jest ok. , z jednym małym wyjątkiem : Pomiędzy SET/RESET ( ostatni sterujący silnikiem ) a funkcję AND wstaw zbocze narastające , chyba TIMER BW nastawiony na " from OFF to ON " Powinno działać tak jak chcesz. Pozdrowienia
Zadając pytanie tak właśnie przypuszczałem, że INT jest Ci potrzebny, a drgania należy po prostu przeczekać po zatrzymaniu timera jak napisał excray. To jest właśnie jeden z nielicznych przypadków, w których należy INT wykorzystać do obsługi przycisków.
Witam, TRoszkę walczę z PWM na procesorze Atmega644. Niby wszystko jest Ok, bo ładnie reaguje na zmiany w rejestrach, ale... no właśnie jest jedno ale. Nie mogę ustawić "zera" na wyjściu. Nawet jak wpiszę w OCR1A=0, to jedna szpila jest wystawiana (wypełnienie 0,6%) i nie mogę sobie z tym poradzić. Wszystko ustawiam standardowo. To samo dzieje się i...
To nie pytania kontrolne tylko naprowadzające :) 80% wypełnienia to 80 % stanu "high" w danym okresie, czyli jeśli okres trwa sekundę to przez 800 ms będzie przepływał prąd przez dany pin. po czym zatrzyma się na 200ms i cała operacja się powtórzy. Zgadza się ? I właśnie do odmierzania tych czasów służą liczniki (timery). Wybrany timer z funkcją PWM,...
Witam Jeśli dobrze zrozumiałem to chodzi o coś takiego, w takim przypadku czas będzie zliczany dalej od miejsca w którym się zatrzymał.
...Kurcze dalej miga :/ Już nie mam pojęcia, może coś nie tak z Timerem0 jest ale z kolei jak go sprawdzić? ... No ja się nie dziwię, jeżeli nadal masz w ten ... [syntax=c]//////////////////////////////... OCR0=46; // ~333Hz TCCR0=(1<<WGM01); // CTC TCCR0=(1<<CS02); //preskaler 256 TIMSK=(1<<OCIE0);...
Masz w sumie do obsłużenia 3 rzeczy - GPIO, timer i najlepiej przerwania. Możesz dołożyć jeszcze drugi timer do obsługi wyś. LED. Trochę zabiersza się od tyłka strony. Najpierw przedstaw schemat (chyba że już masz i jesteś go pewien), zrób urządzenie i później będziemy omawiać program. Ogólnie: Init: - Konfigurujesz timer tak aby dawał przerwanie co...
No i nie udało mi się tego zrobić na Timer0- on sie kręci bez przerwy a ja potrzebuję włączyć i wyłączyć timer. Tak że na razie na Timer1- szkoda bo 16 bitów- ale zrobię na Timer2. Spokojnie użyj Timer0, który będzie zgłaszał przerwanie np. co 1ms. W procedurze obsługi tego timera dekrementuj zmienną, jeśli osiągnie 0 to należy zatrzymać dekrementowanie,...
Witam !!! 3. Co to są banki rejestrów jak je zmieniać. - w 8051 sa cztery banki rejestrow (po 8 rejestrow w kazdym banku) zmienia sie je (banki) poprzez odpowiednie ustawienie bitow RS1 i RS0 rejestru statusowego PSW. Bank rejestrow najprosciej mowiac to zbior wlasnie 8 rejestrow w ktorych mozemy przechowywac argumenty (dane ) dla wykonywanych instrukcji...
zatrzyma wirowa zatrzyma wydruk zatrzyma serwo
schemat zasilacz antenowy z18xe wymiana silnika elektryczna tylna klapa
lodówka bosch rower elektryczny
Zmniejszenie napięcia z 12V do 5V za pomocą rezystorów Wartość diody półprzewodnikowej oznaczonej literą G