Myślę, że masz 2 problemy. Po pierwsze używanie OR w liniach inicjujących rejestry mści się na Tobie. Po drugie brak ustawionego BOD.
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
W TCNT2 jest aktualna wartość timera2.
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,...
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...
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.
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...
Nie, bo się nie wzbudzi.
No to jest źle podłączony. Powinien być podłączony do pinów TOSC1 i TOSC2. Dlatego zamiast takich tekstów: Kwarc jest podłączony do odpowiednich nóżek i jest sprawny lepiej od razu pokazać schemat :D W Atmega8 XTAL1/2 to te same nóżki co TOSC1/2 (dlatego tam Ci jeszcze działało), w ATMega16 już nie.
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...
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...
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...
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...
Nie ma, timer2 na as i liczysz na piechotkę , oczywiście kwarc musi być podłączony (32768 na osci osco).
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...
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...
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.
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. 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...
Ok, a jak to się będzie miało do samego programu napisanego na 1Mhz ? Nigdy jeszcze z zewnętrznym kwarcem do czynienia nie miałem. W jaki sposób należy programowo z niego skorzystać? Normalnie Timer2 jest taktowany z tegosamego zegara co microkontroller. Aby uzyskac taktowanie z rezonatora 'zegarkowego' podłączonego do pinów XTAL1/XTAL2, potrzebujesz...
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...
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...
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...
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...
W trybie IDLE oraz POWER SAVE można użyć Timera2. W IDLE Timer2 może być taktowany synchronicznie jak i asynchronicznie. Tryb POWER SAVE takiej możliwości nie daje bo clkI/O jest zatrzymany. Zatem w tym trybie licznik może być taktowany wyłącznie asynchronicznie. Dodatkowo występują tu pewne niuanse opisane w datasheet ATMega8L na str. 34-35. Możesz...
Te procesory się aż tak nie różnią. Dodatkowe funkcjonalności pinów nie przeszkadzają w niczym dopóki ich nie uruchomisz. (PCINT - Pin Change Interrupt trzeba wiedzieć jak włączyć). Jest duża różnica jeśli chodzi o Timery właśnie. Mega8 ma na przykład tylko jeden rejestr Compare dla Timer2 dlatego inaczej się nazywają. Opisałem to u siebie na stronie...
Witam ogarnąłem już dużo na temat programowania w bascom, tylko mam kolejny problem, mianowicie chciałbym zaprogramować obsługę serwa pilotem nadającym w RC5 lecz gdy połączę obsługę rc5 i serwa mam takie błędy i nic nie działa: ........ Pojedynczo programy działają ok. ................. Rc5+ servo (nie działa) Pozdrawiam. Zauważ że zarówno 'Config...
Witam, chciałbym przy użyciu Atmega8 i zewnętrznego kwarcu odmierzać i zliczać setne części sekund, sekundę mogę łatwo wyłapać z timera1 według przykładowych obliczeń 4000000MHz / 256 = 15625 65536 - 15625 = 49911 lub 8000000Mhz / 256 = 31250 65536 - 31250 = 34286 Nie mam jednak pomysłu jak....... Z góry dziękuję za pomocne wypowiedzi. Aby odmierzac...
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ć...
Szukając rozwiązania mojego problemu napotkałem na rozwiązanie timera2 w pracy asynchronicznej. 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 ??
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 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....
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...
Tylko jak teraz dopisać tą konfiguracje led? Tak jak chcaiłem z rgb zrobić
A po co ci 2 kwarce?
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...
http://obrazki.elektroda.pl/9589280700_1... HPS 2014 Hybrydowy laboratoryjny zasilacz sieciowy. Parametry użytkowe zasilacza w skrócie: 1. Wykorzystanie tanich i łatwo dostępnych elementów. 2. Wydajność prądowa min 3A (dla niskich napięć może dochodzić do 5A). 3. Rozdzielczość DAC 12bit. (filtrowany PWM 4.9kHz) 4. Rozdzielczość ADC...
(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.
Nie, po prostu pomijasz detekcję przejścia przez zero :) Albo inaczej - w przerwaniu przejścia przez zero olewasz przesunięcie fazowe, a liczysz po prostu okresy/półokresy. W efekcie np. na każe 100 zliczonych przejść ustawiasz włączenie triaka na zadaną liczbę detekcji - np. 50% to będzie 50 przejść przez zero z włączeniem triaka i kolejne 50 bez...
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); } }
Zacznijmy od tego, że w Tiny2313 nie ma ADC więc tu pytanie jest bezprzedmiotowe :D W Tiny261 timery są ciut nowsze niż w przypadku Mega8 i Tiny13. Wystepują tam już podwójne rejestry dla Timera0. Są to odpowiednio A i B czyli COMPARE 0 A i COMPARE 0 B. Zero odbosi się właśnie do Timera 0 Ogólnie dla nowszych prockow AVR jest to normą że tych rejestrów...
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"...
Mam taki program. Niestety coś jest nie tak bo nie jest w ogóle triak wyzwalany. Podejrzewam że coś nie tak jest z wyzwalaniem przerwania lub timera. Program był pisany na atmega8 ja mam arduino UNO więc trochę go przerabiałem i chyba coś spaprałem. zerknijcie proszę... [syntax=c] #include <avr/interrupt.h> #include <avr/io.h> #define LICZBA_KROKOW...
Jakie dałeś kondensatory? Lepiej dać ckopt=0 i wywalić je stamtąd. Kwarce 32.768 pracują z mikrokontrolerami, nawet Timer 2 jest do tego przystosowany :) Dodano po 50 Nie znam się na bascomie ale spróbuj dodać linię: Config Timer2 = Timer , ASYNC = 1 , Prescale = 128 Kondensatory 24pF. CKOPT = 0 też próbowałem. ATmega8 podstawiona. Dzięki za podpowiedź,...
Potrzebuje zmierzyć częstotliwość w zakresie do 200kHz(w tym przypadku 3,2MHz) procek: to ATmega8 Kombinuje jak koń pod górę, na czym polega mój błąd ? Timer 2 odmierza czas 1s. Timer 1 w założeniu ma zliczać impulsy z zewnatrz. (wartość 0xFF w OCR1A,-impulsy dochodzą z T1,-po zrównaniu TCNT1H/L zerują się-i cykl się powtarza.) Oróż Timer2 wchodzi w...
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...
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...
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.
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
hehe kompiluje sie dzieki. Bo wiem ze w attiny2313 rejestry samemu trzeba ustawiac, myslalem ze z atmega8 bedzie podobnie. Jeszcze raz wielkie dzieki zamykam temat
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ęć...
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 Z ciekawości uruchomiłem czujnik MPU6050, kod wykorzystałem z jednej z niemieckich stron - poniżej. Nie jestem pewien, czy kod jest poprawny, bo wyniki są bardzo "ruchliwe". Tzn. gdy płytka czujnika leży nieruchomo na stole to wyniki się zmieniają i o to sporo. Przykładowo: Accx zmienia się od np 10 do 270 Accy cały czas jest duże - nawet ponad...
Witam, Piszę program w C. Procek ATmega8 taktowany zewn kwarcem 16MHz i fusy oczywiście przestawione prawidłowo. 1. Ustawiam sobie Timer2 w tryb CTC 2. Ustawiam preskaler na 8 3. Ustawiam OCR2 na 20 4. Odblokowuję przerwanie CompareMatch dzięki czemu uzyskuję przerwanie co 10us w przerwaniu mam zmienną (licznik) którą inkrementuję do 999 i znowu na...
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.
Nawet prosty projekt przynosi dużo satysfakcji :) Drobna uwaga: ATmega8 wykorzystuje wewnętrzny oscylator RC pracujący na częstotliwości ok. 8 MHz. Wiadomo, że oscylator RC nie nadaje się do bycia wzorcem czasu. W projekcie wzorcem jest kwarc 32 kHz podłączony do układu RTC DS1307. Układ ten zapewnia również ciągłe odmierzanie czasu w przypadku utraty...
A tak w szczególe to na TIMER0 nie ma PWM w M8 . Jest natomiast na TIMER2
Na podstawie informacji od Artura sprobowalem uruchomic 2 timery - Timer2 do obslugi przyciskow i Timer0 do obslugi wyswietlacza 7-seg. Kod jest nastepujacy: [syntax=c]//======== Obsluga timera0 ======// timer0counter = 0; TIMSK=1<<TOIE0; //ZEZWOLANIE NA PRZERWANIE OD T0 TCCR0=(1<<CS00)|(1<<CS02); //presklaler dla licznika 1024 ->...
Witam, zrobiłem wysyłanie danych z MK do komputera kod jest wzięty od książki z strony atnela http://obrazki.elektroda.pl/8373175900_1... Co robię nie tak, chyba że jest ok a ja to źle interpretuję, wydaje mi się, że napis powinien się pojawić linijka po linijce. Pozdrawiam
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...
A gdzie masz obsługę przerwania CTC od Timer2 ?
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...
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...
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?
Która atmega? W atmega8 możesz użyć: Timer0 - odmierzanie czasu Timer1 - zliczanie impulsów Timer2 - PWM
Wykorzystaj Timer2 w trybie asynchronicznym z kwarcem 32,768kHz.
Jakiej wersji kompilatora używasz? Get RC5 domyślnie używa timera0 a Atmega8 to nie to samo co Atmega88 i timery są inne, inne rejestry sterujace. Zobacz do noty np. Timer/Counter Control Register TCCR0 w ATMega8 steruje preskalerem a w ATMega88 TCCR0B Timer/Counter Control Register B, dwa różne rejestry inne adresy, różne też są flagi zdarzeń timerów...
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.
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...
Wzbogaciłem mój program o to żeby odliczał jedną minute(praca jest wyświetlana na dwóch wyśw 7 segm.), oto kod: #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> /* cyfry na wyświetlaczu 0 0b10000001 129 1 0b11010111 215 2 0b01001001 73 3 0b01000011 67 4 0b00010111 23 5 0b00100011 35 6 0b00100001 33 7 0b11000111...
Poniższy kod reguluje jasność podświetlenia LCD, więc dla potrzeb silnika musisz go przyspieszyć. timer0 w trybie PWM (do sterowania prędkością silnika): [syntax=c] //Konfiguracja TIMER0 w trybie PWM TCCR0 |= (1<<WGM01) | (1<<WGM00);// TRYB FAST PWM TCCR0 |= (1<<COM01) ; // Clear OC0 on compare match, set OC0 at BOTTOM,(non-inverting...
W ATMEGA8 od rezonatora 32768Hz trzeba podłączyć kondensatory jakieś 33p idące do masy, bo te wewnętrzne nie działają. Przynajmniej tak mi się wydaje. Rpal, wyjaśnij mi tej kod w obsłudze przerwania bo nie pojmuję: TCNT2=0x0A;
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...
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...
Witam Chciałem uzyskać pracę asynchroniczną (licznik sterowany kwarcem zegarkowym, procesor generatorem wewnętrzym). Napisałem prosty program (miganie diody LED co 1s): $regfile = "m48def.dat" ' plik danego mikrokontrolera $crystal = 8000000 'częstotliwość generatora wewnętrznego Config Portb.0 = 1 'wyjście dla LED Portb.0 = 1 Enable Interrupts 'odblokowanie...
Rób od razu gadającą hahahaha :D [url=http://evertdekker.com/Joomla/index... (dzwięki sa w tanim eepromie I2C) ..a tu kawałek funkcji losującej. Dla lepszego "mieszania" użyto jako wartości wejsciowej stanu Timera [syntax=basic4gl]Do ___rseed = Timer2 'Random generator is seed with timer2...
(...) timer1 wykorzystałem do multipleksowania wyświetlaczy, timer2 odpowiedzialny jest za odliczanie czasu asynchronicznie a timer0 służy do odbioru komend w RC5. Gdyby użyć jakiś zewnętrzny zegar RTC to by zwolnił ci sie jeden timer2. Zaś jako czujnik oświetlenia można by było użyć którejś z diod LED, wykorzystująć ją jako FOTODIODĘ. Pozdrawiam
Dla wyższych zakresów (10 sek i więcej) możesz podpiąć zewnętrzny kwarc zegarkowy - 32768Hz. Wtedy dokładność pomiaru wzrośnie o kilka rzędów wielkości. Podłączasz pod piny TOSC1:TOSC2, ustawiasz Timer2 i gotowe. Dla niższych <10sek, zostaw stare rozwiązanie
Lepiej użyj zewnętrznego kwarcu "zegarkowego" 32.768kHz podłączonego pod TOSC1 i TOSC2. Impulsy zliczasz w TIMER2 który jest specjalnie do tego przystosowany. A zyskasz dużą dokładność zegarka.
Fusebity jeżeli to ma działać na zewnętrznym kwarcu to jednak trzeba zmienić... Dziwne, przecież ATmega8 fabrycznie ustawiona jest na wewnętrzny oscylator 1 MHz. Chyba, że automatycznie wykrywa podłączony kwarc, ale nic mi na ten temat nie wiadomo. Atmega nie jest taktowana tym kwarcem dlatego nie zmieniamy fusebitów. Tylko timer wykorzystuje ten kwarc....
prescale 256 miałem dlatego że najpierw używałem timer0 a później zmieniłem na 2 a nie zwróciłem uwagi że timer2 ma prescale =128. a ja to robiłem ładując do niego 128 wiec i tak liczył poprawnie. Ale w atmega8 , w 168 nie działa mi zewnętrzny kwarc który oczywiście jest podłączony
więc tak, schemat i fotka: http://obrazki.elektroda.pl/2310798200_1... http://obrazki.elektroda.pl/4708784000_1... wszystko działa, tylko tak jak pisałem z jakiegoś powodu procesor co jakiś czas wraca do początku maina. wszystkie zmienne zostają zresetowane, wpomniany MCUCSR nie rejestruje resetu. i dodam jeszcze kod...
Witam ponownie Zrobilem tak : ustawiam jedna z koncowek portu procesora, co jest sygnalem dla pozostalej czesci ukladu do rozpoczecia generowania impulsu. W tym samym czasie uruchamia sie Timer2 zaczyna sie zliczanie przepelnien. Po zakonczeniu impulsu jego opadajace zbocze jest zrodlem przerwania INT1, co powoduje zatrzymanie Timer2. Teraz mnoze ilosc...
Witam... W przypadku ATmega8 kwarc 32,768kHz (zegarkowy) podpina się pod TOSC1 i TOSC2 te same piny co do "normalnego" kwarcu... Tak więc można wtedy albo popędzać uC z wewnętrznego generatora i ustawić timer2 do pracy w trybie RTC z kwarcem zegarkowym... (dokumentacja str 117)... Można też taktować uC kwarcem 32,768kHz... z tego co pamiętam... Z tego...
Witam, Potrzebuję wykonać prosty układ z przekaźnikiem, który mierzy temperaturę i w zależność od jej wartości zmienia stan przekaźnika, po czym układ ma przejść w stan oszczędzania energii na czas 5 sekund, po tym czasie ponownie ma wykonać wcześniejszą czynność. Sam pomiar temperatury i sterowanie przekaźnikiem są bardzo proste, ale nie wiem jak skonfigurować...
Witam Mam pewien problem z odmierzaniem czasu za pomocą ATmegi. założeniem był prosty licznik czasu pracy urządzenia. Za pomocą timera odliczam określony czas po przepełnieniu timera zwiększam zmienną w pętli tak żeby uzyskać sekundę, następnie kolejna pętla zwiększająca minuty itd. Użyłem Atmega8 częstotliwość taktowania to 8MHz z wewnętrznego źródła....
No właśnie Atmega8 ma dwa timery, na nóżce 6 i 11mozna zliczac impulsy, a w dokumentacji czytamy: Two 8bit counters One 16bit counter Czyli ten trzeci na której nóżce moze zliczać? Normalnie sie go używa jak innych? Config Timer0 = Counter , Edge = Rising Config Timer1 = Counter , Edge = Falling Wystarczy wpisac? Config Timer2 = Counter , Edge = Rising...
Mam pytanie czy jest możliwość sterowania PWM1a i PWM1b osobno tzn nadać dla PWM1a Prescale 64 a dla PWM1b Prescale 8 ? Mam taki kod [syntax=basic4gl]Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 64 Config Timer2 = Pwm , Async = Off , Pwm = On , Compare Pwm = Clear Up , Prescale = 1[/syntax][/code]
Nie wiem czy ktoś uczy wróżenia z kodu. Niestety nie wiem co to polling. Zamieszczam jednak kod uproszczony z obszerniejszymi komentarzami i z jednym (głupim) błędem mniej [syntax=c]#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <avr/iom8.h> // definicje zmiennych do sterowania 3 kanałami programowego...
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 Heh, dziwne... U mnie w Datasheet dla Mega8 na tej samej stronie jest inny wzór: http://obrazki.elektroda.pl/4168356600_1... co w efekcie dla 8 MHz i prescaler=1 daje częstotliwośc wyjściową z timera2...
Timer0 - jeden kanał: OC0 - PB.3 Timer1 - dwa kanały: OC1A, OC1B - PD.5, PD.4 Timer2 - jeden kanał OC2 - PD.7 Racja zapomnialem, ze atmega32 ma 4 pwm, a nie 3 jak atmega8 :P
No problem. Today I`m not read topic from the beginning and forgot about the third button. [syntax=vbnet]$regfile = "m8adef.dat" $crystal = 8000000 $hwstack = 64 $swstack = 32 $framesize = 64 Config Submode = New Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Config Lcd = 16x2 Cursor...
Udało mi się odpalić mege8 na 32k ale niestety nie działa RTC. Podstawa Timera asynchronicznego Timer2 ("RTC") działa na innym podłączeniu niż układ zegara systemowego na kwarcu zegarkowym. http://www.elektroda.pl/rtvforum/viewtop...
Niech ci bóg w dzieciach wynagrodzi!!!! Trzy dni sie z tym męczyłem. Nie doszedlem do tej strony dokumentacji gdzie Timer2 jest opisany :P Jeżeli ktoś by kiedyś potrzebował wygenerować 36kHz na ATmega8 to podaje przepis: TCCR2=0x99; TCNT2=0x00; OCR2=0x1b;/ i na PB3 pojawia nam sie potrzebna czestotliwość :D
a bym jeszcze resetował preskaler T0/T2 . Resetował? Tzn ustalał na nowo?? Przecież on się nie zmienia. Zumek miał na myśli resetowanie licznika preskalera, a nie ustawień preskalera. Zobacz w ATmega8 bit PSR10 i rysunek Prescaler for Timer/Counter0 and Timer/Counter1 Patrz: http://mikrokontrolery.blogspot.com/2011...
Timer zawsze odmierza do końca swojego zakresu. Timer0 oraz Timer2 są 8-bitowe, czyli liczą do 256, natomiast Timer1 jest 16-bitowy i liczy do 65536. Czyli jak takiemu Timerowi1 ustawisz wartość początkową 5536, to on policzy 60 000 taktów (do 65536) i potem wygeneruje przerwanie, czyli skoczy do odpowiedniego fragmentu kodu który mu zadasz (kod obsługi...
Witam. 1 - Stosuj aliasy. Np: drzwi alias portd.0 Później w kodzie po prostu drzwi = 1 lub drzwi = 0. bardzo poprawia czytelność kodu. 2 - Odczyt z przetwornika ADC powinien być do zmiennej WORD (przetwornik jest 10 bit). 3 - w pętli głównej masz instrukcje Wait. Powstaje problem ze sprawdzaniem stanu wejść, pętla może się wykonywać bardzo długo, w...
Witam. W układzie licznik timer2 pracuje asynchronicznie - taktowany jest z kwarca zegarkowego. W Bascomie używam instrukcji RTC programowego. Czy mogę przy używaniu RTC usypiać procesor - uruchamiać tryb Powerdown?
timer2 atmega8 atmega8 timer2 zegar przerwania timer2
wygłuszyć maska zbiornik zmywarka odzyskanie danych samsung
płyta indukcyjna termistor użytkownik oldboy
Fiat Seicento – zbiornik wyrównawczy: objawy pęknięcia, wymiana, numery OE, zamienniki GoodWe inwerter – jaki kraj ustawić w Polsce? Profil Poland, EN50549-PL, firmware, OSD