Chodzi mi o takie ORy: TCCR2 |= (1<<FOC2) | (1<<WGM21); Dzięki niemu zagwarantowałeś, że różne śmieci które były w rejestrze pozostały tam. A wystarczy przy pierwszym użyciu zapisać TCCR2 = (1<<FOC2) | (1<<WGM21); BOD to Brown-Out Detector - układ zapewniający, że procesor zostanie prawidłowo zresetowany przy zbyt niskim napięciu...
Witam, A czym to mierzysz i względem czego? Jeśli, jak mniemam oscyloskopem względem masy, to wyłącz odcinanie składowej stałej :-). Pozdrawiam, QuadMan
Po pierwsze jesli ustawiasz bity WGM21 i WGM20 to licznik dziala w trybie fast PWM. Po drugie, ale pewnie mniej wazne, sei() daje sie po skonfigurowaniu wszystkich licznikow. Po trzecie timer2 odlicza tylko 1ms a ty potrzebujesz 1s co daje ci 100 przerwan ray ponad sto taktow opoznienia, ale to i tak nie powinno wyjsc okolo 2 -3 s.
Ależ się męczysz z tym timerem... :) Poczytaj [url=http://stsystem.elektroda.eu/progra... o timerze 2, tutaj [url=http://stsystem.elektroda.eu/progra... obsłudze wyjść, oraz [url=http://stsystem.elektroda.eu/progra...
Tak na szybkiego możesz sprawdzić to: Wstaw w odpowiednich miejscach w swoim programie. int second=0; SIGNAL (SIG_OVERFLOW2) { second++; } int main(void) { LCD_Initalize(); LCD_Clear(); while(1) { char t1[2]; itoa(second,t1,10); LCD_WriteText(t1); } }
W TCNT2 jest aktualna wartość timera2.
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.
Pierwsze pytanie - czy w inny sposób udaje ci się coś wyświetlić na LCD? I drugie - tam jest funkcja dodająca transakcje, która przy okazji włącza timer. Poprawiłeś ją? Chodzi o tą: [syntax=c] bool LCD_PutText_B(uint8_t x, uint8_t y, char *txt, LCD_trans *buf, bool autodel) { buf->cmd=LCD_Text; buf->Ready=false; buf->SelfDel=autodel; //Czy zwolnić pamięć...
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...
Tu nie ma żadnej filozofii. Ja co prawda programuję na ATmega16 i procedura wygląda tak: void generator_PWM(unsigned int wypelnienie) { TCCR2 =0x69; //tryb FAST PWM, bez preskalera, zeruj OC0 gdy porownanie = TRUE; f = 16M/256 = 62,5kHz OCR2 = wypelnienie; //wartosc porownywana 0..255 } Jak zrobiłeś PWM na ATmega32 to z tego co wiem...
Witam. Postanowiłem sobie napisać na Atmegę8 sterownik do silnika BLDC wymontowanego z napędu CD. Częstotliwość obrotów jest regulowana enkoderem. Problem tkwi w tym że częstotliwość na wyjściach nie zgadza się z tą, którą obliczam. Żeby to sprawdzić do portu C podpiąłem diody zamiast silnika i widzę jak szybko migają. Poniżej wklejam kod. Mam ustawiony...
Nie, bo się nie wzbudzi.
while(1) { AD(); //obsluga ADC if(ADC>630) { PORTC=0X00; //wlacza,wylacza diode TIMSK |=1<<TOIE2; //ZEZWOLANIE NA PRZERWANIE OD T0 } } } Moze tak?
Zacznij od pokazania całego kodu. Jeśli korzystasz z przerwań, to najprawdopodobniej mikrokontroler nie wyrabia i powoduje opóźnienia. Policz sobie (BTW, przy OCR2 = 4, dostajesz 100kHz, popatrz na wzór, należy do OCR2 dodać jeden przed dzieleniem), przy częstotliwości 100kHz, procesor ma 10 taktów na obsłużenie przerwania, co na pewno trwa dłużej,...
ad 1. Dla timer 0 nie jest źle, bo masz preskaler i licznik jest 16-bitowy, więc wystarczy odpowiednio to skonfigurować i te 5 Hz uzyskasz. Timer 2 ijest tylko 8-bitowy, więc 5 Hz nie uzyskasz (chyba, że zwolnisz taktowanie MCU). ad 2. Zainteresuj się bitami COM, które definiują zachowanie wyjścia timera.
Czy da się generować przerwania od timer2 przy każdym przepełnieniu w trybie CTC? Próbuję generować częstotliwość w zależności od ustawienia potencjometru, ale timer generuje przerwanie tylko raz, cały program poniżej: OCR2 zostaje wpisana tylko pierwsza odczytana wartość zaraz po starcie programu, dalej już nie generuje przerwań. Po wrzuceniu " OCR2...
Najprościej jest to zrobić za pomocą sprzętowego licznika np: timer2. Należy ustawić go w trybie CTC-sygnał 36KHz pojawi sie w tym przypadku na nóżce PB3 (OC2) Po szczegóły odsyłam do noty katalogowej Atmega8 (rozdział na temat Timer2.
Z tego co porównuję z listingiem źródłowym z książki to masz kilka błędów: sprawdź: [syntax=basic4gl]Config Lcd = 16 * 2[/syntax] oraz umiejscowienie [syntax=basic4gl]Cls[/syntax] w pętli a u ciebie jest poza pętlą oraz wyrzuć konfigurację [syntax=basic4gl]Config Timer2 = Timer , Async = On , Prescale = 128[/syntax] sprawdź także ustawienia Fuse CKSEL3..0...
No i jeszcze trzeba ustawić Fusebity na kwarc zegarkowy. No akurat nie :D
Przepraszam że odkopuję temat ale miałem identyczny problem który po długich zmaganiach udało mi się rozwiązać, więc chciałem się z nim podzielić. Rozwiązaniem jest ręczne ustawienie rejestrów specjalnych odpowiadających za konfigurację PWM. Tak ja korrus666 napisał Bascom używa pewnie tych samych rejestrów do obsługi LCD i PWM z Timer2. Usuń linijke:...
Witam, Szukam i znaleźć nie mogę. Muszę wysterować serwomechanizm. PWM 50Hz i sterowanie wypełnieniem. Problem w tym, że w ATmedze8 Timer1 mam już nieodwołalnie zajęty(odmierza czas, steruje grzałką) chciałbym użyc Timera0 lub Timera2. Przy kwarcu 16MHz i trybie CTC PWM do rejestru OCR2 wpisuję wartość 155 dostaję 50Hz. Teraz moje pytanie: jak wysterować...
Timer2 nie ma 'edge detektora', więc na którym zboczu miałby zlicza impulsy? Timery działają, dlaczego miałyby nie działać? Widocznie jakoś producent zrealizował tę możliwość. Rzecz w tym że w tym trybie, wejście dostosowane jest do typowego oscylatora 32,768Hz, więc pozostałe parametry są niezbyt istotne, i mogą się dziać różne rzeczy. ;) Zrobiłem...
Zegarek oprócz funkcji wyświetlania czasu ma pokazywać temperaturę i mieć możliwość sterowania z pilota (RC5). Normalnie (by default) Bascom używa Timer0 dla RC5. Jeżeli Timer0 masz zajęty do inego celu, więc potrzebujesz skonfigurować Timer2 dla RC5. e marcus
Generalnie w takich przypadkach nota układu twoim przyjacielem. Poczytaj to co napisałem w komentarzach. [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> int main(void) { uint8_t i = 0; DDRD = 0xff; //TCCR2A |= (1<<WGM21)|(1<<WGM22); // źle ten tryb jest zarezerwowany TCCR2A |= (1<<WGM21) // CTC //TCCR2A |= (1<<CS20)|(1<<CS21)|(1<&l...
2 kanaly na timer1 a kolejne 2 na timer2 :]
Nie włączyłeś asynchronicznego typu pracy timer2 przykład: http://mikrokontrolery.blogspot.com/2011...
Witaj. Zamiast zewnętrznego PCF możesz wykorzystać timer2 z zewnętrznym kwarcem zegarkowym 32,768kHz. Dokładność ta sama, a koszty mniejsze.
Niekoniecznie... Kod jak najbardziej prawidłowy, sprawdzający stan wyjścia PORTD1 , chociaż optymalniej byłoby całość obsługi przerwania zminimalizować, usunąć to co już i tak wynika z automatycznej natury przerwań (cli/sei) i unowocześnić w/g manuala avr-libc :[syntax=c]ISR(TIMER2_COMP_vect){ PORTD ^= (1<<PORTD1) }[/syntax]
Witam, $regfile = "m8def.dat" $crystal = 8000000 Config Pinb.1 = Output Config Pind.1 = Output Config Timer2 = Timer , Prescale = 128 Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Disconnect , Prescale = 8 Cls Cursor Off Portd.0 = 1 Portd.1 = 0 Set Portd.4 On Timer2 Czas1s Dim Licz8ms As Byte Dim Wartoscpwm As...
Witam serdecznie zrobiłem zegar na w/w procesorze i wyświetlaczach 7 segmentowych led. Sekundę odmierzam z wykorzystaniem Timera 2 w trybie asynchronicznym z dodatkowym kwarcem 32,768Khz. Multipleksowanie wyświetlaczy realizowane jest za pomocą timera0. Do tej pory wszystko działa świetnie, Chciałbym jednak dodać jeszcze zliczanie setnych sekundy i...
Nie ma, timer2 na as i liczysz na piechotkę , oczywiście kwarc musi być podłączony (32768 na osci osco).
To co dawid512 napisał jest najprawdopodobniej na atmega32. Musisz poczytać dokumentację i zmienić ten kod, gdyż timer0 na atmega8 ma trochę mniejsze możliwości. [dodano] Można też skorzystać z timer2, jego obsługa będzie łatwiejsza.
OC2 to wyjście wykorzystywane przez Timer2 - nie Timer1. Wystarczy skonfigurować T2 - i po kłopocie... (Przestudiowanie noty katalogowej układu rozwiązałoby problem)
Witam serdecznie. Zazwyczaj większość problemów udaje mi się rozwiązać bez pisania na forum, jednak ten doprowadza mnie już do szewskiej pasji. Chcę zrobić zegarek na Atmega8A taktowanym wewnętrznym oscylatorem, z podłączonym kwarcem zegarkowym do wejść TOSC1/TOSC2 -bez powodzenia. Zawsze program staje na pętli http://obrazki.elektroda.pl/2670817700_1...
Uzupełniając to co napisał kol. niveasoft dodam, że zastosowanie kwarcu 32,769kHz ma sens w wielu przypadkach, jednakże nie jest lekiem na całe zło :) Można bowiem do taktowania mikrokontrolera zastosować kwarce, których podstawą (jak w przypadku kwarcu 32,768kHz) jest liczba dwa np. 1,8432MHz, 3,2768MHz ... 8,192MHz, ... 16,384MHz itd. Wtedy nie ma...
Witam Mam do zrobienia generator na atmedze w którym zadaję częstotliwość oraz wypełnienie sygnału prostokątnego. Udało mi się odpalić i generator i PWM z osobna ale mam problem z ich połączeniem. Chcę taktować Timer2 (na nim robię PWM) z wyjścia Timera1. Czysto teoretycznie wydaje mi się to możliwe ponieważ Timer2 może pracować w trybie asynchronicznym....
1. Jeżeli przy braku wysyłania nośnej 36kHz na wyjściu TSOP masz stan wysoki, a podczas wysyłania nośnej masz stan niski to znaczy, że jest OK. 2. W jakim celu tak komplikujesz funkcję przerwania wykonującą zmianę pinu na przeciwny - wykorzystaj ostatni kod z mojego poprzedniego postu. 3. Najważniejsza jest jednak uwaga BlueDraco dot. sensu machania...
100µA?!! Tosz zwykła ATMega8 pracująca jako RTC (Timer2 i wybudzanie co sekundę dla zinkrementowania daty) pobiera jakieś 8µA (przy 3V).
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...
ATmwga 8 ma 3 timery... 2x 8-bit i 1x 16bit... Timer2 może pracować z kwarcem zegarkowym... Timer1 jako PWM... A timer0 jako licznik...
Bo fizycznie są 2, tak? na pinie b.1 i b.2, tak? Jak narazie to są idee tylko, ale najbardziej przystępną wydaje mi się ta, aby z jednego kanału poprzez 2 tranzystory sterować przebiegiem, i w zależności od np wartości zmiennej-licznika, przełączać te tranzystory z jednoczesną zmianą rejestru wypełnienia, problem jest w tym że na jednym odbiorniku napięcie...
Natomiast w sytuacji gdy zarówno cały Timer2 jak i Usart robiony jest na przerwaniach tego problemu nie ma. Po to one są :) Powodzenia w dalszych pracach.
procek jedzie na 1MHz wew. zegarze. Rzecz w tym, że nie jest to sobie takie równe 1MHz, tym bardziej bez kalibracji. Jak chcesz dokładniej, to użyj Timer2 w trybie asynchronicznym z dodatkowym rezonatorem kwarcowym 32768Hz. Przejrzyj noty aplikacyjne AVR134 i AVR055.
Eeeee tam.... Jak to się nie da!? Przykład konfiguracji dla atmega8: Config Timer1 = Pwm , Prescale = 1 , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Config Timer2 = Pwm , Async = on , Prescale = 1 , Pwm = On , Compare Pwm = Clear Up Pwm1a = 255 Pwm1b = 255 Ocr2 = 255 Pozdrawiam.
Myślę że forum jest nie tylko po to by pytać. Kolega zdążył zamknąć wątek i napisał że Bascom nie pozwolił na skonfigurowanie Timera i musiał to zrobić na rejestrach. Nie wiedział jak, a ja chciałbym dla potomnych zostawić instrukcję. Dołączyłem ten post i odblokowałem temat. Tak to wygląda i się kompiluje: [syntax=basic4gl]$regfile = "m128def.dat"...
(at)nowyARM W zupełności się zgadzam. Tyle, że w przypadku atmegi 8 jest jeden problem - brak ICP. Cała rodzina tych procków ma ICP. Od Atmega8 do Atmega32: "PB0 ICP1 (Timer/Counter1 Input Capture Pin)" dla A8.
Witam Wszystkich, To mój pierwszy post na forum, jakoś jak do tej pory wszystkie odpowiedzi udawało się znaleźć. Ale pojawił się następujący problem: Wykorzystuje ATmega8 do sterowania trzema serwami (jeden timer-jedno serwo). Z samym sterowaniem na przyciskach wszystko jest ok i nie to jest problemem. Nie wiem jak sobie poradzić z transmisją danych...
ustaw sobie przerwanie od np. TIMER2 co 10ms i sprawdzaj 4 ostatnie stany przycisku. teoria: http://mikrokontrolery.blogspot.com/2011... powyższe zaadoptowane do A8: [syntax=c] //**************definicja przycisku************** #define _Key _BV(PD7) #define Key_PIN PIND #define Key_DDR DDRD #define Key_PORTPORTD...
Tylko jak teraz dopisać tą konfiguracje led? Tak jak chcaiłem z rgb zrobić
Kod w tagach umieszczaj, bo to nie jest czytelne. Ten kod nie ma obsługi termometru oraz daty. Nie sprawdzałem na poprawność kodu. Jeżeli ma to być na Atmega8 lepiej wykorzystać Timer2 na kwarc 32,768kHz jako wzorzec czasu. Data powinna mieć dzień tygodnia w formie całonazwowej oraz wykrywanie 30/31 dnia miesiąca oraz rok przestępny
Ustawienia z jakiegoś starego projektu: Config Timer2 = Pwm , Async = Off , Compare = Set , Pwm = On , Compare Pwm = Clear Up , Prescale = 1
Tryb CTC jest w atmega8 na timer1 i timer2, Jeżeli chcesz mieć dokładnie to zastosuj któryś z powyższych timerów. przy odpowiednim skonfigurowaniu timera może on automatycznie zmieniać stan na odpowiednim wyjściu. (dla timer 1 jest to OC1A/PB1 OC1B/PB2, a dla timer2 OC2/PB3) W trybie CTC nie musisz ciągle wpisywać wartości do TCCRx.
Witam. Na forum jestem nowy, ale Atmege8 gryzę już od roku:). Zakładam że czytałeś datasheet'a od Atmega8 i niestety nie udało Ci się zrozumieć.Jeżeli tak to Ci pomogę. Po pierwsze w Atmega8 masz trzy timery/countery: -Timer0 8bit -Timer1 16bit -Timer2 8bit Timer1 i Timer2 możesz wykorzystać jako PWM,gdyż mają wbudowaną taką funkcje. Wiadomo że 16bitowy...
Wewnętrzny oscylator RC jest mocno niedokładny. Z pewnościa musisz kupić zewnętrzny kwarc, ale na ATmedze8 32mhz raczej nie pociągniesz :P Bardziej zalecane jest jednak kupienie kwarcu zegarkowego 32.768 kHz i podłączenie pod piny TOSC1 i TOSC2 które wykorzystuje specjalnie dostosowany pod to Timer2 w trybie asynchronicznym. Wtedy uC można taktować...
TCCR1B &=~(_BV(CS12)) | ~(_BV(CS11)) Ww. zapis oznacza tyle co TCCR1B &= ~(1 << 2) | ~(1 << 1), to znowuż jest równoważne TCCR1B &= ~4 | ~2. W zapisie zerojedynkowym będzie TCCR1B &= 1111 1011 | 1111 1101, przy czym po wykonaniu operacji OR na tych ślicznych liczbach postanie z nich 1111 1111...
Hej. Po pierwsze Timer0 w atmedze8 nie ma PWM A więc do PWM możesz korzystać tylko z Timera 1 oraz Timera 2. Po drugie twój problem leży w nazwach poszczególnych rejestrów konfiguracyjnych atmegi 8 sprawdź w dokumentacji atmegi8 jak w rzeczywistości nazywają się rejestry TCCR0A, TCCR0B, OCR0A bo tego dotyczy komunikat błedu. Poza tym pamiętaj że port...
Jak ustawiasz wartości początkowe jak np. wyjścia portu w rejestrze DDR to nie musisz robić |=, wystarczy =. Dobry zwyczaj to także robienie tabulacji (Tab) w funkcjach, czyli: [syntax=c]if(...) { for(...;...;...) { ... } }[/syntax] Jest kod bardziej czytelny, ale to takie spostrzeżenia :wink: A Twój problem to wpisanie przerwania do głównej funkcji...
volatile? było by pomocne.
A po co ci 2 kwarce?
Jeszcze raz - rozróżnijmy obsługę zdarzenia ICP w przerwaniu od automatycznego jego zajścia. Nie ma konieczności obsługi w przerwaniu, ustawiamy tylkoTimer1 Top=ICP. Wystarczy czytać rejestr ICR co 25ms i jest to już gotowa wartość. Jeśli się nie trzymać ATmega8, to można sobie darować OVF i przejść na CTC w Timer0 (co daje większą dokładność pomiaru...
Ja osobiście nie mam problemów z przenaszalnością kodu w firmowym asemblerze Atmela, nawet pomiędzy różnymi wersjami rdzenia, gdyż są w nim wbudowane definicje pozwalającej na asemblację warunkową. Przykład - instrukcja lpm , zamiast której używam następujące makro: .macro LpmPlus #if ((__CORE_VERSION__==V2E)|...
uzyj szukaj. zaraz Freddie Chopin sie odezwie i bedzie sie z ciebie nabijal ( do Freddie Chopin nie przeszkadza mi to oczywiscie jak sie nabijasz nawet raz sie poplakalem ze smiechu z powodu twojej odzywki) I atmega8 nie posiada wewnetrznego rtc. Timer2 posiada jedynie tryb asynchroniczny
A tak w szczególe to na TIMER0 nie ma PWM w M8 . Jest natomiast na TIMER2
Użyj Timer'a 2 i wszystko będzie cacy. Pzdr. A piny to się konfiguruje tak: Config Pinb.1 = 1 a nie Portb.1. Przydaje się też wrzucenie linijki z def'em procka: $regfile = "M8DEF.dat", zresztą: $crystal = 8000000 $regfile = "M8DEF.dat" Config Timer2 = Timer , Prescale = 256 On Timer2 Przerwanie Dim A As Byte , B As Byte Config Lcd = 16 * 2 Cursor Off...
Witam, Mam problem z obsluga przerwan od przepelnienia licznikow. W projekcie wykorzystuje 3 liczniki w atmega8, timer2 wykorzystuje do generacji sygnalu 40kHz natomiast pozostale dwa maja zliczac czas od nadania sygnalu do otrzymania echa. Narazie napisalem osobną obsluge kazdego z timerow i dzialalo. Po wrzuceniu wszystkiego do jednego projektu dziala...
Tylko że impulsy masz podawać na wejścia INTx a nie na wejścia Timerów. Po za tym to Timer2 nie ma wejścia w ATMega8.
Tu masz kod który korzysta z przerwań i co 1 sekundę ustawią zmienną s1_flag na 1. Musisz pamiętać, aby ją w funkcji głównej zerować, bo tak cały czas będzie ona usttawiona na 1. Ten kod jest tylko poglądowy, ma ci tylko przybliżyć co i jak z przerwaniami. [syntax=c]int main(void){ volatile uint8_t s1_flag, /********** KONFIGURACJA TIMERA2 do wygenerowania...
Kiedyś zrobiłem zegarek analogowy na ATmega8 wykorzystując do tego Timer2 atmegi i kwarc zegarkowy, nie będąc pewny czy z tego projektu coś wyjdzie, zaprojektowałem PCB tak żeby tylko nie pomylić pinów I/0 z pinami zasilania. Z tego powodu mogłem później zegarek wprowadzić tylko w płytkie uśpienie (Idle Mode). Testując działanie zegarka nie zauważyłem...
To wszystko zależy jak duże chcesz miec tętnienia na wyjściu filtru. PWM zmienia cały czas napięcie pomiedzy zerem i 5V. Aby otrzymac tętnienia tylko 5mV musisz stłumić sygnał PWM 1000 razy. Ponieważ pojedynczy filtr RC tłumi 10 razy na dekade, to czestotliwosc filtru musi byc 1000 razy mniejsza od czestotliwosci PWM. Wiec jesli uzyjesz atmega8 i kwarcu...
Wpisz większą wartość do OCR1A, przerwanie wtedy musi wywoływać się rzadziej albo zrób tak jak czasami robię kiedy procek działa za szybko a potrzebuję mieć przerwanie rzadziej; zadeklaruj zmienną globalną, np: uint8_t licz = 0; SIGNAL(TIMER2_COMPA_vect) { licz++; if(licz >= 10) //liczba przykładowa, zależy jak często chcesz...
Przede wszystkim to zastanów się dlaczego do generowania nośnej usilnie chcesz pisać jakiś kod programu i obciążać tym program główny procesora, skoro można to zrobić CZYSTO sprzętowo za pomocą timera. Tylko nie Timera0 bo ATmega8 jest biedna w porównaniu do ATmegai88 gdyż timer0 nie posiada w niej trybu CTC. Tymczasem masz jeszcze timer2 i wystarczy...
Co do T0 - jeśli potrzebujesz określoną liczbę impulsów, to prościej zmienić tryb pracy T0 i zmienić wartość top do której zlicza licznik. To też szczegół, ale jeśli coś się da zrobić hardwarowo... W ATmega8 nie ma takiej możliwości, Timer0 nie ma trybu CTC. Można użyć Timer2, jeśli nie jest zajęty... :P
[syntax=c]ISR( TIMER2_COMP_vect) { TCCR1B |= (1<<WGM12) | (1<<CS10) ; //ustawienie Timera1 w trybie CTC, preskaler 1 OCR1A = 80; //dopelnienie do 80 TIMSK |= (1<<OCIE1B); } ISR (TIMER1_COMPB_vect) { static uint8_t cnt; if (cnt>=pwm0) PORTB &= ~(1<<PB0); else PORTB |= (1<<PB0); if (cnt>300) {TCCR1B &= ~(1<<WGM12)...
Witam! Zauważyłem dziwne zjawisko: Generuję np: 10000 impulsów na jednym pinie za pomocą timera0, a na innym pinie również 10000 impulsów za pomocą timera2. Oba timery są 8-bitowe i oba ustawione są na ten sam preskaler TCCR=5 ; i oba mają tą samą wartość TCNT=5. Generację zaczynam w tym samym czasie i o dziwo mam różne częstotliwości przebiegów. Dlaczego...
A gdzie masz obsługę przerwania CTC od Timer2 ?
A jeżeli chodzi o obliczenia to zobacz jak jest w przykładzie z timerem1 w pierwszym programie, preskaler ustalony wraz z wpisem do rejestru timera by zgłaszał przerwanie co 1s Napisałem szybki soft do RTC w atmega8, oczywiście timer2 taktowany asynchronicznie z XTAL reonatorem zegarkowym 32768 Nie będę opisywał co jest z czego, sprawdz w help bascoma...
Moje pytanie brzmi czy mogę pogodzić precyzyjny odczyt z ADC (z uśpieniem) i dokładny timer czy muszę wybrać albo precyzyjne ADC i niedokładny timer albo standardowy odczyt z ADC i dokładny timer? Timer1 jest taktowany przez prescaler z CLK_I/O, a podczas 'ADC Noise Reduction' , ten zegar jest nieaktywny/ wyłączony. Patrz tabela14 w datasheet; w której...
Myślę o czymś innym: Timer2 dekrementuje do zera stan jakiegoś licznika, aby odmierzać 180s, potem znowu wpisuje pierwotną wartosc i tak w koło. Timer1, taktowany 100Hz sieci, po przepełnieniu zeruje wartość licznika timera2 i wpisuje wartośc pierwotną, skracając lub wydłużając cykl timera2, jak nie ma 100Hz, nie ma synchronizacji, ale timer2 działa.
Na schemacie są 4 bramki, do pomiaru prędkości chwilowej i średniej. Czy jednym Timerem można mieć niezależny pomiar czasu z 2 par bramek, czy trzeba użyć 1 timera na 1 parę bramek? Timer2 ma inny rejestr, tak?
Dla m8 polecam ustawić Timer2 w tryb CTC. Jak to zrobić znajdziesz w datasheecie.
Która atmega? W atmega8 możesz użyć: Timer0 - odmierzanie czasu Timer1 - zliczanie impulsów Timer2 - PWM
Atmega 8 obsługuje Timer2, używam w trybie asynchronicznym.
Timer2 pracuje w trybie CTC - po zrównaniu z OCR2 zeruje się.
Wykorzystaj Timer2 w trybie asynchronicznym z kwarcem 32,768kHz.
Nie wiem tylko o co chodzi z tym CTC $regfile = "m8def.dat" $crystal = 1000000 Config PortB = Output Config Timer2 = Timer , Prescale = 8 , Compare = Toggle , Clear Timer = 1 Enable Interrupts Enable Timer2 Do Loop
Klasa TwoWire (której obiektem jest Wire) też używa przerwań. Po wejściu do ISR przerwania są blokowane. Jeżeli chcesz, aby dane ISR nie blokowało innych przerwań można użyć ISR_NOBLOCK:[syntax=c]ISR(TIMER2_OVF_vec... ISR_NOBLOCK) { ... }[/syntax]Byłbym jednak z tym bardzo ostrożny, ponieważ może przydarzyć się przepełnienie stosu. https://www.nongnu.org/avr-libc/user-man...
Przytoczę tu słowa z książki Marcina Wiązania. W uC atmega8 jest możliwe taktowanie licznika timer2 w trybie asynchronicznym z zewnętrznym rezonatorem kwarcowym tylko wtedy, gdy sam mikrokontroler jest taktowany sygnałem wewnętrznym oscylatora RC. W takim przypadku precyzja odmierzania czasu przez timer2 zależy od oscylatora kwarcowego 32768 Hz, a nie...
(at)seba_x:A co to za bzdura?:> • Peripheral Features – Two 8-bit Timer/Counters with Separate Prescaler, one Compare Mode – One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode A co do pytania autora, nie, zliczanie umożliwiają tylko dwa pierwsze timery. Trzeciego można używać jako wewnętrznego. Nie tylko...
Proszę szanownych kolegów o potwierdzenie mojej koncepcji; Atmega8 z kwarcem 4.194304MHz, Timer2 konfiguruję na CTC z presk.1024 co daje mi 4096Hz Do timera2 wpisuję 127 i na OC2 mam 32Hz (31,25ms) Teraz te 32Hz podaję na T1 timera1 (16bit) skonfigurowanego jako CTC z ext.source, i z wpisaną wartością 1919. Na wyjściu OC1 stan zmieniać się będzie co...
Jakies sugestie?? Jeżeli to już cały kod , to co robią w nim te dwie instrukcje :?: Enable Timer2 Enable Timer1 Piotrek
Witam Dziękuje za rade szczególnie koledze mirekk36.Udało sie skonfigurować timer2 do obsługi rc5.Wszystko działa OK.
no i ponieważ ma to być czasomie rz jak to zresztą napisali potrzebuje jak tak wiedzieć ile ma ten przebieg zegarowy (czyli jego częstotliwość) abym potem mógł sobie to przeliczyć na sekundy minuty itp albo podajcie inny sposób na zmie rz enie pewnego odcinka czasu Na jakiej dokładności tobie zależy ? Jeżeli to miałby być dokładniejszy zegarek, to...
W datascheet ATmega8 na stronie 112 jest wzór na częstotliwość PWM dla Timer2: fPWM=fCLK/N*510 gdzie N to preskaler. 8000000/1*510=15686Hz
Witam Czy może ktoś już rozpracowywał taki pilot ? http://obrazki.elektroda.net/17_12306796... Nie ma na nim żadnej nazwy, jest od transmitera ukf do samochodu także o bliżej nie określonej nazwie firmy. Posiadam odbiornik TSOP34836 podłączony do portu INT0 wg standardowej aplikacji (kondensator i 2 rezystory przy odbiorniku) czy on będzie dobry...
Timer1 ma dwa kanały, a Timer2 jeden kanał. Włączyłeś tylko jeden z dwóch kanałów w Timerze1 ustawiając bit COM1A1 w rejestrze TCCR1A, drugi włącza się analogicznie ustawiając bit COM1B1 w tym samym rejestrze. Wypełnieniem sterujesz przez odpowiednio rejestry OCR1A i OCR1B. Timer1 jest 16-bitowy, więc maksymalną wartością jest dla nich 65535, Timer2...
timer2 w ciągu 10 minut późni się o jakieś 12 sekund, a timer0 zdaje się nie reagować na wartość początkową wpisaną do rejestru TCNT0 Z zegarem wewnętrznym 12/600 = 2% porównaj z DS. A timer 0 reaguje, tylko Ty nie dostrzegasz różnicy 131 cykli na 10 minut -) Tą wartość to jakby nie tylko raz trzeba było wpisać. Albert
No dobra,po przeczytaniu PDF już trochę zrozumiałem i ustawiłem sobie TIMER2 w ten sposób: [syntax=c] Taktowanie kwarcem zewnętrznym: 11059200 TCCR2 |= (1<<WGM21); // tryb pracy CTC TCCR2 |= (1<<CS22)|(1<<CS21)|(1<&l... // preskaler = 1024 OCR2 = 54; // przerwanie porównania co 5ms TIMSK = (1<<OCIE2); // odblokowanie...
Mam to już zrobione... Chodzi mi o resztki, tzn. Wiem że ten timer porównuje mi się z wartością OCR1A = 31250; i tutaj jest myk. Gdzie jest ta druga wartość ? coś == OCR1A, te "coś" chce wyzerować. [syntax=c] ISR(INT0_vect) //Uchwyt wektora przycisku ABORT { TCCR1B = 0; // wyłącz odliczanie TCCR2 = _BV(CS20) | _BV(CS21) | _BV(CS22);// prescaler 1024...
Ad 1 i 3: Jeśli pytasz o ATmega8, to timerem asynchronicznym jest (jak napisałem powyżej) Timer2. Posiada on dedykowany temu kwarcowi (32,768kHz) oscylator. W przypadku tego mikrokontrolera niestety piny XTAL i TOSC są tymi samymi pinami. W innych przypadkach np. ATmega32 piny te są wydzielone więc można dwa kwarce podłączyć. Szczegóły w tym zakresie:...
........, a podpowiedzcie mi jak mogę obsłuzyc Rc5,serwo i pwm? Pozdraiwam Dla obsługi RC5 i kontroli serva użyłeś w sumie 2-ch timerów... ATMega8 posiada wbudowane 3 timery , zastosuj więc ten trzeci do 'produkcji' PWM''. Jeżeli ten ostatni (dotychczas wolny) jest Timer1, to ma on dwa kanały dla PWM, na których możesz generowac praktycznie dwie różne...
timer2 atmega8 atmega8 timer2 zegar przerwania timer2
zamiana źródła prądu prądnica tacho bosch golden interstar xpeed
samsung le37b650 przyczepa kampingowa
Grzyb na ścianie – czujniki wilgotności, SHT35, Si7021, osuszacze, farby antygrzybiczne Bojler Zelmech nowy – nie grzeje wody, brak podgrzewania, diagnostyka usterki