W TCNT2 jest aktualna wartość timera2.
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.
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.
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
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...
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, 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...
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...
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...
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...
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...
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.
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...
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...
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...
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, 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ć...
Zadaniem programu ma być odmierzenie 1 sekundy (zmiana stanu na wy). Przerwanie od timera 2 przychodzi co 1ms. Kwarc zewnętrzny ~11MHz. Czy ktoś mógłby napisać dlaczego program nie działa? #include<avr/io.h> #include <avr/interrupt.h> int i=0; int main(void) { DDRC = 0b00001000; TCCR2=_BV(CS22); TIMSK = _BV(TOIE2);...
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. 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...
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...
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]
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 ??
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....
Tylko jak teraz dopisać tą konfiguracje led? Tak jak chcaiłem z rgb zrobić
A po co ci 2 kwarce?
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.
[syntax=c] #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> /*********************** D I M M E R - U S T A W I E N I A ***************************/ #define LICZBA_KROKOW 200 // czas trwania szpilki (Detekcja ZERA) wyrażony w milisekundach np: 1,2,... albo np: 0.5 #define SZPILKA_MS 1.8 /***********************...
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...
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...
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.
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...
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...
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...
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...
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"...
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.
A tak w szczególe to na TIMER0 nie ma PWM w M8 . Jest natomiast na TIMER2
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...
atmega8 timer2 atmega8 timer2 zegar przerwania timer2
zbierak electrolux serwisowanie telefonów komórkowych wymiana dysku twardego
turbina wiatrowa drgania turbina wiatrowa
Detektor zera w układzie LA1844: piny 11 i 12 Podłączenie dwóch mostków prostowniczych do jednego uzwojenia wtórnego