[syntax=basic4gl]$regfile = "m8def.dat" $crystal = 8000000 $hwstack = 40 $swstack = 16 $framesize = 32 'timer '16MHz 16000000(16MHz)/256(Prescaler)=62500 i odejmij jeden Config Timer1 = Timer , Prescale = 256 , Compare_a = Disconnect , Compare_b = Disconnect , Clear Timer = 1 Enable Compare1a : On Compare1a Timer1_isr : Compare1a = 62499 '1s (at)16MHz...
Do dokładnego odliczania czasu stosuje się PORÓWNANIE timera, a nie antyczną metodę wpisywania wartości początkowej. Poczytaj datasheeta pod kątem hasła "compare" No i "jak zwykle" - volatile. 4\/3!!
Zakres liczenia 16-bitowego timera przy zegarze 16MHz i prescalerze=1 to nieco ponad 4ms. Jak chcesz tym zmierzyć czas, który przy 5000obr/min wynosi ok. 12ms.?
A po co ten nawias? 16MHz czyli 1 cykl trwa 1/16000000 = 62,5ns. 200*8*62,5ns = 100us
Można też użyć analizatora stanów logicznych. Przed i po wywołaniu algorytmu zmieniać stan pinu i sprawdzać czas na wykresie. W ten sposób nie jesteś ograniczony czasem od góry. A gdy użyje timera to jest ograniczony? Jaki problem aby zmienna cntHH miała 64 bity. Razem z timerem to 80 bit. Nie wiem czy GCC poradzi sobie z taka zmienna ale nawet przy...
..nie ma to aż tak dużego związku ze sprawą i fajnie że udało się ją rozwiązać, ale ktoś czytający ten watek później mógłby pomyśleć że na ośmiobitowym timerze przy 16MHz zegarze minimalna częstotliwość to 61Hz więc tylko wtrącę że wybierając tryb "Phase correct" otrzymujemy 30Hz bo timer przy TOP się tylko zawija :D
Ale jeśli mniejsze, to już po 1 takcie zliczania powinno wyskoczyć z przerwania a tak nie jest. Taktowanie timera to 16MHz/1024 = 15625Hz. Pojemność timera to 256, więc przerwanie pojawia się z częstotliwością 15625/256 = ~61Hz. Aby uzyskać opóźnienie ok. 1 sekundy przerwanie musi pojawić się 61 razy i dopiero za 62 zapalić lub zgasić diodę. I tak...
bierzesz pod uwagę nie to przerwanie. zobacz czasy dla TIMER/COUNTER1 OCR1A Compare Match
Tak się nie robi. Myślę że ten timer się parę razy przepełni zanim obsłuży LCD. Ustaw timer tak aby wywoływał przerwanie przy danej wartości i w tym przerwaniu dodawaj jakąś zmienną o 1 i czyść licznik.
Tak fusebity jak sadzę ustawione poprawnie bo pozostałe PWMy oraz cała reszta działają poprawnie. Konflikt występuje jedynie przy Int0 i Ocr0 działających na tym samym timerze przy tych 16MHz ;/
Czyli najmniejszy okres wyniesie 20us a najdłuższy 1s. Rozwiązaniem jest pół-softwerowy PWM ze stałym wypełnieniem. Potrzebny Ci jest do tego tylko jeden Timer. A w jaki sposób chcesz ustalać tą częstotliwość? Przy zegarze 16MHz (może tem uC tyle osiągnąć?) to Ci daje 160 operacji na jedno przerwanie zegara. Powinno się udać :-).
2 serwa można zrobić całkowicie sprzętowo TCCR1A = _BV(WGM11); /* Fast PWM, ICR1 is top */ TCCR1B = _BV(WGM13) | _BV(WGM12) /* Fast PWM, ICR1 is top */ | _BV(CS11) /* div 8 clock prescaler */ ; OCR1A = 3000; // to jest chyba dla zegara 16 Mhz - to by odpowiadało impulsom 1.5 ms OCR1B = 3000; ICR1 = clockCyclesPerMicrosecond()*(...
To że wpiszesz F_CPU cos tam nie oznacza że procesor "magicznie" zacznie działać na 16MHz Atmegi mają 8MHz oscylator wewn i do tego ustawiony podzielnik 8. CZyli działają na 1MHz 1MHz / 64 / 25000 = 0.67HZ i tyle właśnie dostajesz. Aby mieć 16MHz to musisz mieć zewn oscylator + ustawic fusy Zresztą poczytaj o innych rejestrach timera bo nie tak się...
Procek niestety jest na 16MHz kwarcu wiec raczej trudno wygodnie wygenerowac tak niskie czestotliwosci na timerze. Czemu tak sądzisz? Atmega328?
Kolego patrzę na ten kod ze zgrozą, ale załadowałem do swojego Bascoma i trochę więcej zrozumiałem bo mozna sprawdzać referencje i skakać po kodzie. W przerwaniu co osiem taktów (nierealne) timer ma zliczać te twoje "niby" OCR. (Incr Licz_timera1 : If Licz_timera1 >= Ooo Then) Te OCR jest ładowane z tabeli gdzie najmniejsza wartość to 127 a najwieksza...
jak mam odmierzyć 170 cykli Ustawiasz timer w tryb pracy przy którym MAX = OCR1A zdaje się. Wpisujesz 170 do OCR1A i prescaller 1. Przerwanie przepełnienia będzie wywoływane co 170 cykli bez obciążanie procesora w międzyczasie. Dlaczego gdy podłączę do PD7 diodę LED i wystawię stan wysoki... Przecież PD7 jest odbiornikiem nie nadajnikiem i set_tx_pin_high...
Mój kod również działa. Na wyjściu jest dokładnie 4MHz dla rezonatora 16MHz. Przerwania nie są potrzebne ponieważ wszystko robi sam Timer i nie musi zgłaszać przerwań. Polecenie End jest w programach po to by wyłączyć przerwania i uruchomić nieskończoną pętlę gdyby program się wysypał. Myślę więc że w programie kolegi polecenie End również wyłączyło...
Proszę bardzo: [syntax=c] void USART_Init(void) { UCSRC = (1<<URSEL)|(1<<UPM1)|(1<&... // URSEL = 1 - korzystanie z rejestru UCSRC // UPM1 = 1 even parity // UCSZ1 = 1 i UCSZ0 = 0 8 bitowa transmisja UBRRL = 103; // 9600b/s przy F_CPU 16Mhz UCSRB = (1<<RXEN)|(1<<TXEN)|(1<&l... } void nadaj(char...
16MHz
Kolego, nawet nie napisałeś w jakim języku ten program piszesz... <ciach> Zbędne o ortografii usunąłem.
Witam, mam nastepujacy problem - napisalem timer(uzywajac timera 0) do kontroli czasu w programie(glownie serw). Ustawilem prescaler na 64, co przy kwarcu 16MHz daje 250kHz, czyli jeden takt timera odlicza 1/250000 s. czyli 0,000004s. Potem "timer pomocniczny" sumuje wszystkie przepelnienia do 1 sekundy (czyli tysiac razy). // Ustawienie licznika 0...
1. Nie mam pojęcia co to sa fusbity w dokumentacji też nie mogę znaleźć 2. Z tego co wyczytałem w instrukcji to prescaler można ustawić na różny od jeden gdy chcemy obniżyć pobór prądu strzelam że gdy go sami nie ustawiamy pozostaje domyślnie 1. ale znalazłem również coś takiego i po tym wnioskuję że domyślnie jest na timer 1 16MHz [url=http://www.arduino.cc/cgi-bin/yabb2...
Nie znam za grosz bascoma... Ale ogólnie to tak... Pogonił bym go z wewnętrznej PLL (64MHz) na 16MHz... To samo z zegarem timera... Dzięki temu częstotliwość dla PWM będzie jako taka... W zasadzie to sprowadza się to do zrealizowania timera 12-bit... W C łatwiej mi pokazać o co chodzi niż pisać esej... ISR (TIM1_OVF_vect) { if(timer_compare==timer_counter)...
Ten program w baskomie jest mało czytelny, nie wart nawet tego jednego punktu prowizji... Pozatym z powodzeniem można było użyć tylko jednego timera. Również generator 16MHz jest zdecydowanie na wyrost - do tak prostej aplikacji wystarczyłby kwarc zegarkowy 32768Hz, przecież mikrokontroler w tym układzie nie ma za wiele do roboty...
Słyszałeś o timerach?
przy 16MHz masz taktów w timerze az nadto. Jaki masz problem?
Proszę. Możesz sobie do testu skonfigurować jakąś diodę LED i sprawdzić czy miga co 0.5s :D W starszych wersjach Bascoma może będziesz musiał w linii konfigurującej Timer zamiast tych podkreślników dać spacje. [syntax=vbnet]Config Timer2 = Timer , Prescale = 1024 , Compare_a = Disconnect , Compare_b = Disconnect , Clear_timer = 1 Compare2a = 155 '10ms...
Wstępne założenie było na wewnętrznym oscylatorze bo mało nóżek. Ale to chyba i tak się nie zmieści- jeszcze jakieś wejścia potrzebne. Tak że może zmienimy nieco założenia- M32 i 16Mhz. A z jednym timerem? Może prescaler zmieniać w programie? Ogladam. Przełączę się na M23 i 16Mhz. P.S. //OCR1BL++; nie wiem po co to jest Żeby pamietać że może zastosować...
Jeśli nie ogranicza Cię miejsce, to zostaw ATMEGA8. Róznice w cenach sa pomijalne. Wybór uC jest tu w zasadzie obojętny a jedynym kryterium który trzeba brac pod uwagę to ilośc pinów. Pamięci przy tak prostym projekcie wystarczy praktycznie w każdym z AVR. Kwarc możesz spokojnie zostawić 16MHz, podobnie jak resztę elementów. Zasilanie jak najbardziej...
A skąd wiadomo, że działa akurat na 8kHz? A widzisz sie pomyliłem bo Atmega8A myślałem że on działa na 8MHz a standard to 16MHz wiec w rejestrze (1 << CS10) Timer ustawia 1:1 wiec sygnał może być 16kHZ jak atmega ma 16MHz..
No tak jak to napisałem to faktycznie wygląda dziwnie... Zapomniałem napisać dość istotnej rzeczy... Zegar systemowy to po podziale 16MHz natomiast sam timer tak na prawdę ma zegar 64MHz... Sygnał pochodzi z wewnętrznej PLL...
Powiedzcie mi proszę, jaką częstotliwość ma zegar clk-io w atmedze16 w stosunku do rezonatora kwarcowego np. 16MHz? Chodzi konkretnie o zliczanie impulsów przez timera/countera1 z preskalerem =1. Dogooglać się tego nie mogę.
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?
Pokaż, jak w przerwaniu przeładowujesz timer wartością początkową. Pozdrawiam Mariusz
Witam. Wybacz ale chce mi się rozpisywać. Ustawianie 1 sekundy dla zegara 16MHz [syntax=c] OCR1A = 0x3D08; TCCR1B |= (1 << WGM12); // Mode 4, CTC on OCR1A TIMSK1 |= (1 << OCIE1A); //Set interrupt on compare match TCCR1B |= (1 << CS12) | (1 << CS10); // set prescaler to 1024 and start the timer[/syntax] to co wychodzi z prescalera...
\ 1. Rozumiem, że ustawienie odpowiedniej częstotliwości da mi czas, który jest mi potrzebny? Tak, program z tego postu demonstruje rejestry i bity których odpowiednie ustawienie spowoduje daną częstotliwość przerwać timerów, a w konsekwencji odpowiednią częstotliwość wysyłania tekstu / migania diodą, jednak obecny ustawiony czas jest przykładowy, nawet...
Zawsze możesz taktowac tym sygnałem "wzorcowym" procka. Niektóre kontrolery ATtiny posiadają PLL do taktowania szybkiego timera, pomyśl nad wykorzystaniem. Pozdrawiam
1. assembler 2. timer 0x41 0x56 0x45!!
W tej chwili preskalery w timerach są ustawione na 8 i to jest mój problem - przy 16MHz prescale 8 mam idealną dokładność generowania dźwięków. Przy 32MHz musiałbym mieć prescale 16 w timerach a z tego co widzę kolejnym dostępnym jest 64 co spowoduje że błąd generowanej częstotliwości będzie duży dodatkowo zmniejszy się rozdzielczość regulacji czasu...
Kolego, przy tym kwarcu strasznie będzie Ci się to wolno rysowało. Nie lepiej podłączyć 16MHz i w przerwaniu od Timera wyliczyć sekundę? Wyświetlacz będzie trochę sprawniej chodził.
Witam. Potrzebuje pomocy: muszę liczyć czas trwania impulsu. Problem jest taki, że czas trwania tego impulsu to kilka us. Przydłby się jakiś licznik scalony. Powiem tylko tyle, że taki jak wykorzystywałem w mikrokontrolerze Atmega8 (przy cz. 16MHz) nie wystarczył...
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...
Dzięki, zasadę pomiaru znam, ale tu chodzi o to żeby zrobić na tym konkretnym procku. Chyba coś wymyśliłem, pozostanie sprawdzić w praktyce. 55us to 880 cykli timera, zakładając że Fosc to domyślne 16MHz i preskaler=1 (zlicza cały czas i ciężko go kontrolować). Bramkowanie z komparatora. W przerwaniu będę zwiększał zmienną mierzącą czas .
Witam, mam pytanie jak sterować serwem za pomocą timera 8-bitowego gdy mikrokontroler chodzi z prędkośćią 16MHz. Uzywając największego preskalera czyli 1024 wychodzi że jedno zliczenie timera będzie co 0.064ms więc 20ms nastąpi gdy timer zliczy 312 impulsów a z racji tego że jest to timer 8 bitowy maksymalnie może zliczyć 256 imuplsów. Jak rozwiązać...
DDRD|=(_BV(PB5) | _BV(PB6) | _BV(PB7)); DDRD|=(_BV(PE3) | _BV(PE4) | _BV(PE5)); Widzisz tu subtelną różnicę...? Działające wstawki dla pwm na Tim1 i Tim2: [syntax=c]void Timer0Init(void) { DDRB|=(1<<4); TCCR0 |= (1<<WGM01)|(1<<WGM00)|(1<... OCR0=0; } void Timer2Init(void) {...
Jeśli jest to prosty program korzystający ze sprzętowej generacji PWM, a timer się tylko tym zajmuje, to być może łatwiej będzie zostawić kwarc 16mhz a w hexie odnaleźć miejsce gdzie jest konfigurowany timer i zmienić parametry jego konfiguracji. Swoją drogą co Ci daje zmiana częstotliwości PWM z 2kHz na 1,4kHz?
Witam mam taki problem gdy uruchomię ten program to żarówka bardzo miga. Zliczyłem ilość wywoływanych przerwań i wyszło że na 400 detekcji zera jest 100 przerwań od timera w czasie 4 sekund. Więc detekcja zera działa prawidłowo. Używam Atmega168, kwarc 16Mhz. F_CPU ustawiłem w kompilatorze i działa napewno 16Mhz http://obrazki.elektroda.pl/4656291300_1...
Wojtek - wchodzisz tutaj: [url=http://www.frank-zhao.com/cache/avr... z kalkulatorem 16MHZ z preskalerem 1024 oznacza że: - 1 sekunda nastąpi po 15625 cyknięciach timera - przerwanie następuje przy przepełnieniu jeśli wybierzesz OVERFLOW, ale może tez nastąpić przy COMPARE, od tego zależy jaką wartość wpiszesz do timera (czy odejmiesz...
W kodzie jest sporo błędów. Nie do końca jestem pewien, czy rozumiem, o co chodzi, ale jeśli przerwanie INT0 jest od przycisku, to nie ma prawa działać poprawnie, a przyczyna efektu, który obserwujesz, leży w operacjach na zmiennej b. Takie przerwanie po wystąpieniu musiałoby być blokowane przy pomocy timera na jakieś 30 ms, co jest znacznie bardziej...
Musisz ustawić tak timera, aby odmierzał 3/26s i generował przerwanie. W zależności od częstotliwości źródła sygnału zegarowego może zdarzyć się tak, że nie uda się z zadowalającą precyzją ustawić timera do tego zadania. Wtedy możesz rozłożyć zadanie na 2 kolejne przerwania zmieniając ustawienia timera (prescaler, początkową wartość licznika timera)...
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...
Chyba wszystkie AVRy (nie napisałeś jakiego używasz) mają wiecej niż jeden timer. Używasz wszystkich?
Witam, Nie będę zakładał nowego tematu. Mam podobny problem. Atmega 2560 + 16Mhz. Przy tym ustawieniu timera przerwanie powinno być generowane co 0,5s. Natomiast jest generowane co 1s. 256/16000000= 16us*65536=1,048576s 65536-31250=34286 co daje 0,5s [syntax=basic4gl] $regfile = "m2560def.dat" $crystal = 16000000 Config Portg.5 = Output : Portg.5 =...
Kolego. na dzień dobry zmniejsz częstotliwość timera. bo licząc 16MHz/256 to ponad 60KHz uwzględniając pojemności bramek i złącza w LED-ach już mogą być problemy. Starczy jak użyjesz koło 1KHz. Nie chce mi się sprawdzać w nocie katalogowej bo siedzę na GPRS-ie i limity duszą, ale zrób prosty test set Wy delay(x) clr Wy delay(y) i zmieniaj x i y (pamiętaj...
Odświeżę nieco temat. Mianowicie poszukuję 16 bitowych liczników w max. częstotliwością zliczania ok 120MHz potrzebnych własnie do zbudowania miernika czestotliwości paradoksalnie opartego o mikroprocka. Problem w tym, że np. PIC16F628 może łyknąć na wejsciu Timera 1 max. 16MHz i wszystko byłoby w najlepszym porzadku gdyby nie fakt, że odczyt ma być...
Witam. Pracujesz na wewnętrznym oscylatorze z PLL co daje 32MHz ale . Timer już nie jest taktowany zegarem 32MHz ale 16MHZ FOSC/2 = TCY . Kolejna rzecz to to że chcesz aby przerwanie występowało co 125ns co przy tej częstotliwości taktowania timera jest nie realne. Przecież obsługa przerwania też trwa ileś tam cykli . Po testuj w symulatorze a w szczególności...
Bez kalkulatora "na czuja" już myślę że przy 16MHz i 8Bit Timer i prescaler 256 nie da się uzyskać 50Hz.. Powiedz dlaczego nie użyjesz gotowych instrukcji konfigurujących Timer? Pytam z ciekawosci. Albo dlaczego nie chcesz użyć gotowego polecenia http://wiki.mcselec.com/bavr/CONFIG_SERV... 50Hz to cała era dla mikrokontrolera... Jeden timer dla wszystkich...
Otwórz sobie pdfa od procesora zajrzyj w sekcje Timer2, poczytaj, przejdź do opisu rejestrów i poustawiaj jak uważasz. Ogólnie dla liczników wybierasz prescaler czyli podział między zegarem (16Mhz dla Arduino) a wejściem licznika. Timer2 jest 8bitowy ma 256 wartości, więc masz kolejny podział. Jak potrzebujesz precyzyjnie to są tryby gdzie możesz zrobić...
Witam, Próbuję zmusić timer do wygenerowania sygnału o częstotliwości 16KHz i wypełnieniu 50%. Napisałem coś takiego: TCCR0=25; OCR0=499; Kwarc megi ma 16MHz, więc wychodziłoby na to, że timer 0 będzie działał w trybie CTC z częstotliwością 16KHz, zmieniając stan wyjścia OC0 na przeciwny. Niestety, pomiar multimetrem (nowy, sprawny) daje wartość ok....
Nie da sie ? a jaką największą liczbę da sie zapisać w atmelu bo to że timer nie zapisze takiej liczby to nie oznacz że nie da sie tego zrobić wykorzystując pośrednio timer ...
Szkoda czasu na przeładowanie Timera jeśli może on pracować w trybie CTC. Ustawiasz raz i zapominasz. Poniżej przykładowy kod dla 50Hz ze stałym wypełnieniem (zakomentowane) lub regulowanym. [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 16000000 Config Portb.1 = Output Led Alias Portb.1 Config Portc.5 = Output Freq Alias Portc.5 '### Ustawienia...
Ostatecznie użyłem AD7528, który ma podobny interfejs, wymaga jedynie podania sygnału WR. Działa świetnie. Zastanawiam się tylko dlaczego wejście Rfb podłączone do GND dało dobry wynik, a podłączone tak jak w specyfikacji powodowało pojawienie się na wyjściu sygnału 0. Wynika to pewnie z mojej niewiedzy elektronicznej... PS. Poeksperymentowałem z PWM...
Kod, który pokazałeś wrzuciłem na zestaw testowy z Atmega644P i działa tak jak powinien. Co prawda na kwarcu 16MHz, ale miganie diodą występuje kilka razy na sekundę. Pobawiłem się też wartością OCR1A i zachowuje się zgodnie z oczekiwaniem. Zwiększenie OCR1A zwalnia miganie, zmniejszanie przyśpiesza. Powinieneś zatem szukać błędu gdzieś indziej, w sprzęcie,...
Jednofazowy falownik zrobi, całkiem przyzwoicie, na pojedynczym timerze z PWM z deadtimem zrobionym sprzętowo. Trójfazowego na byle czym nie zrobi, albo zmuszenie skromnych zasobów AVRka do tego będzie wymagało więcej pracy niż opanowanie timera w STMie. Ograniczeniem w 8bit procku taktowanym 16MHz jest przede wszystkim szybkość, sinusa nie policzy...
Nie piszesz jaki AVR i jaka częstotliwość zegara więc odpowiedź masz tak samo precyzyjną jak precyzyjny w zadawaniu pytań jesteś Ty. Weź Timer z CTC i ustaw sobie częstotliwość 76000 Przykładowo dla timera ośmiobitowego przy 8MHz i preskaler 1 ustaw wartość 104 Dla 16MHz ustaw 209. Częstotliwość powinna wyjść 38kHz ;) Taki Timer ma możliwość Togglowania...
Tylko jest tego rodzaju problem iż atmega taktowana zegarem 16mhz przy preskalerze 8 i 8 bitowym liczniku minimalny czas jest w porządku (0,5us) maksymalny natomiast 128us więc dalej musze inkrementowac w przepełnieniu zmienną . Dodatkowo z tego co widze input capture przypisany jest tylko do timera1 ja go używam do innych celów (2 kanałowy pwm). Poradziłem...
Nie wiem co tam chcesz optymalizować bo nie wiemy na co się program uskarża :D Najczęstszym spowalniaczem nie jest ADC tylko zbyt częste odświeżanie/mielenie po wyświetlaczu. Jeśli nie wykorzystujesz pinu WR wyświetlacza to jest on obsługiwany stałymi opóźnieniami czasowymi. Wtedy warto po nim pisać tylko jeśli coś co ma być widoczne się zmieniło. Np....
Timer1 mam uruchomić z praskalerem x1 Skąd takie założenie, że masz? Gdzieś było napisane, że masz ustawić inny preskaler dla T1 niż dla T2? Jeśli uruchamiasz timer z preskalerem 8 to przy taktowaniu 16MHz, zmienia Ci się jego wartość co 0.5us. A więc zawartość TCNT1 wystarczy podzielić przez 2 aby uzyskać czas w us. Poza tym sprawdź jeszcze raz swoje...
Program na pewno można zkompresować. Konfiguracja Timera to max kilkasaście B pamięci programu.
Wydaje mi sie, ze jeśli masz kwarc 16MHz i chcesz odmierzać 1 sekunde na timerze 8bit, to nie dasz rady tak łatwo. Lepiej jest odmierzać wtedy powiedzmy 1000Hz, co daje preskaler 64 i 250 cykli dla trybu CTC, a potem w przerwaniu dla TIMER0_COMPA inkrementować jakąś zmienną co 1 az do 1000. Wtedy uzyskasz 1 sekunde. Ewentualnie preskaler 256, 250 cykli...
Problem pewnie leży w czasie koniecznym do obsługi przerwania. Jeżeli timer przepełnia się co 16 cykli procesora, to nie nadąża z obsługą przerwań i w końcu dostaje reset z IWDG. Proponuję przemyśleć koncepcję programu, ponieważ generowanie przerwań za pomocą timera co kilkanaście cykli zablokuje potencjał nawet najlepszego procesora. Opisz może co...
Witam Na wstępie zaznaczam, że AVR-ami zajmuje się dopiero od tygodnia :). Mam problem jak w temacie. Potrzebuję aby timer 1 (16 bitowy) liczył od ustalonej wartości początkowej, a po wystąpieniu przepełnienia wygenerował przerwanie i się zatrzymał. Potrzebuję odliczyć 25ms. Attiny taktowany jest zegarem 16MHz, dzielnik częstotliwości dla timera 1 ustawiłem...
Wszystko fajnie ale ja potrzebuję sprzętowy spi do pobierania danych z PC. Ma czuwać i gdy nadejdzie impuls przerwać program i przełączyć się w tryb odczytu. W powietrzu miałem MR więc już poprawione, OE mam do proca wpięty i ustawiony na LOW. 595 działa już prawidłowo. Przy 240x8 delikatnie pulsuję... ale mnie to irytuję :). Jest taktowany 16Mhz. Wykorzystany...
Przerwania wcale nie są złe tylko dlatego że tobie się na nich nie udało. To trzeba zrobic w assemblerze. Ale nawet przy taktowaniu 16MHz nie podzielisz częstotliwości większej niż powiedzmy 1MHz. Ja bym walną to na Timerze w trybie CTC. I ustawił Timera tak żeby generował sprzętowo sygnał na swoim pinie IO. Będzie i szybkie i proste. Wtedy przy taktowaniu...
Zerknij na ten kod, zrobiony na rejestrach,... prosto tłumaczy co i jak a przy okazji ma tez DutyCycle. Jak niepotrzebne to ustaw 50%. https://www.elektroda.pl/rtvforum/viewto... Dodano po 8 Może inaczej... uC prosto ze sklepu z podzielnikiem CKDIV8 czyli kręci sie 1MHz Ty chcesz 2kHz=2000Hz 1000_000Hz/2000Hz = 500 Wystarczy...
Konstruuję częstościomierz o zakresie 1Hz-20Mhz. Częstościomierz ma mieć zastosowanie w generatorze funkcyjnym, więc musi mierzyć częstotliwość z przebiegów na jego wyjściu t.j. sinus, prostokąt i trójkąt. A nie wystarczy mierzyć prostokąt? Witam ! Częstościomierz zbuduję na liczniku binarnym 74LS293, dzielącym częstotliwość przez 4, przez co mierząc...
Witam Mam atmege 128au -wersja 16Mhz (albo 20?) W bascomie można ustawić max 8MHz, podanie większej wartości nic nie zmienia - sprawdziłem oscyloskopem sygnał generowany przez przerwanie od timera. W jaki sposób ustawić 16 (20) MHz? Przeniosłem z Układy programowalne.
W bascomnie ciężko zrobić LED + Ds18b20 wszytko psuje Waitms 750. Zwiększ do 8 a jak możesz do 16MHz kwarc. A od kiedy to musimy czekać 750ms nie robiąc nic innego? Od czego mamy timery? Przepraszam najmocniej Kolegę, ale jeśli Kolega tego zrobić nie potrafi to: 1. Nie oznacza że się tego zrobić nie da - ja nie potrafię zbudować komputera klasy PC...
Policzmy: Procesor pracuje z zegarem 16MHz, to daje 62.5ns na takt. 62.5ns*64t=4us Czyli Timer zwiększany jest co 4us Polecenie WAITUS 250 jest o wiele dłuższe od tej wartości, a tylko co któreś porównanie jest równe wielokrotności 4uS i wartości 62500 w liczniku... Czyli zumek ma rację...
Używam Timera1 z Atmega164P w trybie CTC, Atmega ma kwarc 16MHz, interesujący kawałek programu wygląda tak: Konfiguracja Timera: void Timer1_Init(void) { DDRD |= (1<<PD7); // PD7 wyjście PORTD |= (1<<PD7); // PD7 <= 1 TCCR1B = (1<<WGM12)|(1<<C...
do pomiaru częstotliwości (czyli przy taktowaniu 16MHz pomiar do ok 8MHz o dokładności 1Hz) Jest to oczywista bzdura. Wg Ciebie te przerwania to się w 1 takcie wykonają?
Miałem w końcu chwilę czasu, poskładałem "maszynę która robi ping" i zamieszczam efekty. Użyty procek MSP430F2274 ( miałem wlutowany w płytkę uniwersalną więc wygrał konkurs ) Użyłem TimerA i TimerB ( ten drugi ma możliwość synchronicznej aktualizacji rejestrów ) Kompilowane mspgcc, stąd nieco inny wygląd. Procesor chodzi na 16MHz - zależało mi żeby...
Najważniejsze zadania "czasu rzeczywistego" można wykonywać w obsłudze przerwania timera. Usługi można wpisać w podprogramy (z jez C: funkcje) i w pętli głównej wybierac które mają byc wykonywane. Komunikacje z uzytkownikiem mozna na ogół wpisać w pętli głównej, gdyz ona zwykle jest potrzebna do podania danych przed wykonianiem zadania, lub po czyli...
Witam dopiero zaczynam przygodę z programowaniem mikrokontrolerów i mam pytanie odnośnie odmierzania czasu na uc atmega 16. Odmierzam czas przy pomocy timera1 kwarc 16MHz. Z obliczeń wynika, że przy preskalerze 1024 muszę odliczyć 15625 impulsów więc ładuję do timera wartość 49911 i wtedy uc odmierza mi około 4 sekund zamiast 1, natomiast gdy prescaler...
Witam. Za pomocą tego timera chce wygenerować na porcie PB1 sygnał zegara potrzebny do wysterowania urządzenia i robię to tak: void Timer_1_Init(void) { // Timer 1 TCCR1A = 0x40; TCCR1B = 0x09; // Timer 1 prescaler at /1 OCR1A = 0xfa; // for 32khz at 16Mhz DDRD |= 0x20 + 0x80; DDRD &= ~0x40; DDRB |= 0x02; } Niestety sygnał nie pojawia...
No i właśnie ze tego powodu każdy projekt powinno zaczynać się od spisania wymagań, a następnie od wyboru mikrokontrolera na podstawie tych wymagań. Znajdź taki uC, który ma tyle kanałów PWM o programowanej częstotliwości i wypełnieniu, ile potrzebujesz, a nie staraj się na siłę zrobić na tam uC, jaki masz, czegoś, czego on nie potrafi. Jeśli liczba...
Odniosę się tylko do nadajnika, bo mam wrażenie, że autor wątku w tej chwili właśnie nadajnik próbuje wykonać. Nadajnik możesz to zrobić w oparciu o timer, na którym ustawisz sobie określony zegar - np. te porzą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...
rezystorem wieloobrotowym Może lepiej impulsator zastosuj. Sygnał na wejściu to prostokąt o wypełnieniu 50% i amplitudzie 0- 5V Z tą amplitudą to nie przejdzie, Atmega to standard 5V CMOS, więc jak na wejściu z amplitudą zejdziesz poniżej 1,5V to będzie to odczytywane jako stan niski, czyli ciągle "0". Samo wejście obsłuż przez np. przerwanie i odczyt...
na wyświetlacz timera nie potrzeba, jeśli to zwyklły 16x2 to on nie wymaga zbyt wiele. Timery wtedy możesz na inne rzeczy wykorzystać. Jak odczytujesz temperaturę? Wykorzystujesz watchdoga, resetujesz go właściwie? Pytasz o watchdoga - nie konfigurowałem go, czy on jest z automatu włączony? sensors.requestTemperatures(); temperatura = sensors.getTempCByIndex(0);...
mam za zadanie uruchomienie sonaru dzialajacego na 40kHz Procek ma sluzyc jako generator dla tego sonaru mysle nad takim rozwiazaniem do set sonar waitus 12.5 reset sonar waitus 12.5 loop tylko czy taki program wygeneruje mi napewno sygnal prostokatny o czestotliwosci 40kHz ?? czy moze lepiej napisac program na timerach ?? tylko wtedy ile impulsow wewnetrznych...
...nie odrzucam sposobu mierzenia prędkości poprzez pomiar czasu pomiędzy kolejnymi impulsami. Lecz nie bardzo mam pomysł jak to zrealizować programowo. Będe wdzięczny za podpowiedzi. W sumie to jest bardzo proste, wykorzystaj do tego jakiś timer z dość dużą częstotliwością (czym większa tym dokładniejszy pomiar). Zerujesz go w momencie przyjścia impulsu,...
Witam, Oczywiście steruję diodami LED, układ już dawno zmontowany, ale nim wdrożę go w życie, naszło mi na myśl wprowadzić parę udogodnień, to 32kanałowy sterownik RGB po interfejsie modbus. Koncept jest następujący: Co 255 cykli wywoływane jest przerwanie (przepełnienie timera 0) które wymusza zwiększenie programowego licznika 'sofcount', kiedy zrówna...
Zrobiłem to co podałeś trochę poprawiłem efekt ten sam. Poszedłem też na skróty i wyliczałem tylko okres resetując timer też ten sam błąd.. Zastanawiam się czy aby na pewno attiny ma 16MHz bo są źródła które podają 16,5MHz korzystam z Digispark Attiny85 i ze względu na USB jest tak taktowany, zastanawiam się o ile to prawda ze 16,5MHz jak uciąć te 0,5Mhz...
Jeśli potrzebujesz sekundę to prócz kwarcu 16MHz podłącz kwarc zegarkowy 32768Hz i puść Timer2 asynchronicznie. Timer0 się zwolni. [syntax=basic4gl]Config Timer2 = Timer , Async = 1 , Prescale = 128[/syntax]
Witam wszystkich, jestem w trakcie robienia Czasomierza/Okresomierza. W załączniku umieściłem schemat. Jeśli chodzi o Sharpy, to dla nich będą osobne malutkie płytki. Nauczyłem się już obsługi wyświetlacza, ale utkwiłem w samym pomiarze czasu. Używam zewnętrznego kwarcu 16Mhz. Moje pytanie(nigdy nie używałem timerów), jak badać moment kiedy stan niski...
ale schemat uzywany 16mhz That's no matter. 16MHz is greater than 8MHz so the condition has been fulfilled. But in default code #ifndef F_CPU #define F_CPU 16000000UL // 16 MHz clock speed #endif this example not for real project code But this meaning program not working if not 16mhz frenquency, or this fuse in latest post is for 16mhz ? what have...
Zliczaj impulsy timerem w trybie licznika. Nie potrzebujesz dwóch przerwań timera - użyj jednego, np. 800 Hz - co 80 przerwań masz odliczony odcinek 100 ms.
mam tak: .org 0 rjmp reset ;po resecie .org $002 rjmp detekcja0 ;przerwanie od detektora zera .org $012 rjmp timer0;przerwanie od timera .org 40 reset: program i ten kod nie działa a ten działa: .org 0 rjmp reset ;po resecie .org $002 rjmp detekcja0 ;przerwanie od detektora zera .org $030 rjmp timer0;przerwanie od timera .org 40 reset: program...
A jeżeli jesteś bardzo początkujący to po prostu użyj rezonatora powiedzmy 16MHz i już będzie znacznie dokładniej. Nie będzie to bardzo dokładnie ale dużo lepiej niż wewnętrzny oscylator.
oto jak ja to rozumiem: rezonator podlaczony do mikrokontrolera ma 16MHz wiec 16 milionow razy tyka na sekunde wiec jedno tykniece trwa 1/(16000000) sekundy at89s52 na kazda operacje (czyli podniesienie timera o jedne) zzera 12 tykniec wiec efektywna czestotliwosc = freq/12 = 1.(3) MHz = 4/3 MHz wiec musi tyknac TIMER (nie kwarc) 1.3 miliona razy zeby...
atmega16 16mhz przerwa 16mhz kwarc 16mhz
przesuniecie obrazu żelazko pokrętło dioda voltage
szybkość internetu netia przesterowanie wejścia tunera
Odwrócony obraz kamery cofania w radiu Android - jak naprawić? Trzaski i piski w słuchawkach JBL - przyczyny i rozwiązania