Przeglądając Twój program mam takie małe spostrzeżenie, a mianowicie w pętli głównej masz wywołaną procedurę Gettime - ' Call Gettime' - która działa na I2C. Co się stanie gdy podczas wykonywania procedury Gettime zostanie zgłoszone przerwanie od Timer'a?? Program przerywa wykonywanie procedury Gettime i skacze do obsługi Timera a tam jest wywoływana...
Sam byś chciał zrobić ale zacząłeś od bardzo złej strony robić bo zamiast robić sam to prosisz nas o to abyśmy Ci znaleźli zestaw pod Twoje możliwości. Proponuję więc rozwiązać ten dylemat w ten sposób że albo rzeczywiście sam poszukasz sobie projektu pod swój poziom i sam go zrobisz, albo lepiej posłuchaj rad kolegów że to trochę za głęboka woda a...
Kolega czytał opis w helpie o Config RC5 ? jest tam napisane, że GETRC5 korzysta z Timera 0 , a tego samego timera używasz do multipleksowania.
Znacznie lepiej (i zdecydowanie dokładniej) byłoby wykonywać to w przerwaniu timer-a pędzonego rezonatorem zegarkowym, lub cały uC z niego taktować. Skrócenie okresu możnaby chociażby, realizować ładując odpowiednią liczbę do timer-a po przepełnieniu. Pozdrawiam, GSM
Witam, próbuje wykonać prosty odtwarzacz midi w oparciu o mikrokontroler atmega8535. Bazując na przykładach z internetu udało mi się temat jakoś wstępnie ogarnąć. Niestety na atmedze nie uruchamia mi się zegar o który oparte mają być programy. Wszystko jakby "wisi". Dodam że programuję w C w środowisku Code Vision AVR. W celu zlokalizowania problemu...
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...
w momencie wystąpienia przerwania program powinen wykonać to co jest na końcu kodu,od linii czas:(nie wiem czy o to chodzi) . Próbowałem kopiować kody działających rozwiązań(oczywiście dopasowując do uC) ale nic to nie dawało :|
1. Volatile: http://mikrokontrolery.blogspot.com/2011... 2. Tryb asynchroniczny: 1. Disable the Timer/Counter2 interrupts by clearing OCIE2 and TOIE2. 2. Select clock source by setting AS2 as appropriate. 3. Write new values to TCNT2, OCR2, and TCCR2. 4. To switch to asynchronous operation: Wait for TCN2UB, OCR2UB, and TCR2UB...
Specyfika tego mikrokontrolera, zmusza Ciebie do zastosowania Timera2 w trybie asynchronicznym, a mikrokontroler powinien być taktowany wewnętrznym generatorem RC, czyli tak jak radzi kol. wyżej. Przy takim rozwiązaniu korzystać możesz ze specjalnego trybu oszczędzania energii: POWER SAVE. Niestety nie da się w tym mikrokontrolerze taktować kwarcem...
Zapomniałeś o nieśmiertelnym sei(); Poza tym , obsługa przerwania , na bank nie wyrobi sie w 8 cyklach :( Piotrek
Chwila. Timer bez preskalera, częstotliwość procesora nieznana, załóżmy, że 1 MHz (nieistotne). Timer zgłasza przerwanie co 21 cykli zegara, czyli ATmega zajmuje się na okrągło obsługą przerwań timera, nie mając szans obsłużyć żadnych przerwań o niższym priorytecie (ADC).
1. Jak to jest z stabilnością zegara wewnętrznego ?% i może to prościzna ale jak go ustawić - rozumiem że kompilację robimy dla określonej częstotliwości bo inaczej były by buraki (ha wiem że notacja jest odwrotna w programatorach ptaszek to zero - czego taką durnotę zrobili). Nie wygląda to za ciekawie. Odchyłki mogą sięgać nawet 20%. Mnie udało się...
Timer będzie odliczał np. sekundy tak jak Waitms 1000, tylko dokładniej. Dobra rada: Odinstaluj BASCOM i zacznij się uczyć C dlatego: http://mikrokontrolery.blogspot.com/2011... Kurs C: http://mikrokontrolery.blogspot.com/2011... Kurs AVR w C: http://mikrokontrolery.blogspot.com/2011...
Prosze o pomoc co moze byc zlego w tym "prostym" kodzie na zegarek nie wiem ale nie chce dzialac na mojej Atmedze 8. mam Atmege ktora chodiz na zegarze wewnetrznym Dim G As Byte Dim M As Byte Dim S As Byte Dim X As Byte Dim W As Word Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.4 , Db6 = Porta.5 , Db7 = Porta.6 , E = Porta.2...
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); } }
Kosmo Timer1=34285 wyszło z prostej kalkulacj. przy zegarze 8000000 i preskalerze 256, timer uP'a zliczy 8000000/256= 31250 "impulsów". Czyli aby licznik sie przepelnil nalezy zaczasc zliczanie od 65535-31250=34285.
TCCR0 = _BV(x<<CS00); Źle użyłeś makra _BV. _BV(x) jest równoznaczne z ( 1 << x ), czyli w Twoim przypadku próbujesz wykonać podwójnie przesunięcie bitowe. Jeżeli x = 3 (CS00=0): _BV(3<<CS00) = _BV(3) = (1<<3) = 0b00001000 czyli TCCR0 będzie równe 0b00001000 . Innymi słowy, próbujesz ustawić bit tylko do odczytu, zamiast...
delay w przerwaniu?! Nie przesadzasz? Dlaczego 2 razy ustawiasz TOIE2? Po co zerujesz TCNT2? Po co ustawiasz TOV2? Spróbuj najpierw sprawdzić ten kod z taktowaniem timera z podstawowego zegara, nie z kwarcu zegarkowego. Wtedy będziesz wiedział, czy problem leży w oprogramowaniu, czy w braku oscylacji.
symulator bascoma jest bardzo dokładny i liczy co do taktu. jeżeli program opiera sie na przerwaniach timera to należy włączyć okienko "Slim Timers" , wtedy symulacja trwa trochę dłużej ale bierze pod uwagę przerwania timera. co do compare1a to jest to rejestr poruwnawczy timera1. co takt zegara jest on poruwnywany z zawartościa timera (czyli licznika)...
Można wykorzystać jakiś nieużywany timer- jeśli jest. Inkrementować jakąś zmienną tymczasową, zapisywać do innej i porównywać. Jak pierwsza większa-jest sygnał. Jak nie- nie ma sygnału. Jeśli jest wolny timer.
t2 może pracować taktowany z CLKio (AS2 w ASSR skasowany) lub zegarem pochodzącym z pinu TOSC1 (który pracuje łącznie z TOSC2). Asynchroniczość polega na tym, że oscylator na TOSC może pracować na innej częstotliwości niż zegar procesora. Np procesor może iść na zegarze 8MHz (wew.RC), podczas gdy do pinów TOSC jest podłączony kwarc zegarkowy i z taką...
Ok, dzieki za odpowiedzi, takie pytanie dodatkowe jeszcze mam, jaka najnizsza czestotliwosc mozna ustawic (na wew zegarze) ?
Wycinek z datasheet atmega8a: "The Asynchronous Timer/Counter uses the same XTAL pins as the CPU main clock but requires a CPU main clock frequency of more than four times the Oscillator frequency. Thus, asynchronous operation is only available while the chip is clocked on the Internal Oscillator." Niestety do poprawnego działania potrzebny jest oscylator...
Pokaż, jak w przerwaniu przeładowujesz timer wartością początkową. Pozdrawiam Mariusz
No, tak dobrze to nie jest. AVR-y (a w nich timery) nie mogą poprawnie zliczać impulsów o częstotliwości większej niż połowa częstotliwości zegara zakladając na wejsciu wypełnienie przebiegu 50%. Niezbędne będzie zatem zastosowanie preskalera. Proponowałbym ATMEGA8 z kwarcem 16MHz i z prescalerem /4 zbudowanym np z cyfrówki 74F74. Mamy zatem poniżej...
Zmieniłem wartość Load Timer na 100 i dalej program idzie w "krzaki" chyba zacznę generować sygnał dla samego zegara a ten PWM daruje.
Bo tym kwarcem nie odmierzysz 1s. w taki prosty sposób. Bęziesz musiał ładować wartość początkową do timera. Z kawrcem 2²²Hz wartość początkową trzeba by ustawić na 0 czyli tyle na ile timer wskakuje po przepełnieniu. Jednym słowem z tym kwarcem timer samoczynnie generuje przerwania co sekundę. Jak nie wierzysz to sobie policz. Kwarc ten był...
W ATmegach do tego zadania dedykowany jest timer 2 w trybie asynchronicznej
Witam. Tak na szybko analizując kod: Dla Timer0 włączasz dwa przerwania od porównania: http://obrazki.elektroda.pl/6165324400_1...
U ciebie "sekunda" mija po 31251 cyklach - timer liczy od 0.
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
albo powielić na jakimś szybkim Cortexie do 1kHz Następny. Jak się powiela na szybkim Cortexie, czego nie można zrobić innym procesorem? Albert To tylko sugestia. Jeśli w tej samej cenie mogę mieć dostępne 48MHz (przykładowo STM32F0) zamiast 16MHz (Atmega8) i nie muszę szczypać się, ile taktów zajmie mi zmiana GPIO, to czemu nie? O 32-bitowym timerach...
Nie przesadzaj, z jakim zegarem taktujesz procesor? Jeśli nawet tylko 1MHz, to 3 takty to zaledwie 3mikros. A jak potrzebujesz super dokładność to użyj timera i wyjścia OCx. Możesz zaprogramować zmianę jego stanu z dokładnością do taktu zegara z uwzględnieniem preskalera timera.
OK, uzywam juz w tym celu timera... Tylko nie do konca orientuje sie z preskalerem i czestotliwoscia.. Tzn, jak uzykac jakies w miare dokladne wartosci...? Mam uC pracujacy na wew. oscylatorze 1MHz [ATMega8, Timer0]... Chcialbym, zeby przerwanie wywolywalo sie co 1 albo 10ms, jak dobrac preskaler i wartosc poczatkowa timera [8bitowego]?
Proszę bardzo ;) Timer napędzany jest od systemowego taktowania. Jeśli każę mu policzyc do jeden i odwrócić pin to w pierwszym takcie zegara licznik Compare1a ma zero i pin nie jest odwracany ;) Dopiero za drugim razem pin jest odwracany. Z tego powodu że żeby mieć częstotliwość na pinie trzeba go raz mieć w stanie wysokim a raz niskim, a da się to...
Witajcie, Potrzebuję konfiguracji timera 1 dla atmega8 aby wykonywał funkcję z częstotliwością ~244Hz (zegar 16MHz i preskaler 2^16). Chciałbym uniknąć używania dodatkowych bibliotek. Będę wdzięczny za przykładowy kod :) Przy okazji; jeśli użyję do tego celu timera 1, mogę równocześnie używać wyjść OC1A oraz OC1B jako zwykłe wyjścia I/O?
...Co bym nie robił... wynik zawsze jest ten sam... Nic dziwnego, bo Bascom ignoruje polecenie Load Timer2 = 178 Zmień na Load Timer2 , 178 'lub Timer2= 256 - 178 i sprawdź :-P
Ma być External Cristal Oscilator 3.0-8.0MHz w/g doc2502.pdf (s.24), czyli CKSEL0-3 niezaprogramowane (1111). Fusebit KL(SUT1:SUT2) też najlepiej dać na "11". Fusebit "F" (CKOPT) z Fusebits High można dla stabilniejszego zegara zaprogramować (czyli 0).
Zastosuj dostępny kwarc zegarowy 4194304Hz. Config Timer1 = Timer , Prescale = 64 Timer przepełni się co 1 s bez wartości początkowej! Włączasz go i zapominasz, że istnieje. W przerwaniu tylko Incr sekunda. Mam zegar na ATMEGA8 z budzikiem ustawiany z pilota RC5. Chodzi ok.
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...
Czy dla uzyskania przerwania co 0,5s, 1s, lub 2sek musze użyc w przypadku Atmega8 timera1 16bit, czy mogę to też jakoś zrobić na 8-bitowym timerze0? Zakładam częstotliwość zegara 1Mhz-4MHz. (pracuję nad mruganiem diody :) widocznym dla oka przy uzyciu przerwania od timera)
Czyli chce kolega powiedzieć, że mierzymy czas z dokładnością +- 5 minut :d. Osobiście ten zegar nie podoba mi się, z racji dużej obudowy, brak jakiegokolwiek "wyrazu", jednak skoro poćwiczył kolega Timery i PWM to + dla autora.
Kondensator tantalowy pasuje jak najbardziej i jest znacznie mniejszy. Soldermaska lepiej zabezpiecza; lakier uniemożliwi serwis zegarka STK200 i tak trzeba zasilać; programujesz bez baterii Wybudzanie poprzez SW1 to głównie jak jest napisany program. Po cynowane ścieżki - utlenia się cyna - powinna być soldetmaska 2k2 to zbyt duża wartość, to ok 600uA...
To dwa sygnały na timery jako liczniki a trzeci sygnał na przerwanie zewnętrzne. A trzeci timer jako zegar.
W zasadzie co ten program robi? Bascom jest wolny- ale procesor wykonuje instrukcje co 0.125us przy tym zegarze. Załóżmy 1000 cykli w pętli- zajmie mu 125us policzenie stanów 0 na wejściu i co dalej? Od wykrycia 0 powinien zblokować na jakiś czas zmianę stanu, odliczyć czas w ms a nie w us i zmienić stan wyjścia. Timer i ewentualnie przerwanie.
Hej, Jeśli chcesz płynnie regulować współczynnik wypełnienia to musisz wybrać jeden z modów PWM i wtedy będziesz skazany na jedną z kilku częstotliwości wynikających z zegara systemowego i tego jak ustawisz prescaler, Jeśli chcesz płynnie regulować częstotliwość to wybierasz mod CTC(clear timer on compare) ale będziesz miał wtedy stałe wypełnienie,...
Czy to wahadło porusza się w jednej płaszczyźnie (jak w zegarze ściennym prababci :) ), czy w dowolnym kierunku?
Możesz skorzystać z timera lub z zew. RTC jak doradził kolega.
Szukaj pinów OCRnX, gdzie n to numer timera, a X to litera A, B lub C odpowiadająca kanałowi.
Wewnętrzny zegar jest na tyle mało dokładny, że aby można było nim coś zmierzyć, należało by ustalić jego dokładną częstotliwość porównując z jakimś wzorcem, po czym zapisać poprawkę do osccal albo uwzględnić to w czasie przepełnienia t1 - a i tak dokładność nie będzie duża ze względu na wachania częstotliwości. Warto poczytać w dokumentacji jaką dokładnie...
Tak, wybrałem Low Frequency, da sie jakoś ruszyć uC bez tak wolnego kwarcu ? Co masz na myśli 'ruszyc' ? Prawdopodobnie chcesz skorygowac błędnie ustawione fusebity (powrócic do default settings). W zasadzie datasheet mówi o optymalizacji oscylatora processora do 32kHz jako 'Low Freq.' , ale do komunikacji podczas programowania mozesz tu zastosowac...
Pierwszy i bardzo poważny problem zauważyłem w funkcji TIMER1_COMPA, jest nim linijka rjmp uspij. Gdy się wykona, to przerwania pozostaną zablokowane, oraz kilka bajtów na stosie zostanie uwięzionych - głównie adres powrotu z przerwania. Można temu zaradzić poprzez wstawienie pop + pop + sei przed rjmp. Drugi problem, to karygodna pętla główna - dławienie...
Problem leży wyłącznie w złym oprogramowaniu. Zrób to, co pisałem. Zegar 8MHz w zupełności wystarczy. Zacznij od przerwania timera.
Witam Potrzebuję zrobić zegar na ATMEGA8535 i nie mogę uruchomić pracy asynchronicznej. Kwarc zegarkowy podłączony do XTAL1/2. Program wstępny poniżej. Analogiczny program (ze zmianą ASSR.5 = 1) dla ATMEGA88 działa poprawnie. Proszę o pomoc. Pozdrawiam Jacek Program napisany w "BASCOM AVR" [syntax=basic4gl][/syntax] $regfile = "m8535.dat" $crystal =...
Chcę napisac własny program z wykorzystaniem Timerów. Na początek proszę o wytłumaczenie dlaczego w poniższym programie: 1. wykorzystano podzial częstotliwości zegara (po preskalerze 256) 250/125 zamiast wykonac jedno dzialanie? 2. uzyto wartość początkową Timera0 = 250 przed Petlą do Loop End . O ile wyjaśnienie podane przez Tomq jest błędne(!) Load...
Dzięki. Pokombinuje coś z tym. Aktualnie walcze z timerami i próbą obliczenia prędkości z przyspieszenia i czasu na zegarze. Pozdrawiam
aha to źle zrozumiałem. myślałem że jak pilot nadaje to zegar staje. no to w takim układzie podejrzewam że getrc5 używał właśnie do odbioru kodu timera0. Zmień w swoim programie odmierzanie czasu z timera 0 na timer1 i zacznie działać.
Zacznij (jak w 99% projektów) od przerwania timera. W nim sprawdzaj stan przycisków i wykonuj prawie wszystkie pozostałe czynności.
witam problem w tym że wejście do przerwania i wpisanie nowej wartości do timera trwa kilka taktów i przez to powstają te przekłamania zamiast próbować z dziwnymi poprawieniami danych wykorzystaj przerwanie "compare" i ustaw automatyczny reset wartości timera. wtedy wszystko było by automatycznie.... ;) pozdrawiam
teedd -> nie zapytałeś nawet w jaki języku pisze pys1986, a zamieszczasz od razu kod. Poza tym nie wiem dlaczego chcesz zrealizować odmierzanie czasu na przerwaniu INT1 zamiast wykorzystać wbudowany timer? Jest to niepotrzebne komplikowanie zadania i dodawanie uC niepotrzebnej roboty. Na stronce jaką zamieściłem jest przykładowy zegar z kalendarzem...
1. dodaj timer programowy 2. pomyśl, jaki jest związek wartości timera, ilości przerwań, które wystąpią, częstotliwości zegara, prescalera i czasu jaki upłynął...
Ja się zawsze zastanawiam skąd się biorą u tylu ludzi , początkujących te schematy bez podłączonego AVCC i AGND ??? przecież - trąbi się o tym nie tylko w nocie PDF ale i na forum - no wszędzie. Wprawdzie ATmega8 ma zwarcie wewnątrz pomiędzy VCC i AVCC ale nie podłączanie jeszcze niefrasobliwie drugiej nogo GND to już - proszenie się na własne życzenie...
Nadajnik możesz to zrobić w oparciu o timer, na którym ustawisz sobie określony zegar - np. te po rz ądane 250 kHz. Być może musisz ustawić 500kHz - aby wyłapywać nie tylko czas cyklu, ale i jego zbocze narastające i opadające. Potem budujesz sobie kolejkę danych (bufor fifo) - która stanowi podstawę dla timera - do "machania określonym pinem". Wysłanie...
dziekuje za odpowiedź w moim przypadku prowdopobonie chodzi o wbudowany zegar 1MHz w jaki sposó liczyć czas opóźnień w tym przypadku pozdrawiam
DZIALA. podsumowanie: oczywiscie ze wszystko poustawialem z dokumentacja. nie wiem o jakie fuse'y chodzi - chyba, ze o te co ustawiaja zegar na wewnetrzny RC - ale to juz napisalem. Pomogla pierwsza rada - czyli kondensatory. opcja z trymerem tez pewnie by zadzialala - bo juz przy wlutowaniu jednego uklad zaczal dzialac - no ale dalem dwa. teraz robie...
Bardzo dziękuję za informację. Mam jeszcze jedno pytanie, związane z tym tematem. Dla większej jasności zamieszczam fragment kodu (tylko ta część, które jest tut istotna). Czy można w jakiś sposób oszacować czas potrzebny na wykonanie pozostałych instrukcji, abym mógł dobrać odpowiednią przerwę po instrukcji timer++? Mikrosterownik jest taktowany zegarem...
Może skorzystać z przerwania, które UART zgłosi, kiedy odbierze znak. Wtedy kod może wyglądac tak: ISR (SIG_OVERFLOW2) { //obliczanie wartosci ktore maja byc wyswietlone na wyswietlaczu } ISR (USART_RX_vect) { //operacje na odebranych danych } main(){ //wlaczenie przerwan itp while(1){ //wyswietlanie...
Da się zrobić w miarę dokładny zegar bez specjalizowanego układu (zegara czasu rzeczywistego) ale pod dwoma warunkami: 1. Kwarc o niskiej częstotliwości - tzw. zegarkowy 32768 Hz 2. Do obsługi kwarcu użycie timera asynchronicznego - ale ten prymitywny procek (AT89*) się nie nadaje - minimum to atmega8. Skąd akurat takie warunki? Kwarc zegarkowy ma...
[syntax=asm]sbi DDRB,3 //wyjście dla OC2 - PB3 //konfiguracja T2 - Fast PWM ldi r16, (1<<WGM20)|(1<<WGM21)|(1<... //Opis bitów //(1<<WGM20)|(1<<WGM21) - tryb Fast PWM //(1<<COM21) - wyjście PB3 czyli OC2 będzie ustawiane w stan wysoki przy zerowaniu licznika i ustawiane w stan niski przy zgodności...
Timer + przerwania + funkcja obsługi przerwania ISR(), a nie sprawdzanie jego flagi. Zobacz przykład: http://mikrokontrolery.blogspot.com/2011... A ode mnie w prezencie 25pkt, bo masz zero, ale używasz języka C :)
hmm... ok, chyba zaskoczyłem .... ze 117 strony dokumentacji ATMega8: Kiedy AS2 jest nie jest ustawiony (0), to Timer/Counter 2 is taktowany z I/O zegara. Kiedy AS2 jest ustawiony (1), to Timer/Counter 2 is taktowany z kwarcu połączonego do pinów TOSC. Tak czy inaczej, chce mieć możliwość precyzyjnego odliczania czasu - pojedyncze mikrosekundy - czyli...
No i jeszcze trzeba ustawić Fusebity na kwarc zegarkowy. No akurat nie :D
bateria / zasilacz 12v przez przetwornicę, zegar korzysta z rtc, chociaż nie wiem czy robi to różnicę. A i jeszcze jedno pytanie a konkretnie czy jeżeli zrobię obsługę zegara w timerze to zmienne przechowujące czas będą globalne i czy powinny być typu volatile?
Wszystko (no prawie wszystko) jest opisane w datasheet'ie. Założenia jak rozumiem są takie: - procesor ATmega88 taktowany kwarcem zegarkowym 32kHz Tutaj masz datasheet do tego procesora: [url=http://www.google.pl/url?sa=t&rct=j...
Wlasnie dlatego stosuje sie przerwania, jak procek ma cos innego do roboty to one i tak wystapia. Jesli ma wystapic pozniej przy pracy synchronicznej, to przy asynchronicznej tez wystapi pozniej. A co do kwarcu zegarkowego, przy zegarze 1MHz tez da sie odmierzyc dokladnie jedna sekunde :)
Witam. Jeśli chcesz mieć w miarę precyzyjny zegar to kwarc32,768kHz i tryb taktowania asynchorniczny Timera numer 2 ATMEGA8, w przerwaniu strukturka z gg:mm:ss parę warunków no i na koniec przełożenie tego na wyświetlacz, przemyśl procedurę ustawiania tego czasu to jest też ważne, jakieś przyciski czy coś podobnego. Pozdrawiam
Masz tak- zegar odmierzający 1s. A co by szkodziło gdyby odmierzał co 100ms. Albo co 10ms czy 1ms. Wtedy w każdym przerwaniu można zwiększać jakieś zmienne i dopiero gdy osiągną zadaną wartość wykonywać jakieś funkcje. Wtedy zamiast _delay() możesz sprawdzić czy zmienna osiągnęła jakąś wartość i dopiero wtedy wykonać jakąś funkcję. Bo _delay() to jest...
Zależy w sumie o jakim języku programowania rozmawiamy, osobiście sprawdziłem, że się da w asemblerze 2xRS (komunikacja z falownikiem i debug na PC) + podwójna bariera podczerwieni + sterowanie grupowe (synchronizowane z siecią) triakiem + obsługa klawiatury + obsługa LCD znakowego 2x16 i przy tym procesorek jeszcze ma czas na bieżącą konwersję BIN2BCD...
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...
Jeżeli wykorzystujesz jeden timer (timer0) to na drugim: ... ... Config Timer1 = Timer , Prescale = 256 Enable Timer1 On Timer1 procedura start timer1 ... ... ... procedura: lcd ..... lcd ..... return ... ... ... Pozdr. Marcin
Okazało się, że program zaczyna się wykonywać od nowa także przy przerwaniach od timera...:/ #include <avr/interrupt.h> #include <string.h> #include "delay.h" #include "lcd.h" volatile int przerwanie=0; int main(void) { LCD_init(); LCD_putstr_P(PSTR("Witaj&qu... delayms(500);...
crazy_phisic : Zauważ, że przebieg na wyjściu to połowa częstotliwości przepełniania timera. kaczy1n : Moja propozycja, to ustawić prescaler na 1 i nic nie ładować do timera - będzie się przepełniał co 256 cykli zegara. No i należy wybrać poprawne źródło zegara.
Wiem że wewnętrzny oscylator ma odchyły ale że aż takie?? Ładuje dobrą liczbę do timera ponieważ ładuję ją poleceniem Load a to polecenie odejmuje tą liczbę od 255 i ładuje ją do timera do tego gdybym do timera ładował za małą liczbe to na pewno by nie spóźniał. Może to zatrzymywanie timera coś da. Dziwi mnie że zegar spóźnia, nigdy nie chodzi za szybko....
Częstotliwość zależy od zegara, preskalera oraz wartości wpisanej do timera. Po za tym błędy: $crystal="8000000" load timer0,1
wykonałem zegar na atmega8 lcg 1*16, z uzyciem timera1 dalem kwarc 8MHz, aby odliczać czas co 1s zrobilem tak Config Timer1=timer, prescale=256 następnie dałem counter1=counter1+34286 8MHz/256/(65536-34286)=1s - powinno mi dac dokładnie 1 sekundę a z pomiarów sekundnik zmienia sie mniej wiecej co 8 sekund, czy ma ktos moze pomysł dlaczeo tak sie dzieje?...
Muszę użyć układ dwóch timerów ponieważ w docelowym układzie zakres czasowy Timera1 będzie za mały. Czy procesor zliczy na T1 impulsy generowane na OC2 ? Obawiam się sytuacji, że przy wspólnym CLK gdzieś mi się zbocza miną pomiędzy OC2 a T1 i układ nie zatrybi... Oczywiście że zbocza te mogą się minąć, ale to jest bez znaczenia. Podczas synchronizacji...
Do działania timera nie jest potrzebna nieskończona pętla while. Dobra praktyka wskazuję aby w całym programie znalazła się co najmniej jedna nieskończona pętla. Wartość OCR można wpisać na stałe skompilować i wgrać do procesora. Wypróbuj jeszcze ten tryb 14 z ICR1 na TOP wklejam działającą konfigurację pod Atmege 16(sprawdziłem rejestry i konfiguracja...
A nie łatwiej jest policzyć DO ilu ma liczyć a nie OD ilu? :) i robić przerwania COMP a nie OVF? Ja tak robię i na kwarcu 4MHz timer1 odlicza sekundy bardzo ładnie. Ale u Ciebie timer1 wydaje się mieć dobrze ustawianą wartość. Przy prescalerze 256 musisz mieć 15625 taktów zegara, aby osiągnąć sekundę. W drugim coś mi nie gra. Odliczasz od 0x0F czyli...
Można i tak lecz chciałem zamknąć wszystko w jednym uC i wykorzystać wewnętrzny RTC Atmegi. Żeby zwolnić któryś timer wystarczyło by, odbiór Rc5 zrealizować w przerwaniu INT0 albo INT1 jak wcześniej wspomniał kolega Mariuszek15 pozdrawiam
Dla działania PWM nie jest konieczne wykonywania przerwania od danego timera, w moim przypadku obsługuje on dodatkowo zegar, dlatego jest ono włączone. Dodam jeszcze że to puszczałem na ATmeg16.
pod ten 16MHz podłącz trymer, częstościomierz i dostrój się tak jak trzeba. I dołóż stabilizację temperaturową z grzaniem i chłodzeniem.... ;) Albo dołóż kostkę ethernetową i pobieraj czas z serwera ntp. Albo przerób na DCF .
[syntax=c]volatile uint8_t num[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; volatile uint8_t time[6] = {0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F}; volatile uint8_t d = 0; volatile uint8_t counter = 0; volatile struct tm* t = 0; volatile uint8_t hour, min, sec, day, month, year;[/syntax] Atmega8, chcę zrobić w głównej pętli obsługę przycisków,...
1. To czy port jest wyjściem czy wejściem jest zdeterminowane przez elektronikę układu i rzadko istnieje potrzeba zmiany tego statusu po jednokrotnym ustawieniu. W twoim przypadku ustawiasz DDRB=0xff na początku funkcji main() i nie ma potrzeby zmiany tego w każdym wywołaniu procedur diody1_4() i diody5_8(). Nie jest to duży błąd ale dobra praktyka....
.org 0x0000 ; ustawia adres w pamięci programu rjmp reset ; skocz do etykiety ... ; wektor przerwania timer 1 .org 0x0005 rjmp led_off ; skocz do obsługi przerwania ; w tym przykładzie początek programu głównego reset: ; Jako pierwsze ustawienia stosu (w asemblerze jest to ; bardzo ważna operacja i programista nie może o tym zapomnieć)....
Jako wzorzec dla zegara rezonator 32.768kHz (TIMER2), a mikrokontroler taktowany RC. Lub jako wzorzec zegara DS1307 + 32.768kHz lub PCF8583 + 32.768kHz, lub inne tego typu układy, które magistralą komunikują się z AT8a
Czy ktos mi powie czy jak w procedurze obslugi od przerwania timera umieszcze rozkaz sleep ktory uaktywnia trym ADC Noise Reduction to czy licznik zostanie wylaczony wtedy(timer)??Kiedy adc skonczy przetwarzac i nastapi zgloszenie przerwania od adc po to zeby wyjsc z trybu ADC Noise Reduction i wybudzic CPU z uspienia to czy obsluga tego przerwania...
No to jeszcze dorzucę, to co znalazłem w pewnym pdf-e Motoroli - aplikacja , zresztą bardzo podobna do tej j/w. Legenda : XTAL1 - wejście inwertera generatora XTAL2 - wyjście inwertera generatora Tak przy okazji - AVR - y posiadające wbudowany timer asynchroniczny (np. AT90S8535 , ATmega8535 , ATmega16 , ATmega8 itd.) już są przygotowane do bezpośredniego...
Poniżej fragment kodu w asmie który powinien zostać odpalony w ramie w celu większej szybkości działania. Niezła bzdura - Cortex-Mx jako układ w zmodyfikowanej architekturze Harwardzkiej bardzo kiepsko wykonuje program z pamięci RAM. A producent LPCxxxx nazywa się NXP, a nie Phillips i to już od bardzo dawna. Co do tematu - jak chcesz szybko zmieniać...
robie układ sterownika programowalnego na ATmega8 chciałbym aby po wejściu do jakiegoś menu po czasie nie używania klawiszy sterownik skoczył do głównego menu w tym celu chce uruchomić np timer0 który po przepełnieniu licznika wywoła procedurę skoku do menu głównego. i tu problem zegarek działa jak najlepiej do czasu gdy nie użyję instrukcji enable...
Generalnie nie nazywałbym tego tematu zegarem czasu rzeczywistego. Atmega jest spoko, jeśli stosujesz Bascoma to masz jak zwykle problem z precyzyjnym wyliczeniem czasu i cykli procesora więc ... . 1. Albo praca na timerze i przerwaniu ... 2. Albo zewnętrzny RTC :) - jako samodzielny układ scalony :) ; W skrajnym przypadku ... , stosowanie Atmegi może...
timer atmega8 zegar timer timer zegar
honda civic benzyna akumulator syrena alarm astra napinacz pasek
tylko zegar integra tylko zegar
Wentylator opalarki nie działa, grzałki działają Łożyska EBI - typy, zastosowania, jakość i konserwacja