Funkcja delay_ms() nie zależy od timera, więc prescaler nie ma dla niej znaczenia.
Witam, Z racji tego ile już zrobiłem na atmegach to aż wstyd pisać taki post, ale ręce już mi opadają.... Mam układ ATmega1284p, na który przenoszę kod obsługi modbus'a RTU który już skutecznie odpaliłem na kilku innych atmegach. Ta jednak jest oporna. Drogą śledztwa doszedłem, że winny jest niedziałający timer0. Zacząłem więc go rozbierać na czynniki...
W sobotę o tej porze mogę się mylić :P W tabelce pisze chyba wyraźnie, że dla tego trybu CTC który ustawiłeś to okres ustala się w OCR1 A i raczej powinieneś wtedy uruchomic przerwanie od OCIE1 A i oczywiście wskazać adekwatny wektor przerwania. https://obrazki.elektroda.pl/2405063000_... Sprawa 1 sekundy jest prosta. (8MHz/256)-1=...
Jaka jest maksymalna częstotliwość pracy kwarca wewnętrznego Atmegi8? ATmega nie ma w środku kwarc u , tylko oscylator RC, to tak gwoli ścisłości. Mam ustawione 4Mhz i kiedy ustawiam prescaler w timerze 16bitowym na 64 (TCCR1B|=1<<CS11|1<<CS10;) tak aby przerwanie spowodowane przepełniniem timera było wywoływane mniejwięcej co 1s 4000000/64/2^16...
Dodatkową niedogodnością jest to że Atmega2560 ma wspólny układ prescalera dla Timerów 0 1 3 4 5. a to nie wystarczy?: Timer/Counter 0, 1, 3, 4, and 5 share the same prescaler module, but the Timer/Counters can have different prescaler settings . Pytam bez analizy kodu. Nie definiuj F_CPU w kodzie z tych powodów: http://mikrokontrolery.blogspot.com/2011...
Musisz naleźć takie wartości do zliczania przerwań z zegara przy których uzyskasz największą dokładność. Możesz też spróbować użyć rezonatorów zegarkowych: 32.768kHz 4.194304MHz. W nich częstotliwość jest potęgą dwójki stąd łatwo się dzieli do uzyskania 1Hz. Może będą też dokładniejsze ale kto wie.
[syntax=c] #define RELOAD_VAL 131 int main (void) { TCCR0=0x8B; TCNT0 = RELOAD_VAL; TIMSK=(1<<TOIE0); sei(); while(1) { } } SIGNAL( SIG_OVERFLOW0 ) // 1 ms { TCNT0 = RELOAD_VAL; } [/syntax]
Na 100% w Prescaler było to R na końcu? Bo w timerach jest Prescale, ale w ADC jest Prescaler ;) Bo skopiowałem dokładnie ten kod, który udostępniłeś, dodałem tylko i wyłącznie to r i normalnie się skompilował na bascom-avr 2.0.7.5
(at)seba_x:A co to za bzdura?:> • Peripheral Features – Two 8-bit Timer/Counters with Separate Prescaler, one Compare Mode – One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode A co do pytania autora, nie, zliczanie umożliwiają tylko dwa pierwsze timery. Trzeciego można używać jako wewnętrznego. Nie tylko...
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...
Bity CS00 i CS02 od preskalera są w rejestrze TCCR0B, a nie TCCR0A. Masz preskaler na 0 więc timer nie zlicza.
Może spróbuj sterowania w inny sposób - za pomocą przerwania INT2 (wywoływanego przyciskiem) uruchamiaj i zatrzymuj licznik TC0 (parametry PWM są ustawione u Ciebie poprawnie) tzn ustawiaj bity TCCR0|=(1<<CS00)|(1<<CS01) kiedy chcesz uruchomić licznik i zeruj je jeżeli chcesz zatrzymać. Samo ustawianie wartości wypełnienia czyli rejestr...
\ 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...
Poi pierwsze. Do BASCOM-a jest pomoc - także po polsku, której to zresztą jestem autorem. Wersję on-line (beta) znajdziesz na mojej stronie WWW. Jak one działają? Zliczają impusy. Albo z prescalera, albo z zewnątrz. Patrz nota katalogowa. W którą stronę zliczają? Zwykle liczą w górę. W trybach PWM liczą też w obie strony. Patrz nota katalogowa. Jak...
Niestety Bascom jest niedorobiony. Ilez to ja niekiedy spedzilem czasu bo cos mi nie chodzilo. Co wersja to inny blad. W jednej wersji nie chodzily mi np. timery na Atmega 16, prescaler blednie sie ustawial itp. Warto jest podgladnac rejestry i sprawdzic czy aby Bascom nie wpisal tam glupot. Jesli wpisal glupoty a to najczesciej jest przyczyna probowac...
Powrócę jeszcze do tematu. Timery programowe to objaśnił Mirekk36 w swojej książce oraz artykułach i wideo poradnikach, bardzo dobrze je się stosuje. Jest to proste, wystarczy ustawić jakiś timer w tryb CTC i wywoływać przerwanie co jakiś zamierzony czas (stosuje około 10ms). F_CPU/Prescaler/100 Zaokrągloną wartość wpisujemy do rejestru OCRx. W przerwaniu...
Pomysł pierwszy: zapisz poprawny wzór na zawartość rejestru okresu OCR #define PERIOD (F_CLK / PRESCALER) Pomysł drugi: załaduj poprawną wartość: OCR1A = PERIOD - 1; Pomysł 3: Takie użycie przerwania kompletnie nie ma sensu. Wyłącz przerwanie i testuj znacznik timera z rejestru TIFR w pętli głównej. Pomysł 4: Zamiast printf użyj czegoś prostszego -...
Po pierwsze, timer liczy od 0 do 255, ale to oznacza 256 impulsów pomiędzy przepełnieniami, czyli powinno być 256, a nie 255 * 128us. Po drugie zaokrągliłeś wynik z 32.64 do 32 przed dzieleniem, co w efekcie dało niedokładny wynik ilości przepełnień. W rzeczywistości częstotliwość przerwań można obliczyć dużo prościej: ( 8000000 / 1024 ) / 256 = ok. 30,5176.....
Chcialbym napisac najprostrzy program aby sprawdzic czy progra mi wogole wchodzi w przerwanie czyli czy zapali diode. Ale zupelnie nic sie nie dzieje. Zarówno symulacja programowa w AVR Studio, jak i program uruchomiony na realnym sprzęcie działa poprawnie. Albo się pomyliłeś co do podłączenia diody, albo procesor jest uszkodzony. Po drobnej zmianie...
$regfile = "m8def.dat" Config Pinb.1 = Output $crystal = 1000000 Config Timer1 = Timer , Prescale = 64 Config Timer0 = Counter , Edge = Rising On Timer1 Odmierz_1s Dim Licz As Byte , I As Byte Enable Interrupts Enable Timer1 Start Timer1 Timer1 = 65535 - 15625 Do Loop End Odmierz_1s: Timer1 = 65535 - 15625 Incr Licz If Licz = 5 Then Licz...
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...
... Proszę o szczegóły. Dlaczego oczywiste jest, że timer że 16-bitowy odliczy 1s? Zakładamy że taktujemy kwarcem 4MHz. Jeden takt to 1/4 000 000=0,25us. 16 bitów to 65536 cykli. 65536cykli*0,25us=16,384ms Proponuję więc zliczyć 100 cykli 10-cio milisekundowych. ilość cykli = 10ms/0,25us=40000 cykli. Wpisujesz więc do timera 40000 i czekasz aż się...
zapewne to wina wewnętrznego kwarcu i liczenia zmiennoprzecinkowego. A propos ta obsługa przerwania jest zdecydowanie za długa. I zmiennoprzecinkowe po co? PS. taką metodą RTC nie wyjdzie najlepszej jakości. Timer 2 asynchronicznie z kwarcem 32,786.
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...
Działa. Pewnie o czymś zapomniałeś na wstępie. Mój działający kod: .include "m128def.inc" .cseg .org0x0000 rjmpreset ;skok po resecie systemu .org0x0018 rjmpdata ;skok po wykryciu zgodności reset: ldi r16, high(RAMEND) out SPH, r16 ldi r16, low(RAMEND) out SPL, r16 rcallKONFIGURACJA_TIMER1 sei loop: nop rjmploop ;......
Coś takiego znalazłem. Co prawda na Atiny ale można przerobić. [syntax=c]// // Talking to ultrasonic sensor HC-SR04 with an ATtiny84, and // sending distance data using serial communications. // // electronut.in // #include <avr/io.h> #include <string.h> #include <util/delay.h> #include <avr/interrupt.h> #define F_CPU 8000000...
Po niewielkich zmianach powinno działać też na Attiny85. Wrzucam kod dla Attiny85 (nie testowany; nie mam jak): [syntax=c]//############################... // SPWM implementation for Attiny85 // Clock frequency 8MHz internal clock oscillator // High Fuse: 0xFF, Low Fuse: 0xE2 // // Signals generated: // - SPWM...
Witam Układ jak w opisie, a mam probem ze zrozumieniem jaka jest częstotliwość przed (preskanem) prescalerem (? ), z lektur wynika że to częstotliwość zegara procka (czyli w tym wypadku 16M). Tak , to jest prawda. Prescaler, to pewnego rodzaju 10-bitowy, binarny licznik z 'odczepami' (tu wykorzystywany jako dzielnik w zależności od podłączenia 'odczepu')....
Stwierdzenie dotyczące RTC wynika z tego, że timer2 może pracować asynchronicznie z zewnętrznym kwarcem zegarowym. Można mu podać 32768Hz, t2 będzie takim zegarem (lub wynikającym z działania prescalera) taktowany - to jak wykorzystasz timer zależy od ciebie: możesz np ustawić go w trybie CTC przy prescalerze /128, wtedy będzie się przepełniał równo...
1. W jakim języku piszesz? 2. Kalkuluje się to tak: Masz kwarc 16 000 000 Hz (16 MHz) i dajesz sobie jeden z dopuszczonych prescalerów, np. 64 i wtedy timer zlicza Ci impulsy z częstotliwością 16 000 000 / 64 = 250 000 Hz, czyli jeden impuls timera to 4*10^-6 s lub inaczej aby odmierzyć 1s musisz zliczyć 250 000 impulsów, Jako, że Timer0 jest 8 bitowy...
waitms 20 Zostanie to skompilowane do pętli, której czas wykonania wyniesie ~20ms (taktowanie procesora deklarujesz poprzez zmienną proprocesora $crystal lub w opcjach projektu), do dokładnego pomiaru czasu można wykorzystać timer.
Kwarc 1,8432MHz, prescaler 1024, timer w trybie CTC na 180 taktów. Kwarc 2,4576MHz, prescaler 1024, timer w trybie CTC na 240 taktów.
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.?
To co napisał kol. Krauser jest bardzo istotne, ponieważ włączasz przerwanie od porównania (1<<OCIE1B), a nie masz funkcji jego obsługi, co de facto powoduje skok do adresu 0000h, czyli rozpoczęcie działania programu od początku.. Drobna uwaga do komentarza: [syntax=c]TCCR1B |= (1<<CS12)|(1<<WGM12) ; // prescaler 512[/syntax] W Atmega8...
Witam... Generalnie rzecz biorąc procedury opóźnienia czasowego nie nadają się do modulowania diody IR... Częstotliwość nie jest zbyt stabilna to raz... Dwa nie uzyskasz 36kHz musisz skorzystać z dobrodziejstw timera... Np. tak... #include<avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <inttypes.h> int...
Kod piszę "na sucho", więc lepiej sprawdź czy działa.[syntax=c] #include <avr/interrupts.h> void timer0_init(void){ TCCR0 = _BV(CS02); //Mode 0, normal operation, prescaler 64 TIMSK |= _BV(TOIE0); //Timer/Counter0 Overflow Interrupt Enable } volatile unsigned long millis=0; volatile unsigned int okresy_migania_ledow[4] = {100,200,300,400}; ISR(TIMER0_OVF_vect)...
Najprostszy przykład jaki mi przychodzi do głowy to wykorzystanie tych dwóch dodatkowych funkcji do wygenerowania przerwania które nastąpią po przerwaniu A po czasie zadeklarowanym w rejestrach OCRxB/C W twoim kodzie będzie to coś takiego void setup(){ DDRB |= (1<<PB7); // ustawienie pinu 13 jako wyjscie PORTB &= ~(1<<PB7);//...
Zacznijmy od pytań: 1. Które bity według Ciebie ustawiłeś w TCCR2B : Autor tematu pisał, że stosuje gotową bibliotekę do obsługi jakiegoś panelu dotykowego. Z tego, co zrozumiałem, to przerwanie to znajduje się we "wnętrzu" tej biblioteki. Takie efekty są oczywiście normalne, gdy ktoś mało świadomy tego, co się dzieje w jego programie stosuje gotowe...
Po co koledze ten CTC? Prescaler ustaw na 128 i wykorzystaj przerwanie przepełnienia licznika. Fint = Fosc / preskaler / 2^ilość_bitów_licznika = 32768Hz / 128 / 256 = 1Hz Przy CTC trzeba pamiętać, że występuje taki jeden mały szczegół jak 1+OCRn , gdyż licznik musi przynajmniej zliczyć jeden impuls. A ty go nie uwzględniłeś: Fint = Fosc / (preskaler...
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...
Teraz masz prescaler ADC ustawiony tak że zegar ADC ma 125kHz. Zegar ADC- a nie inne zegary. Zegar ADC ma mieć 50-200kHz. Jak Ci mniej zależy na dokładności niż na szybkości- można dać zegar ADC na 250kHz. A oprócz tego- możesz zrobić tablicę albo bufor dla UART-a.
Jedna uwaga tak na marginesie. Chyba wiem z jakiej książki korzystał kosmo90 i niestety jest tam błąd. Instrukcja Load Timer ma odrobinę inną składnię. Powinno być: Load Timer0, 250 czyli przecinek a nie znak =. Można ewentualnie napisać Timer0 = 5 co da taki sam efekt. A co do sposobu ładowania Timera to w pełni podzielam zdanie M.S. Taki trick poprawi...
(...)Nie jest on jednak bez preskalera, jak napisał androot, tylko wykorzystuje wbudowany w timer MPU 8-bitowy preskaler.(...) Miałem na myśli prescaler do kilku GHz, a nie ten wbudowany w µC.
TCCR1B |= (1<<CS12) | (1<<CS10); :D ok. działa. Dodano po 17 Mam problem jeszcze z przetwornikiem ADC w trybie free Run. Zrozumiałem to tak, że pomiar ciągły jest włączany ustawieniem 1 na ADATE i inicjowany ustawieniem 1 na ADSC. Co źle ustawiam? Może po kolei: ADEN: ADC Enable – (1/0) - włącza lub wyłącza układ ADC; jeżeli nie używany,...
Wybrałem tryb 9 (Phase and Frequency Correct) i napisałem następujący kod: Nienajlepszy to wybór, bo akurat w tym trybie wartośc TOP jest ustawiana w rejestrze OCR1A, służąca do kontroli częstotliwości pracy timera , tymsamym elinujesz możliwośc generowania fali kanałem A. W tej sytuacji generowanie fali jest możliwe tylko w kanale B . Patrz ostatni...
Udało mi się odpalić program z książki Pana Wiązani, ale tam timet odmierza 1s Jak to przeliczyć? Jest jakiś na to wzór? Rzeczywiście musiało się 'udac odpalić' bo ten program nie jest pozbawiony błędów (!) \ A jak zrobić żeby odmierzał np 10 sekund? Zmiana preskalera wydłużyła max do 2sekund czas. Aby timer1 odmierzył inne/dowolne interwały czasu,...
Masz błąd w ustawieniach prescalera...ustawiając wszystkie bity CS ustawiłeś zewnętrzny zegar jako taktowanie Timera, ustaw na przykład sam CS12 i zobacz czy działa
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 ?? Ustawić odpowiedni prescaler.Ponieważ timer jest 8'bitowy to przerwanie z prescalerem równym 1 będzie wywoływane 128 razy na sekundę. w M8 na T2 masz dostępne prescalery 1,8,32,64,128,256,1024....
Dzięki, już działa. Wiedziałem, że mogę liczyć na forumowiczów :] ... Chociaż może nie do końca, bo teraz tylko timer 2 działa ;/ a 0 stoi. [syntax=c]void Timer0Init(void) { TCCR0 = 1<<CS01|1<<CS00; // Prescaler 64 TCNT0 = 128; // ~ 1.0 ms TIMSK |= 1<<TOIE0; // odblokowanie przerwania od licznika } void Timer2Init(void) { TCCR2 = 1;...
Witam Forumowiczów Jeśli dział niewłaściwy proszę o przeniesienie;) Mój problem polega na tym iż chciałbym za pomocą pwm-a zawartego w mikroprocesorze Atmega8 wysterować powiedzmy żarówkę (lub cokolwiek innego) ze zmiennym napięciem regulowanym pwm. A mianowicie wszystko gotowe poskładane i tu mały problem. Atmega kwarc 16MHz, timer 8bit , prescaler...
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). Tak, timer był ustawiony na 1 MHz (było to wpisane w komentarzu prescalera dla...
Tym razem uwaga na temat taktowania timera B. Timer B ma bardzo zubożony dzielnik zegara gdyż may tylko opcję dzielenia przez 2 lub braku dzielenia. Alternatywą może być taktowanie zegarem zapożyczonym z Timera A, (sygnał pobierany zza dzielnika Timera). This peripheral uses the system's peripheral clock CLK_PER. The peripheral has its own local prescaler,...
Witam i proszę o wyjaśnienie, dlaczego jeśli zmienna x w funkcji main jest typu long int to po zakończeniu pętli while ma ona wartość mniejszą (66) niż jeśli jest typu int (86). Dzięki. [syntax=c] volatile uint8_t timer1; ISR (TIMER0_COMPA_vect){ uint8_t x = timer1; if (x) timer1 = --x; } int main (void) { TCCR0A |= (1<<WGM01);//tryb CTC TCCR0B...
Prawie. Cytat z datasheet'a: (opis bitu PSR w SFIOR) When this bit is written to one , the Timer/Counter1 and Timer/Counter0 prescaler will be reset. The bit will be cleared by hardware after the operation is performed. Writing a zero to this bit will have no effect.
Tak co jeden cykl. Prescale jest 64 wiec nie tu chyba problem. Nic sie nie dzieje na wyswietlaczu a w symulatorze tez nie pokazuje zmian zmiennych. To nie jest jeden cykl, ani też 64 jakby wynikało z podziału prescalera. Wszystko można odczytac w symulatorze, tylko musisz potrafic posługiwac się jego ustawieniami i funkcjami. Poniżej masz przykład...
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...
Witam, mam problem z uruchomieniem programu do zliczania impulsów na T1 przez 1 sekundę. Wyświetla mi ciągle zero. Co źle ustawiłem z Timerami ?? Atmega 32 [syntax=c] #define F_CPU 1000000UL #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <hd44780.h> volatile unsigned char licznik = 0; //liczba...
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()*(...
Witam, Mam problem z timerem1 - timer pracuje w trybie CTC (4), wartość wpisywana do rejestru OCR1A jest wcześniej odczytywana z przetwornika ADC (potencjometr). Problem występuje podczas zmiany tej wartości - timer tak jakby się przycinał (ale tylko czasami) - nie zgłasza przerwania przez pewną chwile, żeby zaraz zacząć normalnie pracować. Np. po takiej...
Ja doskonale rozumiem, że Atmegi moga pracować na kwarcu zegarkowym, tylko chciałbym wiedzieć na jakiego rzędu dokładność mogę liczyć na zwykłym kwarcu w porównaniu do kwarcu zegarkowego. -- pozdrawiam, demeus Taka sama!.... Wszystkie resonatory kwarcowe maja dokladnosc rzedu +/- 20ppm. Rezonatory zegarkowe jest o wiele wygodniej stosowac do odmierzania...
Witam! FµC=8 MHz , prescaler = 1024. Timer 0. Wychodzi częstotliwość: 7812.5 Hz = 7.8125 kHz. Wyświetlacz 7 segmentowy 4 cyfrowy migocze właśnie przy takiej częstotliwości. Dopiero przy preescalerze 64 jest OK. Czy to jest normalne? Przecież już przy 4 * 50 Hz = 200 Hz nie powinno migotać. :/
Ciekawe, czytałem już te tematy. czy bez tego kwarca 32khz sie nie obejdzie? Jednak nie łapię tych timerów. Generalnie timer służy jako licznik przerwań :), wewnętrznych albo zewnętrznych na pinie TO, zewnętrzne przerwania widziane są z portu TO, a wewnętrzne przerwania generuje prescaler - wewnętrzny przerywacz "sterowany" kwarcem zewnętrznym lub...
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, Mam problemz AtMega z tematu. Ustawiam konfigurację Timerów wg manualki: tryb CNC; prescaler; zezwolenie na przerwania CompareMatch. Po ustawieniu tego odblokowuję przerwania przez "sei();" i.. procesor się resetuje. Dodam też, że taki sam kod działa bez problemów na AtMega 16/32/64. Czy przy pisaniu kodu na te procesory (324/644/1284) trzeba...
Witam! Czy ktoś mógłby mi pomóc przerobić kod tak aby był obsługiwany przez Atmegę 88? A czy to tak ciężko ściągnąć dokumentację ATMega44/88/168 i sprawdzić jak nazywają się rejestry, w których występują bity o nazwach ISC01 czy INT0 :?: (poniższy jest obsługiwany przez atmegę 16 i dotychy zlicznia impulsów przez zbocze) W powyższym kodzie, to masz...
W oparciu o Wasze rady oraz [url=http://www.avrfreaks.net/index.php?... Guide to AVR Timers i przydatną stronę [url=http://www.et06.dk/atmega_timers/]A... Timer/Counter/Prescaler Calculator w wolnym czasie sklepałem taki kawałek kodu: [syntax=c]#include <avr/io.h> #include <avr/interrupt.h>...
Mam problem z uruchomieniem przerwania, kombinowałem wiele razy z różnymi ustawieniami jednak nie obserwuję zmian na porcie PD7, PWM na porcie PB3 działa (przebiegi obserwowane na oscyloskopie). Mikroprocesor to ATmega 16 taktowana z kwarcu 16 MHz. Może ktoś zerknie świeżym okiem i doradzi. #define F_CPU 16000000 #include #include #include #include...
W Bascomie jest do tego specjalna instrukcja Zaglądnij do Helpa na polecenie Pulsein Zauważ że zarówno instrukcja pulsein jak i pulseout mierzy tylko czas trwania impulsu a nie całego cyklu; patrz paniżej diagram: http://obrazki.elektroda.pl/1148630500_1... Zmierzysz tylko L1 albo L2 . Autor potrzebuje zmierzyc czas L (czas pomiędzy...
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 =...
Program ma dużo błędów i jest źle napisany. Po pierwsze nie wiem w jakim celu używasz pętli while. Po drugie nie wiem jakie jest taktowanie procesora (zakładam że 1MHz a nie 1 000 000MHz :) ). Do takiego zadania wybrałbym prescaler timera0 na maksa (1024), i nie skracał cyklu. Wtedy miałbym przerwanie o częstotliwości ok. 3,8Hz (co ok. 0,26 sekundy)....
Cześć, postanowiłem zmienić swój stary model Atmegę16A na nowszą wersję więc zakupiłem Atmegę168A-PU. Problem w tym, że za żadne skarby nie mogę zrobić na niej choćby prostego mrugania diodami za pomocą przerwań. Połączenia są zrobione dobrze, konfiguracja również. Ustawiony jest preskaler, uruchomiona globalnie obsługa przerwań, ustawiona jest odpowiednia...
Witam Wyświetlacz musisz zrobić w przerwaniu. Częstotliwość odświeżania każdego powinna wynosić minimum 50Hz. Lepiej unikać dokładnej częstotliwości 50Hz. Może to być np. 53.5Hz. Jeśli ma np. 4 takie kostki to częstotliwość powinna wynieść 4 * 53.5Hz czyli 214Hz lub jak kto woli przerwanie powinno być wywoływane co 4,67 milisekundy. Od tego bym zaczął....
Jak zmusić diodę alarmu do migania nie używająć procedur waitms ? Mam teraz zrobine tak: Używasz Timer0 jako pewnego rodzaju 'swoisty' prescaler: (4 ms; 100 ms; i 1 sec). Dlaczego okazyjnie nie wykrzystać tych 100 ms na miganie diodą? Wstaw tą wyżej procedure (troche zmodyfikowana - zamiast "set Porta.5" daj "toggle") w przerwaniu timera0 w miejscu...
Witam Proszę o pomoc. Potrzebuję wykonać okład mierzący bardzo krótkie odcinki czasu. START podanie impulsu na któryś pin, STOP podanie drugiego impulsu na kolejną nóżkę. Procesor Atmega32 język Bascom. Jaki najmniejszy odcinek czasu mogę zmierzyć ? Jak wygląda procedura pomiaru czasu miedzy Start a Stop? Bardzo proszę o podanie fragmentu kodu. A czy...
Witam, chcę uruchomić na timerze 16 bitowym tryb 15. 'Fast PMW' robię to tak: [syntax=c] PORTC |= (1<<PD4); TCCR1A|=(1<<COM1B0) |(1<<WGM11) |(1<<WGM10); TCCR1B|=(1<<WGM13) |(1<<WGM12) |(1<<CS11) //prescaler 64 |(1<<CS10); OCR1A=400; OCR1B=250; [/syntax] I teraz jeśli dobrze rozumiem to rejestrem OCR1A...
Witam Buduje urządzenie zasilane bateryjnie oparte na atmega169p. Procesor jest zasilany z około 2.6V i pracuje na zewnętrznym oscylatorze 1.8432MHz. Procesorem wysterowuje wyświetlacz LCD (4 wspólne + 12 segmentów). Problemem jest pobór prądu w czasie uśpienia procesora. Nie mogę zejść poniżej 100uA w power save mode. Brownout i debug mode wyłączone....
[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,...
Witajcie. Robię malutkie projekty korzystając z Bascoma. Do tej pory wyłącznie na 2313 i jakoś sobie radziłem. W nowym projekcie postanowiłem zastosować Atmega8535 i od razu natrafiłem na problem. Mianowicie po włączeniu przerwań od Timer0 nic nie działa jak powinno. Pomimo tego że procedura obsługi wyświetlacza jest wołana z obsługi przerwania na wyświetlaczu...
Kolego, byś się zdecydował... albo: SIGNAL (SIG_OUTPUT_COMPARE1A ) albo: ISR (TIMER1_COMPA_vect) a nie: SIGNAL(TIMER1_COMPA_vect) Z tym, że SIGNAL już się nie powinno stosować. A tak to każdy xxxx ma swój strój... Konfiguracja Timera jest ok. Ja bym delikatnie jeszcze zmienił kod. np: TIMSK = 0b00000000; // WYLACZENIE TIMER1...
witam wszystkich Dopiero zacząłem przygodę z programowaniem i pojawił się problem Chciałem zrobić zegar na Atmega8. Przepisem program z książki (wiec domyślam się zę nie ma błędów) Zrobiłem prosty układ na płytce stykowej. Do Atmegi podpiąłem kwarc 8MHz dwa kondensatory po 27pF i i wyświetlacz LCD 2x16. Program ruszył od razu ale za wolno chodzi sekunda...
Przy odblokowaniu timera weź pod uwagę prescaler. Jeśli jest różny od 1 to on cały czas zlicza - trzeba go wyzerować, bo inaczej pierwszy impuls będzie po dosyć losowym czasie. Włączaj triak na dłużej - szczególnie przy kątach otwarcia rzędu 180 stopni prąd płynący przez triaka może być niewystarczający do jego podtrzymania. Jeśli możesz zmienić schemat,...
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...
[syntax=c]Error RTC_Initialize (struct RTC_init *initParemeters) { Error ret = NO_ERROR; TCCR2 = 0; //stop timer initialized = false; if (NULL != initParemeters) { lastInitParams.onSecChangedCbf = initParemeters->onSecChangedCbf; } else { lastInitParams.onSecChangedCbf = NULL; } //AS2 = 1 - asynchronous mode. ASSR |= 1<<AS2; //OCR2 = 128 -...
(...) żdy zasilany z osobnego źródła i odseparowany transoptorami PC817. Ze względu na ich szybkość oraz niską wartość prądów je sterujących 1mA zegar musi być obniżony do 10KHz ma. Chcę zrezygnować z polecenia: waitus 100 w zamian zrealizować to w obsłudze timer0 a w główną pętle przeznaczyć na inne cele. Rozumiem, że chcesz optymalizować swoje oprogramowanie...
Witajcie, Problem powinien być trywialny a nie jest. Dotychczas stosowałem auto trigger ADC na ATtiny13 i działało to przewidywalnie według datasheeta, ale kod przeniosłem na ATmege168 i działać przestało, mimo że wszystko ustawione według dokumentacji. Po krótce: - uruchamiam timer0 w trybie CTC by zdarzenie Compare Match A zachodziło co 250us (4kHz),...
Hmm on niby jest na atmega16, a ja chcę to przerobić na atmega128...w ogole zauwazylem ze u mnie wyswietlanie na LCD jest uzaleznione od...opoznien czasowych. np tu tak jest...albo załóżmy że przed wyswietleniem jakiegoś napisu (całej procedury wyswietlania itd) dam opoznienie np 5ms to juz nie wyswietli, a jak w ogole nie dam albo dam jakieś 44us to...
; ========================================... sterowanie PWM_1 ========================================... ; OC1A pracuje jako PWM (z korekcja fazy 8bit z częstotliwością =f/(2*pre*ICR1L) ; ustawiamy OC1 w tryb PWM z korekcja fazy ldi R16, 255 out ICR1L, R16 ; wpisujemy max wartosc zliczana timera T1 ldi R16, 128 ; wpisujemy wypelnienie dla PWM1A...
Witam Mam program który używa USART, ponieważ potrzebowałem jeszcze jednego portu UART, dołożyłem softwerowego UARTA i tu zaczeły się problemy z watchdogiem. Ustawienia watchdoga sa takie że robi restert jesli nie bedzie jego zerowania po około 2s, dopóki nie dodałem softwerowego uarta wszytsko było ok, ale po jego dodaniu reset procka nastepuje już...
Udało mi się jakoś uruchomić ten timer. nie mogę ustawić na timerze 5 prescaler'a większego niż 64, gdy ustawie większy licznik nie startuje. ale myślę że będę w stanie to przeboleć. Teraz mam nowe pytanie jeżeli timer 5 to 16- bitowy licznik chcąc odczytać jego wartość ICR5 piszę: [syntax=cpp] volatile uint16_t sygnal; sygnal=ICR5;[/syntax] Tak jak...
Powiem tak, zdążyłam posiedzieć trochę nad Twoją procedurą Piotruś i jakoś pokombinować żeby zrobić przerwanie od timera, tylko sie pogubiłam i jeszcze troche musze posiedzieć zanim to mi ruszy. Piotruś nie bardzo rozumiem pewnych rzeczy, mianowicie: ChannelMUX Czyli będzie to wyglądało przy deklaracji: ChannelMUX if(ConversionResults tu się dokonuje...
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...
Witam. Trochę inny procek ATmega644 [syntax=c] 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| (1 << CS11);// OCR1A = 976*8; //wartość do której zlicza licznik [/syntax]
Owszem, preskaler jest wspólny dla timerów T0 i T1, ale stopień podziału można ustawić niezależnie dla każdego z timerów. Ponieważ preskaler działa cały czas, niezależnie od wyboru stopni podziału dla timerów, to nie można określić ile cykli zegara systemowego upłynie od momentu włączenia timera z podziałem preskalera większym od 1 do momentu pierwszego...
Witam, bardzo proszę o pomoc. Zrobiłem układ na Atmega32 z podłączonymi diodami do całego PortuA, oraz do PortuB Pin2 (PB2) dekoder podczerwieni TSOP31236 (testowałem też na TSOP31238). Wykorzystać chciałem bibliotekę IRMP https://obrazki.elektroda.pl/6945425800_... a w załączniku spakowany cały projekt z plikami biblioteki irmp.
Witam próbuję wysterować silniki przez PWM, przeczytałem poradnik na mikrokontrolery.blogspot.com i z kodu zmieniłem porty, lecz dalej nic się nie dzieje ze silnikami... http://obrazki.elektroda.pl/9186829100_1... http://obrazki.elektroda.pl/4064646700_1... Wie ktoś jaka może być przyczyna lub co zmienić? Z góry dzięki.
Udało mi się skonfigurować tak jak chciałem, Więc zostawiam kod dla innych: void Init_Timer(){ count=1;//Reset ounter TCNT0 = 0;// Reset timer TCCR0 |= (1<<CS02) | (1<<CS00) | (1<<WGM01);// Set prescaler 1024, Set CTC Mode TIMSK |= (1<<OCIE0);// Enable Compare interrupt OCR0=100; //Set...
Witam Niestety mam 2 problemy: 1. Rezonator 4Mhz, AtMega32. Chodzi o obsługe przerwania Timera1. Chcialbym aby przerwanie bylo generowane co 1s. Niestety dla ustawień: TCCR1A=0x00; TCCR1B=0x04; // Prescaler 256 TCNT1H=0xC2; // Wartosc poczatkowa TCNT1L=0xF6; nie działa poprawnie, odlicza zbyt szybko. 2. CodeVision . Chciałbym wyświetlić tekst + liczbę...
Nie możesz tylko używać Timera2 do innych celów, bo właśnie jest on używany przez RC5 Funkcja GETRC5 domyślnie wykorzystuje Timer0 a nie Timer2. Oczywiście można to zmienić w konfiguracji, jednak autor tego nie czyni. Zatem pozostają mi dwie opcje, albo przestać używać timera0 do odliczania 1s odcinków czasu i zaprzęgnąć do tego timer2 (co może nie...
Hmm zrobiłem to co zaproponowałeś i nie działa, napięcie 0 V na wyjściu ;( [syntax=c] void servo_init_2(void) ; int main (void){ DDRD |= (1<<PD5); servo_init_2(); while(1){} return 0; } void servo_init_2(void) { TCCR1A |= (1<<COM1A1); //Clear OC1A/OC1B on compare match, set OC1A/OC1B at BOTTOM, (non-inverting mode) TCCR1B |= (1<<WGM12)//...
Witam, potrzebuje pomocy z timerem1 w atmega328p. mam taki kod: [syntax=c] // Ustawienie timera 1 TIMSK1 |= (1<<TOIE1); // umozliwenie przerwan od timera1 TCCR1B |= (1<<CS00) | (1<<CS02); // prescaler na 1024 TCNT1 = 60000; // wartość rejestru w którym odbywa się liczenie na 60000 sei(); // przerwanie od timera1 ISR(TIMER1_OVF_vect)...
prescaler atmega atmega prescaler atmega32 timer prescaler
zaparowany aparat próba biegu jałowego transformatora esp32 programowanie
przetwornica philips przetwornica philips
Przepływ w rotametrach dla ogrzewania podłogowego Wymiana termostatu w lodówce Indesit NBAA 13V NX