Najprostsze rozwiązanie - w przerwaniu od czujki uruchom sprzętowy timer. Przerwanie od timera powoduje włączenie alarmu. Jeśli użytkownik wyłączy system przyciskiem, to w procedurze przerwania przycisku wyłączasz timer. Żeby wszystko działało jak trzeba, musisz zezwolić na zagnieżdżone przerwania (czyli żeby ISR od timera mógł się wykonać w momencie,...
Wszystko co napisałem powyżej pozostaje w mocy. Tryby normalny i CTC działają przy odmierzaniu czasu podobnie: obydwa tryby odliczaja ileś tam tyknięć rejestru TCNT i generują przerwanie. W przypadku trybu normalnego to liczenie następuje od wartości ustawianej w TCNT do wartości 0 (256), a w trybie CTC od wartości 0 do OCR (lub ICR). Zacznijmy od tego,...
Timery i dokładne odmierzanie czasu w różnych miejscach kodu. Zamiast korzystać z kilku timerów, można w różnych blokach kodu konfigurować 1 timer i wstrzykiwać odpowiednią funkcję przerwania. Oczywiście pod warunkiem, że nie będziemy musieli odmierzać czasu dla dwóch bloków jednocześnie. Wygląda na to, że potrzebujesz po prostu callbacka w jednym...
Tutorial do avr taki znalazłem: http://avr.elektroda.eu/?q=node/8 Jak byś czegoś w sieci szukał, to raczej unikaj tutoriala z patron.net, uczy złych nawyków i jest nieco nie na czasie. Pomiar częstotliwośći na AVR realizuje się w miarę łatwo, przy wykorzystaniu timerów, jeden timer pracuje jako licznik impulsów z zewnątrz, a drugi odmierza czas, mozna...
https://obrazki.elektroda.pl/1570592100_... Witajcie, zapraszam na relację z konstrukcji zegara na PIC18F2550 napisaną w formie tutoriala, wszystko krok po kroku. Pokażę tu jak i z czego tworzyłem prosty projekt DIY na prośbę jednego z czytelników. Wykorzystamy tu wyświetlacze 7-segmentowe, rejestr przesuwny, obsłużymy przyciski a...
Witam, z powodzeniem wiele razy wykorzystywałem kwarc 12MHz do odmierzania czasu w '51. Używałem wtedy trybu '0' timera, w którym cykl zliczania młodszej połówki TL licznika jest skrócony do modulo 32, natomiast TH przeładowywany był stałą 256-50=206. W ten sposób przerwanie od timera nadchodziło z częstotliwością: 12000000Hz ÷12 ÷32 ÷50 = 625Hz Dalsze...
https://obrazki.elektroda.pl/2568884200_... Witajcie moi drodzy Zapraszam na kolejną część mojego tutoriala PIC18F2550 i kompilatora SDCC . W tej części zademonstruję jak używać wyświetlacza 7-segmentowego z PIC18F2550 . Kod obsługi wyświetlacza będzie oczywiście napisany w oparciu o przerwania i timery . Cały proces powstawania układu...
Nie do końca zrozumiale napisałeś. Odmierzanie czasu oczywiście da się zrobić w przerwaniach i jest to najczęściej stosowany sposób. Dobrze jest wywoływać przerwanie co stały okres, który będzie wspólnym dzielnikiem obydwu czasów, które chcesz odmierzać. Np. 250us. Wtedy w przerwaniu inkrementujesz jakiś rejestr i sprawdzasz czy osiągnął wartość 5....
Witam! Mam w swoim programie chciałbym wykorzystać timer w trybie one pulse do odmierzania czasu, ale w taki sposób, żeby można było wyłączyć timer w przerwaniu od wartości CCR. Do tego celu wykorzystuje TIM2 (general purpose). Niestety timer nieprawidłowo odmierza czas kiedy chcę go wyłączyć bitem CEN(np wpisuję ze ma się wyłączyć po 100us a wyłącza...
teedd -> nie zapytałeś nawet w jaki języku pisze pys1986, a zamieszczasz od razu kod. Poza tym nie wiem dlaczego chcesz zrealizować odmierzanie czasu na przerwaniu INT1 zamiast wykorzystać wbudowany timer? Jest to niepotrzebne komplikowanie zadania i dodawanie uC niepotrzebnej roboty. Na stronce jaką zamieściłem jest przykładowy zegar z kalendarzem...
Łatrwiej będzie zbudować coś takiego bez tych barier IR, bo gdzieś je musisz konstrukcyjnie wbudować. Sugerowałbym raczej odmierzanie czasu włączania/wyłączania cewek, które przy założeniu, że kulka jest zawsze z takiego samego materiału i tej samej wielkości, można dobrać optymalnie.
Sprawdź na symulatorze w którym momencie się rozjeżdżają wartości badanej zmiennej i timera1 Możliwe, że ta pętla się wykonuje więcej razy, bo warunek stopu przeskakuje. Timer jest zwiększany asynchronicznie w stosunku do programu i program może przeoczyć moment gdy Timer=konkretna wartość, bo sprawdza Timer1 w przypadkowych momentach a nie po każdej...
Szybszy może i by był - to znaczy procesor miałby więcej czasu do nudzenia się :) - przecież odmierzanie czasu następuje w przerwaniu a cała reszta to wyświetlanie i obiór z pilota. Czyli dużo niewykorzystanej mocy obliczeniowej nawet przy 1MHz. Przy bardziej robudowanych programach to może mieć znaczenie, przy czymś takim to wygoda/objętość kodu vs...
Ja tam skracam temat flag w ten sposób, że w przerwaniu Timera jakaś wartość jest odliczana do zera i dalej nie ruszana. Dopiero jakaś procedura w pętli głównej sprawdza czy jest zero, ustawia dalej odmierzanie czasu i podejmuje akcję.
W PLC nic nigdy nie robiłem i również chciałbym wystartować w temat lecz też nie wiem w jaki sterownik iść jeśli możesz coś polecić to jak najbardziej gdzie kupić jaki zestaw itd na pewno ta informacja się mi przyda w PLC też chciałem się zapoznać jak się to programuje - ponoć łatwiej niż arduino. Myślałem że taki projekt wyjdzie najtaniej na Arduino....
A ja proponuję może najpierw się zastanowić nad tym do czego opóźnienia i wtedy dobrać sposób czy na timerze czy bez timera. Tak mi się wydaje, że próby zaprzęgania Timerów do super "idealnego" odmierzania tak gigantycznego czasu jak 1 sekunda to jak strzelanie z armaty do komara (choć może się mylę - ale ciekaw jestem do czego tak na prawdę może być...
..... wymagane jest precyzyjne odmierzanie czasu (transmisja, inicjalizacja, itd.) Jak precyzyjne to odmierzanie czasu ma być i jaka jego wielkość? Liczniki programowe z wykorzystaniem sprzętowego timera są bardzo dobrym rozwiązaniem i do obsługi 1WIRE w zupełności wystarczy. Jeżeli zależy Ci na bardzo dużej precyzji uwzględnij w obliczeniach czas...
Chciałbym to zrealizować prosto tą funkcję do odliczania czasu, najlepiej na zwykłym przerwaniu i timerze. Potrzebuję ją do czujnika Halla ASC712 do pomiaru prądu przemiennego. Wątek na forum Kardasia dotyczy właśnie tego? No więc Tobie nie jest potrzebne żadne millis, a tym bardziej jakieś 64 bitowe zmienne tylko odmierzanie odcinków czasowych. Nie...
Dodałbym, że Bascom odpowiedzialny jest jeszcze za koklusz i gradobicie. 1. M8 musi być ustawiony na pracę z kwarcu zegarkowego - FUSY. Powoduje to napędzanie M8 z generatora wewnętrznego RC 2. Trzeba skonfigurować Timer2, który jest zdolny do asynchronicznego taktowania z kwarcu 32768Hz - polecam helpa Config Timer2. 3. W przerwaniu od timera2 należy...
Albo jeszcze inaczej. Podpinasz wyjście z wiatraka do przerwania np. INT0 W przerwaniu zwiększasz o jeden dowolną zmienną np. obr. Dodatkowo ustawiasz Timer na odmierzanie stałych odcinków czasu np. 1s. W obsłudze przerwania odczytujesz zmienną obr. i zapisujesz ją w zmiennej obroty, nastęnie zerujesz zmienną obr. Przy okazji w tym przerwaniu wyświetlacz...
kulmar: Oczywiście bez jakichkolwiek zmian w programie owszem. Ale jak pisałem zawsze dostosowuję program do kwarcu. Dla kwarcu 4MHz jest to prescaler 64 i początkowa wartość licznika: 193 Dla kwarcu 8MHz prescaler to: 64 i początkowa wartość licznika: 131 To pokazuje kalkulator. Nie rozumiemy się. Nie namawiam Cię do zmiany kwarcu bez zmiany programu,...
1. Dlaczego do sterowania przesunięciem fazowym nie jest potrzebny tryb CTC, tutaj chodzi przecież o odmierzenie ściśle określonego czasu od momentu przejścia przez zero? Co kolega Sylwekk ma na myśli ? ... Nie rozumiem jednak co kolega Sylewkk ma na myśli radząc abym pogonił tyrystor przez MOC3021 ? Czy takie coś zapewniło by separację galwaniczną...
No tak... ;) Mam jeszcze takie pytanie, napisałem ostatnio funkcję opóźnienia (delayus/delayms). Generalnie działa poprawnie, ale dzieje się jedna dziwna rzecz, której przyczyny nie mogę znaleźć. Opóźnienie zrobiłem z wykorzystaniem timera TIM2. Działa to tak, że gdy jest wywoływana funkcja delayus to włączany jest TIM2, wpisywana jest wartość do rejestru...
Witam. Może ktoś będzie mógł rozwiać moje wątpliwości, co do zasady działania tego przekaźnika. Z tego, co zrozumiałem to, jeżeli podamy napięcie na styki 1i3 to przekaźnik uruchomi podpięte do niego urządzenie (np.silnik), zacznie też wtedy odmierzać nastawiony czas (np.10min), po którym silnik zostanie wyłączony. Ponowna praca możliwa jest dopiero...
Chciałbym sterować serwomechanizmem z portu LPT, ten PWM muszę zrobić programowo. Jest to standardowy serwomechanizm, okres 20ms, pozycja zerowa dla 1,5ms. Chciałbym zrobić to w C; inne rozwiązanie mnie nie interesuje. Najlepiej byłoby w przerwaniu uruchomić jakiś timer i precyzyjnie odmierzać czas, w interwałach największych 0.1ms, a najlepiej w microsekundach....
Drogi kolego. Jeśli już chcesz pisać programy w asemblerze , to musisz się bardziej przyłożyć , oraz dokładnie zapoznać się z budową wewnętrzną proca , z funkcjami jego rejestrów , sposobami dostępu do nich , itd. itp. Tyle jeśli chodzi o ględzenie :) Twój problem wiąże się z tym , że w przerwaniu nie ładujesz do licznika wartości początkowej , takiej...
raczej chyba atmega644p, bo atmel to firma. Podam hasło pomocne w rozwiązaniu projektu: Timery Przycisk aktywuje odmierzanie czasu (np. poprzez wpisanie jego wartości do jakiejś zmiennej), timer w przerwaniu odlicza ten czas, a program główny sprawdza, czy czas został odmierzony. Jeśli tak to powracamy do danych głównych (A), a jeśli nie to wyświetlamy...
Witam Jestem tu nowy więc proszę o wyrozumiałość. Od pewnego czasu próbuję zdekodować pilot(y) IR. O ile dużo jest wątków poświęconych dekodowaniu RC5 i innych to jednak nigdzie nie mogę się doszukać jak sprawdzić czas impulsu. Wykorzystuję timer i przerwanie zboczem narastającym ICR1 . W przerwaniu zmieniam na zbocze opadające a następnie dokonuję...
? nie wiem co to za koslawy kod. Po 1, nie uzywa sie goto. 2, Ja na twoim miejscu bym uzyl timera 2 w trybie asynchronicznym, z zegarkowym oscylatorem. Ustawil przerwanie z timera na 1 sekunde. Pozniej w przerwaniu dodal bym zliczanie do 30 sekund. Gdy nie ma 30 Sekund osiagnietych flaga=0, gdy jest powyzej 30 flaga=1. Przycisk 1 by startowal odliczanie...
Witam. Dzięki za odzew. Zacząłem poruszać się tym tropem i chciałbym to skończyć w ten sposób, czyli T0- zlicza impulsy, T1-odmierza czas. I teraz jest taki pomysł. Rejestry T0 to TH0, TL0, W tej chwili T0 jest ustawiony w tryb pracy 2. Jednakże myślałem o czymś takim: T0 ustawić w tryb pracy 1 TH0 i TL0 - wartości początkowe ustawić na zero. W przerwaniu...
Witam Wykonuje urządzenie pomiarowe które mierzy mi prędkość obrotową szpuli o niskiej prędkości obrotowej w zakresie 0,1 - 2obr/ s a więc bardzo wolno. Na wale zamontowany jest czujnik pola magnetycznego (kontaktronowy), który raz na obrót generuje mi przerwanie na AVR. Problem polega na tym że wyznaczenie prędkości obrotowej ma się odbyć co impuls...
Witam, napisałem bardzo prosty kod sterujący przez przerwanie wyświetlaczami LED i zwiększający o 1 zmienną z co sekundę [syntax=c] #include <avr/io.h> #define F_CPU 8000000 #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <inttypes.h> #include <util/delay.h> unsigned char z=0; unsigned char i=0; //zmienna...
Widzę że nie ja jeden mam problem z odbiorem danych z ds-ów a wszyscy je polecają hm w zamian można dać jakieś np. Lm35 tylko nie wszystkie mają ujemną temperaturę i są droższe. Będę miał jutro czas to posiedzę jeszcze nad tym programem mam nadzieje że dam rade, w razie czego tu jeszcze napisze. Mam książkę M.Wiązania bardzo fajna właśnie fragmenty...
Witam! Chcę zbierać pomiary z przetwornika ADC ATMEGA32 z trzech kanałów co określony czas (1,25ms) i wyświetlać je na LCD. Program napisany przeze mnie, niby działa poprawnie, ale pomiary z 3-kanałów są jednakowe, a przecież powinny być różne. Zaplanowałem, żeby zrobić to w następujący sposób: -ustawić ADC na generowanie przerwania w momencie zakończenia...
Po dluzszej przerwie i irytacji wynikajacej z nieznajomosci C i keila znow wzialem sie za ten programik. Stwierdzilem ze odmierzanie czasu "na sztywno" i zczytywanie kolejnych bitow jest kiepskim rozwiazaniem i sprobowalem najpierw zmierzyc czas pomiedzy kolejnymi bitami a pozniej zczytywac w oparciu o ta wartosc. Nabazgralem programik, troche ogarnalem...
Ajamamototakie ;) Wrzucam cały główny program + include, bo nie chce mi się go ciąć, ot leń ze mnie i tyle ;) Przy okazji w ramach gratisu"wieczny" kalendarz na lata 2000-2255 obliczający dzień tygodnia (procedura calc_weekday ) w zdaję się mniej niż 100 cykli, a nie jakieś badziewie z AVT, które potrzebuje na to kilku sekund(!). No i jeszcze pare pierdółek...
Mam problem z TIMER2 - odmierzanie czasu , najlepiej 1s. Wartość b będzie zmieniała się - tylko co jaki odstep czasu. Może ktoś poratować? Albo ma może jakiś swój przykładowy programik na Timer2 z wywoływanym przerwaniem? Radzio // Testowanie timera 2 #define F_CPU 8000000UL #include <avr/io.h> // dostęp do rejestrów #include <avr/interrupt.h>...
A ja mam oto takie przerwanie: ;=======================================... ; Timer 0 interrupt ;=======================================... .org0x000B t0intv: MOV timer_xxx,TL0 ;2 execution time measurement (start) PUSHACC ;2 PUSHPSW ;2 DJNZclock_clk, noclock ;2 MOV clock_clk,#iclock_clk;2 ; hundreds of seconds INC clk_x MOV...
Widzę, że moje programy znajdują uznanie i dobrze. Co do podawania impulsów na uC to nie można zmieniać dowolnie końcówek bo timery mają wejścia przypisane do konkretnych wyprowadzeń. Dla M8 są to T1 - 11, T0 - 6. Trzeba to brać pod uwagę przy projektowaniu układu. Dotyczy to końcówek używanych jako alternatywne. Po przeróbce czas odmierza T0 (8bit)...
Sprawdzaj flagę w rejestrze TIFRx bez włączania przerwania w TIMSKx.
Rozważyłbym coś takiego: timer 8bit do przerwań, które zliczasz dla odmierzania czasu; timer 16bit do sprawdzania, czy nie zgubiłeś przerwania - chyba nie zgubisz 256 przerwań?
...Proszę o jakieś podpowiedzi bądź kawałek kodu co ma być dalej, żeby generować te nieszczęsne 40kHz ... To już wszystko :) Na pinie PB1 masz przecudne 40kHz , jeśli faktycznie procek jest popędzany 8MHz. W ramach testu , możesz w pętli głównej napisać: Do Set Tccr1a.com1a0 'dołącz oc1a do pinu Wait 5 'przez 5 sekund fala 40kHz Reset Tccr1a.com1a0...
Najprościej, to jeśli nadajnik nic innego nie ma do roboty to wstaw delay(100) do loop, czy jakąś mniejszą/większą wartość, która dla działania układu ma jeszcze jakiś sens. A ten delay w nadajniku da czas odbiornikowi na przetworzenie danych i wykonanie akcji zanim nadlecą kolejne dane. To samo możesz zrobić używając do odmierzania czasu millis lub...
Samo wejście i wyjście z przerwania nie kasuje sprzętowo flagi w typie Ex. Skasuj flagę przerwania "ręcznie" w przerwaniu i daj znać jak taka akcja się skończyła :D
robilem cos takiego i tez poszedlem drogą licznika i timera. Timer odmierzał kwanty czasu, a licznik przerwania INT0. Dodatkowo wykorzystałem sobie jakieś przełączniki DIP do zmiany szerokości okienka czasowego w których liczone są impulsy.
O układ DS3231 lekko zahaczyłem (...) Cenę sprawdziłeś? Dodano po 1 W pętli głównej procesor nie robi nic. ************************************* Do Loop End ************************************* Oznacza to, że czas odmierzasz w przerwaniach. Mam nadzieję, z timer pracuje w trybie CTC. W takiej sytuacji w pętli głównej usypiaj procka. Bascom ma odpowiedni...
Instrukcja WAIT Przeznaczenie: Przerywa działanie programu na określony czas. Składnia: WAIT il_sekund Opis: Instrukcja wstrzymuje działanie programu na podaną ilość sekund. Odmierzany czas jest wartością przybliżoną, więc nie należy stosować tej instrukcji do dokładnego odmierzania czasu. Używanie przerwań, może znacznie wydłużyć działanie instrukcji....
Twój problem nie wynika z priorytetu przerwań tylko braku umiejętności prawidłowego ich wykorzystania i zastosowania biblioteki która jest źle napisana . Zazwyczaj dzieje się tak gdy użytkownik w przerwaniu umieszcza całą procedurę obsługi bufora , wyświetlacza lub innych peryferii lub po prostu timer odmierza krótszy czas niż trwa obsługa przerwania...
Pierwsze przerwanie wywołuje sie po bardzo długim czasie, bo za pierwszym razem Timer musi doliczyć od 0 do 65535. Dopiero za drugim razem by zliczał od 63000 do 65535, ale też nie zliczy, bo w niewłaściwej kolejności zapisujesz dane do tcnt1. Odpowiedni czas będzie odmierzany dopiero od trzeciego przerwania. Powinno być: out tcnt1h,r17 out tcnt1l,r16...
Witam. Proponuję wszystkie operacje przeprowadzić na przerwaniach. Czyli na przykład Przerwanie od Timer 1 steruje wyświetlaniem znaków co określony czas wyświetlasz kolejny znak czas dobierasz na tyle krótki żeby nie widzieć migotania, Przerwaniem od Timer 0 odmierzasz czas dla odczytu temperatury. Pozdrawiam
Zrób to w konwencji automatu - zmienna określające stan i duży switch (stan) w obsłudze przerwania z odpowiednim zachowaniem w każdym stanie. Na ogół wygodnie jest to zrobić przy stałej częstotliwości przerwań timera, odpowiadającej najkrótszemu odcinkowi czasu, który trzeba odmierzać lub takiemu, który jest podwielokrotnością wszystkich odmierzanych...
Po pierwsze pozbądź się waitów, po drugie przerwania. Podam hasła do opracowania: Timery - odmierzanie czasu, przerwania, timing zdarzeń Przyciski - podciąganie, odczyt z rejestru PINn
poza tym dlaczego nie używasz sprzętowych timerów jako timerów tylko do generowania przerwań? Kolego może źle mnie zrozumiałeś ale do ustawiania flagi używam Timer0 i właśnie mnie dziwi dlaczego mi się te czasy nie zgadzają Jak do wyznaczenia czasu używam tego samego timera. Tak wygląda obsługa przerwania u mnie : Timer może zliczać czas wprost i w...
Jeśli możesz użyć biblioteki to polecam http://homepage.hispeed.ch/peterfleury/a... jeśli nie to możesz się na niej wzorować. Ma bufor kołowy, odbiór/nadawanie w przerwaniach, przykład z parsowaniem danych też znajdziesz w google. Wyświetlając komunikat zachęty powinieneś ustalić ściśle akceptowalny format, np. Time:RR-MM-DD-GG-MM-SS,...
Mam 2 pytania. Czy rezonator kwarcowy 32.768KHz do odmierzania czasu przerwaniem sectic potrzebuje kondensatorów? Jeśli tak to jakie? Drugie pytanie. Słyszałem że do kwarca 32.768 KHz Ustawia się procesor na pracę z wewnętrznym rezonatorem 8MHz. Czy to prawda?
A same przerwania by sie czasem przydały. Nie widze szansy napisania sensownego programu bez użycia przerwań. Banalna sprawa w miarę precyzyjne odmierzanie czasu.
Load Timer 250 pojawił się 2 razy bo pierwszy jest wykonyawny przed wejściem do pętli a następny w pętli. W tym programie jest dodatkowa zmienna Licz_8ms bo Timer0 nie może odmierzyć całej sekundy w jednym przebiegu. Przy użyciu Timer1 i odpowiedniego kwarcu można osiągnąć przerwania co 1 s. Jest to korzystne bo odmierzanie czasu jest nieco dokładniejsze....
Należy to zrobić na przerwaniach. Podział 1/32 akurat w tym wypadku nie będzie chyba dobry bo będzie trzeba odmierzać czas z dokładnością 50pikoSekund Przy podziale 1/1 to już "tylko" z dokładnością 5uS. Szukaj "arduino timer interrupt"
Metoda jest taka ze w momencie nadejscia przerwania od przycisku odpalasz timer, ktory odmierza kilka milisekund, po czym sprawdza czy przycisk nadal jest wcisniety. Jesli tak, to znaczy ze impuls pochodzi od faktycznego nacisniecia a nie od drgania po nacisnieciu. Dla pewnosci mozna zamiast 2 dokonywac 3 sprawdzen. Czas timera musisz dobrac doswiadczalnie.
Co do przerwań... to chodzi mnie o podawanie sygnału na INT0, czy należy: wybrać typ sygnału zgłaszającego przerwanie (ustawiłem na narastające) aktywowac bit I w rejestrze SREG i ustawić odpowiednią maskę w rekestrze GIMSK, co wszystko zrobiłem. Coś przeoczyłęm? Chyba niepotrzebnie generowałem w rejstr PCMSK... Natomiast co do Timera...to przerwania...
Uruchomi się - tak jak pisał kol. (at)dondu na wejściu masz układy Schmitta, czyli po przekroczeniu poziomu progowego nastąpi zmiana stanu. Problem w tym, że dla różnych egzemplarzy ATMega, czy różnych warunków, ten próg będzie nieco dryfował. Więc średnio to się nadaje np. do tego, aby odmierzać czas stałej RC.
Kosztem dokładności możesz zrobić to na jednym wspólnym 2-kanałowym timerze i przerwaniu EXTIi (oddzielnym dla każdego czujnika). Dwa kanały służyłyby do odmierzania czasu impulsu startowego i kasowania czujnika - wymuszenia kończenia pomiaru, a okres timera wyznaczałby cykl pomiarowy do kolejnego przeglądanai czujników.
Teraz spróbuję ustawić RTC na zewnętrznym kwarcu. Zanim zamknę temat może ktoś zechciałby podpowiedzieć na co tutaj zwrócić uwagę? (Myślę że to nie odbiega od tytułu tematu) A konkretnie - jaki kwarc? przy okazji jeszcze ten link: Czas - odmierzanie
Możesz jeszcze wewnątrz przerwania spróbować przeładowywać rejestr OCR1A na zadaną wartość, gdzieś kiedyś się z tym spotkałem ale teraz nie mogę odnaleźć artykułu (pochodził chyba z AVRfreaks) :)
Tak, wiem, ale T0 zlicza impulsy drogi, a T1 odmierza czas :) Jest jeszcze T2. Nie wiem jak używasz T1, ale jeżeli tylko do generowania przerwania co 0,5sek to rozrzutność :) Zawsze można zwiększyć częstotliwość przerwań np. 100, czy 1000 krotnie i wykorzystać timer także do innych celów, odmierzając w jego przerwaniu różne odcinki czasowe do różnych...
Niewiem jaki to jest uC, ale uczono mnie ze czasy odmierza sie zazwyczaj timerami.. jesli to byloby to ustrojstwo na '51 nalzezaloby przerwanie 10 ms, zrealizowac na liczniku T2, 16 bitowym w trybie przeladowania. Realizujac odmierzanie czasu na przerwaniu, zawsze masz 10ms odstepy czasu bez bez potrzeby korekcji taktow potrzebnych do kolejnego odmierzania...
Witam. Mam następujący problem chcę zrobić regulator fazowy oświetlenia sterowany z pilota RC5 o ile sterowanie fazowe i obsługa RC5 osobno nie nastręczają problemów o tyle razem pojawia się problem zakłócania pracy regulacji fazowej przez odbiór sygnału z pilota. Da się to jakoś obejść w bascomie ? Opóźnienie od przejścia przez zero sieci do załączenia...
Przy takim trybie pracy timera (zamiast sugerowanego przez piotrva CTC) Twój zegarek będie się zawsze późnił, bo od zgłoszenia przerwania do przeładowania timera zawsze upłynie pewien czas, w dodatku nie zawsze taki sam. To nie jest dobry sposób na dokładne odmierzanie czasu.
Ja dorzucę jeszcze jedno - jakby nie napisał ISR to odmierzanie przerw przez delay w pętli głównej już nigdy nie będzie działało prawidłowo - odliczany czas powiększy się o czas realizacji wszystkich przerwań. To można ominąć w prosty sposób wywalając te delaye i robiąc opóźnienia na timerze.
Jakiś czas temu widziałem gdzieś ciekawe rozwiązanie wykorzystujące UART mikrokontrolera do transmisji 1WIRE, nie trzeba wtedy martwić się o dokładnie odmierzanie czasu i przerwania mogące zakłócić transmisję. Jak znajdę to wrzucę na elkę.
Tak, słyszałem o tym. Problem w tym, że ja mam 3 takie sygnały. Skoro to silnik, to ma stałe kąty. Wystarczy więc mierzyć tylko jeden sygnał, a pozostałe kąty odmierzać timerem i przerwaniem. Tak? Czy to jakiś specyficzny przypadek? To rozwiązanie, które próbujesz zrobić jest ryzykowne. Przemyśl sprawę - a ja śmigam spać.
No ale napisałem, że ten program wyżej używa do odmierzania czasu przerwania od tajmera. To jest licznik sprzętowy, który odlicza z góry zaprogramowaną liczbę impulsów i po ich odliczeniu powoduje skok programu do odpowiedniego miejsca w programie, wykonanie ustalonych zadań, po czym procesor wrca do roboty, którą robił przed przerwaniem. Z zasady działania...
(at)ElektrodaBot czy możesz przerobić ten kod aby korzystać z precyzyjnego odmierzania czasu pobierania próbek z wykorzystaniem timera i przerwań?
Volatile - zmienny niestabilny Jest to złowo kluczowe wyłanczające daną zmienną ( strukture itp??) z optymalizacji. Stsojuesz to tam wszędzie gdzie chcesz aby kompilator nie ingerował z optymalizacją. Stosuje się to także w przypadku gdy korzystasz z zmiennej w różnych częściach programu a szczególnie w przerwaniach. Miałem kiedyś problem przy odmierzaniu...
Mam problem i nie mogę znaleźć odpowiedzi w dokumentacji technicznej uC a mianowicie potrzebuję odmierzać czas przerwaniami po przepełnieniu licznika a do tego ciągle wykonywać pomiar na ADC (przez określony czas). W związku z tym mam kilka pytań: 1. Ile cykli zegarowych trwa przerwanie? Jeżeli 1 proste polecenie wykonywane jest w 1 cyklu zegarowym...
#define F_CPU 1000000 Jak uzyskałeś częstotliwość 1MHz? ATTINY13 ma wewnętrzny RC=9.6MHz. Po podziale przez 8 daje 1.2MHz. Bez zewnętrznego sygnału albo grzebania w OSCCAL ciężko jest uzyskać 1MHz. Tak na marginesie to częstotliwość powinno się definiować w ustawieniach projektu. Dodatkowo delay w pętli głównej przerywanej przerwaniami nie będzie wiarygodny....
Każde przerwanie ma związaną z nim flagę. Dopóki nie doprowadzisz do sytuacji, w której kolejne, takie samo przerwanie, nie nadejdzie przed obsługą poprzedniego, to żadne nie zostanie zgubione. Po prostu obsługa przerwania się nieco opóźni, co ew. trzeba uwzględniać, jeśli masz sekcje krytyczne czasowo.
Na jakiej czestotliwosci dziala procek? Poza tym ja bym zliczal sekundy przez tryb CTC, w przerwaniu bym aktualizowal zmienna. Oczywiscie samo wyswietlanie poza przerwaniem.
1. Poszukaj coś o słowie kluczowym volatile. Zastanów się gdzie w Twoim programie go brakuje. 2. Odmierzasz 0.1 s i w tym czasie liczysz impulsy. Ale zanim zaczniesz liczyć to wcześniej wykonujesz w przerwaniu obsługę LCD. Więc właściwie liczysz w czasie 0.1s - czas obsługi LCD. Jesteś pewien, że jest on stały? Uwzględniasz to w obliczeniach? Albert
Sprawa z odmierzaniem czasu jest teoretycznie prosta ale trzeba brać pod uwagę kilka spraw. PO pierwsze musisz sobie wybrać jakiś timer i zliczać jego przepełnienia w przerwaniu. Musisz to robić w przerwaniu żeby odmierzany czas był zawsze taki sam. Zliczasz ilość tych przerwań do obliczonej wartości w zależności od częstotliwości zegara i dzielnika...
Po namyśle dochodzę do wniosku, że trochę trzeba zmienić koncepcję, a i tak nie wszystko się załatwi. Pomysł jest taki: 1) zegar i wszystkie sprawy jego bez zmian i cykl maszyny 1 us. 2) ponieważ impulsy mają być nie częściej niż co 1 ms to czasu trochę jest 3) do odmierzania okresu między impulsami użyj timera2 ustawionego jako licznik w trybie auto-reload...
Trzeba skracać czas który Timer ma odmierzać. W tym trybie zrobisz to najłatwiej w przerwaniu. Zaraz pod "Obrot:" użyj jednej z komend Load albo Timer= Po prostu teraz Timer liczy od 0 do 255. Jak coś do niego wpiszesz to będzie liczył, na przykład, od 128 do 255 czyli krócej. Dodaj sobie potencjometr do układu i będziesz mógł sterować prędkością w...
W przykładzie Blink są używane przerwania właśnie na potrzeby procedury delay() do odmierzania czasu. Domyślnie w Arduino przerwania są włączone. Zostaw przerwania w spokoju (nie wyłączaj ich). Jak ma działać Twój program, co chcesz uzyskać?
Ok wiec tak . mam częstotliwość wejściowa , zmienna i muszę ja niejako online zmieniać w gore lub w dół. problem w tym ze jak robię to na przerwaniach( wykrywanie zbocza, odmierzanie czasu) to mi się przerwania nachodzą i gubi niektóre przez co zmiana jest np zamiast 2,3 jest 2,6 i to też zależy od F.
Nie podoba mi się twoje rozwiązanie. Ja bym to zrobił tak - timer odmierzający takty w rytm podstawowego okresu PWM (czyli przerwania np. 1kHz). Teraz zamiast tych porównań z licznikami, wrzuć wartość licznika do rejestru compare register. Dzięki temu masz przerwanie po przepełnieniu timera (nowy okres) - w tym przerwaniu inicjujesz wysyłkę danych po...
Przecież timer z input capture może chodzić w kółko, tylko bez przerwania (bo i po co) - drugi timer odmierza te 25ms i w przerwaniu od tego okresu odczytujemy ostatni wynik ICP. Nie rozumiem problemu... 4\/3!!
Program działa i nawet licznik się zatrzymuje tylko jaką mam pewność że jest to 250ms? chodzi mi o to żeby uzyskać jak największą dokładność. Dzięki za ten przykład, spróbuję... Nie wiem dokładnie , do czego Ci to potrzebne ale przykład z przerwaniem , który podałem wcześniej działa z dokładnością do ~2 cykli zegara(500)ns.Czy to niezbyt dokładnie...
Zamiast przerwania od Timera0 odmierzaj czas Timerem1.
Minimalna częstotliwość odświeżania to ~100Hz. Jeżeli jest mniejsza, to cyfry "pływają" kiedy na nie patrzysz lub kiedy ruszasz głową. W praktyce przyjmuje się typowo ~250Hz, co dla 4 cyfr oznacza konieczność generowania przerwań z częstotliwością ~1000Hz. Więcej nie trzeba, ponieważ zajmujesz procesor obsługą przerwań, a nie daje to żadnego zysku na...
A po co włączasz przerwania skoro nie napisałeś procedur ich obsługi? I dlaczego najpierw ładujesz część młodszą do OCR a potem starszą, a nie na odwrót jak to zalecają? I dlaczego dziwisz się, że kod potem nie działa?
Proszę o pomoc. Problem z układem, czy w programem??? Może być problem z prędkoscią procesora, dla klasycznej '51 nawet z szybkim kwarcem. Zakładając, ze procesor ma wystawiać dane na port(y) powiedzmy 256 razy w okresie dostajesz przy 10kHz częstotliwość próbkowania 2,56 MHz. Oprócz tego, że masz wystawić daną, musisz jeszcze odmierzać czas, przy...
Aby nie zakładać specjalnie nowego tematu to spytam się jeszcze tutaj. Czy powyższa metoda może zostać wykorzystana do odmierzania czasu rzędu 1 mikrosekundy. W teorii tak, ale nie jest to chyba najlepszy pomysł... Wejście i wyjście z przerwania to - z tego co pamiętam - 18 cykli. Do tego sama obsługa przerwania to też kilka instrukcji, powiedzmy więc...
Z grafiką pod DOS to raczej nie maiłem do czynienia na poziomie driverów. Kiedyś robiłem kawałek kodu który wykrywał czy Herkules jest w trybie tekstowym czy graficznym - rejestry kart CGA i Herkules bywały RO i WO, czasem RW więc nie zawsze dało się wyczytać jak są ustawione, dodatkowo Herkules adresami i podstawowym trybem tekstowym udawał kartę MGA...
(at)Gunis-92: Możesz wykorzystać do odmierzania czasu np. SysTick [syntax=c] volatile uint32_t licznik_tykniec;// zmienna globalna /* obsluga przerwania od licznika/timera SysTick */ void SysTick_Handler(void) { licznik_tykniec++;// inkrementacja licznika } void delay(uint32_t czas) { uint32_t aktaualny_licznik_tykniec; aktaualny_licznik_tykniec = licznik_tykniec;...
Jeśli Timer odwraca stan pinu to tylko raz. Musi minąć znów czas do następnego przerwania żeby znów odwrócić stan. Obliczenia nastawia się więc albo na przerwania do odmierzania czasu, albo na takie do częstotliwości wyjściowej na pinie. Wtedy musisz podwoić częstotliwość przerwań by dwa razy zmienić stan pinu.
Twoje obliczenia są (z grubsza) OK, jednak w mikrokontrolerze ATmega328 rejestr TCCR0A nie posiada bitów CS00 oraz CS02. Bity te znajdują się w rejestrze TCCR0B. Notabene, bitów WGM0n nie musisz zerować. W trakcie Power on Reset zostają one ustawione na wartość 0. Zerowanie może być konieczne tylko wtedy, kiedy wcześniej sam ustawisz je na wartość...
No nic pokażdym przerwaniu wyłącze obsługę przerwań na 10ms oczywiście ten czas odmierzając na timerku. Mam nadzieje że zda to egzamin. Pozdrawiam i wszystkim dziękuje za dialog
Niestety, niewiele z tego wynika (jedynie sposób załączenia alarmu i zgoda na przerwania). Jakim sposobem odmierzać 15 minut? Czy iść w kierunku alarmu czy timera? Może ktoś już zrealizował podobny projekt? Pozdrawiam Mariusz
Układ RTC to ten do którego podłączony jest "mały kwarc" ( zegarkowy ten okrągły podłużny) nigdy nie wnikałem w istotę działania tego sterownika, ale robiłem podobny do innych celów i zrobiłem go tak że odmierzaniem czasu zajmuje się oddzielny scalak RTC (jakiś PCF dokładnie nie pamiętam , chyba 8583 podłączony do procesora przez I2c) ten RTC wywołuje...
imer2 ma odmierzać czas między przerwaniami INT0 i INT1 z dokładnością 1uS Koniecznie musi być pomiar pomiędzy tymi wejściami? Do takich precyzyjnych pomiarów używa się trybu przechwytywania. Używanie do tego przerwań zewnętrznych jest nieporozumieniem. Wystarczy, ze będziesz miał aktywne inne przerwania i co jakiś czas wejście w INT0 czy INT1 będzie...
odmierzanie czasu odmierzanie czasu stm32 timer1 odmierzanie czasu
ekspres bosch wyczyść zaparzacz podlaczenie czujki ruchu rozjaśniać monitor
agregat prądotworczy agregat prądotworczy
Renault Megane ph1 Cabriolet 2.0 - Szarpanie i Spadki Mocy Odcięcie zapłonu w Mazdzie CX-3: przyczyny i diagnostyka