Jaka częstotliwość taktowania uK? Od tego zależy jak ustawić Timer. Jaki język?
Potrzebuje ale w momencie gdy jest ustawiony do pracy w trybie asynchronicznym.
Wojtek - wchodzisz tutaj: [url=http://www.frank-zhao.com/cache/avr... z kalkulatorem 16MHZ z preskalerem 1024 oznacza że: - 1 sekunda nastąpi po 15625 cyknięciach timera - przerwanie następuje przy przepełnieniu jeśli wybierzesz OVERFLOW, ale może tez nastąpić przy COMPARE, od tego zależy jaką wartość wpiszesz do timera (czy odejmiesz...
Hmm. Nie będziemy się teraz przekonywać do swoich racji, ale z doświadczenia wiem, że wszystkie przewodowe liczniki Sigmy (od 506, do 1606, nie wiem jak jest w DTSach i STSach), wszystkie ATECH, wszystkie wynalazki typu SHARK, przewodowe CATEYE mają kontaktrony. Co do sposobu pomiaru myślę, że najlepszy byłby pomiar czasu pomiędzy impulsami. Pytanie,...
wykorzystaj wolny timer w uC , wprowadź zmienną licznikową i np. co określoną ilość przepełnień timer ,skok do prodprogramu ;)
Ja zawsze wpisuję Timer1 = var i to jest wartość początkowa licznika , a wpisując instrukcję load , podajesz ilość impulsów do zliczenia , a nie wartość początkową timera, kompilator sam wylicza wartość początkową.( chyba ). Timery zliczają w górę.
No, to jak ustawić ten timer?
Co do problemu nr 2 to nigdzie nie uruchamiasz Timer 0, zarówno na poczatku programu jak i w procedurze przerwania (tam masz tylko Stop Timer0).
A można jakoś ustawić ten licznik timera żeby zliczał np do 100?
Nie chcę grać roli lokalnego guru (zwłaszcza korzystającego z cudzych stron WWW), ale widzę następujące błędy: F_CPU nie defniuje się w kodzie -> http://mikrokontrolery.blogspot.com/2011... Twoje zmienne używane w przerwaniu powinny być volatile -> http://mikrokontrolery.blogspot.com/2011... Nie...
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....
Pytanie jak generujesz sygnał w pilocie. Sygnał musi być modulowany chyba nośną 36kHz - tylko wtedy odbiornik sprowadzi wyjście do stanu niskiego. 36kHz można łatwo sprzętowo generować wykorzystując jeden z timerów pracujący w trybie PWM, wystarczy ustawić wypełnienie na 50%, częstotliwość na 36kHz i można nadawać poprzez załączenie/wyłączenie timera...
Problemem jest to jakieś. Jesli timer ma np. okres 550us, a twoja pętla np. 551us to się robi problem - synchronizacja będzie się co raz bardziej rozjeżdżać, a kolejnej impulsy PWM będą co raz bardziej zniekształcone. Zamiast delay zrób tak jak pisałem - w funkcji obsługi przepełnienia timera uaktualniaj OCR. W dodatku musisz tak ustawić preskaler,...
Ok to jak ustawić mam ten Timer?
Zrób to tak: [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 4000000 Config Timer0 = Timer , Prescale = 256 'onfiguracja timera, przescaler 256 On Timer0 Odmierz_1s 'włączamy timer0 Dim Licz_8ms As Byte 'definiujemy zmienną pomocniczą Dim Sekundy As Byte Enable Interrupts 'włączamy zezwolenie na przerwanie Enable Timer0 Load Timer0 = 125 'ładujemy...
Tak po pierwsze to przerwanie masz domyślnie wzbudzane stanem niskim, czyli przerwanie wywołuje się W KÓŁKO dopóki na pinie panuje stan niski. Musisz je ustawić tak, by reagowało na zbocze (w Twoim przypadku opadające). Poza tym jak pisał (at)emarcus - cały program jest pisany bez zastosowania się do jakichkolwiek dobrych nawyków, a i jak widzę wiedza...
A co tam chcesz ustawić w tym timerze? Coś dostrzegłem. Co nto ma być Config portb.1=1? Czytelniej chyba = input lub output. Dodano po 16 A masz helpa do bascoma po polsku?
Jeśli chodzi o mechanizm przerwań, to wszystko masz ładnie opisane w formacie pdf na stronie Atmela . Wywoływanie przerwania w procedurze obsługi jeszcze innego to porażka. Przerwania są kolejkowane i po powrocie z jednego jest wywoływane drugie, dlatego procedury obsługi powinny być jak najkrótsze (polecam asm ;)). W procedurze timera możesz sobie...
Witaj nie problem przy zapisie danych sprawdzać czy wartość znacznika przepełnienia danego rejestru jest wysoka i wtedy ustawić wybrany PIN. Pozdro
Tego nie widziałem. Znalazłem za to informację że dotyczy to rezonatora pracującego jako generator wytwarzający główny sygnał zegarowy: http://obrazki.elektroda.net/9_123515576... A po drugie, akurat w ATMega8 jest błąd w krzemie i te wewnętrzne kondensatory nie działają (tzn. FuseBit ich nie włącza). Użycie rezonatora jako źródła sygnału dla...
Tryb ctc usunąć i timer ustawić w tryb normalny by przerwania zadziałały?
(at)albertb: Zwróć uwagę, że ja także podaję to jako alternatywę nie krytykując Twojego rozwiązania. Przepraszam, nie chciałem nikogo urazić czy krytykować. Sam początkowo pomyślałem: przecież to banalnie proste, więc w czym problem. Zacząłem kombinować podobnie jak Ty, ale właśnie napotkałem problemy, o których napisałem powyżej. Te 960 taktów nie...
Przy uruchamianiu timera zapal bit COM1A0 w rejestrze TCCR1A
TCCR0 = _BV(x<<CS00); Źle użyłeś makra _BV. _BV(x) jest równoznaczne z ( 1 << x ), czyli w Twoim przypadku próbujesz wykonać podwójnie przesunięcie bitowe. Jeżeli x = 3 (CS00=0): _BV(3<<CS00) = _BV(3) = (1<<3) = 0b00001000 czyli TCCR0 będzie równe 0b00001000 . Innymi słowy, próbujesz ustawić bit tylko do odczytu, zamiast...
Witam, Mam Timer1 zajęty do bardziej zaawansowanych pomiarów. Muszę niezależnie wygenerować częstotliwość około 5Hz na pinie. 1. Jak wygenerować tak małą częstotliwość Tim0 lub Tim2 bez udziału przerwań? 2. Jak w CTC ustawić, żeby po wyłączeniu Timera wartość na pinie pozostała niska (L)? Pozdrawiam.
Witaj, No save spokojnie możesz użyć.... pod warunkiem, że nie korzystasz w obsłudze przerwania z instrukcji Bascoma bo jeśli tak to nie odkładając rejestrów na stos, zgubisz ich wartości i w najlepszym przypadku będą się działy różne rzeczy. Ja bym napisał wstawkę w asemblerze odkładając wcześniej na stos używane rejestry w tym SREG. Możesz też użyc...
A w czym problem. Jak nie wiesz jakie bity ustawić to zaglądnij do datasheeta atmegi 8 i znajdź rejestr TCCR2. Są tam dwie tabelki. Jedna to tryb pracy a druga preskaler.
Musisz jeszcze ustawić drugi timer.
atmel.com nie działa ? ;-) http://atmel.com/dyn/resources/prod_docu... TOIE0: Timer/Counter0 Overflow Interrupt Enable When the TOIE0 bit is written to one, and the I-bit in the Status Register is set (one), the Timer/Counter0 Overflow interrupt is enabled. The corresponding interrupt is executed if an overflow in Timer/Counter0 occurs,...
Dziękuje za pomoc. Działa :) Z czystej ciekawości: czy Timer 0 też można wykorzystać jako PWM?
Ja to lubię tak: Zmienić ATmega8 na 88- ta sama cena. Potem w rejestrze ADCSRB ustwić ADTS0...2 tak jak potrzeba- np. przerwanie od Timer0 Compare Match A. Timer0 ustawić tak aby i tak go wykorzystać jako timer systemowy- oba przerwania wykorzystać albo tylko żadanie obsługi przerwania. A reszta w głównej pętli. Ale to jest co ja lubię- wykorzystać...
No i właśnie ze tego powodu każdy projekt powinno zaczynać się od spisania wymagań, a następnie od wyboru mikrokontrolera na podstawie tych wymagań. Znajdź taki uC, który ma tyle kanałów PWM o programowanej częstotliwości i wypełnieniu, ile potrzebujesz, a nie staraj się na siłę zrobić na tam uC, jaki masz, czegoś, czego on nie potrafi. Jeśli liczba...
Witam. Posiada ktoś schemat wraz z programem do atmega8 n timer wraz z wyłącznikiem?? Potrzebuję takie coś do naświetlarki uv, chcę ustawić zadany czas, po tym czasie ma zostać wyłączone urządzenie i sygnał dźwiękowy. Szukałem i nie znalazłem nic ciekawego. Za pomoc z góry dziękuję.
Teraz spróbuję ustawić RTC na zewnętrznym kwarcu. Zanim zamknę temat może ktoś zechciałby podpowiedzieć na co tutaj zwrócić uwagę? (Myślę że to nie odbiega od tytułu tematu) A konkretnie - jaki kwarc? przy okazji jeszcze ten link: Czas - odmierzanie
Nie zadziała to w tak prostej formie w jakim masz kody. 1. W kodzie 1 musisz ustawić PWM z timera 1 na 10bitowy (masz 8bitowy w konfiguracji). 2. W kodzie 2, nie masz ustawionego PORTC na wejście dla przetwornika. 3. W kodzie 2, samo przypisanie W = Getadc(channel) (po skonfigurowaniu timer1 i zmianie rozdzielczości PWM na 10bit) będzie zmieniało prędkość...
teedd -> nie zapytałeś nawet w jaki języku pisze pys1986, a zamieszczasz od razu kod. Poza tym nie wiem dlaczego chcesz zrealizować odmierzanie czasu na przerwaniu INT1 zamiast wykorzystać wbudowany timer? Jest to niepotrzebne komplikowanie zadania i dodawanie uC niepotrzebnej roboty. Na stronce jaką zamieściłem jest przykładowy zegar z kalendarzem...
Bo tym kwarcem nie odmierzysz 1s. w taki prosty sposób. Bęziesz musiał ładować wartość początkową do timera. Z kawrcem 2²²Hz wartość początkową trzeba by ustawić na 0 czyli tyle na ile timer wskakuje po przepełnieniu. Jednym słowem z tym kwarcem timer samoczynnie generuje przerwania co sekundę. Jak nie wierzysz to sobie policz. Kwarc ten był...
Witam! [url=http://atmega32.republika.pl/]http:... To jest link do polskiego tłumaczenia noty aplikacyjnej do Atmega32. Nawet jeżeli nie dotyczy to Atmega8, to dość łatwo poprzez analogię dojść jak działają timery i nie tylko, oraz co trzeba ustawić. Pozdrawiam
[syntax=asm]sbi DDRB,3 //wyjście dla OC2 - PB3 //konfiguracja T2 - Fast PWM ldi r16, (1<<WGM20)|(1<<WGM21)|(1<... //Opis bitów //(1<<WGM20)|(1<<WGM21) - tryb Fast PWM //(1<<COM21) - wyjście PB3 czyli OC2 będzie ustawiane w stan wysoki przy zerowaniu licznika i ustawiane w stan niski przy zgodności...
W niektórych można jeszcze ustawić CKDIV8 czyli aktualnie ustawiona jeszcze jest dzielona przez 8 co przy CLK 128kHz (np. ATINY13) daje 16kHz.
Jeżeli chcesz aby przerwanie było wywołane co sekundę to preskaler musisz ustawić na 128 oraz podłączyć kwarc zegarowy do nóżek TOSC1 i 2.
witam jest proste w asm ale w c też nie powinno być problemu. Przerwania INT0 i INT1 mogą być wyzwalane zmianą stanu napięcia wysokim lub stanem niskim . Odpowiednio ustawić bit w rejestrze MCUCSR. Ustawić bit aktywujący przerwanie w rejestrze GICR. mierzysz czas przez odczyt TIMERa
zrób to mniej więcej tak: .INCLUDE "m8def.inc" .cseg ; początek segmentu pamięci programu .org 0 rjmp RESET ; wektor ZEROWY (po resecie) .org OVF0addr ; wektor przerwania od przepełnienia Timera0 rjmp Przerwanie_T0 ; i tu właśnie skok do obsługi tego przerwania RESET: LDI R16, HIGH( RAMEND) OUT SPH, R16 LDI R16, LOW( RAMEND) OUT SPL, R16 ; porządek...
ustawiasz rejestry oc1b dokładnie tak jak oc1a. Oczywiście ustaw tez timer, żeby działał na wyjściu oc1b. A dokładniejsze info jak pokażesz kod/podasz kompilator...
A jak masz ustawiony Timer? Może pokaż ten fragment kodu :P
Można wyłączyć niechciane przerwania podczas ich obsługi i włączyć timer, który po ustalonym czasie je włączy. Napisz, co chcesz zrobić, może da się to inaczej rozwiązać.
Jasne. To może na początek powiedz którego timera użyć i które rejestry muszę ustawić. Wartości wyczytam sobie z datasheeta ;) Mam go skonfigurować tak żeby się przepełniał co 0.1s i wtedy zwiększał zmienną?
272 to taka nieciekawa wartość do mnożenia. Ja zrobiłem tak: Przerwania z TIM0 i TIM1 TIM0 zlicza impulsy z wejścia zliczającego, i gdy się przepełni jest króciutkie przerwanie inkrementujące parę 3 rejestrów. TIM1 zgłasza przerwanie równiutko co pół sekundy. Na samym początku obsługi przerwania jest odczytywana wartość impulsów z TIM0, i jest on resetowany....
Racja - jeżeli pierwszy timer masz ustawiony na odliczanie jakiejś podwielokrotności sekundy to wtedy wszystko zrobisz na tym samym timerze.
Jedna rzecz jeszcze nie daje mi spokoju. Jeśli timer się przepełni, zmienna a, jest zwiększana, jest to dla mnie trochę za wolno. Prescaler jest na 1. Więc pozostaje wpisać wartosćdo TCNT0, żeby szybciej się przepełniał. Proponuję użyć trybu CTC timera i przerwań Compare Match. Można ustawić przerwania praktycznie na dowolną ilość taktów, tylko uważaj,...
Faktycznie brakło while. A jak wygląda sprawa timera i częstotliwości ? I jak OCR1 ma się do wypełnienia tego impulsu? Wybaczcie laickie pytania i proszę o odpowiedź
Jeśli chcesz w sposób ciągły generować sygnał prostokątny o zadanej częstotliwości i zadanym wypełnieniu, to najłatwiej użyć timera w trybie generowania PWM. W przypadku jeśli czas stanu wysokiego i niskiego mogą się zmieniać z okresu na okres, również można użyć generowania PWM (przykładowo Fast PWM (mode=15) dla atmega8) - używając T1, wpisując wartość...
Jest możliwe aby przy kwarcu 16Mghz i prescaler1 Timer1wysyłał na portd.0 impulsy o szerokości 100us ? Timer1 nie wyśle żadnych impulsów na pin PD0. Można natomiast tak ustawić timer, by generował przerwanie co określony czas, a w nim odpowiednio sterować pinem PD0. I pytanie: Od kiedy programujesz w BASCOM?
crazy_phisic : Zauważ, że przebieg na wyjściu to połowa częstotliwości przepełniania timera. kaczy1n : Moja propozycja, to ustawić prescaler na 1 i nic nie ładować do timera - będzie się przepełniał co 256 cykli zegara. No i należy wybrać poprawne źródło zegara.
1. Disable the Timer/Counter2 interrupts by clearing OCIE2 and TOIE2. 2. Select clock source by setting AS2 as appropriate. 3. Write new values to TCNT2, OCR2, and TCCR2. 4. To switch to asynchronous operation: Wait for TCN2UB, OCR2UB, and TCR2UB. 5. Clear the Timer/Counter2 Interrupt Flags. 6. Enable interrupts, if needed. DS pod tym względem trochę...
To że wolno reagował to wiem że wina taktowania 1MHz Dodano po 13 Czyli nie muszę przesiadać się na większą atmege. Mogę zostać przy atmega8, ustawić wewnętrzny generator na 8MHz a z kwarcu taktować timer kwarcem 32KHz
wywołanie funkcji odbywa się przez dodanie () do końca więc s7_init powinno być zapisane s7_init();
właśnie o taki przykład mi chodziło ... wielkie dzięki - zaraz spróbuje uruchomić kod ;) Dodano po 4 dzięki za kod - działa... tylko jedno pytanie: if(liczba++==250) mam kwarc 8MHz, i jak widać wg powyśzego kodu Tdv presckaler ustawiony jest na 256 oraz T0 jest 8-mio botowy, to czy aby "odmierzyć" 1 sekunde (zapalać diode na 1 s i ją gasić na...
Apropo wejść.. Z tego co do tej pory się bawiłem, to zwykły pin reaguje tylko na dany stan, nie na zbocze... Funkcje taką mogą mieć dopiero wejścia specjalne, np.: zew. przerwanie (INT0, 1...), oraz timery. Można je ustawić tak, żeby reagowały na dane zbocze, lub stan. Chyba, że czegoś jeszcze nie wiem... ;)
Jeśli nie potrafisz to zrób to prościej. Podłącz zewnętrzny kwarc 32,768kHz (zegarkowy); Config Clock = Soft Procedura zegara używa specjalnych zmiennych: _day , _month, _year , _sec, _hour, _min Wszystkie są typu Byte. Można je modyfikować bezpośrednio: _sec = 1 Sprawdź, o ile się spieszy (opóźnia). Różnicę koryguj warunkiem któregoś dnia np o północy.
Specyfika tego mikrokontrolera, zmusza Ciebie do zastosowania Timera2 w trybie asynchronicznym, a mikrokontroler powinien być taktowany wewnętrznym generatorem RC, czyli tak jak radzi kol. wyżej. Przy takim rozwiązaniu korzystać możesz ze specjalnego trybu oszczędzania energii: POWER SAVE. Niestety nie da się w tym mikrokontrolerze taktować kwarcem...
Od dołu to nie ma ograniczeń - możesz ustawić nawet dużo niższe prędkości. Problem pojawia się przy dużych prędkościach rzędu Fosc/16 . Prędkośc transmisji ustalasz wpisami w rejstr UBRRL i UBRRH. Jak wpiszesz tak będziesz mieć.
Popraw jeśli źle myślę: - uC śpi obserwując INT0 które informuje o otwarciu drzwi, - gdy wykrywa otwarcie drzwi ma ustawić timer, - timer odlicza czas (jaki?) i piszczy przez czas (jaki?), - drzwi zostają zamknięte to wracamy do początku. Czy coś pominąłem? A co gdy drzwi zostaną zamknięte przed upływem czasu timera?
Wszystko już chodzi tak jak trzeba. Jeszcze ostatnia rzecz której nie do końca mogę pojąć z dokumentacji. Widzę, że można w trybie normal ustawić OCR1A tak żeby po osiągnięciu tej wartości timer się resetował i liczył od nowa. Jest jeszcze coś o rejestrze ICR1. Czy można zrobić tak, żeby jeden z tych rejestrów resetował timer po doliczeniu do jego wartości,...
Jeśli będziesz używał zewnętrznego kwarcu to uważaj: ja zablokowałem 10 atmeg zmieniając fusy! Nie wiem dlaczego ale wszystkie sie blokowały - tylko dlatego że włączałem prace z mniejszym kwarcem. Jeśli uda Ci się ustawić atmege tak żeby mieć asynchroniczny timer to opisz to tutaj dokładnie. Ludzkość będzie Ci wdzięczne ;]
Przeczytaj sobie w datasheecie czy dzielisz zegar przez 8 czy przez 4 ;) Nie wiem co koledzy z tym fuse bitem ckdiv8, atmega8 nie ma takiego ;) Vectra96 sciagnij tez sobie program avrcalc i tam szybko bedziesz mogl wyznaczyc konfiguracje timerow :)
Oczywiście że można umieścić ddscore w przerwaniu. Jeśli ktoś chce obsługiwać inne rzeczy poza samą syntezą, to należy ustawić timer na przerwanie np co 50 lub 100 cykli, i pozostaje czas wolny na obsługę programu, a dds sobie żyje "swoim życiem". Potem calosc zestroilbym dodajac nopy i ewentualnie korygujac minimalnie timer Jak czas odmierza timer,...
Taka składnia dotyczy tylko Timer1/Timer3/Timer4/Timer5. Nie zadziała poprawnie dla Timer0 i Timer2. Choć z moich osobistych obseracji to najnowszy BASCOM-AVR i spora grupa procesorów poprawnie obsłuży taką składnię: CONFIG TIMER0 = PWM , PRESCALE = 1 | 8 | 64 | 256 | 1024 , COMPARE A PWM = CLEAR UP | CLEAR DOWN | DISCONNECT , COMPARE B PWM = CLEAR...
... Do portc.5 mam podłączony LED który ładnie miga co 1s. Szczerze wątpię :( ...problem polega na tym że w ciągu sekundy zegarek zlicza czas dwóch minut... Pierwszy "End if" w procedurze przerwania timera, przenieś na koniec tej procedury, a następnie zastanów się dlaczego.
Widzę że nie rozumiesz zapisu WGM13:0. To oznacza 4 bity. WGM13 WGM12 WGM11 WGM10 Czyli do tych 4 bitów musisz wpisać 15(d)=1111(b). W tabeli 39 na stronie 99 dokumentacji masz nawet to rozpisane.
Witaj migot. Już byłem na tej stronce, i jest fajna. Jednak nie opisuje ona sposobu wyliczenia częstotliwości na timerze. Znalazłem fajny program tj. kalkulatorAVR i porównując przykład z innego programu doszedłem jaką podać wartość aby uzyskać przepełnienie co daną ilość mikrosekund. Dzięki za zainteresowanie. Nadmieniam, że kożystam z CodeVisionAVR...
Witam wszystkich, jestem w trakcie robienia Czasomierza/Okresomierza. W załączniku umieściłem schemat. Jeśli chodzi o Sharpy, to dla nich będą osobne malutkie płytki. Nauczyłem się już obsługi wyświetlacza, ale utkwiłem w samym pomiarze czasu. Używam zewnętrznego kwarcu 16Mhz. Moje pytanie(nigdy nie używałem timerów), jak badać moment kiedy stan niski...
Wracajac do tematu czy moglbym prosic przynajmniej o pseudo kod obslugi przykladowo drgania w przyciskach , wysterowania przekaznika np przez 2s oraz komunikacji 1wire jednym timerem (atmega8 ma az 2 timery wiec pewnie szybko skoncza sie jego mozliwosci chcac napisac kod bez zatrzymywania) Cały dowcip polega na tym że z tego 8 bitowego timera możesz...
No i jeszcze trzeba ustawić Fusebity na kwarc zegarkowy. No akurat nie :D
No i mamy całą serię błędów. Po pierwsze - nigdy nie robi się odświeżania inaczej niż w przerwaniu timera. Po drugie - podejrzewam, że pod nazwą "segment" występuje u Ciebie cyfra. Ciekawe, jak nazywasz segmenty. Nie przepisuj kodu na brudno - pokaż, jaki jest naprawdę. W każdym przerwaniu timera należy kolejno: - wyłączyć poprzednią cyfrę (lub wszystkie...
Timer 0 w atmedze8 nie ma pwm. Powinieneś użyć Timera 2, czyli rejestrów TCCR2 i OCR2.
Timer- np. Timer1- jako licznik zlicza impulsy zewnętrzne. Podane na odpowiednią końcówkę- T1 w wypadku ATmega8. Nie potrzebuje żadnego preskalera- bo preskaler dzieli impulsy z zegara- a tu nie ma co dzielić. Ustawiamy bity CS10-CS12 na external clock source- falling lub rising. Czy ustawiamy końcówkę T1 jako wejście- nie pamietam. Można ustawić. Ilość...
Witam Próbuję ustawić Timer0 oraz Timer1 aby zmniejszały zmienną co 1 sekundę. Rezonator 4Mhz. Czy możecie sprawdzić czy wszystko mam ustawione poprawnie ? // Inicjalizacja T0 TCCR0=0x03; TCNT0=0x0F; // Inicjalizacja T1 TCCR1A=0x00; TCCR1B=0x04; TCNT1H=0xC2; TCNT1L=0xF7; interrupt [TIM1_OVF] void timer1_ovf_isr(void) { TCNT1H=0xC2;...
Timer1 mam uruchomić z praskalerem x1 Skąd takie założenie, że masz? Gdzieś było napisane, że masz ustawić inny preskaler dla T1 niż dla T2? Jeśli uruchamiasz timer z preskalerem 8 to przy taktowaniu 16MHz, zmienia Ci się jego wartość co 0.5us. A więc zawartość TCNT1 wystarczy podzielić przez 2 aby uzyskać czas w us. Poza tym sprawdź jeszcze raz swoje...
Stwierdzenie dotyczące RTC wynika z tego, że timer2 może pracować asynchronicznie z zewnętrznym kwarcem zegarowym. Można mu podać 32768Hz, t2 będzie takim zegarem (lub wynikającym z działania prescalera) taktowany - to jak wykorzystasz timer zależy od ciebie: możesz np ustawić go w trybie CTC przy prescalerze /128, wtedy będzie się przepełniał równo...
Musisz ustawić timer. Nie wiem czy dasz radę na 5minut, ale możesz np zrobić go na 10sekund i wywołać 30razy (w timerze będziesz zliczał kolejne wywoływania i ponownie ustawiał timer, jak dojdzie zmienna do 30 to wyłączysz timer i wywołasz podprogram). Nie będzie to nic blokowało :)
Tylko mam pytanie bo nie jestem pewien, przy kwarcu 32.768kHz przepełnienie licznika odbywać się będzie równo co 1s ?? Co zrobić żeby przerwanie z przepełnienia było co 0.25s ?? Ustawić odpowiedni prescaler.Ponieważ timer jest 8'bitowy to przerwanie z prescalerem równym 1 będzie wywoływane 128 razy na sekundę. w M8 na T2 masz dostępne prescalery 1,8,32,64,128,256,1024....
Otóż zliczam czas na timerze 2 i co 1 sekundę generuje mi przerwanie obsługiwane w procedurze signal. Jednak gdy jestem w menu które wywoływane jest za pomocą przerwania: ISR_BLOCK, czas nie jest liczony. Jak zrobić by priorytet przerwania Timera2 był większy niż przerwania zewnętrznego. Nie mogę ustawić ISR_NOBLOCK bo zapcham szybko stos. Czy w AVR...
[syntax=c]volatile uint8_t num[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; volatile uint8_t time[6] = {0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F}; volatile uint8_t d = 0; volatile uint8_t counter = 0; volatile struct tm* t = 0; volatile uint8_t hour, min, sec, day, month, year;[/syntax] Atmega8, chcę zrobić w głównej pętli obsługę przycisków,...
A czy można ustawić jakoś priorytety przerwań? Chciałbym zaprzęgnąc do pracy jeszcze cztery przyciski i wyświetlacz LCD. Przyciski dobrze byłoby obsłużyć w jakiś sposób...
a ustawiłeś Fuse Bity?? Bo jeśli nie masz ustawionych to ATmega pracuje z częstotliwością 1MHz. Musisz ustawić Fusy na albo 8MHz na wewnętrznym generatorze albo ustawić Fusy na zewnętrzny kwarc. i mniej więcej kod by tak wyglądał: $regfile = "m8def.dat" $crystal = 8000000 Cursor Off Dim Czestotliwosc As Long Const Licznik = 22336 Config Timer1...
To co sugerowal Tajwoj - źle ustawiłeś preskaler, powinno być: TCCR0 = 0b00000101;
WGM11 i WGM10 razem z bitami WGM12 i WGM13 z rejestru TCCR1B ustalają własnie tryb pracy. Table 39 na stronie 99 Datasheeta ATMegi8 z 07/2007. Inne procesory to inne numery tabelki i strony w Datasheecie, ale opis prawie identyczny. Podałem przykład dla ATMega8 żebyś wiedział gdzie szukać.
Hmmm... o to ci chodzi, jeżeli tak to powiec na co mam ustawić tylko bez pomyłek bo mam go wlutowanego i nie uśmiecha mi się go przelutowywać wrazie wpadki. Poza tym czy jestem w stanie zmienic to przy pomocy tego programatora?
Przerwanie ma być co 800ms. Timer0 prawidłowo generuje to przerwanie: 1/8000000=0,000000125 => 0,000000125*256=0,000032 => 0,000032*250=0,008s => 0,008*100=0,8s i tyle jest odliczane. Dla timera1 rachunek jest analogiczny, ale niestety nie generuje przerwania po tym czasie, tylko kilkakrotnie później. Timery ładowane są początkową wartością w programie...
Witam, Piszę program do atmega8 i mam problem z ustawieniem Timer1. Dopiero zaczynam programować więc proszę o wyrozumiałość. Chciałbym ustawić tak timer1 aby zaczął liczyć czas od pojawienia się na portd.3 pierwszego impulsu do drugiego impulsu, zapisał wartość do zmiennej, wyzerował się i zaczął zliczać czas od drugiego do trzeciego impulsu zapisał...
Ok. ZbeeGin masz rację. Set S1 nie ustawi pociągania dla PC0 bo rejestr PINC jest tylko do odczytu, czyli nic do niego nie wpiszemy. Już doczytałem i trzeba ustawić Set portc.0 na początku rpogramu (przed pętlą) i dopiero wtedy dołącze rezystor podciągający. Jęsli chodzi o Load 250 to oznacza, że Timer0 ma zliczyć 250 impulsów po czym zostanie przeladowany....
Witam mam problem próbuję zrobić program na uC który będzie migał diodami naprzemiennie i w czasie zmiany ich piszczał z piezo. Zrobiłem już miganie i piszczenie. Wartości są takie na oko ponieważ w tym timerze nie da ustawić górnej granicy więc liczy sobie od zera do 0xFF. Proszę o pomoc, wiem problem jest banalny ale ja poradzić sobie z nim nie mogę...
Próbowałem ustawić prescale timera 1 na 8 co powinno dać przerwanie co 32,768ms i w przerwaniu zwiększałem liczniki mikro\milisekund co eliminowałoby opóźnienie przed zmianą wartości licznka. Wynik bez większych zmian - również około 1s\2h, może minimalnie mniej. Czy to znaczy, że miałeś kod, w którym nie modyfikowałeś timera ? Bo właśnie to Ci chciałem...
Witam... "Guru" nie jestem ale powiem ci, że nie musisz wykożystywać dwóch niezależnych timerów... Można ustawić jeden timer i dwa wyjścia (OC1A i OC1B)... Każde wyjście może być odmiennie skonfigurowane w obrębie jednego timera... Tzn. jeden np OC1B może być odwrócony względem OC1A albo oba jednakowe...
witam ze specyfikacji wyczytalem ze ten procesor ma dwa wyjscia pwm, jedno pod wyjsciami pd4 (oc1b) i pd5 (oc1a) (timer1), a drugie pod wyjsciem pd7 (oc2) (timer2) .... pierwsze wyjscie dziala bez problemu natomiat drugiego nie moge skonfigurowac (pod bascom-em), wyskakuje mi error86 przy lini w ktorej konfiguruje timer2 ... nawet kiedy wpisuje: config...
1. Jak to jest z stabilnością zegara wewnętrznego ?% i może to prościzna ale jak go ustawić - rozumiem że kompilację robimy dla określonej częstotliwości bo inaczej były by buraki (ha wiem że notacja jest odwrotna w programatorach ptaszek to zero - czego taką durnotę zrobili). Nie wygląda to za ciekawie. Odchyłki mogą sięgać nawet 20%. Mnie udało się...
Chcę napisać procedurę rozpoznającą sygnał z pilota samsung tv. Na analizatorze stanów logicznych odczytałem przebieg z guzika pilota (wkleję go później). Nie jestem do końca przekonany jak ustawić timer w bascomie. Timer musi być wyzwalany zboczem opadającym. Czy potrzebne są jakieś inne dodatkowe ustawienia dla timera? Bit startu ma ok 4,5ms logicznego...
Czy masz na myśli ten wzór ? http://obrazki.elektroda.pl/3191457600_1... Między innymi. Nie mogę znaleźć rozwiązania tego problemu. Sprawa jest prosta :) Zastanów się, w którym takcie zegara systemowego następuje porównanie licznika z rejestrem OCRn, jeżeli użyjemy trybu CTC z preskalerem np.256 , a do rejestru OCRn wpiszemy np. wartość...
Jeśli potrzebujesz krótkich czasów to wystarczy timer 8-mio bitowy do dłuższych czasów 16-to bitowy. No zgadza się - małe wartości można przechowywać na 8-bitach. Taktowanie masz z tego co sobie ustawisz jako źródło zegara w fusebitach. Może to być kwarc podpięty pod uC, zewnętrzny generator podpięty pod uC, wbudowany generator RC. Im mniejsze czasy...
timer atmega8 timer ustawić atmega8 bascom timer
sterowanie kątem zapłonu autocad schematy elektryczne spalić lutownica
uziemienie basenu łącznik krzywkowy podłączyć
Maszynka Philips nie działa z gniazdka – przyczyny i rozwiązania Medion LIFE S64007 (MD 44007) - Funkcje i Specyfikacja