Trudno mówić o dokładności WAITMS, bo może ona mieć różna czasy wykonania. Instrukcje takie stosuje się do opóźniania programu w przypadkach nie wymagających dokładności - zegara na tym nie zbudujesz. Pewne jest, że instrukcja ta nie będzie trwała 2 czy 3 X dłużej przy założeniu, że nie wystąpiło przerwanie, i że taktowanie jest prawidłowo zadeklarowane...
Wpisz większą wartość do OCR1A, przerwanie wtedy musi wywoływać się rzadziej albo zrób tak jak czasami robię kiedy procek działa za szybko a potrzebuję mieć przerwanie rzadziej; zadeklaruj zmienną globalną, np: uint8_t licz = 0; SIGNAL(TIMER2_COMPA_vect) { licz++; if(licz >= 10) //liczba przykładowa, zależy jak często chcesz...
Trzeba dodatkowo włączyć taktowanie bloku przerwań. Wstaw np. zaraz przed while(1) RCC_APB2PeriphClockCmd(RCC_APB2Perip... ENABLE); Jak dojdziesz do timera to też dodatkowo trzeba włączyć taktowanie RCC_APB2PeriphClockCmd(RCC_APB2Perip...
Tak, należy włączyć optymalizację co najmniej na -Q1, a najlepiej na -Qs - inaczej zmiana taktowania nie wystąpi w ciągu maksymalnie 4 taktów od zezwolenia. Przy okazji - jeśli na tym etapie masz odblokowane przerwania, to zmiana źródła zegara wymaga ich zablokowania - jeśli wystąpi przerwanie to nie zmieścisz się w czasie.
To trochę nie tak - setserial służy do ustawiania sprzętowych parametrów portu (typ scalaka, przerwania, częstotliwość taktowania itp) a stty do ustawiania parametrów transmisji (szybkość, liczba bitów danych, stopu, parzystość, kontrola przepływu, sporo parametrów związanych z terminalem). Setserial typowo jest używany raz, w plikach startowych (a...
Jeśli timer nie ma sprzętowego buforowania to zdecydowanie lepszym pomysłem jest wykorzystanie do tego celu przerwania - tylko trzeba policzyć przy jakiej wartości CNT zostanie realnie wykonane przerwanie. Jeśli masz duży prescaler timera to nie ma problemu, jeśli timer taktowany jest taką częstotliwością jak CPU to pojawi się problem dla OCR bliskiego...
IMHO to nie jest dobry pomysł. Z jaką częstotliwością taktujesz CPU? Uwzględnij latencję wejścia w przerwanie i to, że coś to przerwanie może blokować. A ty być potrzebował nie rozdzielczości 1 us lecz takiej dokładności co IMHO jest bardzo trudne do zapewnienia. Także nie tędy droga.
o volatile się zapomniało :P // no tak w przerwaniu :P a ruszasz coś układem? może źle jest cuś przylutowane ? Z taktowaniem może też coś nie tak? Może z zasilaniem? Może to wpływ wiatrów słonecznych ?
Do tego najbardziej nadaje się przerwanie ICP. Przy taktowaniu rzędu 20Mhz można będzie uzyskać całkiem fajną dokładność pomiaru.
Poszedłem waszym tropem i w końcu: RCC_APB2PeriphClockCmd(RCC_APB2Periph_AF... ENABLE); nie wiedziałem że trzeba przerwania taktować jako alternatywne wykorzystanie funkcji czyli włączyć do taktowania AFIO dzięki!
A czy jest włączone taktowanie SYSCFG? RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
8MHz. Procesor zawsze jest taktowany przez CPU clock, zobacz diagramy w nocie procesora. To co zmieniasz to taktowanie poszczególnych komponentów.
Czy aby na pewno częstotliwość przerwań od timera powinna wynosić 1kHz? Skoro masz (w teorii) 24MHz podzielone przez 24000 (preskaler), to faktycznie zegar dochodzący do samego timera będzie równy 1kHz, ale wg mnie przerwanie timera będzie co dwa jego cykle, bo timer liczy tak: 0 ... 1 (przerwanie) ... 0 ... 1 (przerwanie) ... EDIT: sekundy... normalnie...
No to dobrze... uC taktowany jest najniższą dostępną z wewnętrznego RC częstotliwością 1MHz... Ustawiam prescaler na 1 i mam przerwanie co 256us... Czy nadal powinienem coś wpisywać do TCNT0...?.?.?
Jesli juz chodzi o to - to tematy były dwa rózne - tu ma konkretyn problem i chciałbym prosic kogos o pomoc w jego rozwiązaniu; w tamtym poscie prosiłem o pomoc w znalezieniu konkretnych programów - a ze mi się niechcący dwa razy wysłało - to juz inna sprawa!! Nie wiem dlaczego tamten post dot. oprogramowania został usunięty? Powinien byc usuniety jeden...
W zasadzie najlepszy wariant to drugi, Atmegę chce puscić na 4MHz, a przerwanie odmierzające czas taktowane 100Hz (mostek prostowniczy bez filtracji). Tylko nie wiem jak sobie poradzić ze zmianą źródła zegara przy podtrzymaniu bateryjnym.
...może to wina bascoma.. No tak, winni są wszyscy, tylko nie Ja :D Na Twoim miejscu, zadał bym sobie pytanie:"Ile czasu potrzebuje procek taktowany 16MHz, na wykonanie procedury przerwania Ontimer1 :idea:
LPTIM ma przecież: External clock source over LPTIM input (working with no LP oscillator running, used by Pulse Counter application) Wydaje się to dużo lepszą opcją niż budzenie co przerwanie. Impulsy taktują timer, cały układ jest wyłączony, co godzinę budzisz układ przez RTC, odczytujesz licznik timera, odejmujesz od poprzednio odczytanej wartości,...
Czy przerwania są kolejkowane i po obsłużeniu komunikacji wykona kod przypisany do drugiego przerwania, czy informacja zostanie utracona? Może się tak zdarzyć, jeśli obsługa jednego przerwania będzie na tyle długa, że w czasie jej trwania jakieś przerwanie zostanie wywołane dwa razy (lub więcej). Czy komunikacja USB będzie działać stabilnie gdy podłączę...
Zatem policz sobie oba czasy, na przykład w µs. Tryb, który użyłeś jest zupełnie sensowny, ma auto reload. Wydaje się, że dla TH0 = 0 maksimum to 256 taktów. Znajdź jakiś wspólny podzielnik dla obu wyliczonych czasów, tak aby dla dłuższego TH0 było mniejsze od 256, wiadomo, że dla krótszego będzie mniejsze. Ten podzielnik (na przykład w µs)...
Nie da się na to pytanie odpowiedzieć nie widząc kodu. USART obsługujesz w przerwaniach? Pamiętaj, że na czs jego wykonania inne przerwania są blokowane, użycie nieblokujących handlerów przerwań wymaga głębszej analizy. Ale generalnie spójrz na to w ten sposób - procesor przez 40% czasu się nudzi. Więc dla 16MHz masz sytuację taką, jakbyś miał cały...
Nic dziwnego, zmieniasz taktowanie procesora, zmieniasz także baudrate na UART. Dla zewnętrznego kwarcu CKOPT=1, CKSEL=111X, 1 znaczy niezaprogramowany, X - dowolna wartość.
A włączyłeś taktowanie dla CAN2? Nie używam bibliotek HAL więc nie wiem czy one to robią automatycznie.
Mam problem z jednoczesną obsługą przerwań EXTIx orax przetwornikiem ADC1. Muszę próbkować A/C z maksymalną częstotliwością . Dlatego też muszę ustawić maksymalną możliwą częstotliwość na magistrali APB2. Jak zwiększę częstotliwość magistrali APB2 powyżej 4,5 MHz to przestają działać przerwania EXTIn, przetwornik A/C działa. Co nie tak? Kod generuję...
Nie da się tego precyzyjnie wyliczyć. Dekodowanie impulsów z enkodera na M328 odbywa się programowo - np. tak, że impulsy z jednego kanału generują przerwania (nie jest to idealne rozwiązanie, ale na początek nie komplikujmy). W efekcie to jak często mogą się one pojawiać zależy od czasu jaki MCU spędza w funkcji obsługi tego przerwania, ale także od...
1. Fcclk to częstotliwość taktowania procesora w Hz. 2. Spróbuj z pojedynczym sektorem 3. Wyłącz przerwania ustawiając CPSR, a nie VIC 4. Mam nadzieję, że przerwań nie deklarujesz w kodzie z atrybutem interrupt? Albert
OCnX to wyjścia, nie wejścia. Skoro nie możesz odblokować timera0 (bo T0 i T1 można taktować z zewnątrz) to są opcje takie: 1. Zastosowanie przerwań INT0 i INT1 z detekcją odpowiednich zbocz i zliczanie imp. w przerwaniach 2. Polling pinów z odpowiednią częstotliwością Poza tym jaka częstotliwość impulsów?
Możesz podłączyć rezonator 32,768kHz pod XTAL1 i XTAL2 (odpowiednio ustawiając fusebity), ale wtedy cały procesor jest taktowany małą częstotliwością, więc niektóre funkcje mogą działać wolno. Procesor w fusach przełącza się na Int RC, a licznik rejestrowo na Async. Wtedy rdzeń procesora może być taktowany nawet 8MHz, a licznik 32kHz; co przy preskalerze...
Poczytaj o licznikach 8051, ładujesz wymierzoną liczbe do licznika, licznik odlicza tyle cykli maszynowych, i po odmierzeniu tej liczby (20ms) zmieniasz w przerwaniu stan portu, i tak w kółko, trzeba znać częstotliwość taktowania. Taki skrót żebyś wiedział czego szukać.
Może też być tak, że w kodzie programu nie ma wszystkiego np. taktowania. To co w kodzie ma pierwszeństwo przed ustawieniami kompilatora, a opcje kompilacji mogą się różnić.
A możesz przybliżyć nam co to za układ jest, jaki jest dostęp do tego przycisku (montaż mechaniczny), jaki jest skok tego przycisku przy wciskaniu (droga pomiędzy wciśnęty a zwolniony). Jakie ma być zasilanie ? Narysuj wymagany wykres czasowy pracy układu ? Czy po zniknięciu sygnału wyzwalania, układ ma dalej taktować czy przerwać pracę ?
Znacznie lepiej (i zdecydowanie dokładniej) byłoby wykonywać to w przerwaniu timer-a pędzonego rezonatorem zegarkowym, lub cały uC z niego taktować. Skrócenie okresu możnaby chociażby, realizować ładując odpowiednią liczbę do timer-a po przepełnieniu. Pozdrawiam, GSM
Twoje 50 Hz (pomijam, że nie da się tak dokładnej częstotliwości ustawić) daje okres = 20 Chyba źle zrozumiałeś kolegę michalko12 . Te "jego" 50Hz to nie częstotliwość przerwań, tylko sygnału sterującego serwem (tak przynajmniej sterowana jest zdecydowana większość serw modelarskich). Okres tego sygnału powinien mieć 20ms, z czego 0,5÷2,4ms trwa stan...
Rx miałeś dobrze skonfigurowane. Nie masz taktowania AFIO. [syntax=c]RCC_APB2PeriphClockCmd(RCC_APB... | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);[/syntax] I nie włączaj przerwań skoro ich nie używasz. Te 2 linie z USART_ITConfig są nie potrzebne.
Tylko go inicjuję i taktuję? A te, że włączam przerwanie i w nvic to skutkuje tym, że UART bez przerwań nie działa, tak?
A taktowanie Timera jest włączone?
Może po prostu widzisz 0 bo taką wartość ma rejestr po wykonaniu przerwania? Dodatkowo rozważ, że przy podziale 8MHz przez 256 otrzymasz częstotliwość taktowania 31250Hz. Zakładając, że przerwanie będzie po zliczeniu 256 impulsów będzie ono generowane co około 122Hz.
Robię te operacje logiczne, bo nie chciałbym zmienić ustawień innych bitów i coś bardziej namieszać. Tim6 liczy w górę. Jeżeli do rejestru auto-ładowania ARR wpiszę 65036, to po 500 zliczonych impulsach nastąpi przepełnienie i zgłoszenie przerwania. Ponieważ taktowanie to 1kHz, to zajmie to 500ms. Zatem co 0,5s powinno być przerwanie i negacja odpowiedniej...
Mimo, że taktowanie jest dobre to przerwanie Set_clk, czyi multipleks wyświetlacza przerywa odczyty z czujnika i prawdopodobnie to może być powodem. A sam czujnik sprawdzałeś, wymieniałeś?
A ja słyszałem, że w Ameryce biją murzynów. Na oscylatorze wewnętrznym mogą się dziać różne rzeczy, do UART potrzebny jest kwarc, chyba, że używasz XMega, lub wiesz co robisz. Po drugie, jeśli mamy ci pomóc to daj nam chociaż szansę. Popraw błędy o których pisałem. Jeśli masz krzaki to powodem jest albo transceiver, albo niedopasowanie częstości taktowania...
Zmienne globalne zajmują...... Pewnie ram dla led jest rezerwowany w chwili uruchomienia biblioteki przez memalloc. Gdybyś sam pisał obsługę led to użyłbyś tablicy o określonym rozmiarze dzięki czemu wiedziałbyś ile ram zajmuje program. Poszukaj jak wyświetlić ilość wolnej pamięci ram w czasie działania programu. Jakiś freemem jest. Trochę oszuka ale...
PC6 (RESET) - opcjonalnie nóżka resetująca procesor PD0 (RXD) - odbiornik UARTA PD1 (TXD) - nadajnik UARTA PD2 (INT0) - przerwanie zewnętrzne PD3 (INT1) - przerwanie zewnętrzne PD4 (XCK/T0) - taktowanie USARTA albo impulsy dla timera VCC - zasilanie cyfrowe GND - masa PB6 (XTAL1/TOSC1) -do podłączenia kwarcu (wejście) PB7 (XTAL2/TOSC2) -do podłączenia...
Wartość dla 1 sekundy: OCR1A=((częstotliwość procesora)/preskaler)-1 Wartość dla 4 sekund OCR1A=((częstotliwość procesora)/preskaler)-4 Jedynka w podanym przeze mnie wzorze nie oznacza 1 sekundy. Jeden trzeba odjąć z innych względów. Po prostu licznik nie zaczyna liczyć od 1 tylko od 0, więc odliczanie np. do 5 oznacza (0 1 2 3 4 5), czyli 6 impulsów....
Tak Bytematch to pożyteczna funkcja, tylko ona nie pomoże mi w moim problemie. To znaczy upewnieniem się, że odczytane dane trafią w odpowiednie miejsce. No chyba, że nie za bardzo rozumiem działanie przerwania. Taktowanie uC mam ustawione na 8 Mhz, a prędkość UART na 9600 bps. Po odebraniu znaku program powraca do przerwanego działania w pętli głównej...
albo po prostu obsługa przerwania się nie wyrabia Tak by mogło być gdyby timer był taktowany 32MHz, ale T1 jest taktowany 4MHz (preskaler). Właściwie to czemu korzystasz z PLL, skoro T1 i tak chodzi z częstotliwością mniejszą niż zegar systemowy? Zakładam, że rdzeń uC pracuje z 8MHz. Spróbuj w takim razie, T1 popędzić z systemowego zegara dzielonego...
8 przerwań, ale nie co chwilę. Jak szybko będą się kręcić te tarcze? 300 imp/s? To masz 300*8 przerwań na sekundę, dla taktowania 16 MHz, masz prawie 6700 taktów na przerwanie. Skoro ono ma inkrementować licznik + cośtam to masz powiedzmy 100 taktów na jego obsługę. Ciągle zostaje 6600 taktów na coś innego.
Obawiam sie że atmego bez naprawde sprytnie napisanego softu jest po prostu za słaba do tego celu. Wez po uwagę że float mnożenie to ok 2980 taktów zegara przy zmniennych typu volatile. Dla porównania. Dzielenie na pewno więcej. Dane dla innych typów danych: uint8 => 19 cycles uint16 => 24 cycles uint32 => 103 cycles int8 => 37 cycles int16 => 33 cycles...
Mikrokontroler taktowany jest 2.66MHz, więc jeśli TOP określimy na 26666 to przerwanie powinno być 100 razy na sekundę. R
Dawno Bascoma nie używałem ale to będzie coś takiego: On int0 czas 'przerwanie zewnetrze (wejście impulsów) do czestotliwosc=1/czas 'obliczenie czestotliwosci z czasu pomiedzy impulasmi loop czas: stop timer0 'zatrzymaj timer czas=timer0 'odczyt z timera timer0=0 'wyzerowanie timera start timer0 'ponowne uruchomienie timera return Oczywiście...
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...
(at)obrsla: jeśli procek taktuje z częstotliwością 8Mhz to przerwania będa wyłączone cały czas Nie będą wyłączone cały czas i nie ma to nic wspólnego z taktowaniem. Nawet jeśli napiszesz: pytam się bo nie che bez potrzeby odkręcać prędkościomierza Zawsze możesz zostawić tak, jak jest :-? Tylko po co wtedy ten temat? (at)dondu: Problem do wyjaśnienia...
w trybie LPM3 procesor chodzi tylko z baterii, co 4 sekundy się wybudza, inkrementuje datę i czas i idzie spać. Pobór prądu < 3uA. to oznacza, że w uśpieniu działa algorytm odmierzania czasu?? A po wyjściu z uśpienia ( co 4 sek) czas jest odświerzany?? działa to tak, że w uśpieniu pracuje jedynie oscylator CPU na kwarcu 32k (rdzeń jest taktowany...
Czy jeżeli w Bascomi-e, w przerwaniu, ............ ......... czy zapis będzie trwał, a procesor w tym czasię będzie już wykonywał inne rozkazy? Zapisywana jest zmienna bajtowa. Wpis wartości zmiennej do EEPROM nie odbywa sie samoczynnie, jak powiedzmy przesączanie wody przez lejek(!). Tego wpisu dokonuje processor; nie ma tam pośrednika (chyba jedynie...
W pliku .lss szukasz tego wektora na podstawie dokumentacji str44. I szukasz prologu- push itp. i epilogu pop itp. Wpisz reti w wyszukiwanie- tam będą wyjścia z przerwań. A to że kwarc pozwoli na szybsze działanie- to oczywiste. AVR można stosunkowo bezpiecznie taktować 20MHz.
Witam ponownie. Ogólnie jak samo przerwanie wrzuce na atmegę 8 z czestotliwoscią taktowania 1mhz to dioda mi mryga co 1 sekunde. Postanowilem zrobic przerwanie na jednym procku i wysylac jakis bit po SPI na 2 procek wtedy odciaze ten na ktorym jest wiecej obliczeń i problem z głowy. Co o tym myslicie?
Zegar komputera typu PC jest taktowany przerwaniem zegarowym. Aby uzyskać dokładniejszy pomiar czasu należy przejąć przerwanie zegarowe, oraz zwiększyć częstotliwość jego generowania. Jeżeli przerwanie zegarowe będzie sprawdzało stan portu równoległego, to zliczając ilość przerwań pomiędzy kolejnymi impulsami z czujnika można będzie dość dokładnie określić...
Na podstawie wyliczeń w Twoim kodzie domyślam się , że Tiny taktowany jest zegarem 1MHz :?: Jeśli tak jest w istocie , to za żadne skarby nie uda Ci się wygenerować przerwania co 10us.W przerwaniu ładujesz do licznika 0xF6 , dając timerowi 10 cykli do przepełnienia się licznika , a na wykonanie procedury przerwania , procek potrzebuje ~80 taktów zegara...
delay w przerwaniu?! Nie przesadzasz? Dlaczego 2 razy ustawiasz TOIE2? Po co zerujesz TCNT2? Po co ustawiasz TOV2? Spróbuj najpierw sprawdzić ten kod z taktowaniem timera z podstawowego zegara, nie z kwarcu zegarkowego. Wtedy będziesz wiedział, czy problem leży w oprogramowaniu, czy w braku oscylacji.
Jak jest z dokładnością zegarka RTC w Atmega8? Słyszałem plotki, że nie chodzi to zbyt idealnie. Potrzebuję zrobić zegar do zliczania tylko dni i zastanawiam się czy jest sens stosować zewnętrzny układ RTC. Układ musi mieć podtrzymanie zegara z baterii/kondensatora w przypadku zaniku zasilania. Śmiało możesz użyć np. Timer1 w trybie CTC jako generatora...
Jesteś pewien ze procesor masz taktowany 1MHz?
Zamiast wbudowanych w język instrukcji opartych o pętle, proponuję wykorzystać timer i przerwania. Do taktowania mikrokontrolera warto wykorzystać kwarc zewnętrzny, lub generator kwarcowy. Druga sprawa to formowanie przebiegu przed podaniem na wejście licznika. W najprostszym przypadku bramka shmita + ew wzmacniacz na tranzystorze, wejście sygnału odseparowane...
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.
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...
Po pierwsze, usuń błąd z procedury przerwania, a po wtóre, podaj częstotliwość taktowania rdzenia oraz częstotliwość przebiegu na wejściu INT1.
Przerwania PCINT maja tą zaletę, że mogą wybudzić procesor ze stanu Power Down (oscylator nie pracuje więc oszczędność energii jest największa) w reakcji na zmianę stanu pinu. Przerwania INT w Power Down mogą wybudzić uP w reakcji na stan niski i aby procedura przerwania została wykonana stan niski musi utrzymywać się na tyle długo by procesor zdążył...
(at)tmf A STM32 niema przerwania że wysłał dane i czeka na następne. Jeżeli tak to można zrobić bufor a resztę niech załatwia przerwanie.
Witaj, Jak się domyślam problem z komunikacją 1Wire. Sprawdź czy w stosunku do częstotliwości z jaką taktowany jest Twój procesor dobrze są dobrane parametry czasowe transmisji. W 1Wire jest zdefiniowanych kilka okienek czasowych - czy są dobrze odliczane? Gdy uruchamiasz transmisję wyłącz przerwania. Pzdr. asd
Nie pokazales czy ustawiasz prawidlowo taktowanie TWI, jaki adres urzadzenia ma twoj PCF, a jaki ty nadajesz, no i co znaczy, ze uklad nie reaguje. W dodatku umieszczanie tego w przerwaniu jest pomyslem takim sobie w tej formie - nadanie start condition, adresu i ew. danych + stop condition trwa wieki w porownaniu z tempem dzialania procesora. Takze...
kurczę ja zawsze zapominam przy tym obliczaniu, że jeszcze się Timer musi przepełnić ;) - dzięki za sprostowanie tylko uprzedzę, że w twoim programie pierwszym używaliśmy (i ja używam nadal preskalera 8 a nie 64). Jak na próbę ustawiłem 64 to już była masakra dla oka ;) uuuf ok - czyli przy 8MHz i preskalerze = 8 - nasze przerwanie wykonuje się co 256us...
Cześć, z reguły tak to się robi, że podłączasz odbiornik podczerwieni pod przerwanie. Jeżeli program byś pisał w bascomie to prawdopodobnie musi być podłączone pod PIND.2 Jeżeli obsługę RC5 będziesz robił sam to możesz podłączyć pod dowolne przerwanie. Ogólnie zasilanie takiego odbiornika podłącza się przez filtr RC np 100 ohm szeregowo i 10u elektrolit...
Odczyt EEPROM trwa tyle co odczyt IO. Nie wnosi żadnych opóźnień. Zapis - jest zależny od MCU, dokłądne czasy znajdziesz w jego nocie - zwykle to 2-5 ms. Podczas zapisu procesor może wykonywać inne instrukcje, a nawet je wykonuje. Tylko, żeby z tego skorzystać należy dokonać zapisu z wykorzystaniem przerwań - po zaposaniu komórki wywoływane jest przerwanie...
No to pomyśl... Dużą częstotliwością taktowany dsPIC? Najszybsze mają 40MIPS, myślisz że przerwanie co 40 instrukcji to dobry pomysł? 4\/3!!
Co zrobić aby maksymalnie zmniejszyć szumy, zakłócenia itp.? Zasilanie części analogowej przez filtr (dławik, kondensator), zmniejszyć w czasie pomiaru częstotliwość taktowania rdzenia? Na czas pomiaru zablokować wszystkie przerwania? Czy częstotliwość taktowania AD może mieć znaczenie? Czy sample time ma jakiś wpływ? Chodzi mi głównie o stabilny pomiar...
Oczywiście, przeczytaj o module ICP timera. W momencie wystąpienia zdarzenia, licznik timera jest przepisywany do rejestrów ICP. Rozdzielczość jest zależna od częstotliwości taktowania timera. Twoje rozwiązanie nie może prawidłowo działać, bo czas liczysz w pętli, a ta z kolei ma różny czas wykonywania (zakładam, że korzystasz z przerwań).
Tak jak wcześniej pisałem, najłatwiej podpiąć wyjście detektora do wejścia INT0 lub INT1, w obsłudze przerwania wyłączamy pin odpowiedzialny za triak, ładujemy do TIMER1 ładujemy obliczoną wartość opóźnienia załączenia triaka. W obsłudze przerwania z TIMER1, włączamy pin wyjściowy. Przykład: Atmega8, taktowana 8 MHz, przerwanie INT1 skonfigurowane jako...
Wartość początkową ustalam odejmując 256 i 125, stąd TCNT0 = 131. Dlaczego tak to liczysz? Używasz trybu normalnego Timera0. Timer 0 w trybie normalnym liczy od 0 lub wartości początkowej ustawionej w rejestrze TCNT0 do wartości 0xFF. Przy 8 MHz i podziale przez 256 obliczenia wyglądają następująco: 8Mhz/256 = 31 250 31 250/256 (od 0 do 0xFF) = 122...
Tak poza tym coś mi tu nie gra. - ATmega8A może być taktowana do 16 MHz a nie 14 MHz - nawet przy 14 MHz częstotliwość w FastPWM wyjdzie ~54 kHz. Zmniejsz rozdzielczość, tworząc na przerwaniach programowy PWM. W przerwaniu przepełnienia Timer-a możesz ładować odpowiednią wartość, zmniejszając tym efektywnie jego rozdzielczość. Pamiętaj przy tym, że...
Chyba jednak zdecyduję się skorzystać z Attiny2313 z przerwaniem i częstotliwością taktowania 32kHz. Wprawdzie prąd podany przez producenta został zmierzony przy napięciu 1,8V a w moim zastosowaniu attiny będzie działał przy napięciu około 3,3V ale prąd nadal powinien się utrzymywać na bardzo niskim poziomie.
kotlar: trochę więcej wiary w siebie, całkiem nieźle Ci idzie, a błędy przecież popełnia każdy, nie tłumacz się więc na każdym kroku. Konkrety: SSEL - to jest wejście , dzięki któremu procek, jako SPI SLAVE wie, że dane są dla niego, a nie kogo innego, więc należy go prawidłowo zainicjować (wybrać jako funkcję alternatywną pinu i odpowiednio sterować)...
Żebyśmy się dobrze zrozumieli. CPU taktowane jest zegarem RC 8MHz. Zegar asynchroniczny taktuje jedynie timer T2. Czas między przerwaniami to 0.5s. A czas obsługi przerwania to jakieś 10us, może mniej.
ATmegi8 sa zastepywane atmegami88. Na pewno jedna wade w krzemie mialy, polaczenie VCC z AVCC. Moze jeszcze sa jakies inne bledy ;) Atmega88(PA) i Atmega8(A) to całkiem inne układy. Wersje z literą A są energooszczędne (bez litery A są to układy przestarzałe i wycofywane). Różnice pomiędzy Atmega8 a 88 to m.in.: 3 albo 6 kanałów PWM 16 albo 20 MHz...
Chm, chyba się zapędziliśmy. Też nie widzę nic takiego dla EXTI. No to chyba jednak ono dostaje taktowanie zawsze. Czyli już nic nie trzeba włączać.
Witam, jakoś nigdy nie zagłębiałem się bardziej w temat System handlers i Fault handlers ale teraz powstało parę pytań. Załóżmy że zbudowałem urządzenie, które ma być skierowane do produkcji. Zostało ono prze zemnie przetestowane i działa prawidło. Stąd czy powinienem jakoś zwrócić uwagę na wymienione prze zemnie grupy przerwań, czy jeśli system jest...
-Można dodać linki do kalkulatorów programowalnych online. -Kalkulator dla timerów. Podajesz częstotliwość taktowania i wymagany czas między przerwaniami, uzyskujesz prescaller oraz wartość przy której timer wywołuje przerwanie (w STM nazywa się to output compare). Trzeba by było zrobić opcje dla wszystkich popularnych MCU, bo np. w AVR timery działają...
Można je alternatywnie używać jako dodatowe wyprowadzenia I/O - PA0, PA1. W wersji Tiny2313A jedno z nich może pełnić dodatkowo funkcję wejścia przerwania zewnętrznego.
Jeśli w OB1 użyję MB20 i wpiszę do niej liczbę 20. A przerwanie co 1ms zwiększa liczbę o 5. To w MB20 będę miał 25? Tak. Po pierwszym przerwaniu. Chodzi o to, że odczytując MB20 dwukrotnie w kodzie OB1 możesz otrzymać dwie różne wartości. To samo w sobie nie jest nic złego, ale łatwo popełnić błąd w programie zapominając o tym fakcie. if MB20 <...
Odgrzeje kotleta, ale nie chce tworzyć nowego wątku. Dotyczy to dowolnego AVR zakładam, że wybrałem tryb ctc, ustawiłem preskaler na odpowiednią wartość i timer zgłasza przerwanie np co 1ms. Powiedzmy taktowanie mam 16 Mhz, więc na 1ms wypada 16 tys cykli. Czy znaczy to tyle, że mogę w przerwaniu wykożystać dokładnie taką ilość cykli, oczywiście odliczając...
ISR(TIMER0_OVF_vect) { TCCR0=0; // w tym miejscu wyłączyłeś sobie taktowanie timera 0 licznik++; } Przedtem tego nie zauważyłem (początkowo miałeś w tym miejscu "TCNT0=0;" ) . Wyrzuć to "TCCR0=0;" z obsługi przerwania, bo podczas obsługi pierwszego przerwania TIMER0 OVEFLOW wyłączasz sobie taktowanie timera, inaczej mówiąc - zatrzymujesz...
Tak był błąd w przypisaniu zmiennych na odwrót. Mnie ciekawi tylko gdzie są wartości początkowe timerów ? Aco za tym idzie skąd to przekonanie że timer1 wywołuje przerwanie co sekundę ? Co do Timera0 też nie jestem pewien czy przerwanie jest co 4ms ? A jaka jest częstotliwość taktowania ? i gdzie jest dyrektywa $crystal ? W dodatku w podprogramie obsługi...
IRQ na zbocze może machać kierunkiem licznika - odpada jedna podpętla IRQ z licznika może uruchomić (lub resetować) odliczanie gdy osiągnie się zadaną wartość - odpada kolejna podpętla IRQ z kolejnego licznika może odliczać czas 1 lub 0 - kolejna podpętla Osiągnięcie wartości min lub max z IRQ w/w licznika spowoduje wywołanie przerwania "1" lub "0"...
Można było pokusić się o podtrzymanie samego procesora, ale n.p bateria nie wystarczyła by na długo, a nie można przecież uśpić procesora (odliczanie czasu). Też zrobiłem zegar na ATtiny2313 ale właśnie z podtrzymaniem. Po wykryciu zaniku zasilania mikrokontroler wyłącza wszystko co zbędne i zmniejsza sobie taktowanie, pozostawiając jedynie przerwania...
Tak jak napisał kol. Steryd3 prawidłowo podchodzisz do zadania. Możesz oczywiście jeszcze pokombinować, by przez te 20ms także uśpić mikrokontroler, choć z powodu małej ilości użyć przycisku nie da to wielkich rezultatów, ale ziarnko do ziarnka ... Interesuje mnie natomiast z jaką częstotliwością taktujesz mikrokontroler. Tutaj bowiem możesz sporo zaoszczędzić....
Jak widać 87 stopni na drugim rdzeniu wystarczyło, aby test został przerwany. Wprawdzie pierwszy rdzeń wchodził na maksymalne taktowanie jednak nie podano jak jest na drugim. Według mnie chłodzenie trzeba jednak przeczyścić + wymiana past / termopadów. Tak szczerze mówiąc to ten procek nie grzeszy wydajnością i w chwili obecnej nawet do przeglądania...
SPI w oparciu o przerwania nie ma sensu robić - taktujesz go o ile dobrze rozkminiam Bascoma z FCLK/4, czyli wysłanie jednego bajta zajmuje 32 takty zegara. A więc co 32 takty procesor dostaje przerwanie, którego czas wykonania jest znacznie dłuższy niż owe 32 takty, w efekcie procesor praktycznie ciągle jest w przerwaniu i nie może realizować innych...
I właśnie do tego potrzebne Ci są przerwania, a po ich zastosowaniu mikrokontroler taktowany 1MHz będzie się nudził, załatwiając wszystko co do tej pory sobie zaplanowałeś łącznie z przyciskami.
Czyli zegar I2C nie będzie taktował magistrali w czasie obsługi przerwania? Czy zegar działa cały czas?
do linii CFLAGS += dodaj -DF_CPU=1000000UL jeżeli taktujesz 1Mhz. Pozdrawiam
Domyślam się, że chodzi o efekt nr 2 z tymi losowymi kolorkami. To chyba jeden z najprostszych efektów :) Co 20ms losowana jest nowa pozycja i nowy kolor. Dla większej ilości led warto przyspieszyć efekt (zmniejszyć wartość "speed"). [syntax=c] //pętla główna . . . if(!tspeed) //timer w przerwaniach z taktowaniem 1ms { tspeed = speed;//Prędkość efektu...
Tak, będzie działał, Jednakże wyłączanie peryferiali w trybie POWER_DOWN specjalnego sensu nie ma bowiem są już i tak wyłączone "z urzędu". Sp;owalnianie taktowania by wprowadzić w PWR_DOWN też nie ma sensu.
Jak chcesz miec porzadek w programie i jesli procesor ma robić tylko tyle ile musi to : po 1. Powinienes zdefiniowac w RAM bufor wartosci MIERZONEJ po 2. j/w dodatkowo bufor wartosci WYSWIETLANEJ (wyswietlacza) po 3. W przerwaniu (timera) powinna znalezc sie JEDYNIE obsluga wyswietlania poszczególnych cyfr (pozycji) z bufora WYSWIETLANIA - dotyczy to...
atmega taktować zmiana taktować obniżenie taktować
kosiarka spalinowa nierówno zamykanie aplikacji stabilizator lt1083
radmor5412 przestrojenie wentylator zasilacza
Schemat dzwonka-gongu DIY: NE555, HT2811, SAE800 – proste układy do samodzielnego montażu Sterownik BEKO HD-D16 HURDING – gdzie kupić, zamienniki, dostępność części