Witam. Zbocze narastające to masz jedno przerwanie w momencie gdy stan zmienia się stan wejścia z niskiego na wysoki a przy stanie wysokim będziesz miał wiele przerwań tak długo jak będziesz miał stan wysoki na tym wejściu.
Niekoniecznie będzie to 160%, gdyż wg noty zegar wynosi min. 10 MHz, czyli 16 MHz, które można łatwo uzyskać (24 MHz zresztą też), zadziała. Oczywiście o jakimś sensownym przetwarzaniu danych raczej mowy nie ma - ale jeśli kamera będzie podłącozna pod interfejs RGB kontrolera LCD to przesył obrazu kamera LCD procesora nie zajmie. Wszelkie timingi da...
Chyba raczej ldi r16,2 out MCUCR,r16
Po wygenerowaniu projektu w Cube nie ma definicji tych funkcji w main.c No to chyba dość oczywiste. Zobacz jak się nazywają tam gdzie jest tablica wektorów. Np w projektach z cube to bedzie .S plik w katalogowy startup albo coś w tym guście
Tworzysz taska a potem klikasz jego propertisy: https://obrazki.elektroda.pl/1459244400_...
nie mylisz się Dodano po 20 już się poprawiam, bo w temacie napisałeś ATmega8, jakoś mi to umknęło i skupiłem się tylko na tekście i pytaniach o sposobie wyzwalania przerwań. Z opisu dokumentacji jaką czytałeś poprostu domyśleć się można że chodzi o procki inne niż ATmega8 bo akurat ten procek nie ma przerwań PCINTx, Więc co do tego co przeczytałeś...
Witam, żeby dużo nie zmieniać w programie, w pierwszej kolejności spróbowałbym przenieść przerwanie na zbocze opadające, ewentualnie zwiększyć podciągnięcie (dodatkowe np. 10k do pinu). Samo przerwanie też bym zmienił na "jedna_czterysta_pięćdziesiąta_litra++" (np uint32_t) i dostosował resztę.
Debouncing w przerwaniu - tylko nie mów, że robisz to przez aktywne oczekiwanie wewnątrz przerwania. Jeśli tak, to zauważ, że to, że skasowałeś flagę przerwania i jesteś w przerwaniu wcale nie oznacza, że flaga nie może zostać ustawiona ponownie. Możliwy jest taki scenariusz: wciskasz przycisk, pojawia się zbocze opadające które ustawia flagę a więc...
Jesli rozumiem chodzi o przerwanie INT aktywowane oadajacym zboczem a nie poziomem. W INT0 ustawiasz bit IT0 w rejestrze TCON na 1 jesli ma byc od zbocza a 0 jesli od niskiego poziomu. w INT1 bit IT1
Sposób kol. remiorn jest prawidłowy pod warunkiem, że sygnał jest wolniejszy (ponownie nie zmieni stanu) niż przerwanie programu i wejście do funkcji obsługi przerwania wraz ze wszystkimi czynnościami jakie są realizowane na początku tej funkcji. Może nastąpić bowiem taka sytuacja, że sygnał zdążył się zmienić z powrotem na stan początkowy. Jeżeli natomiast...
Przerwania typu PCINT działają podczas zmiany stanu pinu, obojętnie czy to jest zbocze narastające czy opadające. Poprostu ma być to zmiana stanu, tak więc jeśli naciśniesz przycisk to przerwanie bedzie generowane dwa razy (w momencie naciśniećia i puszczenia). Natomiast inaczej jest w przypadku przerwań INT0 i INT1 gdzie możesz sobie wybrać kiedy ma...
Mi się wydaje, żeby zrobić to na jednym przerwaniu. Mamy stan 11 Ustawiamy na przerwanie na zboczu opadającym. Kiedy się wykona przerwanie, sprawdzić drugi pin. Jeśli wyjdzie 01 ro znaczy ze obrót był w jedną stronę, jeśli 00 to znaczy, że był w drugą. Teraz trzeba zmienić na przerwanie zboczem narastającym. Jeśli po obrocie mamy 11, to obrót w jedną...
To jest tak: Config Int0 = P3.2 ' Ustawienie przerwania zewnętrznego na pin P3.2 Reset Tcon.0 ' Przerwanie wywoła stan niski Set Tcon.0 ' Przerwanie wywola opadające zbocze (z H do L) To samo z Int1 To tyle pozdrowienia.
Jeśli dobrze rozumiem, chcesz by przerwanie pochodzące od komparatora wywołało szybką reakcję ( np. odcięcie zasilania czy ograniczenie prądu do zewnętrznego, sterowanego obwodu ), czy tak ? Więc wybierasz przerwanie zboczem narastającym, w obsłudze przerwania ustawiasz flagę i.. tyle. Resztę realizujesz za pomocą tej flagi. Resetować ta flagę możesz...
Co wywołuje fizycznie przerwanie?
Możesz spróbować mniej więcej tak: // deklaracja zmiennych globalnych volatile uint8_t prev_tcnt, T; // w funkcji 'main' // skonfiguruj przerwanie INT0 tak, by reagowało na obydwa zbocza MCUCR |= (1<<ISC00); // używaj raczej makra ISR ISR(INT0_vect) { // sprawdzasz które zbocze wywołało przerwanie // jeżeli zbocze narastające,...
Bo nie tak się używa przerwań zewnętrznych. Można po pojawieniu się przerwania od zbocza narastającego wystartować timer, w przerwaniu zmienić na zbocze opadające i gdy pojawi się zbocze opadające zatrzymać timer, odczytać jego stan do zmiennej volatile wykasować i ponownie ustawić na zbocze narastające. Mozna też wykorzystać oba dostępne przerwania....
A spróbuj tak: [syntax=c]{ _delay_ms(3); PORTC|=_BV(PC0); _delay_ms(1); PORTC&=~_BV(PC0); }[/syntax] Pamiętaj że łączny czas funkcji od momentu pzerwania do momentu powrotu z przerwania pod żadnym pozorem nie może przekroczyć 10ms. Inaczej każde następne przerwanie jest "spóźnione" o wartość nadmiarową nad te 10ms. Poza tym: [syntax=c]MCUCR|=_BV(ISC01)|_BV(ISC00);....
Poczytaj sobie jakiś poradnik o C, np. linkowany przez kol. dondu, bo nie robisz tego, co byś chciał, np. DDRD |= ~(1<<PD3); //Ustawienie pinu jako wejście nope, powinno być DDRD & = ~(1<<PD3);, bo swoją linijką ustawiasz jako wyjścia wszystkie inne piny, a PD3 zostawiasz nietknięte... Jako że po resecie DDRD=0, to możesz myśleć, że...
Na wejściu są przerzutniki Schmitta. Zbocze zostanie więc wykryte zawsze od poziomu określonego w dokumentacji. Większość zagadnień związanych z tym o co pytasz opisałem tutaj: http://mikrokontrolery.blogspot.com/2011... Z czym konkretnie masz problem?
Przerwanie od zbocza jest kompletnie niepotrzebne do niczego - wystarczy TYLKO przerwanie od timera, w którym również można zrobić wykrywanie zbocza i filtrowanie - wystarczy kilka zmiennych pomocniczych (poprzedni stan, jakieś liczniki). Jest to skrajnie proste i działa idealnie. Angażowanie dwóch przerwań do czegoś co można zrobić w jednym jest kompletnym...
Ale nadal pozostaje pytanie: Dlaczego flaga INTF1 jest ustawiona, skoro po resecie powinna być 0? Do tego momentu wejście sobie pływa i logika od wykrywania zbocz może już je rejestrować. [syntax=c]PORTD|=(1<<PD3); // podciągam do vcc[/syntax] Tutaj: [syntax=c]EICRA|=(1<<ISC11);// przerwanie na zbocze opadające EICRA&=~(1<<ISC10);//...
Czemu liczysz impulsy przetwornikiem AC a nie reagując przerwaniami na zbocza?
Na ile znam mechanizm przerwań od zboczy w AVR, to wywołanie przerwania przy jego włączeniu jest całkiem natralne, a aby tego uniknąć należy tuż przed włączeniem wyzerować znacznik zgłoszenia przerwania.
Prz zboczu narastającym odpal timer, i ustaw przerwanie na wyzwalanie zboczem opadającym. W obsłudze przerwania zatrzymujesz timere i odczytujesz wartośc oraz wyzerowujesz go przygotowując do następnego odczytu. Znając częstotliwośc zegara oraz wartośc prescalera i odczytaną wartość z timera znasz okres od zbocza narastającego do opadającego. Niby...
Jak na razie testuję to na guziku, podłączonym do PD2 (INT0)... To może nie być miarodajne, ze względu na drgania styków, chyba że wprowadziłeś jakiś sprzętowy debouncing. Jeśli chodzi o kod, nie sprawdzałem, czy cała idea jest prawidłowa, ale zauważyłem: ... MCUCR=1<<ISC00; //przerwanie wyzwalane zboczem narastającym __|-- MCUCR=1<<ISC01;...
Ciekawe jest to widać w twoim profilu (Pomógł: 79927) :P ale do rzeczy. Według mnie coś takiego można zrealizować w następujący sposób: - konfigurujesz przerwanie zewnętrzne żeby było wyzwalane przerwanie zboczem opadającym, rosnącym etc. - w tym przerwaniu uruchamiasz timer który zlicza sobie impulsy - jeżeli zliczy określoną ilość impulsów to wykonujesz...
Napisałem programik którego zadaniem ma być zliczanie impulsów, wydawało by się trywialne. gdy przeprowadzam symulacje działania programu wszystko dziala OK. Po podłączeniu wyświetlacza i klawisza juz nie jest tak różowo. wyświetlacz wyświetla zero i po wciśnięciu przycisku (zbocze opadające) wartość nie ulega zmianie(prawie ale o tym na końcu). co...
Faktycznie, trochę niezrozumiale... Najlepiej zrobić to tak - ustawiasz przerwanie aktywowane zboczem opadającym. Przerwanie wywołuje funkcje która czeka x ilość mikro sekund (delayMicroseconds()) po czym załącza triaka. Do napięcia którym chcesz sterować podłączasz transoptor który na wyjściu daje stan niski za każdym przejściem sinusoidy przez 0....
do mierzenia okresu sygnału najlepiej wykorzystać licznik i przerwanie zewnętrzne. Sygnał pomiarowy wzmocnić tak aby uzyskać przebieg prostokątny o stromym nachylaniu zboczy. Następnie podać sygnał na wejście przerwania zewnętrznego (np. detekcja zbocza 1->0). W przerwaniu włączyć licznik, wyjść z przerwania i oczekiwać na następne przerwanie w którym...
Kolega snaap nie napisał jeszcze, jak ma skonfigurowane przerwanie INT1. Ja podejrzewam, że ma wyzwalanie stanem niskim, a nie tak jak kolega ravmar (autor wątku) zboczem opadającym. Różnica między tymi dwoma typami przerwań polega na tym, że w tym pierwszym (wyzwalanym stanem niskim) flaga INTF1 jest zawsze zerowana, niezależnie od tego, czy przerwanie...
Witam. Dla wejść INT0 i INT1 możesz skonfigurować przerwanie dla zbocza narastającego, opadającego, zmiany stanu lub stanu niskiego. Przerwanie PCINT jest wywoływane przez zmianę stanu na wejściach PCINT0 - PCINT7. Dodatkowo można określić które z wejść PCINT ma wywołać przerwanie za pomocą rejestru PCMSK. Pozdrawiam - Daniel
Takie ustawienie enkodera jest mozliwe. Reagowanie na stan to bład. Powinieneś reagować na zbocze. Np. przerwanie zewnętrzne AVR'ów potrafi reagować zarówno na zbocze narastajace i/lub opadające. Jak odczytywac w którą strone następuje ruch?. Najlepiej jak sobie znajdziesz gdzieś w internecie opis takiego enkodera z wykresami sygnałów wyjściowych, bo...
Ten drugi pomysł jest moim zdaniem lepszy. Do tego możesz użyć końcówki przerwania INT - ma konfigurację zbocza, którym jest wyzwalane przerwanie.
Witam, myślę że można zrobić to dużo łatwiej. Potrzebny Ci będzie jeden pin z przerwaniem (może być puste) i pomysł na opóźnione przejście w tryb uśpienia.[syntax=c]void sleep_button(int is_pressed) { enum sbstate {SBSTATE_IDLE, SBSTATE_SLEEP, SBSTATE_WAKEUP}; static enum sbstate state = SBSTATE_IDLE; static unsigned int tp; switch (state) { case SBSTATE_IDLE:...
...Jakie jest zatem rozwiązanie tego problemu (jeśli jest)? Bascomowy UART programowy działa jedynie wtedy , kiedy wywołamy funkcję z nim współpracującą. W pozostałych przypadkach ( kiedy działają funkcje/procedury nie związane z programowym UART-em ) , nadchodzące dane są "niewidoczne" dla procka :( Np. jeśli masz w kodzie Wait 1 , a w czasie działania...
Najpierw dajesz Config INT0=Falling Wprowadzasz zmienną opisującą wybrane zbocze wyzwalające przerwanie (Edge_) i w procedurze obsługi tego przerwania: If Edge_ =0 Then Start Timer1 Config INT0=Rising Else Stop Timer1 Config INT0=Falling End If Niektóre AVR'y umożliwiają konfigurację typu Config INT0= Change Wtedy przerwanie wywoływane będzie po stwierdzeniu...
Odczyt przetwornika A/C też wprowadza jakieś opóźnienie, zwłaszcza jeśli używasz funkcji bezpośrednio AnalogRead(). Jak pisał przedmówca, mógłbyś użyć PWM-u, w "odbiornikach" ustawić przerwanie na wyzwalanie obydwoma zboczami i wewnątrz przerwania z użyciem funkcji micros() mierzyć czas stanu niskiego i wysokiego, a ich iloraz da Ci współczynnik PWM. Arduino...
CZy w mikroprocesorach 89C2051 można ustawić przerwanie zewnętrzne aby reagowało na zbocze narastajace bądź opadające pisząc progam w Bascomie. Szukam po necie nic na ten temat nie mogę znaleźć.
Dzięki za podpowiedzi. Sprawa się wyjaśniła przypadkiem. Dodałem rezystor pomiędzy INT0 i plusem zasilania. Teraz program działa prawidłowo.
Witam. Jestem początkujący w programowaniu więc proszę o wyrozumiałość. Potrzebuje program sterowania klapą (otwieranie i zamykanie dwie krańcówki góra dół i silnik lewo prawo). Chce aby jazda w gore lub w dol odbywała się w momencie zmiany stanu pewnej zmiennej zewnętrznej konkretnie zboczem rosnącym. Wyczytałem, że w Bascomie można zrealizować t przerwaniem...
Witam, Tak ustawiałem przerwanie a ATmega644 [syntax=c] EIFR = (1<<INTF2); EICRA |= (1<<ISC21) | (1<<ISC20); EIMSK |= (1<<INT2) ; [/syntax] z racji że brakowało mi w procesorze USARTA zmieniłem w projekcie procesor na AVR128DA32, przerwanie ustawiam tak. [syntax=c] PORTD.DIRCLR = PIN0_bm; PORTD.PIN0CTRL = PORT_ISC_RISING_gc;...
Nie ma jednej, jedynie słusznej drogi. Każdą funkcjonalność można opracować na wiele sposobów. Jeśli potrzebujesz podłączyć przycisk do przerwań zewnętrznych, możesz to oczywiście zrobić. Po to one są, by z nich korzystać, byle świadomie :) Istotne jest tylko jedno - program ma działać tak jak tego sobie życzysz i spełniać założenia projektowe. Edit:...
nie znam dokladnie bascoma i nie wczytywalem sie w listnig a bardzo. Uzywasz przerwania wyzwalanego nozka 7 (1Hz) ? Jesli tak to moze chodzic o bledne ustawienie wyzwalania przerwania -> oba zbocza wyzwalaja przerwanie tym samym co "2Hz" a nie 1. Kolega wyzej dobrze sugeruje, moze byc diodka (powinien pociagnac bez tranzystora chyba, tam jest otwarty...
1. Można to różnie rozwiązać. Najprościej, to wykorzystać któryś z pinów INT. Algorytm: - ustaw przerwanie z pinu INT0 na zbocze np. narastające, - gdy pojawi się zbocze narastające to wywoła funkcję obsługi przerwania, - w funkcji przerwania uruchamiasz timer i zmieniasz ustawienia INT0 na zbocze opadające, - gdy wystąpi zbocze opadające - zatrzymujesz...
To ja może zarzucę fragmentem schematu obrotomierza który praktycznie wykonałem i był on używany przez dłuższy czas we fiacie 126p. Tyle tylko że tam był przerywacz mechaniczny (platynki), ale impulsy też brałem z zacisku cewki zapłonowej. http://img443.imageshack.us/img443/9310/... Budując układ wejściowy wzorowałem się na...
Timer 16-bitowy chodzący w kółko, linie INT0 i INT1 zaprogramowane na przerwania od obu zboczy, obsługa przerwań odczytuje wartość timera i wykonuje stosowne obliczenia. Jeśli procedury obsługi innych przerwań będą poprawnie napisane, nie ma powodu, żeby to nie zadziałało. Powinieneś uzyskać rozdzielczość i dokładność na poziomie kilku mikrosekund.
Można by ustawić przerwanie zewnętrzne na zbocze narastające, uruchomić timer i przełączyć przerwanie na zbocze opadające. Gdy pojawi się to opadające to zatrzyma timer i masz czas impulsu. Jeszcze jedynie uwzględnić przepełnienie timera, w razie jak się coś przestawi z czasami.
Chcę podłączyć 5 przycisków do portu P0 i jednocześnie tak by każdy z nich wyzwalał przerwanie na zbocze opadające. http://images14.fotosik.pl/39/6435d160ef... Zrobiłem takie coś. Teraz teoretycznie po uruchomieniu się przerwania zerowego powiniene, miec mozliwość odczytania który przycisk był wciśnięty. Algorytm był by taki, ze sprawdzam czy...
Oczywiście, że event system może reagować na zbocza - robi to analogicznie jak system przerwań. Czyli musisz skonfigurować poziom/zbocze i podłączyć pod event system.
Tak. detekcję podpiąć musisz pod przerwanie i ustawić wyzwalanie na zbocze rosnące. Sterowanie na dowolnych pinach I/O. Osobiście jak mam dostateczną ilość pinów nie korzystam z tych od programowania. Myślę, że przy tak dużym obciążeniu triaków jaki planujesz powinieneś przewidzieć filtr przeciwzakłóceniowy na ich zasilaniu, inaczej procesor może świrować.
Witam. Poczytaj o przerwaniach i o reakcji na opadające zbocze. Wykrywasz przerwanie na opadające zbocze. W obsłudze przerwania sprawdzasz czy na wejściu jest stan niski.
jeśli czytałeś uważnie jakiegoś helpa i tam napisano, że np ATmega8 a raczej jej przerwania INT0 i INT1 nie mogą być wyzwalane zboczami to masz rację - jest to błąd ;) dokładny opis na 100% znajdziesz w nocie pdf ;) danego procka i na tym zawsze się opieraj jako najważniejszym źródle informacji. ... jak słusznie zauważyłeś ta nóżka ma dwa alternatywne...
Pytanie, czy da się ustawić przerwanie od obu zboczy dla wybranych pinów? Bo alternatywą jest przerwanie od timera z wystarczającą (czyli dużą) częstotliwością.
LPC176x (czyli wersja 100-nóżkowa) posiada 4 timery, każdy z nich posiada po dwa wejścia: CAP0 i CAP1. Daje to max 8 wejść, czyli może się udać. Pokrótce wejścia CAP pozwalają zapisać aktualny stan timera (rejestr TC) w rejestrze CR0/CR1 w momencie zmiany stanu na takim wejściu. Pomiar szerokości impulsu PWM jest tym samym tak dokładny, jak często tyka...
prosze oto kod mam problem z ogarnięciem dlaczego nie zlicza mi sygnałów z int0 #include <avr/io.h> // dostęp do rejestrów #include <avr/interrupt.h> // funkcje sei(), cli() #include <avr/signal.h> // definicje SIGNAL, INTERRUPT #include <util/delay.h> #include <stdlib.h> #include <stdio.h> #include...
Kontrolę zasilania w moim przypadku zrobiłem tak że zasiliłem uP od baterii z modułu natomiast spadek napięcia zasilania samego modułu monitoruję poptrzez transoptor którego kolektor tranzystora podłączyłem przez rezystor Opodciąganie do Vcc)na wejście INT2, Wyzwala on przerwanie tak zboczem narastającym jak i opadającym i na tej podstawie ustalam załaczenie/właczenie...
Witam. Procek tak się zachowuje bo nie określiłeś czy przerwanie ma być generowane przez zbocze opadające, rosnące czy przez stan niski na końcówce INT. Domyślnie wyzwalane jest stanem niskim więc wykonuje się raz za razem. Instrukcja Config INTx. Przeznaczenie: Konfiguruje sposób wyzwalania przerwania INTx. Składnia: CONFIG INTx = LOW LEVEL | RISING...
Jj_Johnys : Wcisniecie przycisku daje ok. 100ms sygnalu? Rozne przyciski maja rozne dlugosci sygnalow? Jak dla mnie to przycisk zwiera w zaleznosci jak dlugo sie go przytrzyma, po za tym przy wciskaniu przycisku nastepuja drgania stykow ktore daja duzo szpilek i napewno nie osiagniesz zadnego konkretnego sygnalu o konkretnej dlugosci. Jesli chodzi...
No przecież prosto. Konfigurujesz timer1 do pracy w normalnym ale nie robisz start timer. robisz przerwanie dzialajace na zbocze np. narastające-> Dalej : robisz zmienną flaga w przerwaniu robisz if flaga=1 then start timer1 flaga=0 else stop timer1 w rej od timera masz czas... kopiujesz gdzie Ci tam pasuje flaga=1 zerujesz licznik endif I tyle, oczywiście...
No i tu historia zatacza koło... może jednak na przerwaniu zewnętrznym wyzwalanym oboma zboczami ? ;) Na jednym zboczu stwierdzamy stan, na drugim stwierdzamy czy to "chciany", czy też "niechciany" impuls... Nie trzeba żadnych cudów...
próbowałem już z przerwaniami ale coś nie mogłem odczytać z TIMERA wartości na jakiej został zatrzymany przy przyjściu przerwania INT. Bo właściwie to nie wiem jak poczekać na przerwanie tak żeby np. w pierwszym INT kasować TIMER a w następnym odczytywać. A czy można zdefiniować równocześnie przerwanie na zbocze opadające i narastające i kiedy przyjdzie...
To nie rób na opóźnieniach. Najlepiej w ogóle o nich zapomnij. Użyj milis. Czyli nadal możesz użyć przerwań np. na obu zboczach i porównaj czas między nimi ustaw flagę jeśli czas wynosi np 300ms i więcej nic w przerwaniu nie rób. Następnie w pętli głównej sprawdź czy flaga ustawiona wykonaj działanie i wyzeruj flagę.
Hej, korzystam z evala stm32f4. Do odczytywania wejscia na jednym z pinow chcialbym wykorzystac przerwanie. W teorii jest dobrze, przerwanie generuje sie, jednak odczytywane wartosci z pinu sa zle. Ustawilem, by przerwanie bylo generowane na zbocze rosnace, jednak z pinu odczytuje wartosci 0 jak i 1. Dodam, ze dodatkowo korzystam z Free RTOS, ktory...
już pisałem co zrobić ale tym razem ty nie doczytałeś chyba, więc: po pierwsze - ustaw wyzwalanie przerwania INT0 zboczem opadającym (falling) po drugie - tuż po wejściu w przerwanie wyłącz je disable INT0 ale zaraz po tym daj Enable Interrupts, żeby mógł działać Timer potem odbierz kod RC5 ustaw swój znacznik Odebrano a resztę przetwarzaj w programie...
Dzieki za post. Da sie sprawdzic bo ustawilem to przerwanie na zbocze, I kiedy puscilem symulator (recznie przez F11) to caly czas mi to przerwanie wolal. Dopiero po podaniu jedynki na pin przestal. Przerwanie bylo na bank ustawione na zbocze. Dla int0 wszystko dziala oki - to natomiast nie. sciagne ta nowsza wersje
No to niech program policzy, przynajmniej z grubsza: Co z błędnym liczeniem? A kiedy taki błąd może nastąpić. Nie chodzi mi o program, ale to co przesuwa taśmę.
Czyli np jeżeli chce zmierzyc czas trwania impulsu to robię to tak - while(jakis_warunek) { -ustaw przerwanie na zbocze narastające -uruchom timer -ustaw przerwanie na zbocze opadające -odczytaj timer, wyzeruj rejestry timera } Czy takie coś zadziała?? Czy jest możliwość skonfigurowania dwóch osobnych przerwań na zbocze narastające i opadające czy za...
Przerwanie wyzwalasz poziomem czy zboczem? Kolejna sprawa. Gdzieś czytałem, że AVR po wyjściu z przerwania wykonuje JEDNĄ INSTRUKCJĘ i przechodzi znów do obsługi przerwania (jeśli jest nowe). Jeśli chcesz blokować wskoczenie do nowego przerwania , to musisz w OBSŁUDZE POPRZEDNIEGO PRZERWANIA na samym końcu sprawdzać bit zgłoszenia ponownego przerwania....
Jak nie masz analizatora to poprostu napisz program który mierzy poszczególne umpulsy. Poprostu odczytuj licznik L1 po kazdym przerwaniu od zbocza i zgromadz to w pamieci. Program do napisania w 5 minut. Jak juz bedziesz miał te liczby to wystarczy przeanalizowac a najlepiej sobie narysowan. Analizator mam zrobiony na wejsciu COM 4 kanałowy:-) max 1MHz
No fakt - najpierw inkrementuje :oops: Jeśli chodzi o TF2 to sprawa ma sie tak(to sprawdziłem w bibli 51): Ponieważ Timer2 posiada 2 źródła przerwań , za którymi stoją flagi EXF2,TF2 to nie są one zerowane sprzętowo , byśmy wiedzieli co spowodowało przerwanie T2 , a mianowicie opadające zbocze na T2EX(P1.1) czy przepełnienie licznika.Więc flagi TF2/EXF2...
Nie neguję rozwiązania przerwanie-w-przerwaniu, w niektórych sytuacjach jest to rozwiązanie bardzo eleganckie i efektywne, tylko należy pamiętać aby dobrze wyłączać przerwania. Nie popieram natomiast pętli oczekującej w przerwaniu, kod warto przeprojektować względem tych pętli pozbywając się ich - czy to przez automat skończony zmieniając INT1 na przerwanie...
PIC16 mają przerwanie wykrywające dowolne zbocze na 4 pinach jednocześnie.
To trzeba już nałożyć programowo na przerwanie PCINT. Ogólnie konfigurujesz PCMSK tak, aby były aktywne piny 3 i 4, a potem w programie przerwania sprawdzasz, który pin zmienił stan (wygenerował przerwanie) oraz w jakim był stanie przed przerwaniem (stąd wiesz jakie zbocze wygenerowało przerwanie). Można więc nawet programowo przypisać inne funkcje...
Tak, fuse dobrze ustawione. Ogólnie, to powinien zareagować tylko na zbocze sygnału, wykonując przerwanie tylko raz?
Przerwanie PCINT wystepuje na skutek zmiany. Nie ma mozliwości zrobić aby było np tylko na jedno zbocze. Musisz w procedurze obsługi przerwania sprawdzić, jakie to było zbocze.
To raczej inaczej się robi. Wykorzystaj piny ICP i przypisane im rejestry. Timer musi pracować z częstotliwością zależną od wymaganej przez ciebie rozdzielczości pomiaru czasu. W przerwaniu odczytujesz zamrożone stany rejestru i masz pomiar w tyknięciach licznika timera. Czyli trzeba to zrobić tak: Ustawić przerwanie na zbocze narastające, zapisać...
Ja realizowalem pomiar czasu na jednym przerwaniu. Ustawilem przerwanie na zbocze opadajace, gdy wystapilo to zaczolem liczyc czas, oraz zmienilem sposob wyzwolenia przerwania na narastajace, gdy wystapilo to zatrzymalem timer oraz zmienilem spowrotem na zbocze opadajace. :) moze troche zakrecone ale skuteczne :)
Po restarcie mikrokontrolera i tak wszystkie piny są wejściami, zatem ustawianie PD0 jako wejście nie jest konieczne, za to może się bardziej przydać podciągnięcie tegoż wejścia programowo do VCC [syntax=c]PORTD |= (1<<PD0);[/syntax] Poza tym zamiast pisać tak: [syntax=c]DDRD = 0xfe;//IN0 ustawiam jako wejscie EICRA = 0x3;//Przerwanie ustawione...
PIC16 a PIC18 to głównie różnica w rdzeniu (pic18 ma więcej instrukcji). Dodatkowo PIC18 posiadają bardziej rozbudowane moduły wewnętrzne np ECCP zamiast CCP. Co do zegara to on może być źródłem taktowania dla wykonywania instrukcji, ale także źródłem sygnału dla timera, usart, przetwornika ADC, modułu (E)CCP, i inny elementów które są zalezne od zbocza...
(at)shady79 To jeszcze pokazałbyś kod - założę się, że masz przerwanie od zbocza - narastającego lub opadającego, czyli wykrywasz tylko moment zgaśnięcia jednej diody, stąd przerwanie co 20 ms. BTW, w tym układzie nawet jeśli włączysz przerwanie z obu zboczy, to co prawda, będzie ich 2xtyle, ale z pewnością nie będą co 10 ms...
Prosze o podpowiedz-przykladzik jak configurowac (w ATMEGA32)przerwanie np. INT1 aby reagowalo na opadajace zbocze
Pomysl z przerwaniem dobry. Zalezy jak podlaczysz przycisk to na takie zbocze bedziesz ustawial przerwanie. Przewaznie robi sie tak ze przycisk zwiera do masy czyli jak puscisz przycisk to z masy zrobi sie stan wysoki wiec bedzie to zbocze narastające. Z przyciskiem przeladowania - jak wczesniej tlumaczylem ale tu raczej na opadajace (przycisk zwiera...
do ustawienia "1" na pinie nie potrzeba żadnego prądu. Ty musisz ustawić "0", żeby wywołać przerwanie i w związku z tym nie doprowadzasz do wejścia prądu, tylko go "wysysasz". Trzeba chyba ponad 100µA pobrać, żeby ustawić stan niski. '51 ma wyjścia typu otwarty dren z podciąganiem do + zasilania za pomocą układu na tranzystorkach polowych, ale...
przecież masz ustawione przerwanie na zbocze opadające.
Witam, mam do Was zapytanie, otoż do portu P3 mikrokontrolera 89s52 chciałbym podłączyć linie sterujące wyświetlaczem siedmiosegmentowym i na linii INT0 byłby jakiś sygnał i teraz moje pytanie, czy jak podłacze do P3.2 (INT0) sygnał wyświetlacza i sygnał z ukladu generującego przerwanie (zbocze opadające lub poziom niski) to będzie to działać, czy nie....
Te linie: void int0_init( void ) { MCUCR = (1<<ISC01); // przerwanie INT0, zbocze opadajace GICR = (1<<INT0); // wlacz INT0 } void int1_init( void ) { MCUCR = (1<<ISC01); // przerwanie INT1, zbocze opadajace GICR = (1<<INT1); // enable INT1 } Są błędne, bo ustawiasz...
Przerwania PCINTx wykonują się przy każdej zmianie stanu logicznego, niema możliwości konfiguracji np. tylko dla zbocz narastającego lub opadającego. Stan zbocza na poszczególnym pinie sprawdzasz w przerwaniu. Attiny13 ma 6 pinów PB.0-PB.5 (PCINT0 do PCINT5) które mogą wywołać przerwanie. I tu jest jedna myląca rzecz :) dla tych pinów jest tylko jeden...
Bo jak ma działać? Widać kolega nie do końca rozumie mechanizm przerwań, skoro czeka na przerwanie INT0, a włącza przerwanie przepełnienia Timera0. Adresem przerwania przepełnienia Timera0 jest OVF0addr, a nie INT0addr. Przerwanie od INT0 wyzwalane jest ZEWNĘTRZNIE zboczem lub stanem na fizycznym wejściu INT0 mikrokontrolera, a nie Timerem. Skąd ten...
Oczywiście pomogło ustawienie wyzwalania przerwania zboczem a nie poziomem. Dziękuiję za pomoc.
... a no niestety ja tu ci nic nie poradzę, piszę tylko w asemblerze i jeszcze się nie spotkałem aby to nie działało... musisz poczekać aż odezwie się ktoś kto zna bascoma ;) pytałeś: EDIT: Jest jakaś różnica w działaniu Idle i Powerdown przy zastosowaniu wewnętrznego zegara zamiast kwarcu? jeśli chodzi o zastosowanie zewn kwarcu lub wewn oscylatora...
Witam serdecznie. Zbudowałem sobie licznik impulsów na AVR-ku. Generalnie układ pracuje poprawnie ale bywa że czasami zliczona jest nieprawidłowa ilość tych impulsów. Iteraz mam pytanie bo zgupiałem. Powiedzmy że sygnał liniowo opada ze stanu wysokiego w stan niski w czasie 1 sekundy. (Bardzo ale to bardzo małe strome zbocze) Przerwanie ustawione jest...
A co jest na wejściu INT1. Jeśli zrobiłeś przerwanie niskim stanem to może masz tam cały czas stan niski i jak włączysz przerwania to znów się robi obsługa przerwania. Ustaw przerwanie na zbocze opadające i powinno się poprawić.
hmmm takie kombinacje.... przacierz można rejestr odpowiadający za przerwanie ustawaiać w czasie wykonywania programu... raz ustawiasz go na zbocze narastające, a potem w obsłudze przerwania na zbocze opadające.
Heh, siedzę i nie daje mi to spokoju. Kod który napisałeś - nawet nie czytam bo w C piszę od niedawna ale tylko na ARM'y czy też na LPC i nazwy rejestrów itp nic mi nie mówią. Moja koncepcja jest taka: Uruchamiasz 1 timer z przerwaniem co 50ms.(dlaczego co 50?). W przerwaniu 1 timera uruchamiasz 2 timer. Ustawiasz przerwania 2 timera, w każdym przerwaniu...
Do pomiaru krótkich czasów czy z dużą rozdzielczością używa się przechwytywania w timerach a nie pulseIn(). Podaj jakieś przykłady :?: Z pamięci nie napiszę a na szukanie po projektach i wycinanie istotne fragmentów kodu szkoda mi czasu. Ustaw timer w tryb przechwytywania. Jeśli chcesz mierzyć czas jednego z poziomów, w przerwaniu zmieniasz zbocze....
Miałeś zrobić przerwanie na opadającym i rosnącym zboczu, a nie jakieś liczniki wewnątrz przerwania... "Zbocze" sprawdza się czytając choćby rejestr IDR, a nie zakłada że zawsze będzie na przemian, bo jak widzisz jednak tak nie jest. 4\/3!!
Ponieważ oprócz przypisania rejestru licznika TC do CR0 przy zmianie zbocza "chcę" wygenerować przerwanie. Za generację tego przerwania właśnie odpowiada 2 bit w rejestrze CCR. Zapis LPC_TMR32B0->CCR = wartosc ustawia tylko te bity które są ustawione w wartosc. Dlatego za każdy razem konieczne jest ustawienie 2 bitu, gdyby to pominął nigdy nie było...
Kod jest OK. Napisz jak wygląda LED_G_ON. Zdeasembluj to w studio i sprawdź gdzie faktycznie jest wektor przerwania, czy na własciwym miejscu?
Masz na myśli żeby pin ATTiny od przerwania spiąć z wykorzystywanym pinem jako RX, i w ten sposób czkać na transmisje z SIM800L ? Nic nie musisz spinać, wystarczy na RX-ie uruchomić przerwanie zboczem opadającym, ale jak czytam 'mpir' to podobno ta biblioteka coś już takiego robi (nie znam arduino bibliotek) więc trzeba by to zweryfikować.
zbocze narastające siemens zbocze zbocze sygnału
temperatura klimatyzatora łozyska amica regulacja turbo
lidlomix silnik samsung ww60j4063lw
Pobudzenie baterii litowej – jak bezpiecznie reaktywować ogniwo Li-ion, LiPo, LiFePO4 Toshiba 19AV600 Firmware Upgrade: Service Methods, Models, and Common Faults