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.
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...
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...
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,...
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.
Błąd algorytmu ! Jeżeli jest prawdą DZ_FIRE i key_dz_fire==0 zerujesz liczniki i zapalasz diodę i ustawiasz key_dz_fire na 1. Oznacza to że w następnych przebiegach pętli głównej nie masz szansy dotrzeć do warunku if(fire_isr==dzialko) bo go odcina nie spełniony warunek if(key_dz_fire==0). Brak jest zerowania flagi DZ_FIRE żeby była szansa wykonania...
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); } }
Nie mogę się doszukać, czy do Atmegi8 można podłączyć jednocześnie obydwa kwarce? (czyli 8MHz i 32768Hz dla Timer2)
No i jeszcze trzeba ustawić Fusebity na kwarc zegarkowy. No akurat nie :D
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, 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?
2 kanaly na timer1 a kolejne 2 na timer2 :]
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ć...
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...
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...
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.
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
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. 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...
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...
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.
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...
Nie ma, timer2 na as i liczysz na piechotkę , oczywiście kwarc musi być podłączony (32768 na osci osco).
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)
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...
W dokumentacji są parametry VIL1 i VIH1, ale nie testowałem takiego sterowania Timer2 jak chcesz zrobić. Jak przetestujesz, to napisz proszę wnioski.
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:...
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.
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...
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...
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...
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]
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.
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.
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...
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.
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 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....
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...
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...
100µA?!! Tosz zwykła ATMega8 pracująca jako RTC (Timer2 i wybudzanie co sekundę dla zinkrementowania daty) pobiera jakieś 8µA (przy 3V).
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...
Witam Mam problem z Atmega8 (taktowanie kwarc 16MHz) i timer2, na początek program: [syntax=c] void timer2Init(){ OCR2 = 0x01; // TCCR2 |= (1 << WGM21); // tryb pracy CTC TCCR2 |= (1 << CS21); // preskaler = 8 TIMSK |= (1 << OCIE2); // Odblokowanie przerwania CompareMatch } #define startTimer() uSeconds=0;TCCR2 |= (1<<CS21);...
A tak w szczególe to na TIMER0 nie ma PWM w M8 . Jest natomiast na TIMER2
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ć...
Witam serdecznie, Doczytałem ostatnio to czego nie doczytałem wcześniej, temat mi się znacznie bardziej rozjaśnił. Potrzebuję aby ktoś lepszy potwierdził co ustaliłem: Do budowy zegara użyję: Timer2 AtMega8 taktowany asynchronicznie z oscylatora wewnętrznego (low freq. osc.) stabilizowanego zewnętrznym kwarcem 32,768kHz podłączanym pod piny TOSC1 i...
Ustawienia z jakiegoś starego projektu: Config Timer2 = Pwm , Async = Off , Compare = Set , Pwm = On , Compare Pwm = Clear Up , Prescale = 1
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.
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)|...
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...
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...
Tylko jak teraz dopisać tą konfiguracje led? Tak jak chcaiłem z rgb zrobić
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...
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...
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.
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.
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...
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?
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
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...
volatile? było by pomocne.
A gdzie masz obsługę przerwania CTC od Timer2 ?
A po co ci 2 kwarce?
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
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...
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
Dla m8 polecam ustawić Timer2 w tryb CTC. Jak to zrobić znajdziesz w datasheecie.
Atmega 8 obsługuje Timer2, używam w trybie asynchronicznym.
[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)...
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...
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...
Timer2 pracuje w trybie CTC - po zrównaniu z OCR2 zeruje się.
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...
Wykorzystaj Timer2 w trybie asynchronicznym z kwarcem 32,768kHz.
Jakies sugestie?? Jeżeli to już cały kod , to co robią w nim te dwie instrukcje :?: Enable Timer2 Enable Timer1 Piotrek
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
Witam Dziękuje za rade szczególnie koledze mirekk36.Udało sie skonfigurować timer2 do obsługi rc5.Wszystko działa OK.
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...
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...
(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...
Cześć postanowiłem dokończyć program odstraszacza szpaków, który mam zamiar zamontować na drzewku z czereśniami :) Z tego co wyczytałem to te ptaki przyzwyczajają się do stałej częstotliwości odstraszacza, więc musiałbym napisać funkcję losującą częstotliwość z pewnego zakresu. Regulację wypełnienia i częstotliwości chcę wykonać poprzez timer2 w atmega8,...
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...
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...
Która atmega? W atmega8 możesz użyć: Timer0 - odmierzanie czasu Timer1 - zliczanie impulsów Timer2 - PWM
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...
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
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"...
Witam! dymbol1992 : Dzięki za życzenia. Mogę sprzedać Ci cały zegar lub tylko sam zaprogramowany uC. Pisz na PW aby nie zaśmiecać tematu. kiler88 : Jakbyś dokładnie obejrzał film prezentujący zegar to byś wiedział. W pierwszym rzędzie masz godziny, 2 rząd minuty, 3 rząd sekundy. korrus666 : Zgadzam się z tobą w 100%. Tylko jak bym mógł to bym tak zrobił,...
Niech sie wypowie ktoś, kto dobrze zna Atmega. Odpowiedź została już udzielona w postach moim i niveasoft. Aby rozwinąć temat kwarcu zegarkowego na pinach TOSCx dla Timer2: http://mikrokontrolery.blogspot.com/2011... http://mikrokontrolery.blogspot.com/2011...
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
Nie możesz tylko używać Timera2 do innych celów, bo właśnie jest on używany przez RC5 Funkcja GETRC5 domyślnie wykorzystuje Timer0 a nie Timer2. Oczywiście można to zmienić w konfiguracji, jednak autor tego nie czyni.
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...
........, 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...
No i nie będzie działać. Dwa razy zmieniasz ten sam rejestr(TCCR2A), a używasz tam operatora przypisania:[syntax=c]=[/syntax] zamiast operatora sumy bitowej:[syntax=c]|=[/syntax]więc poprzednia wartość rejestru jest tracona. Edit: W dodatku nie spojrzałeś do datasheetu, w którym jest wyraźnie napisane, że bity CS20,CS21,CS22 należą do rejestru TCCR2B.
atmega8 timer2 zegar przerwania timer2 timer2 atmega32
ustawienie rozrządu deutz wiertła widiowe volvo silnika
philips senseo sterownik ładowarki akumulatora
Optymalizacja ustawień pieca Termet Silver Pro 20 kW Schemat przetwornicy step-up: kluczowe elementy i zasada działania