APB jest tak samo taktowane jak przy dzielniku 1 czyli zegarem 84MHz. Jeśli wnioskujesz o tym po taktowaniu timerów należących do APB1, to nie bierzesz pod uwagę takiego automatycznego mnożnika x2 na taktowaniu liczników tych timerów. Zachowanie tego mnożnika (mnoży x2 dla wszystkich ustawień preskalera APB1, oprócz /1) powoduje że dla ustawień preskalera...
Na dobra sprawe w tym przypadku do compare1a chyba moznaby dac 2x15625 czyli 31250 i tym sposobem procka przerwania bedzie krotsza.
Dokładnie aby wyliczyć potrzebny czas potrzebujesz pełnego wzoru: T = 1/(fcpu/PRESCALER/(65536-LICZNIK)) gdzie: fcpu - taktowanie procesora, PRESCALER - stopień podziału preskalera, LICZNIK - początkowa zawartość licznika. T = 1/(1000000/1024/(65536-6942)) = 60.000256s Wszystko odnosi się do licznika 16-bitowego. Dla licznika 8-bitowego wzór jest podobny:...
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.
[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]
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.
Zgadzam się z przedmówcą. Fusebitów raczej nie dotykaj. Ew. EESAVE. Rdzeń możesz taktować bezpośrednio z RC2MHz (domyślnie włączony), a jeżeli potrzebujesz innej częstotliwości, to możesz uruchomić RC32MHz (wystarczy ustawić bit RC32MEN) i poczekać na RC32MRDY. Przełączenie zegara jest zabezpieczone CCP 0xD8. Jeżeli 32MHZ nie pasuje, to PLL można dostroić...
mog123 - mi dziala kod ktory zamiescilem na PWM - tam jest ustawiony prescaler 1024 i wszystko smiga az milo. Sprobuj wrzucic do programu moi przykład i bedzie dzialac :) Ja nie slyszalem o innym sterowaniu serwem jak przez PWM - to najprostrze rozwiazanie. Pozdrawiam
Skąd wziąłeś pomysł na wstawki z FLASH->ACR? Czytam RM0401 Jest dedykowany do tego rozdział: 3.4.1 Relation between CPU clock frequency and Flash memory read time Latency zależy od częstotliwości taktowania oraz napięcia zasilania, tak w skrócie. Co do ustawień zegara dla STM32 to warto zapamiętać sobie schemat działania, który wynika bezpośrednio...
Pokombinuje wtedy z tymi prescalerami i fuse bitami. Póki co w kodzie i w mkAVrcalculator cały czas mam ustawione na 8MHz, a prescaler ustawiony na 8,natomiast slow SCK mam ustawione na >187,5 kHz Na wyświetlaczu pokazuje mi to samo co Tobie, ale nie słychać ani nie widać w rzeczywistości ,że ta prędkość się zmienia.
Natomiast jeżeli zamienię OCR1A = 3906,25; wszystko jest ok Jesteś geniuszem jeśli robisz takie sztuczki! Myślę, że ustawienie preskalera na 36,571428571 powinno rozwiązać Twój problem. Albert
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=...
Fabrycznie preskaler dzieli przez 6 https://obrazki.elektroda.pl/7385039500_... I w tym mikrokontrolerze zmienia się to w rejestrze MCLKCTRLB . A tu jak to zmienić https://onlinedocs.microchip.com/pr/GUID... I przykład zmiany ustawień preskalera...
Witam, ATtiny13, taktuję go zegarem wewn 128kHz, prescaler 8, TIMER0 generuje przerwania co 1,25msec. W tej procedurze obsługi przerwania mierzę napięcie na ADC2. Dokładność pomiaru nie jest krytyczna. Moje pytanie dotyczy konfiguracji ADC, mam w tej chwili: Config Adc = Single , Prescaler = 2 , Reference = Internal Jaką częstotliwością jest w tej sutuacji...
Witam, Kilka uwag: 1. nie skonfigurowałeś trybu pracy timerów (rejestry TCCRxA, TCCRxB) Po resecie timery pracują w trybie "Normal", natomiast w twoim przypadku znacznie lepszy byłby tryb "CTC" 2. ustawiłeś prescaler a 1 a nie na 1024 3. brak zachowania stanu PSW i rejestrów w przerwaniach. W twoim konkretnym przykładzie nie spowoduje to błędu ale już...
Korzystam z wbudowanego generatora PMW w wymienionym w tytule mikrokontrolerze. Chcę na wyświetlaczu LCD podawać aktualny czas trwania jedynki. Nie wiem niestety czy wykombinowałem dobry wzór. Prescaler mam ustawiony na 64. Liczę tak [syntax=c] double pomo = 4000000/ (OCR1A*64); pomo = 1/pomo; // obliczam okres pomo = pomo/2; //obliczam czas trwania...
Dar.El - mógłbyś nieco szerzej o swoim pomyśle ?? bo jakoś nie zaskoczyłem - skoro ustawi się prescaler na 1024 to przy kwarcu 11.0592 MHz wychodzi inaczej niż 10 ms ...chyba że coś źle liczę .... Dodano po 1 A ja śmiem twierdzić , że kod z 1-szego postu , będzie zmieniał stan na PORTC , co 676 przerwań Tak naprawdę to masz rację ;), ale chodzi mi o...
[syntax=C]void SysTick_Handler(){ SysTick_Config(prescaler_systic);[/synta... W jakim celu w obsłudze przerwania od SysTick, ponownie konfigurujesz licznik? Logika podpowiada, że raz uruchomiony działa i nie trzeba nic więcej robić. Jeżeli po odliczeniu czasu, przyjmujesz przerwanie, przechodzisz do ustawiania i na nowo startujesz licznik, to częstotliwość...
Witam, Nic nie przeszkadza w tym, że to bascom. Prescaler jest ustawiony na 64 więc zanim licznik zdąży zwiększyć swoją wartość to uC już załaduje do niego odpowiednią wartość. W Twoim programie jest pare błędzików, które może nie wpływają na dokładność pomiaru, ale są głupie :) konfigurując porty, dla pewności możesz napisać: set ddrb.2 set ddrb.3...
Zobacz w nocie apliacyjnej procka jaki jest optymalny zegar dla adc i taki nastaw. Jezeli jest tak jak w attiny88 to powinien byc w zakresie 50-200kHz W nocie jest 50-200kHz i prescaler ustawiłem na 128 dla 75kHz, jednak fabrycznie zegar ustawiony jest na 9.6MHz/8, porty i opóźnienia widzą zegar 1.2MHz. Nie wiem czy ADC widzi zegar 9.6MHz i zostawić...
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....
Excray właśnie nad czymś takim myślałem. I nawet poczyniłem wstępne obliczenia po których wyszło mi że timer0 przy kwarcu 8MHz i prescaler ustawiony na 1024 przepełni się po 0,03276800s. Tylko jak wyliczyć ile muszę zliczyć tych przerwań aby wyszła 1s? Moje wyliczenia są kiepskie bo cały czas wychodzą ułamki. Pewnie trzeba ładować jakąś wartość początkową...
Przecież prescaler również można zmienić. Po za tym. Przecież można ustawić prescaler na CLK/8. A potem zmieniać wartość reload i otrzymasz zakres od 1 Hz, do 1 Mhz. W końcu nie wiem, czy zakres ma być 1 do 1 MHz, czy 1 k do 100 kHz? Dla tego drugiego sprawa jest banalnie prosta. Ustawiam prescaler na wartość CLK/8. DO OCR0 wpisuje wartość 20, więc...
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,...
Źle sobie popatrzyłem tzn miałem źle skomentowany kod - poniżej urywek tego z czego ja korzystam w swoim programie: No to w końcu na ile ten prescaler jest ustawiony? e marcus
Witam. Napisałem program do migania diodami i mam trzy pytania: 1.Czy da się ustawić cały port w stan spoczynku (coś w stylu PORTD = 0)? 2.Czy po każdej komendzie IF trzeba pisać END IF, czy da się to jakoś ominąć? 3.Czy poniższy kod jest poprawny, czy będzie działał? 1. Tak, możesz tak pozostawic. Bascom akceptuje kilka form ustawienia poziomu pinów...
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, Chciałem napisać program do liczenia 'sekund'. Jest to początek mojej drogi do zrobienia zegara. Problem jest taki, że po 5 minutach zegar spieszy już o 3 sekundy. Gdzie popełniłem błąd? Prescaler ustawiony na 1024, atmega na 8MHz na kwarcu wewnętrznym(może tutaj jest problem?), według informacji które posiadam przerwanie powinno być generowane...
Może zanim zapomnę o czym chciałem napisać a nie jest najważniejsze, ale dla Ciebie ważne. Tak w telegraficznym skrócie -> USART w AVR ma możliwość włączenia jakby podwójnej prędkości/próbkowania (to samo SPI). Bit ma skrótowa nazwę U2X. Przy taktowaniu 16MHz, jak prawie każda płyta Ardu, to bez U2X predkość 115200 miałaby za duzy błąd który niby maksem...
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...
1. fusebity - bity konfiguracyjne procesora - arduino nie daje do nich dostępu (jak każdy inny bootloader) można je sprawdzić tylko z poziomu programatora ISP lub układu ft232rl odpowiednio podpiętego do złącza ISP i obsługiwanego przez avrdude lub, jeśli to gotowe arduino to w dokumentacji w sekcji odnośnie przygotowania płytki i procesora sa podane...
Bity CS00 i CS02 od preskalera są w rejestrze TCCR0B, a nie TCCR0A. Masz preskaler na 0 więc timer nie zlicza.
...Na tym procku sprzętowo to w zasadzie nie uzyskasz innych czestotliwości PWM jak kombinacja preskalera i częstotliwości zegara systemowego, ale zawsze możesz wyregulować prędkość tego drugiego poprzez zmianę bitów kalibracyjnych... Niestety , ale nie mogę się zgodzić z powyższym twierdzeniem. Proszę zajrzeć do PDF-ka ATmega32 na str.107 i przyjrzeć...
Ustawiłem prescaler na 1 MHz ale jeszcze coś nie tak :( Help me :)
O a ja myślałem, że tam się podłącza właśnie napięcie odniesienia :), Ale nawet po zmianie mi to nie działa. Z tego co rozumiem w datashicie jest napisane, że po wpisaniu jedynki na ADSC czyli 6 bit ADCSRA zaczyna się pojedyncza konwersja. Potem czekam aż na tym bicie pojawi się zero które oznacza, że konwersja się zakończyła i mogę sczytywać wartość...
jak zrobić żeby przerwanie od timmera 0 w atmedze8 było taktowane kwarcem zegarkowym(tzn. podłączam kwarc w miejsce xtal 1,xtal2 i skąd timmer 0 będzie wiedział ze ma być taktowany takim kwarcem) i jak dobrać preskaler itd żeby po zapełnieniu licznika odmierzana była 1s używam programmer's notepad. Kwartz ( quartz/kwarc) zegarkowy podłączony do m8...
Ah.. Jeśli napiszemy taki program (który rozjaśnia diodę) $regfile = "attiny2313.dat" $crystal = 8000000 Config Lcd = 16 * 2 Config Portd.6 = Output Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portd.1 , Rs = Portd.0 Config Timer0 = Timer , Prescale = 1 Enable Timer0 On Timer0 Software_pwm Enable...
(at)Jakub17 Co do prescalera musisz tylko pamiętać o jednym - w chwili odpalenia licnzika, stan preskalera musisz przyjąć za nieokreślony. Wynikają z teog konsekwencje: - zniekształcenie pierwszego generowanego przez timer impulsu, - wprowadzenie losowego opóźnienia o czasie trwania zależnym od preskalera (np. ustawiony na 64 wprowadza losowe opóźnienie...
A przestawiłeś fuse bits? Domyślnie chyba jest ustawiony prescaler przez 8.
Mozna spokojnie. U siebie (tez Tiny2313) zmieniam podczas pracy nawet taktowanie. Jeśli uC u mnie pracuje na 8MHz bo musi wygenerować rózne wysokie częstotliwości to podczas snu brał 2mA. Teraz przed uśpieniem dobieram się do rejestru CLKPR - Clock Prescale Register. Zasada przestawiania jest podobna jak w WD. Trzeba najpierw ustawić CLKPCE: Clock Prescaler...
rejestr TCCR1A nie posiada tych bitów, które chcesz ustawić, zrób to tak: TCCR1B |= (1<<WGM12)|(1<<CS20); Dodano po 3 Program nigdy nie może wyjść poza funkcję main() dlatego instrukcja return nie powinna wystąpić w tej funkcji. Bo w innym przypadku wychodzisz z funkcji main i nie wiadomo co się później dzieje z programem, dlatego napisz...
Zamieszczam kod źródłowy programu chronokomparatora. Jest on napisany w języku GreatCowBasic. Chętni do przeniesienia programu z procesora PIC16F84A na inny procesor, np. na Atmegę, oczywiście mogą to zrobić, ale nie tak prosto. Nie wystarczy zmienić deklarację procesora. Podczas pisania uwzględnić musiałem specyfikę procesora związaną z zegarem procesora,...
Musisz ustawić prescaler i wpisać wartość counter0 lub timer0 żeby przerwanie przychodziło co określony czas. Przejrzyj dobrze helpa tam to jest opisane.
Problem jest rozwiązany. Okazuje się, że Prescaler miałem ustawiony na Auto - dlatego tak długi czas pomiaru (98µs). Kiedy przestawiłem go na Prescaler = 2, to czas zmniejszył się do 10,8µs i to dla kwarcu 8MHz (dla 16MHz będzie szybciej). Dziękuję Ci, że swoją podpowiedzią nakierowałeś mnie na rozwiązanie problemu za pomocą ADC Atmegi a nie...
To jest fragment który sam dopisałem. W cubemx ustawiłem 2 timer na generowanie pwm na kanale 1,2 i 3, prescaler ustawiony na 0, period 89, do tego dma które miało współpracować z kanałem pierwszym. Taktowanie ustawiłem na 72mhz. Początkowo myślałem że problemy sprawia przerwanie od dma, lecz po usunięciu kodu włączającego dma sytuacja się nie poprawia....
Np. tak: Ustawiasz zegar na 1Mhz W main() ustawiasz: Zezwolenie na obsługę przerwań Zezwolenie na obsługę przerwań od Timer0 (albo Timer2) Prescaler na 1 Sprawdzenie jakiejś flagi A w obsłudze przerwania ovf od Timer0 (albo 2): Do rejestru Timer0 (albo 2) wpisujesz 156. Wtedy przerwanie występuje co 0.1ms i ustawi jakąś flagę. Wtedy w main() decydujesz...
"Nowe" czyli od Xmega i nowsze AVR mają mozliwość priorytetu przerwania. Poprzednie miały ustalony. Nie wiem jaki to AVR, ale jeśli ustawisz Timer i przerwanie od niego to jak będzie w przerwaniu to oczywiście zauważy potem flagę przerwania z USART, ale może być za późno, dlatego jeśli nie trzeba, to się przerwań od wszystkiego nie uruchamia. Rzadko...
Witam, mam problem z ustawieniem przerwania od timera0 na atmega8, jestem początkujący jeśli chodzi o assembler... Problem leży w tym że, uP jest taktowany z wewnętrznego zegara 1MHz, i jeśli mam ustawiony prescaler na 8 czyli rejestr TCCR0 na 2 to powinienem otrzymać obsługę przerwania co 8us a na oscyloskopie otrzymałem igiełkę co 2ms;/ nie wiem co...
Wiem o tym, mi chodzi to że muszę odczytać temperaturę z DS18B20 i wyświetlić ją na stronie, chce się tym odczytem zająć co kilka sekund w przerwaniu żeby nie tracić czasu podczas wysyłania strony. Skoro wiesz to dlaczego pytasz o co innego niż potrzebujesz? Pytałeś o miganie diodą w trybie CTC i taką odpowiedź dostałeś. Jeżeli chcesz cokolwiek zrobc...
Jeśli podłączysz zewnętrzny kwarc, musisz zmienić fusebity, dzięki czemu uC będzie chodził z tego kwarcu - to będzie główne źródło taktowania. Dalej po prostu wybierasz prescaler /1: timer1 zawsze pracuje w oparciu o to samo źródło co rdzeń (z wyjątkiem gdy zlicza impulsy z wejścia IC1) więc nie występuje problem wyboru źródła. Wybranie prescalera /1...
1/ nadużywanie ustawiania bitów "|=". Nigdzie nie ma odpowiadającego wstępnego kasowania bitów, które są ustawiane, więc z góry zakładam, że ten kod może być zawodny. Najlepszym rozwiązaniem jest pojedyncze wpisanie do rejestru jednej wartości zawierającej żądane ustawienia wszystkich pól. 2/ [syntax=C]TIM1->PSC = 23999; TIM1->ARR = 1;[/syntax] Na timer...
Myślę że ustawienia programowe powinny być OK ponieważ bazuję na bibliotece z książki. Jednakże przy obliczeniu mikrosekundy pojawia się: ir_micro_s(num) ((num)*(F_CPU/1000000/PRESCALER)) gdzie PRESCALER ustawiony na 8 (zdefiniowane sa stosowne rejestry w zaleznosci od wyboru prescalera) Pytanie czy odczyt F_CPU jest prawidłowy (z tego co pojmuję to...
16MHz A mam 3 razy bo nie wiem w kt orym miesjcu mam blad Przy 16 MHz i prescaler ustawiony na 1024 nie jestes w stanie odmierzyc czasu 1 sekundy uzywajacTimera0 bez zliczania odpowiedniej ilosci przepelnien nawet bez preload czyli na 'pelny zegar'. Maxymalny czas jaki jestes w stanie odmierzyc to ok 16 ms (dokladnie 16.384 ms). Druga sprawa; to jak...
Witam ponownie. Z braku czasu odłożyłem budowę tego zegarka i teraz postanowiłem do niego wrócić. Mam pytanie odnośnie ustawienia timera. Jaki ustawiłeś prescaler? Ustawiasz na szybkie przerwania i je zliczasz czy wpisujesz wartość do timera dokładnie taka, zeby wystąpiło 240 przerwań na obrót? Próbowałem z wpisaniem wartości ale niestety wyszło około...
Tak jest !!! tak jak napisałeś ! Z praktyki uzywałem tylko właczenia, ( nie wykorzystuję trybu idle , więc nie musiałęm wyłączyć ), A jeszcze jedno nie polecam resetować watchdoga w obsłudze przerwania timera -> program może być w " malinach" a przerwania będą się wykonywac i resetować watchdoga, ja umieszczam je patrząc jak wykonuje się prog. Jeśli...
TIMSK = 0x01; sei(); while(0) { if (TIFR & 0x01) PORTD = 0xFF; } Jak zrobisz w ten sposób, to warunek if (TIFR & 0x01) nigdy nie będzie spełniony. Nie masz procedury obsługi przerwania, więc wywołane zostanie przerwanie "__vector_default", które nic nie robi, poza tym, że zeruje flagę, którą chcesz sprawdzić....
Bez ustawienia fusebitów ruszył ale zajrzę jeszcze do nich... faktycznie spojrzałem jeszcze raz na wyprowadzenia obydwóch atmeg i jest tak jak mówicie.. już działa a płytka testowa powoli zalicza się do odstrzału :D A w sumie jeżeli działa to znaczy ze w fusach nie muszę grzebać bo prescaler jest ustawiony wiec powinno być ok ?? P.S. za ten tekst o...
Normalnie na początku jest reset i to kasuje zmiany programowe. Więc też nie powinno się dać w ten sposób zablokować. Też tak myślałem, ale w praktycznych próbach wyszło że jednak się da zablokować kostkę programowo. Ściślej mówiąc, da się programowo zmienić konieczne warunki programowania, by wyszły poza możliwości USBasp i może też innych programatorów....
Dla F_CPU ja bym ustawił: #define PRESCALER 207 #define BAUD_SCALE 0
Witam, mam problem z prawidłowym skonfigurowaniem wszystkich zegarów w moim procesorze. Zacząłem od bibliotek ST, jednak później po przeczytaniu wielu tematów na tym forum zabrałem się za dokumentacje i poustawiałem wszystkie bity tak jak trzeba.. i problem jest dalej ten sam. otóż najlepiej wytłumaczy to ten rysunek: http://obrazki.elektroda.pl/1942215800_1...
Używam programatora na lpt i programu bascom-AVR. Szukałem przeczytałem kilkanaście postów o fusebitach i wszyscy piszą o innych programach pony png, avr studio itd. Chyba większość programuje mając programator pod usb. Jak to zrobić w bascomie programie bascom- avr. Rozumiem ze trzeba zmienić ustawienia fusebitow aby odblokować zewnętrzny rezonator...
| = (1<<CS00). Jednak ja wciąż polecam użyć Timera1 i jego trybu CTC, wtedy na wyjściu OC1A. Nie potrzeba wtedy obsługiwać żadnego przerwania, ustawiasz wyjście OC1A w tryb TOGGLE ( rejestr TCCR1A ) i będzie ono zmieniało stan w rytm przepełnień timera. A timer będzi liczył (przez prescaler jaki ustawisz) do wartości jaka sobie ustawisz w OCR1A....
Kolego (at)emarcus autorowi tematu raczej chodziło o attiny 13 bo na atmega8 kod jest już na poprzedniej stronie piotrva który poprawił po mnie kod z atmega16. Widziałem to.... Mój post nie miał na celu tworzenia czegoś co jest gotowe, lecz zwrócic autorowi uwagę na koncept konfiguracji timerów i koniecznośc konsekwentnego edytowania odpowiednich rejestrów...
zalezy od jakosci kwarcu i od warunkow w ktorych bedzie pracowal ... napisz moze dokladnie oznaczenia i gdzie ma rpacowac ten kwarc Kwarc ma pracować z ATmega8. To jest zwykły niski kwarc w metalowej obudowie za pare groszy. Jedyne oznaczenie jakie na nim jest to 12.000 Pytam bo zrobiłem prosty programik co sekunde zapalający i gaszący diode i w prównaniu...
Witam, mam problem. Próbuję uruchomić, ale odczytuję ciągle same zera. Oto fragmenty mojego kodu: DDRA=0x00; //port A jako wejście PORTA=0x00; //bez podciągania .... ADCSRA=0x85; //wpisanie 1 na Enable i ustawienie prescalera ADMUX=0x00; //wybieram kanał 0 ADCSRA=1<<ADSC//uruchamiam konwersję while(bit_is_set(ADCSRA,ADSC)); //odczekuję do końca...
\ 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...
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...
Zmieniłem TCNT0 = 0x00; ustawiłem prescaler na 1024 ale dalej nie działa. Według moich obliczeń dioda powinna mrugać co 0,26 sek. Czy mam jakiś jeszcze błąd w kodzie, czy czegoś nie umieściłem?
TCNT0 możesz przypisać określoną wartość po przepełnieniu po to by uzyskać dokładną częstotliwość przerwania, a nie wynikającą z częstotliwości i prescalera Uzyskanie dokładnej częstotliwości poprzez modyfikowanie wartości rejestru TCNTn daje niepewne rezultaty, czyli czasami to zadziała zgodnie z oczekiwaniem, czasami nie. Wszystko zależy od tego,...
Witam. Przykładowo próbuje uzyskać częstotliwość PWM 42kHz, kod: [syntax=c] #include "stm32f4xx.h" int main(void) { RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN; RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; //podpiecie zegara dla Timer2 //PIN10 CH3 GPIOB->MODER |= 1<<21; GPIOB->AFR[1] |= 1<<8; TIM2->PSC= 101; //prescaler TIM2->ARR= 101;...
A BTW, zamiast robic takie dziwne kombinacje nie lepiej ustawic prescaler timera tak, zeby timer sie nie przepelnial p[omiedzy impulsami, a potem w przerwaniu wywolywanym zboczem zapamietywac stan. To bedzie pare linii kodu. Nie zapominaj tez o resetowaniu prescalera, inaczej pierwszy pomiar bedzie losowy.
Dalej tiny jest na pokladzie. W programie jedynie prescaler pwm jest ustawiony na 8. Chce dopisac wiecej opcji w Select Case, aby bylo wiecej przyciskow pilota obslugiwane. Ponizej komendy 50 dziala wszystko elegancko. Powyzej tego nie reaguje.
Tych kroków jest trochę więcej, na przykład włączenia zegara dla domeny RTC. Poniżej daję kod do analizy (STM32G0xx) i czekam na krytykę. [syntax=c]/** * Brief This function configures RTC. * Param WakeUp period * Retval error code (0 = no errors) * PrereqSysTick serves as timebase for timeouts */ __INLINE uint8_t rtcInit(uint16_t timeToWake) {// set...
https://obrazki.elektroda.pl/3029878300_... Witajcie moi drodzy Oto trzecia część mojego praktycznego tutoriala dla ośmiobitowego mikrokontrolera PIC18F2550 od Microchipa i programatora SDCC . W tym temacie najpierw krótko omówię różne konfiguracje oscylatora PIC18F2550 - oscylator wewnętrzny (internal oscillator), zewnętrzny (zegarowy...
zapominasz ładować konkretną wartość do licznika przed jego uruchomieniem. obliczasz ją (w podstawowym trybie) mniej więcej tak: obliczasz czas jednego cyklu 1/fclk np dla 1Mhz 1us bierzesz teraz czas, jaki chcesz odliczyć, i dzielisz go przez czas jednego taktu, dostaniesz wtedy ilość potrzebną do zliczenia.np 0,020s/0,000 001 = 20000 jak wiesz licznik...
jest taki prosty wzór: TOVck = (F_CPU/MAX.VAL)/PRESCALER gdzie: F_CPU - częstotliwość podłączonego kwarcu MAX.VAL - maxymalna wartość timera (dla 8-mio bitowego to 256) PRESCALER - wartość na jaką ustawiono prescaler przy pomocy odpowiedniego rejestru Timera (odsyłam do tabelki w manualu ;)) i TOVck - to ilość przerwań na/w ciągu jednej sekundy...
Niestety, program działa tak jak zakładam dopiero, kiedy preskaler jeszcze pomnożę x8 (56) a dzielnik szyny APB1 ustawię na 8 tak jak poniżej: Nie wgryzałem się dokładnie w Twój opis, ale obstawiam standardowy problem przy pierwszym podejściu do timerów, którego rozwiązanie znajduje się pod obrazkiem "Figure 8. Clock tree", w rozdziale "7. Low-, medium-,...
Zauważ, że w Twojej konfiguracji TIM5 działa jako downcounter. W tym przypadku kaskada timerów to przerost formy nad treścią. W zależności od tego, jakiej rozdzielczości potrzebujesz do pomiaru czasu, możesz odpowiednio ustawić prescaler. Tylko należy pamiętać, że jest to rejestr 16-bitowy.
Uczę się pracować z ADC. Procek Attiny26. Podłączenie: - Vcc = 5V - AVcc = 5V - PA0 (ADC0) - wejście - PORTB - wyjście. Program napisałem na podstawie tutoriala. Obecnie chcialem zrobić termometr na dwóch wyswietlaczach LED i LM35. Program nie działał w ogole jak powinien. Po dłuższym dochodzeniu okazało się, że przy wyłączonym procesorze na wyjściu...
Witam. Od 3 dni siedzę już nad programowym PWM. Wykorzystuję do tego przerwanie na timerze, ale coś nie działa tak jak powinno otóż jak nie mam ustawionego stanu 1 na ostatnim bicie portu to PWM dziwnie się zachowuje. //Includes #include "avr/io.h" #include "inttypes.h" #include "stdio.h" #include "util/delay.h"...
Zgadza się, aby policzyć ile czasu zajmie wykonanie kodu potrzeba kodu maszynowego (napisałem to w pierwszym poście). Ja będę pisał w C i tylko zobaczę sobie na listing programu gdzie jest to przetłumaczone na assemblera i wprowadzę odpowiednią poprawkę (zmiana wartości timera) do kodu w c. Chce precyzyjnie odmierzać czas do próbkowania wejścia z modułu...
Jeżeli chcesz wykorzystać Watchdog jako rodzaj timera, to w rejestrze WDTCR powinno się ustawić bit WDTIE. Ponadto za pomocą bitów WDP3...WDP0 należy ustawić prescaler Watchdog'a. Z tego wynika co jaki czas będzie przerwanie. Jeżeli np. potrzeba 8 s, to ustawić należy WDP3 i WDP0, czyli powinno być: https://obrazki.elektroda.pl/1370064900_...
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...
Witam! Poniżej prezentuję najprostszy chyba z możliwych listingów odczytujący wskazania ADC i wysyłających je do PC przez RS232. Problem w tym ze nie da się wysłać nic z częstotliwością powyzej 4800 bps. zamiast konkretnych wartości jakieś krzaki przychodzą. ' osiągnieta rozdzielczosc: 5V/1024= 0,00488V= 4,88mV $regfile = "m8def.dat" $crystal...
Witam wszystkich dziękuję za zainteresowanie. Pomogliście mi z próbkowaniem. Bascomowa komenda Getadc(x) jest uniwersalna, ale przez to ma swoje minusy. Getadc(x) zawsze ustawia najpierw MUX a potem robi dwa pomiary ADC pod rząd i pierwszy odrzuca. Widać że mierzysz tylko z jednego kanału. Możesz więc sprawę mocno przyspieszyć. Wystarczy, że raz tylko,...
Cześć. Mam taki problem napisałem sobie program który steruje ładowarką. Jeśli ustawie mu: cksel=0100 , sut=00 to nie działa program - nic sie nie dzieje. a jeśli ustawię: cksel=0100 , sut=10 wtedy działa ale źle liczy czas Program robiony na szybko wiec może ma gdzieś błąd ewentualnie co poprawić w nim?? $crystal = 8000000 $regfile = "m8def.dat"...
hmm, przerwania co 20 instrukcji procesora ;-) Wydaje mi się, że nie uwzględniasz czasu pomiędzy wywołaniem przerwania a ustawieniem timera. Dla przykładu ; INTERRUPT ORG0x004 ; interrupt vector location btfscINTCON,T0IF; TMR0 overflow gotoserv_t0 retfie ; return from interrupt serv_t0 bsfPORTC,0 movlw.256 - (.20 - X) movwfTMR0 bcfINTCON,T0IF;...
Nie wiem jak w Timerze ustawić prescaler do Atmegi8a, tak żeby przerwania były co 1 sekundę ; < Jakie jest taktowanie atmegi? Druga sprawa w projekcie jest również taki schemat: http://extremeelectronics.co.in/avrproje... nie wiem jak mam zaintepretować tą strzałkę do góry która idzie od buzzera, gdzie to mam podłączyć? Strzałka...
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.
(at)wilku_88 - w Twoim kodzie nie ustawiasz AF6 dla PC7, tylko nie wiadomo co. Poprawnie powinno to wyglądać tak: PLL dla I2S musi być skonfigurowany powinienem konfigurować w takim wypadku MCLK na jaką częstotliwość? Czy na taką, która odpowiada Fs = 8k (załóżmy, że z taką częstością wyrzucam z DAC)? Bo w sumie nie wrzucam CODEC'owi danych cyfrowych,...
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 =...
Dziękuję za wszystkie porady, udało mi się już wszystko zrobić. Kontaktron działa jak należy, ustawiłem dość duży prescaler, więc drgania styków nie są wyłapywane przez mikrokontroler (przy małym prescalerze faktycznie dało się zauważyć drgania styków). Pozdrawiam
Wyjście z CCR3 włączasz w rejestrze CCMR2, bity mają w nazwach CCMR2_OC3xx. No i timer wystarczy włączyć jeden raz, a nie trzy. Prescaler też wystarczy ustawić jeden raz. Paru rzeczy jeszcze nie włączyłeś w tym timerze. Obejrzyj przykłady PWM na STM32F0 w Elektronice Praktycznej.
Witam, mam problem ze sterowanie sygnałem PWM. Program służy do zaczytywania wartości częstotliwości z czujnika TCS3200 . W zależności od koloru jaki wykryje czujnik ma nastąpić zmiana wartości wypełnienia PWMa. W tym momencie dioda, którą mam podłączona pod wyjście OC2 cały czas świeci tak samo, niezależnie od wartości OCR2 . Próbowałem na różne sposoby...
Program jest rozbudowany i złożony z kilku plików żródłowych i nagłówkowych ten main był tylko przykładowy. Rozchodzi mi się głównie o procedurę liczenia, tak jak radził kolega wrzuciłem ją w procedurę przerwania [syntax=c] ISR(INT0_vect) // wykryj przerwanie { sreg = SREG;//save global interrupt flag cli(); //disable interrupt czas = TCNT1/192;//zczytaj...
Patrzę też, że u Ciebie występuje niepokojąca manipulacja konfiguracją ICP w obsłudze od przepełnienia. W obsłudze od przepełnienia mam tylko konfiguracje timera gdyby był zanik sygnału.. Tak zwany "timeout" gdy nastąpi pod rząd ponad 10 przepełnień timera (400ms) a ICP tego nie skasuje bo brak sygnałów to ustawia timer na zbocze narastające i ustawia...
Od razu mówię, że nie jestem asemblerowcem :-) Oto dane potrzebne do obliczeń: Rezonator ma częstotliwość 8MHz Prescaler ustawiony na 1024 Po przepełnieniu, do timera ładowana jest wartość 256-125 (ale za pierwszym razem liczy od 0) W rejestrze r21 zrealizowany jest licznik, który liczy od 125 w dół (pierwsze zliczenie jest od 0 w dół - wykonanych będzie...
Drodzy Koledzy!: mam taki oto problem z tym odbiornikiem.co kilka dni znika fonia,ale osd reguluje i w głosnikach jest minimalny szumek.niekiedy pomaga przełaczenie na AV np:satelita lub kilka razy AV-program i odwrotnie,ale bywa,ze jednocześnie nie można oglądać satki,bo na wszystkich funkcjach AV - DVD - FRONT i S-VHSjest ten sam program z anteny...
[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,...
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
prescaler atmega prescaler bascom prescaler atmega8
robota kuchennego rezystor cewka zapłonowa autoalarm astry
Sony STR-DB1080 – brak strojenia stacji FM/AM, typowe usterki, naprawa, kondensatory, głowica Alps ECOSTIM ultradźwięki – ciągły sygnał dźwiękowy, alarm, brak sprzężenia, diagnostyka