Uśpiony procek się "nie rusza" więc nie może nic wykonać póki się nie obudzi :)
ale nie wiem jak podejsc do przerwan zewnetrznych (przyciski). Przyciski mam podlaczone pod: P3.3 (Int1), P3.5(T1), P3.4 (T0), P3.2 (Int0). Jak to jest mozliwe ze sterujac multiplekserowo wyswietlaczami segmentowymi wysylajac aktywny bit na port P3, moge jednoczesnie zglaszac zewnetrzne przerwania (z przyciskow)?? Możesz. Ale dlaczego przyciski mają...
Stosy to dla mnie czarna magia, wiem tylko, że każdy przeskok wymaga zapisania adresu zwrotnego, ale nic poza tym :oops: No przy takim podprogramie to 1 megabajtowy stos to za mało :D, to się chyba nazywa rekurencja: [syntax=basic4gl]Petlapomiarowa: If Impulsy < 15 Then 'Jesli nie ruszono, wyswietlaj dalej napiecie Gosub Pomiaradc If Konwersja >...
SYSCFG->EXTICR Nie powinieneś działać na rejestrze 0? void EXTI1_0_IRQHandler(void) To przerwanie na pewno się tak nazywa? Bo tutaj się nazywa ...0_1... NVIC_EnableIRQ(EXTI0_1_IRQn); Masz dobrą tablicę wektorów? 4\/3!!
ATmega128 ma "tylko" 8 zewnętrznych przerwań i nie ma tam przerwania PCICR. Przerwania możesz deklarować poprzez nazwy rejestrów: ON INTX lub jak dla M168: ON PCIEX i dalej korzystać z normalnej składni Bascoma.
Zewnętrzne przerwania nadają się - przykładowo - do obsługi pinów sygnalizacyjnych z innych układów scalonych, a nie do zabaw z przyciskami. To po prostu nigdy nie zadziała... Zrób sobie przysługę i odczytuj po prostu wszystkie piny w okresowym przerwaniu od timera (co 20-50ms, albo i rzadziej) i będzie wtedy działało perfekcyjnie.
Na pierwszy rzut oka nie widzę włączonego zegara od AFIO.
O i dzięki schematowi od razu widać błąd: http://obrazki.elektroda.pl/6463515500_1... Przyciski podłącz do GND, a nie Vcc, a w programie włącz pull-up, i ustaw reakcję INT na zbocze opadające. Tylko czy wiesz dlaczego Twój układ nie działał? Osobna sprawa do drgania styków przycisku: http://mikrokontrolery.blogspot.com/2011...
Prowadzący może też docenić Twoje eksperymenty, których efektem jest opinia o całkowitej nieprzydatności tego mechanizmu w projekcie. Możliwość podłączenia przerwania masz w zasadzie wszędzie. Sens, przynajmniej w projekcie który przedstawiłeś, niestety nigdzie wg mnie...
Stąd, że porty D2 i D3 są portami dedykowanymi do wprowadzenia zewnętrznych przerwań. Spójrz datasheeta megi8.
if( EXTI_GetITStatus( EXTI_Line5 != RESET ) ) Przyjrzyj się dobrze. 4\/3!!
:arrow: jj zgadza się jj, machnąłem się..... (9 minut później kończyłem pracę, więc to z pośpiechu :p)
Niestety nie wiem, jak skonfigurować przerwanie zewnętrzne, gdyż nie mogę nigdzie znaleźć pod która linie EXTI jest ono podłączone. Manual, rozdział 26.5 RTC interrupts .
Chyba z RM'em ;P Tablice w C numerowane są od zera a nie od jedynki; rejestry natomiast są numerowane od 1 - stąd rozbieżność. Spróbuj: [syntax=c]AFIO->EXTICR[1] = AFIO_EXTICR2_EXTI6_PC;[/syntax]
Żeby skasować flagę przerwania w rejestrze, musisz zapisać " 1 ". Znajdziesz to w dokumentacji mikrokontrolera. Cytat z polskiego tłumaczenia: Flaga jest zerowana po wykonaniu procedury obsługi przerwania. Lub może zostać wyczyszczona poprzez wpisanie logicznej jedynki do niej.
Takie podejście jest fatalne. Wyłączaj przerwanie od przycisku w obsłudze tego przerwania. Włączaj je ponownie w przerwaniu timera. W praktycznie każdym urządzeniu potrzebujesz przerwania timera. Na czas uśpienia może go nie być, ale w czasie aktywności jest niezbędne. Kiedy urządzenie nie śpi, przerwanie timera odlicza wszystkie czasy i w odpowiednich...
Procedura Getrc5 wykorzystuje Timer0. Użyj innego.
Choć dopiero zaczynam przygodę z STM32 to po mojemu nadpisujesz strukturę i dlatego zawsze działa Ci ostatnie zdefiniowane przerwanie.
PORTA.DIRCLR = PIN7_bm | PIN0_bm; PORTA.PIN7CTRL = PORT_PULLUPEN_bm | PORT_ISC_BOTHEDGES_gc; Sprawdź też w pliku lss, czy wektor przerwania z PORTA wskazuje na odpowiednie miejsce.
z tego co widziałem to nie konfigurujesz odpowiednich rejestrów odpowiedzialnych za zewnętrzna przerwania. zobacz do noty katalogowej musisz skonfigurować rejestry: External Interrupt Control Register A – EICRA External Interrupt Control Register B – EICRB External Interrupt Mask Register – EIMSK External Interrupt Flag Register –...
Przecież wiesz, że delay w przerwaniu nie powinieneś stosować to dlaczego ponownie je tam wstawiasz? Przyjmij wreszcie postawę, że delay jest be i przestań go używać, oraz że do odliczania odcinków czasowych należy wykorzystywać timery. Patrząc na to co zaproponowałeś powyżej nie wiesz natomiast, że: - wchodząc w przerwanie przerwania są blokowane (flaga...
Do przerwań można się bezpośrednio dobrać z poziomu kernela. Czyli tworzysz funkcje, która coś ma wykonać przy wywołaniu przerwania (interrupt handler, trzeba pamiętać że funkcja ta nie może być blokująca) i wiążesz ją z odpowiednim przerwaniem za pomocą funkcji request_irq() której jako parametry trzeba przekazać między innymi numer przerwania(te definicje...
Spróbuj podłączyć wg. tego: http://obrazki.elektroda.net/75_12275393...
W trakcie wykonywania tego podprogramu zostało zgłoszone przerwanie zewnętrzne na nóżce int1 atmega328p. Czy atmega328p przerwie wykonywanie podprogramu nóżki int0 Zależy jak zadeklarujesz przerwanie, czy ISR bez atrybutu lub z atrybutem ISR_BLOCK albo jako SIGNAL czy ISR z atrybutem ISR_NOBLOCK lub jako INTERRUPT. Jeśli przerwanie w przerwaniu jest...
chciałem zapytać co jest źle w poniższym kodzie? To, że wykona się raz i utkwi w wiecznej pętli w "fini0".
Nie wiem czy to chciałeś osiągnąć, ale pin masz ustawiony na floating. Definicja w komentarzu była dobra, wartość liczbowa - zła. Przykłady znajdziesz w wyszukiwarce forum, w ostatnich tygodniach tematów o EXTI było kilka. 4\/3!!
deklarujesz skok do przerwania pod jakims tam adresem: .org INT0addr rjmp klawiatura teraz deklarujesz skok do resetu .ORG $000 rjmp reset reset: i dalej jakis kod... tyle ze ten kod zaczyna sie zaraz za rjmp RESET jednoczesnie zamazujac skok do Twojego przerwania INT0. Zakrecone no nie?;]
Sprawdź, cza nazwa Twojej procedury obsługi przerwania jest taka sama, jak w tablicy adresów przerwań w pliku startup. Wyrzuć zbędne wywołanie SetPriority.
INT0 jest na pinie PD0, a ten definitywnie ustawiłeś jako wyjście, więc nie może działać.
gmp wrote: Procek obsluguje poprawnie 4xmnijesze czestotliwosci od zegara. Dziwne, ale z dokumentacji wynika coś zupełnie innego. Mikrokontroler poprawnie rozpoznaje zmianę stanu (przy reakcji na zbocze) o ile stan ten trwa dłużej niż jeden cykl zegarowy. Przy czasach krótszych może wykryć albo nie. Pan Arkadiusz Krysiak w swojej książce o AT90S2313...
... Zwieram port PD2(INT0) oraz PD3(INT1) do masy i nic się nie dzieje... No to ustaw w projekcie właściwy uC, bo jeżeli w/w kod kompiluje się bez błędów, to jest kompilowany dla innego uC. GIMSK = _BV(INT0)|_BV(INT1); M16 nie posiada takiego rejestru.
OK, mam nadzieję, że zegar ustawiłeś w opcjach. Ponieważ muszę wyjść, to dam Ci wskazówki, a resztę wymyślisz sam lub koledzy pewnie podpowiedzą. Gdy pierwsze zbocze drgania styku ustawi flagę przerwania i mikrokontroler wejdzie w funkcję jego obsługi, to zaraz na początku automatycznie kasuje (w tym mikrokontrolerze) flagę przerwania. Ty w swoim programie...
Witam, Przy takim podłączeniu jak pokazałeś na schemacie, nie zwierasz pinu do masy tylko podajesz na niego napięcie równe spadkowi napięcie na świecącej diodzie LED. Dla diody LED napięcie w kierunku przewodzenia wynosi około 1.8V natomiast zgodnie z karta katalogową dla ATTINY2313 maksymalne napięcie uznawane za logiczne "0" wynosi 0.3*VCC, czyli...
To systemowe przerwanie bedzie mialo mniejszy priorytet tylko w przypadku > 0010_1000 i nie bedzie podzialu na pre i sub priorytety ? Dokładnie tak. The combination of the group priority and the sub-priority is referred to generally as the priority. Grupowanie działa tylko na zewnętrznych przerwaniach i powoduje, że przerwania z tej samej grupy nie...
Podłączenie przez kondensator faktycznie pomaga, jednak jest to sygnał który zmienia się ~200 razy na sekundę, dlatego niestety odpada. 200Hz? Przecież to prąd stały... Kondensator 100n z rezystorem 10k mają stałą czasową odpowiadającą częstotliwości 1kHz, z rezystorem 100R już jest 100kHz, więc gdzie tutaj jakiś problem? Tak jak już rb401 napisał...
Dwa przewody z diodami mają być spięte razem, trzeci wolny (bez diod) osobno do drugiej żyły przewodu zasilającego :)
Jaką masz częstotliwość przerwań timera? Testowanie stanu przycisków powinno następować z częstotliwością rzędu 30..50 Hz jeśli pamiętasz tylko jeden stan wstecz. Jeśli masz większą częstotliwość, to albo testuj je w co którymś przerwaniu, albo wsuwaj stan do zmiennej i wykrywaj sekwencję stanów (bitów) np. 1110.
...Symulator pokazuje 1us a mi sie wydaje ze 10us. W tym wypadku , uwierz symulatorowi ;) Piotrek
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...
Nie. Po każdej zmianie do RAMu. Kod jak 1. Jeśli programista uważa że wcale tego nie potrzebuje może sam przepisać zmienną volatile do jakiejś zmiennej lokalnej i operować sobie na tej zmiennej lokalnej a w pasującym mu momencie skopiować jej wartość do volatile ze wszystkimi tego konsekwencjami.
1. Przycisków nie obsługuje się na przerwaniach portów. 2. Nie potrzebujesz do tego trzech przerwań - wystarczy przerwania timera i UART. 3. Nie zmieniaj priorytetów przerwań - jeden poziom zdecydowanie wystarczy. Nie potrzebujesz zagnieżdżania, a próbując je zrobić brniesz w ślepą uliczkę, bo 5. Ogólną zasadą jest, że w procedurze obsługi przerwania...
Do 4000 plików jednocześnie w wersji darmowej w aktualnie otwartym katalogu, choć teraz nowsza wersja nie ma ograniczenia ilościowego, a do aktualnie otwartego katalogu jedynie. EDIT: Skanowanie 400GB w DMDE będzie trwało jakieś 1,5 - 2 godziny chyba.
...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...
Spróbuj tak: [syntax=c]//GPIO_EXTILineConfig(GPIO_Por... GPIO_PinSource13|GPIO_PinSource15); GPIO_EXTILineConfig(GPIO_PortSourceGPIOC... GPIO_PinSource13); GPIO_EXTILineConfig(GPIO_PortSourceGPIOC... GPIO_PinSource15);[/syntax]
Tutaj w tym przerwaniu zewnętrznym jak zrobię podciąganie do VCC i podam sygnał prostokątny z innego pinu to nie dojdzie do uszkodzenia tych dwóch pinów? Nie, bo maksymalny prąd jaki jesteś w stanie "pociągnąć" z takiego pinu jest ograniczony przez rezystor rzędu 50kR.
Dokladnie, musisz ustawic stos. U mnie struktura wygladala tak .include "m8def.inc" .org 0x00 rjmp reset RESET: ldi R16,low(RAMEND) out SPL,R16 ldi R16,high(RAMEND) out SPH, R16 main: rjmp main
W rejetrze GIFR pojawia się flaga żądania obsługi przerwania INTF0. I czeka. Gdy w rejestrze GICR pojawi się ponownie flaga INT0 (czyli w Bascomie enable INT0) przerwanie jest obsłużone i flaga INTF0 jest wtedy kasowana. Flaga INTF0 może byś skasowana ręcznie.
A jakby tak zapytać google? https://www.google.pl/#q=interrupt+contr...
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...
Prośba do autora projektu o rozbudowę kodu o uśpienie attiny. Tryb idle zmniejszył by pobór o połowę. Myślę, że nawet dało by się zrobić tryb power down i budzić zewnętrznym przerwaniem za pomocą pierwszego impulsu z domofonu.
Musiałbyś obsługiwać sterowanie przynajmniej jednego silnika w przerwaniu, bo w przeciwnym wypadku procedury te będą się zakłócać. Spróbuj napisać program z wykorzystaniem zewnętrznych linii przerwań, tak, aby przy naciśnięciu przycisku program wykonywał skok do odpowiedniej funkcji obsługi przerwania :]
Wyrzuciłem z obsługi przerwania pętle opóźnijące: SIGNAL(SIG_INTERUPT1){ if(bit_is_clear(PINC,PC5)){sbi(PORTC,PC5... else cbi(PORTC,PC5); } Niestety nic nie pomaga. Nadal nie działa. Nie działa , bo ... kompilator nie wie ,co to za wektor SIG_INTE R UPT1.Gdybyś napisał SIG_INTE RR UPT1 , to by wiedział :D Piotrek PS Odpowiednikiem powyższych "zabiegów"...
Witam. Tu masz gotowe przykłady dla SAM7S64. http://www.siwawi.arubi.uni-kl.de/avr_pr... Sciagnij sobie przykład z przerwaniami GPIO i zobaczysz jak to tam jest zrobione, a na pewno dziala bo sprawdzałem :)
Proszę o informacje, gdzie w nocie katalogowej można znaleźć informacje na temat priorytetów wykonywania przerwań, jeżeli wystąpią w tym samym czasie. Nie można, ale ten co ma niższy adres w tablicy wektorów wykona się pierwszy jak przyjdą w tym samym czasie. Co najwyżej możesz właczyć przerwania na początku obsługi aby umożliwić obsługę kolejnych...
12 cykli - tyle zajmuje przejście do obsługi przerwania 6 cykli - tyle zajmuje przejście z przerwania do przerwania o wyższym priorytecie 6 cykli - tyle zajmuje przejście do przerwania o niższy priorytecie bezpośrednio po zakończeniu przerwania o wyższym priorytecie 12 cykli - tyle zajmuje wyjście z przerwania. Ta zasada tyczy się wszystkich przerwań
Bity w MCUCR określają na co będzie reagować przerwanie zewnętrzne... Zmiana stanu, opadające lub narastające zbocze więc jest to jak najbardziej potrzebne... SIGNAL (INT0_vect) - obsługa zewnętrznego przerwania INT0... SIGNAL (TIMER0_OVF_vect) - obsługa przerwania od przepełnienia timer0... Co do portu... Jak na mój gust powinno być PORTC = !PORTC;...
Przy uśpieniu oscylator, czy to kwarcowy, czy RC jest wyłączony. Wybudzić może go zewnętrzne przerwanie wyzwalane poziomem lub (nie w każdym procesorze) przerwanie asynchroniczne od timera2.
W programie sterowanie diodą D1 jest na porcie B, nie C.
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.
...Jednak w jaki sposób poprzez ten timer zrealizować pomiar wypełnienia? Połącz wejście T0 z wejściem przerwania zewnętrznego INTn i wykorzystaj to przerwanie oraz licznik T1 , do pomiaru wypełnienia.Wszystko zależy od tego , jak "szybki" przebieg masz zamiar mierzyć. Piotrek
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
Nic nie wspomniałem, że używam dwóch przerwań jednocześnie. Po prostu chciałem zrozumieć działanie przerwań zewnętrznych, nie od timera, nie od czegokolwiek innego tylko i wyłącznie przerwanie zewnętrzne. Napisałem, że wiem jak używać testowania przycisku przez przerwanie od timera, notabene SysTicka. Chciałem tylko zrozumieć konfigurowanie oraz używanie...
Proponuję do wykrywania dźwięku użyć przerwania zewnętrznego to zminimalizuje opóźnienie. Teraz program w pętli czyta ADC i sprawdza stan pinb.1 co nie jest optymalnym rozwiązaniem w tym przypadku.
W pierwszej kolejności to trzeba rozeznać się co jest na wyjściu czujnika, na jaki czas jest aktywowane wyjście, bo być może w ogóle zewnętrzne przerwania nie są potrzebne i wystarczy raz na kilkaset ms sprawdzić stan wejść. Ja osobiście nie robiłbym tego na zewnętrznych przerwaniach.
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...
najpierw włącz SYSCFG potem ustaw który port potem reszta.
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....
Kolega Mad Jaro mierzy czas pomiedzy INT-em i przelicza na obroty. zablokowanie INT spowoduje pływanie obrotów( INT nie liczy impulsow). Kolega xury ma rację odnośnie jednokrotnego użycia szukania czujników. A poza tym zsynchronizuj odczyt 1wire z przerwaniem INT tzn. komunikację z 1wire podziel na max -5 bajtowe odcinki i wykonuj je po przerwaniu INT....
Bawię się ostatnio wspomnianym w tytule mikrokontrolerem i natknąłem się na problem z zewnętrznymi przerwaniami, którego nie potrafię obejść. Zaczynając od tego co działa: układ jest sprawny na pewno, jest podłączony, cały czas hula dioda sterowana przez timer z ustawionym przerwaniem na przepełnienie; podłączony jest również PICkit 3 przez icsp. Korzystam...
Wyświetlacz ma identyczne wyprowadzenia z tym że ten w projekcie AVT chyba nie ma podświetlenia a ten, który kupiłeś ma i trzeba je podłączyć żeby coś było widać. Zresztą są tam dwa piny do zasilenia podświetlenia. W twoim nowym wyświetlaczy to piny 15 i 16. 15 to + a 16 masa. Co do pilota to: "Program zapisany w procesorze można rozbudować np. dodając...
I jeszcze jedno pytanko czy NodeMCU obsługije jakieś przerwania zewnętrzne Jak najbardziej. Tutaj jest to wyjaśnione: https://www.electronicwings.com/nodemcu/...
tak , podłączenie jest prawidłowe jedna mała uwaga jeżeli układ ma służyć tylko do separacji to ok , natomiast jeżeli do innych celów to lepiej wykorzystaj dostępne piny z obsługa przerwania zewnętrznego , ustawiając reakcję na opadające zbocze sygnału
To akurat może być. Słuzy to do progamowego wyzwalania tego przerwania, jak jest taka potrzeba. wiem, ale podłączyłem do portu INT1 przycisk więc to nie ten przypadek :) A jak za chwilę będzie chciał włączyć pull-up dla przycisku i weźmiemy pod uwagę, że robi się to tak: If PORTxn is written to '1' when the pin is configured as an input pin, the pull-up...
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...
Tak wygląda część z przerwaniem. Cały kod jest dość długi i działa poprawnie, tylko z tym mam problem. Nie jestem w stanie wykryć co robię źle. [syntax=c] int k = 0; volatile char licz=0; ISR(INT4_vect) { licz = 1; } ///////PĘTLA GŁÓWNA PROGRAMU int main(void) { sei(); DDRE &= ~(1<<PE4); PORTE = (1<<PE4); DDRA = (1<<PA7); PORTA...
Zwarcie raczej nie bo by nie działał, jedyna łatwa przeróbka to odwrócenie pinów zewnętrznych, przerwij ścieżki i zmień krzyżowo. Lub wymień impulsator na prawidłowy.. https://obrazki.elektroda.pl/7065181300_...
powtarzam SYSCFG włączone poprawnie?
Witam . Zadanie jest trywialne . Potrzebujesz 3 zmiennych i dwóch przerwań zewnętrznych plus przerwanie do wyświetlacza. Po starcie procka ustawiasz wartość jednej z zmiennych która będzie równa ilości przerwań wyświetlacza w czasie 10 sekund . Podczas aktywacji przerwania od T1 aktywujesz przerwania od INT0 i INT1 . INT0 zwiększa jedną zmienną a INT1...
Nie wiem czy to może coś mieć do rzeczy ale konfigurujesz przerwanie na porcie Int0 na falling a potem obsługujesz przerwanie od Int1. Przy resecie jak nic nie ustawiasz to przerwania zewnętrzne są aktywne stanem niskim. Jak nie ustawiasz Int1 na falling a potem pozwalasz na przyjmowanie przerwania z Int1 to możliwe, że wciśnięcie guzika powoduje kilkakrotne...
Szybkie może i są, jednak CC Studio raczej nie pozwala na wykorzystanie możliwości C67XX. Dosyć spory kod tworzy ten kompilator. Dlatego przeważnie programy na TMS'y pisze się w assemblerze, masz wtedy pełną kontrolę nad procesorem. Z racji, iż program jest malutki proponuję napisać go w assemblerze (poleceń jest mało). Nie znalazłem błędu jeżeli chodzi...
Stary.... Chyba normalne że układ CMX612 podłączam do mikrokontroletra at90s2313 i potrzbuje przerwanie bo układ CMX ma wybudzić kontroler z uspienia i wyswietlić dane na LCD proste.... Tyle że ja musze obejżeć na jakims przykłądzie uzycie przerwania INT0 lub INT1
Ja coś podobnego zrobiłem na ATmedze16. Podłączyłem enkoder pod wejścia generujące przerwania zewnętrzne i odpaliłem tajmer, zliczam różnice czasu między przerwaniami. W AT90S2313 masz przerwania zewn z PD2 i PD3. w obsłudze przerwania zewn. robisz: prędkość = (obwód_koła / rozdzielczość_tarczy_enkodera) / różnica_czasu_między_przerwaniami lub pomiar...
Mozna to zrealizować na dwa sposoby: 1. Za pomocą przerwania zewnętrznego INTx zliczać ilość impulsów. Podobny temat już jest: 2 Zliczać impulsy na wejściu ICR Podobny temat masz poniżej: http://www.elektroda.pl/rtvforum/topic18...
Przy If Przycisk nie masz end if. [syntax=basic4gl] Do If przycisk = 1 then Stan =1 end if If Stan = 1 then Silnik = 1 enable int0 end if Loop Silnik_stop: Disable int0 Reset Silnik Stan = 0 Return [/syntax]
Tylko czy ten bit AS0 w ASSR jest potrzebny do przerwań zewnętrznych?? Bo mam go ustawionego na zero. A przerwanie wywoluje PCF8574 (expander 8bit na I2C) i utrzymuje ten stan tak dlugo, aż nie odczytam z niego jego stanu. -- Przemek
Masz rację, ubiegłeś mnie przed poprawką posta :-). Właśnie sobie rozrysowałem ten port jako schemat bo te tablice mnie trochę denerwują: https://obrazki.elektroda.pl/3515653000_... Myślę, że widać lepiej jak co tak naprawdę wpływa. No widać faktycznie, że nie masz włączonego PCINT2 więc sygnał SLEEP zadziała. ADC2D bardziej się przydaje...
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...
Ad1) Jesli chodzi Ci o symulator MPLABa to chyba można wpisać wartość flagi przerwania w odpowiednim rejestrze i symulator potraktuje to jako przerwanie. Ad2) W procedurze obsługi przerwań na wysokim priorytecie sprawdzasz wszystkie źródła przerwań np: if(TMRIF) {} if(TMR2IF) {} itd. Wydaje mi się że jeżeli przerwanie przyjdzie w czasie wykonywania...
A w jaki sposób podajesz stan niski na wejście przerwania?
A może się pochwalisz jakmasz skonfigurowane przerwania? Rising/Falling? Cokolwiek ? Podciąganie zrobione?
Wydaje mi się, że podczas wykonywania komend obsługujących LCD (Locate, Lcd) dzieje się jedna z dwóch rzeczy: a) przerwania zewnętrzne są wyłączane (nie są obsługiwane przerwania, które są zagnieżdżone jedne w drugich), ...............) Tak ma być czy robię coś źle? Jakieś pomysły o co może chodzić i jak podejść do problemu? Pokaż gdzie i jak masz...
Dzięki działa:) Mam jeszcze pytanie czy obsługę przerwania mogę mieć w pliku main.c tak jak w avr czy musi to być plik-stm32f10x_it.c?
mam ustawione przerwanie zewnętrzne ustawione na wyzwalanie zboczem opadającym i narastającym w funkcji obsługi przewania zapisuję sobie do bufora: void EXTI0_IRQHandler(void) { //Check if EXTI_Line0 is asserted if(EXTI_GetITStatus(EXTI_Line0... != RESET) { Buffer[iWriteIdx] = 'I'; GoToNextElement(&iWriteIdx);...
Pierwsza bramka podłączona do INT0 a w obsłudze jego przerwania odpalany jest timer, w momencie kiedy druga bramka wywoła drugie przerwanie timer jest zatrzymywany, w zależności od tego jaki to procesor może się okazać że da się wykorzystać jakąś funkcje timera i zrobić to bez przerwań zewnętrznych, poczytaj o trybach pracy timera w procesorze który...
Co masz na myśli pisząc, że przerwania się gryzą?, Podejrzyj sobie kod w asemblerze zobacz ile instrukcji trwa obsługa przerwania zewnętrznego a ile przerwania od timera a ile pętla główna. Jeśli przerwanie zewnętrzne zgłaszało by się bardzo często to teoretycznie istniała by możliwość, że podczas obsługi przerwania od timera zgłoszonych zostanie więcej...
Wykorzystać przerwanie zewnętrzne INT0 (portd.2). W pętli głównej jeden warunek sprawdzający flagę zmienianą pod wpływem zewnętrznego przerwania.
Witam. Mam pewien problem z powrotem z przerwania INT0 i INT1. W głównej pętli mam kod, który chcę, aby wykonywał się przez cały czas działania kontrolera. Mam również dwa przerwania, z których pierwsze (INT0) ma startować timer, a drugie (INT1) zatrzymywać go i wyświetlać wynik zliczania. Pomiędzy INT0 i INT1 główna pętla ma się nie wykonywać. Wszystko...
Przerwania traktuj jako coś wykonywanego równolegle "obok" programu głównego". Jedna z podstawowych zasad pisania obsługi przerwań to to że ma być ona jak najkrótsza. Reszta ewentualnie obsługiwana jest w pętli głównej w poprzez ustawianie i testowanie odpowiedniej flagi. Jeśli chcesz zrobić menu wielopoziomowe poradzę zapoznać się z kodem z butterfly...
Przy podłączeniu tego układu do przerwania zewnętrznego mikro-kontrolera układ będzie reagował na te zakłócenia. Co mogę zrobić żeby te zakłócenia wyeliminować ? Możliwe że zakłóceń w ogóle nie ma, jeśli analizator stanów logicznych dostaje przebieg o długim czasie narastania/opadania bramki wejściowe mogą wielokrotnie zmieniać stan, powinieneś to...
No właśnie tak robię, próbuje coś nie coś opanować na jednym z tych modułów. Opanowałem już porty i piny, a teraz zajmuje się pwm, jak na razie sprzętowym, jak uda mi się to wezmę się za programowy, a następnie przyciski. I jeszcze nie wiem co mi będzie potrzebne. Dodatkowo każdy z tych modułów może być wzbudzany poprzez zewnętrzne przerwania co daje...
przerwania zewnętrzne zewnętrzne przerwania bascom bascom przerwania zewnętrzne
fonia stereo filtr upload obrazek filtr corolla
efekty gitarowe magnes neodymowy
Termet Silver Pro 20 kW - Optymalizacja zużycia gazu Tranzystory końcówki mocy w WS-432: rozbieżności parametrów