Krzysiek_krm ma rację. Fragment z dokumentacji ATmega128: "For a 16-bit read, the low byte must be read before the high byte."
Zmień mikrokontroler na taki, który ma timery o odpowiadających Ci parametrach. Układ dobiera się do założeń projektowych. Potrzebujesz timera, który będzie miał okres ok. 600 cykli przy 60 kHz, czyli częstotliwość zegara powinna wynosić nie mniej, niż 36 MHz. Prawdopodobnie dowolny uC z rdzeniem Cortex, zresztą pewnie tańszy od ATmega128, zapewni spełnienie...
Po co koledze ten CTC? Prescaler ustaw na 128 i wykorzystaj przerwanie przepełnienia licznika. Fint = Fosc / preskaler / 2^ilość_bitów_licznika = 32768Hz / 128 / 256 = 1Hz Przy CTC trzeba pamiętać, że występuje taki jeden mały szczegół jak 1+OCRn , gdyż licznik musi przynajmniej zliczyć jeden impuls. A ty go nie uwzględniłeś: Fint = Fosc / (preskaler...
.Czy ktoś może wie w czym tkwi problem/spotkał się z taką sytuacją? A zmienna, której wartość kopiujesz do OCR3A/PWM3A nie jest przypadkiem zadeklarowana jako BYTE ? Jeżeli to nie to, to spróbuj zapisywać rejestry OCR3 osobno - OCR3AH, OCR3AL.
A jaki konkretniej problem masz? Nie możesz włączyć timera, pogubiłeś się w rejestrach i bitach...?
Konfiguracja prescalera jest w TCCR0 B a nie TCCR0A.
Poprawiłem niestety nie działa... ;/
Nie nie rób się kaczką albo sie prześpij ahahahahahaha :D OCIE1B zamieniasz na OCIE1A OCR1B zamieniasz na OCR1A zamieniasz wektor TIMER1_COMPB_vect na TIMER1_COMPA_vect kasujesz wszędzie to TCNT1=0 bo nie ma sensu Dla Timer0, w przerwaniu, pod linijką "dot ++ ; " dopisz TCNT0 = 6; To też można na palcach policzyć: 8MHz to jest na sekundę a sekunda ma...
ja to robie tak: if NACIŚNIĘTY_GUZIK { while (!NACIŚNIĘTY_GUZIK); ... } W ten sposób masz wstrzymaną pracę do momentu w którym nie puścisz guzika. Oczywiście w przerwaniu to nie będzie tak działać bo ono się wykonuje przy każdym impulsie ale może warto sprawdzić.. Albo zamiast w przerwaniu INT dać w jakimś innym (timer?) pozdro
Nie dziwne jak nie ustawiasz prescallera. Samo wywolanie obslugi troche trwa, ty zostawiasz sobie 57 cykli procesora kilka instrukcji, wyjscie z obslugi i ponowne wejscie. Przy takich ustawieniach to raczej tylko pisanie w asemblerze. Zwieksz prescaller do np. 64 i wtedy pewnie zobaczysz efekty.
Kolego, nawet nie napisałeś w jakim języku ten program piszesz... <ciach> Zbędne o ortografii usunąłem.
Nie widziałem wówczas punktu 2. W zasadzie nic od czasu instalacji eclipse wraz z pluginem dla avr nie zmieniałem. Jeżeli masz na myśli pre build steps jest tam czysto. A odnosząc się do mojej próby debugowania samej funkcji delay za pomocą diody: [syntax=c]uint16_t __ticks; PORTA|=0x10; //swieci double __tmp = ((F_CPU) / 4e3) * __ms; // problem? PORTA|=0x02;...
Z tego co pamiętam, rejestry OCR1x uaktualnia się w przerwaniu overflow do timera.
Witajcie. Zawsze mam kłopoty z konfiguracją Timerów i dopalenie PWM. Aktualnie mam problem z Atmeg128 ale pytanie dotyczy ogólnie uC. Otóż mam kilka pytań. 1) Zauważyłem, że na jednym timerze można skonfigurować max 2xPWM sprzętowy. Czy mam rację? 2) Przeglądając datasheet Atmega128 widzę wyjścia PB5(OC1A), PB6(OC1B),PB7(OC1C). Czy ta jedynka OC 1 A,B,C...
Za pomocą bitów CSn2 CSn1 CSn0 możesz ustalić podział częstotliwości kwarcu przez 1,8,64,256,1024. Aby uzyskać dokłądnie sekundę musisz ustawić podział na 8 lub 64. Wtedy do timera musisz wpisać odpowiednio 65536-62500 lub 65536-15625 (do rejestrów TCNTnH starsze 8 bitów i TCNTnL młodsze osiem bitów). Przepełnienie jest sygnalizowane flagą ToVn którą...
Dla Mad Bekona W międzyczasie (a więc w czasie migania diodami) muszę na przykład wyłączyć pare kluczy, przesłać sygnał aby inny procesor zapisał swoje dane, odmierzać inne czasy (bo klucze będą wyłączane w odstępach czasowych) i tego typu sprawy. Pozdrawiam Dodano po 5 Do Boski Dialer To już sobie sam dopracuję. A korzystam z ATMEGA128. Timer 16-o...
No nic dziwnego, że kilka. W końcu piszesz w C a nie w asemblerze . Jedna insrukcja w C to kilka asemblerowych. Mój powyższy kod wsadziłem do sprzetu, w debugerze (JTAG ICE) ustawiłem breakpoint na linijce : else count = 2000; i program wpada tu co 12s A symulator studio nie jest wyrocznią ;) Na pewno Ci zadziała.
Zakres liczenia 16-bitowego timera przy zegarze 16MHz i prescalerze=1 to nieco ponad 4ms. Jak chcesz tym zmierzyć czas, który przy 5000obr/min wynosi ok. 12ms.?
Witam Jak najbardziej nadają się do tego timery. Wykorzystujesz wyjścia OCxA, OCxB i OCxC. Każdy timer mający wyjście OCx nadaje się do tego, trzeba ustawić go w tryb CTC ale też można korzystać z PWM, ustawiając odpowiednie wypełnienie.
Na Atmega128 masz 4 timery sprzętowe i aż żal ich nie wykorzystać. Program na funkcjach delay() jest maksymalnie zły i nieelastyczny, do tego stopnia że nawet nie umiem sobie wyobrazić jak by to miało być napisane. Podaj, z jaką częstotliwością taktujesz mikrokontroler, oraz z jakimi częstotliwościami mają migać diody.
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.
A czy ustawiłeś preskaler dla Timer/Conter 0 ???
Nie bawiłem się ATtiny2313, ale jeśli ma PWM to da się zrobić jakieś odtwarzanie dźwięku z próbek. Robiłem takie coś na ATmega128. Puszczasz generator PWM na najwyższej częstotliwości i jakiś timer do generowania przerwania okresowo. Timer determinuje częstotliwość prókowania. Podczas każdego przerwania timera wpisujesz nową próbkę do rejestru generatora...
Ja bym próbkował w przerwaniach od jakiegoś timer'a np. co 0,1ms. W atmega128 jest chyba wyzwolenie przetworzenia timera na ovf/CC timera
Troche długo mnie nie było ale miałem parę spraw na głowie. Co do tego Timera to ostatnio znów walczyłem i konfiguracja jest w porządku. Wina leży najprawdopodobniej gdzieś na płytce (bądź w procesorze), bo gdy podpiąłem kwarc do innej płytki z atmega128 to Timer działał bez zarzutu. Tak więc temat zamknięty. Dzięki wszystkim za pomoc! Pozdrawiam! P.S....
Oczywiście, że kolejność ma znaczenie... Dokumentacji czytać się nie chce... Tematu też dokładnie nie przeczytałeś kolego a podałem wcześniej stronę na której można to znaleźć w dokumentacji ATmega128...
Coś pomieszałeś z ustawieniami timera - działa poprawnie z zegarem 2MHz Przy zegarze 1MHz baudrate jest 4800 w załączniku przydatny gadżecik
Ten bit uruchamia lub wyłącza tryb zgodności z nie produkowaną już megą103. W tym trybie dla przykładu masz do dyspozycji tylko jeden USART, jeden 16bitowy timer zamiast dwóch, PORTC działa tylko w trybie jednokierunkowym (tylko jako wyjście) itd... Z pozostałymi różnicami postaraj się zapoznać już samodzielnie (nota str.4, 5).
Więc spróbuj skorzystać z funkcji ICP timera. Tu masz przykład: http://winavr.scienceprog.com/avr-gcc-tu...
Policz nastawy za pomocą kalkulatora AVR.
Moim zdaniem landy13 trafił w sedno. Zdaje się, że 128-ka fabrycznie przychodzi skonfigurowana w trybie kompatybilności z ATmega103, a ta nie ma timera 3. Musisz przestawić fusy.
ah faktycznie, dziekuje bardzo ale niestety jezeli chodzi o efekt to ten sam, w sensie nic nie zmienia czy to mozliwe ze zle wpisalam ustawienia preskalera ? bo caly czas ktorys z segmentow mi w ogole nie swieci sie Dodano po 21 uhh dalej nic chyba caly program jest zle albo nie wiem moze brakuje czegos typu np init timer?
Jak to może działać poprawnie skoro przy każdym wywołaniu jest zatrzymywany i zerowany ten timer. TCCR1B = 0x00; //stop timer TCNT1 = 0x00;
Za takie i tyle błędów to powinno się nazwać ich po imieniu :). Do czasu aż wprowadzą poprawki poniżej zamieszczam pdf z czerwca 2010.
Mam ta dokumetacie i na tym rysunku nie ma T0 a w opisie tego Timera tez nie ma podanego pina.
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...
WGM01, CS02 oraz CS00 nie są dla Timera 1. Więc to co masz, to wcale nie jest tryb CTC. Preskaler akurat wyjątkowo się zgadza. Szacuję, że zamiast 200 milisekund kod w ifie wykonuje się coś pomiędzy 600 a 700 ms.
Kupić nową, kondensatora pod XTAL1 nie podłączaj, zostaje jedynie podłączenie tam generatora, wystarczy taki w obudowie 4- wyprowadzeniowej, albo zbudować na pająku z timera 555 lub innego procka
TCCR0=0x07; // port G jako wejście Że co? int main(void) { char digit } Funkcja main obejmuje nawiasem kilka funkcji przerwań. To się w ogóle kompiluje? Pół biedy że funkcja main. Pętla while(1) to obejmuje! Po za tym to SIGNAL pozamieniaj na ISR. ISR jest nowsze i przez to zalecane (choć w sumie kodu wynikowego pewnie to nie zmieni). I przy okazji...
włączenie timera 1 jest zbyteczne
Power-down Mode ... This sleep mode basically halts all generated clocks, allowing operation of asynchronous modules only. Tabelka: Active Clock Domains and Wake Up Sources in the Different Sleep Modes pokazuje, że w Power Down Timer0 nie może wybudzić mikrokontrolera. Innymi słowy timer0 w trybie asynchronicznym liczyć będzie, ale nie może zbudzić...
Oj nieznam C... w ASM to banał, trzeba tylko odpowiednio ustawić timery i przerwania.
I o to właśnie chodzi - 2 takty na bit, czyli 16 taktów na bajt, reszta funkcji wykonuje się porównywalną ilość czasu, w efekcie za 50% odpowiada samo SPI. Druga rzecz - kompilator ma pewną dowolność w tworzeniu kodu asemblerowego, a to znaczy, że nie jesteś w stanie dokładnie powiedzieć ile ten kod się wykonuje. Dokładniej - jesteś w stanie, ale tylko...
W timerze (np. co 0.5 sek) gasisz albo zapalasz flagę (powiedzmy o nazwie fMiganie) Oczywiście po każdej zmianie flagi (fMiganie) następuje odrysowanie całości wyświetlanego zbioru elementów w najstępujący sposób: 1. Jeśli fPozycja jest poza zakresem zbioru wyświetlanych elementów (np. =0) - wtedy obraz wyświetlany jest bez migania. 2. Jeśli fPozycja...
1. assembler 2. timer 0x41 0x56 0x45!!
Przez buforowanie transmisji... Po odebraniu pierwszego znaku odpalasz timer i zaczynasz ładować kolejne znaki do tablicy... Przy każdym następnym znaku resetujesz timer... Jak string się kończy timer się przepełnia i generuje przerwanie...
Atmega32 ma 3 liczniki Atmega128 ma 4 liczniki podobnie Atmega162 i 64. Timery pracują niezależnie od pracy programu, ale z programu można nimi sterować(bo po co by były)
Jak sama nazwa wskazuje przy konfiguracji Timer1 masz compareA i compareB. Czyli masz dwa rejestry porowniania które zmieniaja odpowiednie nogi procesora czyli pwm dla tego tajmera są dwa A i B. Noga procka OC1a pierwszy PWM (kanał) i OC1B drugi. Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down 'regulacja...
Niestety ale nie mogę zrezygnować z delay_ms ponieważ jest to ,,obowiązkowy punkt programu,, Poszukaj na forum kodu multipleksującego wyświetlacze LED w oparciu o przerwanie od timera. W pętli głównej zrobisz sobie opóźnienie, test stanu przycisku i zmianę zawartości wyświetlanych znaków. Niestety ale nic nie znalazłem...
Witam! Jak rozwiazac problem zliczania impulsow z 8 kanalow np. na ATmega8535? ATmega8535 ma 3 wejscia typu timer/counter (ATmega128 tylko 4) a ja potrzebuje zliczac impulsy z 8 zrodel (wentylatory)-w celu pomiaru ich predkosci. CZy jest jakas mozliwosc podlaczenia tego przez jakis multiplekser (jak tak to jaki i jak to podlaczyc )?? Poniewaz jestem...
mogę ci dać kod w ASMie do obsługi LCD znaczy jest to 2 punktowy miernik wilgoci z regulacją wentylatorami wilgoci taki "wilgocioregulator" Jest tam obsługa klawiatury ale niestety analizę programu musisz zrobić sam jest tam jakiś komentarz ale niewiele reszta jest w PDFie do AT Mega 8 jeśli chcesz to napisz na PW. Pozdrawiam PS ja też za ciebie nie...
Nie znam się zbyt na Bascom, musisz sobie doczytać w Helpie, jakimi słowami się ustawia tryb CTC (Clear on Timer Compare) w tym liczniku, Przerwanie nazywać się chyba będzie "On Compare3" or sth.
dziękuje, rownież życzę spokojnych radosnych i wesołych Świąt Bożego Narodzenia. Pozdrawiam. Adam //EDIT: Tam sie tylko zapytam.. jakim cudem pętla nieskonczona generuje zwłokę? bo na pewno kilka ms (us) nie trwa takie cos: wait=3; TCNT0=0; while(wait); chyba ze nie wiem jak działa while, to mnie douczcie (jesli mozna).. pętla while(wait);...
Tak to literowka bo probowalem tego kodu z timerem3 ale tez nie chodzi. Ps. Mozesz napisac jak powinna wygladac inicjacja timera T1 atmeg'i 128 w trybie licznika.
Czyli dla timera 0 powinno wyglądać to tak? ISR (TIMER0_OVF_vect) { ... ... ... }
Cześc. Chcę użyć licznika timer/counter1 w układzie Atmega128 w trybie CTC. Potrzebuje aby przy zgodności następowało przerwanie. Po przeczytaniu Datasheet juz nie wiem o co chodzi w tym. Dlaczego i jak sie do tego zabrac skoro są tam aż 3 rejesrty OCR1A, OCR1B i OCR1C. Czy wpisując do tych rejestrów rózne wartości będą 3 przewania, o co tu chodzi z...
pburczyn --> no fakt biorąc pod uwagę całość takiej konstrukcji/szkieletu jaką przedstawiłeś to to rzeczywiście lepiej zrobić tak jak piszesz czyli zakładać timer w wątku a w drugim go sprawdzać ;) racja
No niestety, dokumentacja nie pozostawia złudzeń. Moim zamierzeniem było użycie timera 3 tak, aby wykonywał dwa osobne zadania w dwóch różnych przerwaniach. Timera 1 już używam. No niestety będe musiał sobie poradzić inaczej. Dzięki.
zumek nie ma znaczenia czy jest włączony czy też nie - reakcja ta sama. zauważyłem, że po "resecie" program leci od nowa ale wartości w rejestrach sie nie zerują i timer liczy dalej do momentu wpisania wartości...
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.
Znalazlem taki schemat podlaczenia: http://www.lutecki.republika.pl/Tsop1736... Moge tak zrobic? oczywiscie dam pare elementow do stabilizacji napiecia :) Czyli jak uzyje SFH5110-36 to poprostu noge wyjsciowa podlaczam bezposrednio do mikrokontrolera, tak? Wszystko juz jest w niego wbudowane? W ten uklad oczywiscie :) Przy taktowaniu 16MHz ATmega128...
Witam, czy ktoś może podpowiedzieć czy sygnał zewnętrznego przerwania musi być utrzymany w stanie ( np. niskim) do czasu wywołania procedury przerwania czy może zostać zwolniony. przykład dotyczy ATmega128 (kwarc 14MHz) gdzie uruchomione są dwa przerwania od licznika TIMER1 oraz zewnętrzne przerwanie INT1(aktywne zbocze opadające). Sygnał przerwania...
Programowe generowanie sygnału video w jakimkolwiek standardzie jest zadaniem krytycznym czasowo, dlatego bez asemblera niewiele zwojujesz. Nawet w asemblerze trudno uzyskać więcej niż 100 punktów w linii. Zresztą zerknij na: Rejestrator przebiegów cyfrowych - przystawka do TV z EP Rejestrator przebiegów analogowych - przystawka do TV z EP Nie jest...
Z tego co widze problem jest chyba w tym ze w przypadku 8 kompilator sam mi ustawial rejestr assr i bity exclk i as2 a w tym 168 tego nie robi. tylko jak na razie z racji mojej niklej wiedzy musze dojść jak to zrobić ręcznie. Widzę że problem już rozwiązany, ale dodam że dokładnie tak jest. U mnie w BASCOMie nie działa konfiguracja Timerów, Przerwań...
DDRD|=(_BV(PB5) | _BV(PB6) | _BV(PB7)); DDRD|=(_BV(PE3) | _BV(PE4) | _BV(PE5)); Widzisz tu subtelną różnicę...? Działające wstawki dla pwm na Tim1 i Tim2: [syntax=c]void Timer0Init(void) { DDRB|=(1<<4); TCCR0 |= (1<<WGM01)|(1<<WGM00)|(1<... OCR0=0; } void Timer2Init(void) {...
Wyjscie podepnij pod nozke dla przerwan zewnetrzych. Przerwanie musi byc ustawione aby wykrywalo dowolne zbocze, w przerwaniu wlaczaj timer i po dwoch cyklach bedziesz mial stosunek, ze tak to ladnie ujme ;)
OK wiec adres 0x21 jest poprawny. Zacznij od sprawdzania fragmentow, np. wysylij tylko 0xff na wyjscia pca i sprawdz miernikiem czy dochodzi. Podlacz sobie jakas diode do mikrokontrolera i mrugaj w zaleznosci od aktualnego stanu. Bedziesz wiedzial czy kod wykonuje sie poprawnie i gdzies nie zapetla. te timery p1 i p2 powinny byc chyba volatile?
Jest tu co najmniej kilka błędów. Pierwszy to taki, że funkcja uart_getc nie jest atomowa. W ogóle kolejka jest zrealizowana źle - nie uwzględnia, że odczyty/zapisy następują asynchronicznie, w związku z tym pewne operacje (np. uaktualnienie wskaźników początku i końca) muszą być robione atomowo. Przypadkowo to działa przy zapisie, bo ISR jest wykonywane...
...O co chodzi ??? :) A czy Ty zdajesz sobie sprawę , na czym polega działanie timera w trybie CTC :?: Coś mi sie zdaje , że chyba nie bardzo , bo te "cuda" , które opisujesz , to jest prawidłowe zachowanie timera w trybie CTC , a dokładnie w trybie MODE 4 dla Timer1 :D Piotrek
(...) żdy zasilany z osobnego źródła i odseparowany transoptorami PC817. Ze względu na ich szybkość oraz niską wartość prądów je sterujących 1mA zegar musi być obniżony do 10KHz ma. Chcę zrezygnować z polecenia: waitus 100 w zamian zrealizować to w obsłudze timer0 a w główną pętle przeznaczyć na inne cele. Rozumiem, że chcesz optymalizować swoje oprogramowanie...
Kurdę no przerwanie jest wywoływane co 310us a to jest bardzoooo wiele cykli zegara na to by mogła się wykonać cała pętla while, cały czas nie rozumiem czemu na atmega 16 działa a na atmega128 nie chce działać :/ sprawdzałem bity ustawiające timer i przerwanie, są one takie same dla mega 16 i 128 więc nie wiem w czym jest problem :( Ten program działa...
Mam kilka pytań odnośnie USARTA ATMEGA128. 1. Czy błąd transmisji 0.2% dla kwarca 16MHz będzie miał duży wpływ na transmisję przy przesyłaniu ramki 19 bitowej z komputera do urządzenia. 2. W programie mikrokontrolera AVR co 5ms wywoływane jest przerwanie od timera1 output Compare które wywołuje procedury które trwają 1.5ms. W pętli głównej wyświetlane...
Z tego co wyczaiłem to mega popędzana jest kwarcem 14,7456 MHz (kwarc do USART)... Timery ustawione są tak, że przerwanie wywoływane jest co 0,05s stąd podstawowa zmienna zliczająca do sekundy zwiększana jest co drugie wywołanie przerwania (odpowiadają za to variable i variable1)... Spróbuj przeanalizować ten kod i skonfrontować go z dokumentacją do...
Użyj Timer2 dla obsługi RC5 zamiast Timera0 Config Rc5 = Pind.2 , timer = 2 i będzie OKejos ;)
Witam Potrzebuję pomocy w przeportowaniu kodu źródłowego z BASCOM na C (Atmel Studio 6) - mikrokontroler ATMEGA128 Na początek fragment takiego kodu: [syntax=basic4gl] Config Adc = Single , Prescaler = Auto , Reference = Avcc Config Timer0 = Timer , Prescale = 1024 Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Disconnect , Compare B Pwm = Clear Down...
1. Czy w bitach konfiguracji wyłączyłeś tryb zgodności z ATmega103? 2. Czy przeczytałeś ostatni akapit opisu bitu 6 (ICES) w rejestrze TCCR3B, strona 135 datasheet?
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ń).
Odkryłem, że nie wiedzieć czemu wraz z przerwaniami TIMERa 0 wywoływane są przerwania INT0 oraz INT1 pomimo, że nic się na nich fizycznie nie dzieje. Nie mam pojęcia czemu się tak dzieje... może jakieś pomysły? z góry dzięki pozdrawiam herszt
Wektorów przerwań szuka sie nie tyle w dokumentacji winavr co w dokumentacji kontrolera, który się programuje. Nazwa wektora to nazwa przerwania ze spacjami zastąpionymi podkreślnikiem i dodanym przyrostkiem _vect np przerwanie od przepełnienia timera 1 w atmega 32: w dokumetnacji sekcja Interrupts (str. 42) 10 $012 TIMER1 OVF Timer/Counter1 Overflow...
Możesz użyć timera/countera... lub używać INT (zew. przerwanie) i zliczać w ISRze liczbe wciśnięć... w jednym i drugim przypadku odpada pooling klawiszy...
Owszem stosować kiedy wynika to z zastosowania i algorytmu to jak najbardziej, ale nie, żeby stosować zawsze ("takie zabezpieczenie dodatkowe - nawyk"). Sam mam jeden projekt, w którym przerwania są odblokowywane w przerwaniu.. przerwanie od timera wywołuje funkcję od zmiany wykonywanego wątku, ale jeśli wszystkie wątki są uśpione, to wtedy funkcja...
(at)misqowiec Określ po co chcesz to zrobić. Takie metody jakie opisują koledzy powyżej równie dobrze można zastąpić generatorem szumów :) Rozumiem, że chcesz przekształcić wejściowy sygnał audio na taki sam sygnał, tylko PWM? Jeśli tak to potrzebujesz ADC przy pomocy którego samplujesz wejście i w zależności od wartości zsamplowanej próbki sterujesz...
Atmega 162 potrzebna mi jest do zbierania danych z 4 rsów, dwóch sprzętowych UARTy i dwóch programowych, działające na przerwaniach zewnętrznych i timerach. Bardzo byłbym wdzięczny za kawałek kodu z funkcjami obslugi SPI dla Nut/OS, jeśli oczywiście ktoś miał z tym do czynienia.
............... przy prescale = 1 częstotliwość PWM równa się częstotliwości krwarcu czyli 16MHz (trochę za dużo :)). .......... Co takiego? Timer5 skonfigurowany u ciebie do pracy w trybie1 generuje falę o częstotliwości 31 kHz (dokładniej 31250Hz), zgodnie z wzorem : http://obrazki.elektroda.pl/9569063700_1... gdzie TOP = "fixed value...
tak patrze że wogóle coś na złych rejestrach operuje ;/ to co wkleiłem działa ale było stosowane na atmega8. BTW. czy zatrzymywanie przerwania w przerwaniu jest normalną praktyką? Timer pracuje, dochodzi do czegoś i musi wykonać mase funkcji. Jak już je wykona włącza sobie preskaler i jedzie dalej. Czy tak napewno można czy są lepsze sposoby?
nie jest chyba możliwe, żeby wystartowały w tym samym czasie? Jest to możliwe. Np. w ATmega128 w rejestrze SFIOR jest bit TSM (Timer/Counter Synchronization Mode). Kiedy bit jest ustawiony na 1, wówczas wszystkie timery są zatrzymane i możesz je skonfigurować w dowolny sposób. Kiedy bit TSM ustawisz na zero, wówczas wszystkie preskalery timerów się...
ISR(TIMER0_OVF_vect) { TCCR0=0; // w tym miejscu wyłączyłeś sobie taktowanie timera 0 licznik++; } Przedtem tego nie zauważyłem (początkowo miałeś w tym miejscu "TCNT0=0;" ) . Wyrzuć to "TCCR0=0;" z obsługi przerwania, bo podczas obsługi pierwszego przerwania TIMER0 OVEFLOW wyłączasz sobie taktowanie timera, inaczej mówiąc - zatrzymujesz...
Spróbuj zmienić początek programu - wektory przerwań: ;================================ .CSEG .ORG0x0000 jmp RESET .ORGOC1Aaddr jmp TEST ;Przerwanie zgodnego porównania OC1A .org0x0050 ;....... dalsza część programu
Tak jak wspomniałem, problemem są przerwania z timerów - wyłączenie pomaga.
Jak to sie oblicza? Timer po włączeniu przy każdym swoim cyklu zwiększa wartość TCNT0 o jeden. I tak aż do 256. Gdy osiągnie tą wartość ustawia flagę TOV0 = 1, TCNT0 = 0 i zaczyna od początku. W tym momencie możesz znów ustawić np. TCNT0 = 136. Flagę TOV0 ustawia się na jeden po to, aby ją wyzerować. Jeśli tego nie zrobisz nie będziesz mógł jej więcej...
Witam, Mam problem z timerem1 - timer pracuje w trybie CTC (4), wartość wpisywana do rejestru OCR1A jest wcześniej odczytywana z przetwornika ADC (potencjometr). Problem występuje podczas zmiany tej wartości - timer tak jakby się przycinał (ale tylko czasami) - nie zgłasza przerwania przez pewną chwile, żeby zaraz zacząć normalnie pracować. Np. po takiej...
Mam pytanie. Jak odpalic timer3 w m128 w roli PWM. Timer ten ma trzy wyjscia OC3a/b/c. Problem w tym, ze Bascom zachowuje sie tak jakby tego timera nie bylo. Napisalem programik testujacy i .upa >> error 46 - bledne przypisanie << wszedzie tam gdzie jest przypisanie Pwm3x = wypelnienie. W e wszystkich innych timerach (0,1) to przypisanie...
Witam, A może coś takiego: timerExpired_within_ms . Pomaga ona w określaniu czy timer wygasł określony czas temu (przydaje się w przypadku kiedy nie wiemy ile zajmie wykonanie całej pętli, a funkcja timera jest krytyczna czasowo). Wykorzystanie w celach komercyjnych skutkuje postawieniem mi piwa :) Pozdrawiam.
piter2004: owszem można zmienić piny do transmisji na każdy inny pin.. skutek uboczny -> transmisja programowa co wymaga blokowania uC na czas transmisji i zużywa dużo zasobów (cykli). Transmisja musi się odbywać w trybie half-duplex. Trzeba przeznaczyć jeden sygnał przerwania zewnętrznego na sygnalizowanie początku ramki albo jeden timer na okresowe...
Wybacz, ale nie rozumiem współpracy tych linii kodu. Zastanów się nad użyciem [syntax=c]ISR(TIMER0_OVF_vect) { timer0_licz--;[/syntax] i dalej, cała funkcja [syntax=c]void delay_500ms(void) { ATOMIC_BLOCK(ATOMIC_FORCEON) { TIFR |= _BV(TOV0); //zerowanie flagi przerwania (zapis 1) TIMSK |= _BV(TOIE0); //aktywacja przerwania od przepełnienia TIMER0 (OVF)...
Witam, Dzięki za sugestie. 1. Do wyjścia INT w PCF został podpięty LED z rezystorem 1k zwarty do zasilania. Dioda pięknie pulsuje z częstotliwością 1Hz (na oko). 2. Wewnętrze pull-up w uC były wcześniej załączone. Sygnał z PCF nadal nie wyzwala przerwania. Ciekawa obserwacja> jeżeli uC jest odłączony od wyjścia zegara, dioda świeci się znacznie mocniej?...
Ok sprawdzę z inicjalizacją zmiennej "a". A o czas mi nie chodzi, tylko dystans. (150000/6400)*2 = 46.875mm, oczywiście to tylko przykład 6400-rozdzielczość silnika 2-skok śruby napędowej Pozdrawiam
A można tak zrobić że sygnał z impulsami podawać na wejście zegarowe Timera i taktować go tymi impulsami? Chce tak zastosować, gdyż musze mieć w swoim układzie trzy takie pomiary prędkości obrotowej, a w ATmega128 dostępne są dwa wejścia zliczające impulsy zewnętrzne. Nie chce korzystać z nóżki zewnętrznego przerwania żeby nie obciążać strasznie procesora.
Ja nie znam takiego. Polecam przejrzenie datasheet od ATxmega mających 64-pin w/g tej tabelki: www.atmel.com... Ponieważ parser BBCode się pogubił, to http://tnij.org/q7gr
Przecież pisze to wyżej:) Ma być CTC, i czy to ważne dlaczego? Ma być użyty dlatego, że Timer 1 to PWM, Timer 3 liczy czas między przerwaniami zewnętrznymi i wpisuje ten czas do wartości TOP Timera 2. Ale timer 2 jest 8 bitowy, wiec ucieka mi pewna wartość bo Timer3 jest 16bit. Timer4 jest również 16bit wiec powinno grac.. Teraz działa to tak, że wartość...
bascom atmega128 timer podstawa atmega128 atmega128 przerwania
charakterystyka dioda zaporowy delonghi uszczelki oznaczenie silnik pralka
Alpina traktorek ogrodowy gaśnie przy włączaniu noży – przyczyny, naprawa, diagnostyka MHOUSE CL2SK – jak podłączyć akumulator 24V, zamienniki PR1, zasilanie awaryjne