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...
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ś...
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
Miałem podobny problem. Po prostu na początku przerwania odczytywałem stan pinu. 1 - zbocze narastające, 0 - opadające. Działało to bezproblemowo.
Po 1) użyj znaczników [code]... Po 2) funkcje inline _delay_us i _delay_ms muszą być wywoływane z argumentami o wartości znanej w trakcie kompilacji (stałe) - było o tym wielokrotnie na forum. [url=http://www.nongnu.org/avr-libc/user... Po 3) co do inline asm to zobacz [url=http://www.nongnu.org/avr-libc/user...
Są inaczej konfigurowalne. PCINT zasze generuje przerwanie zarówno na zboczu narastajacym (zmiana z niskiego na wysoki) jak i przy zboczu opadającym, ale za to możesz je włączać na różnych pinach. Przerwanie INT jest przypisane tylko do konkretnego pinu, ale za to możesz wybrać, czy ma być wyzwalane zboczem (zmianą) czy poziomem i którym. I jest historycznie...
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...
Jeżeli już tak to ustaw przerwanie na każdą zmianę i sprawdzaj stan pinu int0. będzie szybsze bo nie będzie procedur ustawiania falling/rising: config int0=change ... przerwanie_int0: if pind.2=0 then 'opadajace zbocze else 'narastajace end if ... return Z analizy kodu asm bascoma wynika ze szybciej zadziała oddzielny warunek: if pind.2=0 end if...
Przerwanie sztucznie chiałem zgłosić, ustawiając flagę INTF0 w GIFR. A tak z ciekawości, jak to chciałeś zrobić? Czytałeś to? The flag is cleared when the interrupt routine is executed. Alternatively, the flag can be cleared by writing a logical one to it. Wpisywanie logicznej jedynki zeruje flagę, a nie ustawia. Wpisywanie zera nic nie zmienia, niezależnie...
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.
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...
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...
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...
1. oczywiście że ATmega obsługuje przerwania na każdy rodzaj zbocza a także na poziom ;) (na pewno!) 2. Przerwania INT0 i INT1 to standardowe i opisane oddzielne dwa przerwania hmmm mają można tak ogólnie powiedzieć więcej opcji działania ;) Natomiast przerwania PCINTx mogą być wygenerowane przez wybrane piny danego AVRka, przeważnie to jest jakiś cały...
1. Rozwiązanie z przerwaniem od stanu niskiego akurat tutaj pasuje, ale gdyby np. w pętli głównej miała migać inna dioda to już to nie przejdzie. Wtedy można najpierw skonfigurować wyzwalanie zboczem opadającym (wciśniecie) i narastającym (puszczenie). 2. Dla AT90S2313 rejestr pinx jest tylko do odczytu, a dla Attiny2313 do odczytu i zapisu. Dodane...
olo_3 -> to jest cały kod? ten który tu pokazałeś????? jeśli tak - to po pierwsze - gdzie masz pętlę główną po części inicjalizacyjnej programu ??? DO ... LOOP - chyba że ślepy jestem czy jak? (jeśli rzeczywiście jej nie masz to nie dziw się, że twój program wariuje bo po z tego co widać po inicjalizacji odrazu program leci do obsługi przrwania i się...
Idzmy głównym wątkiem bez cofania sie. Tak, uaktywnia ale już wiem, ze było ono przechowywane w SREG. To jest wyjaśnione. W SREG przechowywana jest informacja o fladze I, czyli fakt włączenia lub wyłączenia przerwań globalnych. Nie ma to nic wspólnego z "przechowywaniem" informacji o przerwaniach INTx. Instrukcjami operującymi na fladze I w SREG są:...
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...
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...
witam ustawilem : mcucr=00001010 i przerwania zamiast na zbocze opadajace reaguja na poziom :roll: wyprowadzenia pd2 i pd3 ustawilem jako wejscia. nie wiem co moze byc. moze cos doradzicie
Koniecznie zadbaj o to, żeby wychodząc z tego przerwania jego flaga była wyzerowana, a wtedy to o czym kolega _marek_ mówi nie będzie miało miejsca. --- Podczas puszczania przycisku są zdecydowanie mniejsze drgania styków niż podczas jego przyciskania i o to mi chodziło. Poza tym reagujesz wciąż na zbocze opadające a tylko czekasz z powrotem na narastające,...
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);//...
Dzięki za pomoc. Musiałem jeszcze dolutować pull-up 5K od 5V do każdego portu i w końcu mi zadziałało.
Tak po pierwsze to przerwanie masz domyślnie wzbudzane stanem niskim, czyli przerwanie wywołuje się W KÓŁKO dopóki na pinie panuje stan niski. Musisz je ustawić tak, by reagowało na zbocze (w Twoim przypadku opadające). Poza tym jak pisał (at)emarcus - cały program jest pisany bez zastosowania się do jakichkolwiek dobrych nawyków, a i jak widzę wiedza...
Nie możesz "przekierować" pinu. Przypisanie przerwania zewnętrznego jest hardwareowe. Generalnie wszystko zależeć będzie od tego jak masz skonstruowaną główną funkcję. Jeżeli stosujesz w niej co rusz jakieś opóźnienia to będzie lipa, ale jeżeli cała główna funkcja wykonuje się szybko, bez zbędnych opóźnień to wtedy bez problemu w głównej pętli analizujesz...
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...
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...
mogą być 2 bity startu, bo standard RC5 właśnie tak jest "skonstruowany", że posiada 2 bity startu. Natomiast jego rozszerzenie czyli RC6 wykorzytuje drugi bit startu jako normalny bit danych. Ok - teraz odpowiedź dla autora, wydaje mi się, że uda się to wyjaśnić bo sam kiedyś miałem podobny problem ze zrozumieniem tego etapu dekodowania. Cały problem...
Więc pewnie chcesz to zrobić na przerwaniach. Podpowiedź juz dostałeś jak to zorganizować na jednym pinie. crazy_phisic : 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.
Błąd polegał na tym, że przy ISC10 zamiast przesuwania bitów było porównanie, ISC10=2 a więc relacja była spełniona i przyjmowała wartość 1. Co do wszystkich rad dotyczących kasowania i ustawiania bitów MCUCR i innych - mają one sens, ale dopiero po wstępnym wpisaniu tam jakiejś wartości. Mimo, że po resecie są tam wartości domyślne, najlepiej na samym...
Program napisałem mniej więcej od nowa. Wygląda tak: #include <avr/io.h> #include <avr/interrupt.h> #define Potrzebne_50ms 33 volatile int licznik50ms=0; volatile int SygnalDCF=0; //0 - szukamy szczeliny początku transmisji, 1 - dekodujemy sygnał, 2 -koniec ramki DCF volatile int zbocze1=0; //0 - szukamy opadającego, 1 - narastającego volatile...
Witam, Mam dziwny problem z przerwaniem zewnętrznym INT6 w mojej atmedze128. Napisałem taki oto banalny programik. #define F_CPU 1000000L #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdint.h> ISR(INT6_vect) { PORTC = 0x01; } main() { DDRC = 0x01; EIMSK |= _BV(INT6);...
sygnał podany na wejście PD2.
Witam. Borykam się z problemem przerwania INT1 w procesorze Atmega88p. Otóż przerwanie raz działa poprawnie , wykrywa odpowiednie zbocze , a innym razem załącza się praktycznie losowo . Napisałem specjalnie prosty programik aby zobrazować problem . Program jest pisany w bascomie jednak ze sporą ilością wstawek z assemblera . (Na czystym bascomie zachowuje...
Widzę profesjonalna analiza:)Dziękuję. Jednak aż tak zaawansowany nie jestem by zastosować wszystkie Twoje wskazówki.Jednak niektóre pojęcia nie tyle, że są obce co nie do końca znam zasadę ich działania np.flagi. Układ chciałem by działał bez obsługi z zewnątrz czyli brak sterowania włącznikami góra dół jedynie impuls zewnętrzny a właściwie zmiana...
Manual na to : Mcucr = 00001111 ale jakos mi to nie dziala dlatego wiec pytam!!!
wynik końcowy faktycznie za każdym razem jest inny. (at) emarcus możesz podpowiedzieć jak powinien wyglądać serwis int1? Popatrzyłem troche bliżej na twoj kod. Z jakiego powodu potrzebujesz otrzymać wynik ("Czas_2") z dokładnocią aż do 9 miejsc decimal? Jeżeli jeden z czynników iloczynu (rozdzielczość timera) jest liczbą wymierną z dokładnościa do...
Strasznie enigmatyczna ta konstrukcja. Nie wydaje mi się żeby nie dało się tego rozwiązać programowo. Po pierwsze dla wejść przerwań możesz sam decydować czy ma reagować na stan czy też na zbocze sygnału a dla pozostałych wejść masz przecież też przerwanie od dowolnej zmiany stanu na wejściach więc chyba coś można wymyślić innego niż zewnętrzna logika....
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...
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?
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...
Proszę o prosty program który będzie obsługiwał przerwanie INT2 opadającym zboczem na procesor atmega 8535 w bascomie. Wynikiem działania obsługi przerwania może być zaświecnie ledy na dowolnim porcie. Próbowałem różnych konfiguracji i nic nie działa, INT0 i INT1 działa a INT2 nie :( z góry dziękuję george2002
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;...
Witam Na AVRach można to zrobić sprzętowo. Na przykładzie ATMega8, wejście T1 ustawić na zbocze opadające, liczni 1 ustawić na PWM lub inny rodzaj pracy i wpisujemy wartość o 1 mniejszą niż przepełnienie. W momencie pojawienia się zbocza opadającego na wejściu T1, licznik przepełni się i zmieni stan wyjścia OC1A natychmiast i jednocześnie jest możliwość...
Witam, jak wygląda sytuacja opadającego zbocza przy przerwaniu od INT0? W którym momencie i w jaki sposób jest wykrywane opadające zbocze? W projekcie chcę wykryć spadek napięcia zasilania (w sumie jego odłączenie) które charakteryzuje się charakterystyką exponencjalna (w skutek rozładowania kondensatora w układzie zasilania). W którym momencie przerwanie...
Witam !!! 3. Co to są banki rejestrów jak je zmieniać. - w 8051 sa cztery banki rejestrow (po 8 rejestrow w kazdym banku) zmienia sie je (banki) poprzez odpowiednie ustawienie bitow RS1 i RS0 rejestru statusowego PSW. Bank rejestrow najprosciej mowiac to zbior wlasnie 8 rejestrow w ktorych mozemy przechowywac argumenty (dane ) dla wykonywanych instrukcji...
Generalnie, W Bascomie obsługa RC5 pozostawia wiele do życzenia dlatego też Mark w najnowszej wersji ma wprowadzić obsługę RC5 na przerwaniu ICP ("prawdziwie" w tle) według poniższego kodu, który udostępniam i polecam: [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 8000000 Config Timer1 = Timer , Capture Edge = Falling , Prescale = 8 '1 tick= 1...
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...
Napisz coś podobnego jak poniżej: [syntax=c] // zmienne globalne dostepne rowniez w przerwaniu volatile uint32_t PulseWidth; volatile uint8_t zakonczono_pomiar = 0; // obsluga przerwania TMR32B0 void TIMER32_0_IRQHandler(void) { static uint32_t LastCapture = 0; if ( LPC_TMR32B0->IR & (0x1<<4) ) // sprawdzenie czy przerwanie od kanalu zliczajacego...
Bo w automatyce przyjeła się logika ujemna, stanem aktywnym jest tan niski, dlatego zadziałanie czujnika to zbocze opadające, powrót do stanu spoczynkowego narastajace. Jestesmy w mikrokontrolerach a te traktuja przejscie ze stanu wysokiego (zadzialanie czujnika) w stan niski (wylaczenie czyjnika) jako zbocze opadajace. Proponowałem aby każdy napisał...
Bezapelacyjnie musisz wywalić bitwait z obsługi przerwania. Ja bym próbował to robić licząc czas pomiędzy przerwaniami. Lub czas pomiędzy zboczem narastającym i opadającym.
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...
Przerwanie ustawione jest na zbocze opadające, więc czas jest uzależniony od szybkości zasłaniania i odsłaniania transoptora i od szerokości szczeliny. To będą długie(z punktu widzenia uC) czasy.Sprawdź jednak, czy nie ma oscylacji bo jak nic nie wiadomo o czujniku, to nie można stwierdzić czy ma jakiś układ formowania impulsów czy nie.
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....
tak zamierzone to jest, chodzi o to ze jak wejdzie w przerwanie to program sie tam zapetli i nie bedzie mi inkrementowal zmiennej "zmienna" i bede widzial na wyswietlaczu ze jestem w przerwaniu... jak sie usunie petle do/loop to tez nie wchodzi w przerwanie.
To jeszcze raz ja. Widzę, że toczy się ostra wymiana poglądów więc postanowiłem nieco sprostać. Jak wynika z tematu postu - jest to projekt programu a nie sposobu podłączenia klawiatury. Jeden z czytelników napisał coś o strobowaniu - chyba miał na myśli moduł LCD z telefonu, bo w 'naszych' modułach dane są zatrzaskiwane opadającym zboczem linii E wyświetlacza....
Nie jest to kod do jakiegoś Pentium. To prosta ATmega. A że, długo nie używałem i nie pisałem ,to stąd problemy. Jakby mógł Koś, zerknąć na kod i wytknąć błędy to będę cheppi. ( Program ma za zadanie, zmierzyć czas pomiędzy dwiema szczelinami na obracającym się kółku. wykorzystany transoptor) [syntax=c]#include <avr/io.h> #include <avr/interrupt.h>...
Witam! Pisze bo juz nie mam pomyslu co to moze byc, zaznaczam ze przeczytalam wszystkie posty odnosnie problemow z przerwaniami w atmega162, jeden temat byl nawet podobny ale rozwiazanie tam zawarte nie bylo pomocne w moim przypadku. Ale do rzeczy: W ponizszym programie po wywolaniu przerwania INT0 wywoluje sie INT1. Symuluje program w komplitaorze...
Jest jeszcze przerwanie PCINT wyzwalane dowolnym zboczem. Wejść PCINT jest zdecydowanie dużo, zatem można reagować nie tylko na dwa przerwania INT0/1. Fakt, nie wszystkie AVRy to mają. Co do programowej obsługi to trzeba skanować klawiaturę w krótkich odstępach czasu i porównywać stan bieżący z poprzednim odczytem. Niestety czas musi być dość krótki...
Chodzi Ci o przerwanie zewnętrzne wywoływane zboczem, czy czekanie na zbocze w jakimś momencie programu?
hardkorowo ustawione __main_stack_size = 4096; __process_stack_size = 4096; nie pomaga. Jedyne co poprawia to wylaczenie timerow. konfuguracja timerow TIM2_CCMR2 |= TIM_CCMR2_CC3S_IN_TI2| TIM_CCMR2_CC4S_IN_TI2; TIM2_DIER |= TIM_DIER_CC4IE | TIM_DIER_CC3IE; TIM2_CCMR1 |= TIM_CCMR1_IC1F_CK_INT_N_8 | TIM_CCMR1_IC2F_CK_INT_N_8; TIM2_CCMR1 |= TIM_CCMR1_OC2M_PWM1...
Najprościej będzie tak: $regfile = "m8def.dat" $crystal = 8000000 Config Pinb.0 = 1 : Portb.0 = 0 Config Pinb.1 = 1 : Portb.1 = 0 Config Pinb.2 = 1 : Portb.2 = 0 Config Pinb.3 = 1 : Portb.3 = 0 Dim Licznik As Byte Enable Interrupts Enable Int1 Config Int1 = Rising On Int1 Przerywanie Do Portb = &B00000000 Loop End Przerywanie:...
W sumie to teraz ja trochę pomieszałem cap1: 10, 20, 30, 40, 50, 60, 70, ... cap2: 11, 22, 33, 44, 55, 66, 77, ... cap3: 12, 24, 36, 48, 60, 72, ... cap4: 13, 26, 39, 52, 65, 78, ... Tyle że przerwania od poszczególnych rejestrów będą zgłaszane w różnej kolejności, bo po pewnym czasie sygnał 1 "wyprzedzi" sygnał 4 w ilości okresów. W...
No ale co nie działa? Nie miga dioda, nie wchodzi do przerwania, wiesza się, ... ? Włączyłeś GPIO w RCC? 4\/3!!
Nadajnik możesz to zrobić w oparciu o timer, na którym ustawisz sobie określony zegar - np. te po rz ądane 250 kHz. Być może musisz ustawić 500kHz - aby wyłapywać nie tylko czas cyklu, ale i jego zbocze narastające i opadające. Potem budujesz sobie kolejkę danych (bufor fifo) - która stanowi podstawę dla timera - do "machania określonym pinem". Wysłanie...
Witam Posiadam kontaktron zwierny (bez pola magnetycznego rozwarty, po przysunięciu magnesu zwarty). Chciałem, aby przerwanie INT0 ustawić w tryb reagowania na zbocze opadające: ISR(INT0_vect) { //Stan niski //Zmień zapalanie diody PORTB^=_BV(3); } int main(void) { ... //DDRB 3-jako wy (dioda led z R-1k),...
Witam wszystkich kolegów Mam prawdopodobnie dość trywialny problem. Chce zliczać impulsy na jednym z pinów uC (częstotliwość 100-200kHz) w czasie kiedy na innym pinie uC jest stan wysoki. Mój pomysł wygląda tak: Ustawiam timer w 16 bitowy tryb prosty Przerwanie wyzwalane zboczem narastającym zeruje 0 16 bitowy timer Przerwaniem zboczem opadającym przepisuje...
Witam! W ramach napisania programu do obsługi klawiatury na złączu PS/2 chciałem zapoznać się obsługą uart w przerwaniu wyzwalanym zewnętrznym sygnałem. Sam uart działał, poprawnie wysyłał znaki, same przerwania zewnętrzne także działały, natomiast próba wysłania pojedyńczego znaku w przerwaniu kończy się niepowodzeniem tzn. terminal nie odbiera żadnego...
W pętli głównej robisz operację R-M-W na rejestrze EICRA, który modyfikujesz też z przerwania. Do tego Twoja funkcje ustaw_wyzwalanie_poziomem() i ustaw_wyzwalanie_zboczem() na 100% nie robią tego co chcesz, bo aby to robiły to musiałbyś zerować też kilka innych bitów, a nie tylko używać "|=". Spojrzałem jeszcze raz w dokumentacje. Okazało się że pomyliłem...
Spotkałem się z różnymi rozwiązaniami na inne mikrokontrolery ale większość z nich opierała się na ciągłym przepytywaniu linii portu. Większość rozwiązań, z którymi spotkałem się z kolei ja, to właśnie działały na przerwaniach. Dla mikrokontrolera AT91SAM3 napisałem taką oto obsługę: [syntax=c]if(status & (1<<16))//jeżeli zarejestrowano zbocze...
Przepraszam ale w pierwszej wypowiedzi popełniłem błąd logiczny - oba przerwania powinny być ustawione na te same zbocze a nie różne. Dlaczego, bo tak jak napisałem wcześniej nie będzie można określić kierunku zmian, zawsze bedzie ta sama kolejność wywoływania przerwań. Obojętnie czy kręcimy w lewo czy w prawo. np. ChA narastanie 0->1 a ChB opadanie...
Pomyliłeś rejestry bity ISCxx nie są w rejestrze MCUCSR, tylko MCUCR. Nie wywołujesz funkcji Init_pomiar() - zamiast tego w main() wstawiłeś prototyp funkcji: Spróbuj w przerwaniu int1 w pętli if skorzystać z flagi, np: W jakim celu tworzyć zbędną zmienną, skoro stan zbocza można sprawdzać bitami ISCxx, co właśnie autor czyni (choć w złym rejestrze)?
Ja klawiaturkę taką 4x4 zrobiłem odrobinę inaczej, tj. http://obrazki.elektroda.net/65_11882088... a program obsługi działa na zasadzie wykrycia naciśnięcia jakiegoś klawisza a następnie na tej podstawie sprawdzenia który to klawisz został wciśnięty: void sprawdz(volatile int x) //sprawdza ktory przycisk zostal nacisniety { volatile int wsk=0;...
Witam Chciałem skonstruować sobie projekcik umożliwiający przećwiczenie timera i przerwań zewnętrznych. Nie chciał działać, więc ostatecznie uprościłem go do granic możliwości i dalej nic... Założenie jest proste: po wciśnięciu przycisku na pinie odpowiadającym INT0 następuje uruchomienie TIMER1, który naprzemiennie włącza i wyłącza diodę w odstępie...
Witam Mam mikrokontroler LPC2148 na płycie zl9arm. Ustawiam Przerwanie zew. EINT0 na P0.2 reagujące na zbocze i teraz nie zależnie czy opadające czy narastające reaguje tylko na opadające czyli zwarcie do masy (nawet jak jest ustawione na narastające), i obojętnie czy jest ustawione na narastające czy opadające na pinie jest zawsze napięcie. Jak zewrę...
Komentujemy to, że używasz przestarzałego kompilatora i środowiska. Po prostu zainstaluj coś co ma mniej lat niż moje dzieci :). Skąd takie coś żeś wytrzasnął? Koledzy piotrva i Piotrus_999, ja was proszę, przeczytajcie pierwszy post w temacie, ale ZE ZROZUMIENIEM, zanim klikniecie na przycisk "odpowiedz". Szczególnej uwadze polecam drugie zdanie w...
Stos OK. Mówię Ci. Skasuj flagę przed "Enable INT1". Generalnie kolejność mam w kodzie taką: Config Int0 = Falling 'opadajace zbocze wywoluje przerwanie Config Int1 = Falling 'opadajace zbocze wywoluje przerwanie Config Timer0 = Timer , Prescale = 8 'konfiguracja Timer0 jako timera z preskalerem przez 8 'Przerwanie od przepelnienia Timer0 jest generowane...
Witam. Mam takie problem. Chcę sobie poćwiczyć zrobienie tzw bramy świetlnej na mikro, z wykorzystaniem INT1 i INT0. Bramy są zewnętrznymi urządzeniami, na nózki Atmegi podaję tylko sygnały logicznej 1 lub 0. Mam taką sytuację: - przerywam bieg pierwszej bramy, zostaje zliczona osoba - jednoczesnie zostaje wylaczone przerwanie drugiego czujnika, na...
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ę.
DAC0808 - nie ma kompletnie żadnej filozofii. POdłączasz go do jakiegokolwiek ośmiobitowego portu, ustawiasz kierunek (DDRx = 0xff;) i zapiszujesz wartość (PORTx = wartosc;). PCF8591 - http://elportal.pl/index.php?module=Cont... część szósta, pobierz listingi. ADC0820 - podobnie jak DAC0808 podłączasz do portu ośmiobitowego....
Pokaż schemat. Wykorzystanie ICP to "oczko" wyżej w trudności implementacji niż podane poniżej rozwiązanie. Jedno z rozwiązań: Wykorzystaj przerwanie wyzwalane narastającym zboczem na pinie. W obsłudze przerwania, przy wystąpieniu narastającego zbocza uruchom licznik sprzętowy i zmień wyzwalanie na zbocze opadające. Przy kolejnym wywołaniu przerwania...
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...
Bardzo bym prosil o podpowiedz co nie gra w tym kodzie, bo juz walcze z tym 3 dzien: #define INT_TWI 1<<19 #define PRZERWANIE_LEVEL4 #define TIMER0_INTERRUPT_LEVEL 0 __irq void timer0_c_irq_handler(void) //przerwanie FIQ { AT91C_BASE_TC0->TC_SR; LCD_wyswietl(wsk_tablica); AT91C_BASE_AIC->AIC_EOICR=1<<AT...
Witam wszystkich, mam problem z obsługą przetwornika MAX1301 przez Atmege 32. Mianowicie przetwornik ten posiada 3 tryby pracy. W dwóch sygnał zegarowy podawany jest z zewnątrz, dokładniej przez linię SCLK interfejsu SPI. W trzecim trybie sygnał zegarowy podawany jest na przetwornik tylko podczas przesyłania do niego bitu startowego i odczytu zmierzonych...
Witam! Ze względu na niedokładność funkcji waitms(); postanowiłem uruchomić licznik TC1 w ATTINY2313. Ma to być obsługa pilota (prawdopodobnie JVC). Więcej danych: - ATTINY pracuje z częstotliwością 1MHz (wewnętrzny oscylator) - TC0 jest już zajęty innymi działaniami (w czasie obsługi pilota TC0 nie musi pracować) - czas, który chcę odczekać to 14700us...
500ms to trochę za dużo jak na drgania styków. To jest microswitch czy jakiś przycisk przemysłowy? Spróbuj wyzwalać przerwanie stanem niskim a nie zboczem opadającym. Ustawiając inny zegar nie spalisz chipu. Co najwyżej ustawiając niższy zegar niż dotychczas możesz mieć problemy z zaprogramowaniem jeśli nie zmienisz też częstotliwości w programatorze....
Po poprawie program wygląda tak jak w syntaxie. Teraz programowo wszystko z przerwaniem powinno być ok (jeżeli ciągle nie jest, proszę o wskazanie co jest błędne). Licznik nie liczy poprawnie ponieważ ciągle występuje drganie styków, które chciał bym rozwiązać sprzętowo, ale aktualnie nie mam odpowiedniego kondensatora i rezystora. Wiem, że mógł bym...
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);....
Witam, Przedstawiam a tym artykule jak można na jednym przerwaniu obsłużyć pokazany poniżej impulsator. Może komuś się przyda. http://obrazki.elektroda.pl/6570210900_1... http://obrazki.elektroda.pl/3250862500_1... Wyjście B enkodera może by na innym dowolnym pinie, wymaga jedynie zmian w algorytmie. /* wyjście impulsatora...
Odbiornik odbierze jeśli dostanie sygnał start, czyli będzie przez okres jednego bitu sygnał wysoki, nastąpi zbocze opadające a następnie przez okres jednego bitu sygnał niski.
Witam, mam problem z programowa eliminacja drgań styków w przerwaniu. Wiem, że temat mógł się przewinąć wiele razy ale nie znalazłem odpowiadającego mi rozwiazania. Wykorzystuje przerwanie EXTI, w ktore zostaje wywoływane w momencie wykrycia opadajacego zbocza. W przerwaniu mam zamiar uruchomić timer1, w którym wykorzystuje Input Capture by zatrzasnąć...
Witam. Tworzę mały projekcik i natrafiłem na pewną zagwózdkę. Na początku wprowadzenie co układ ma robić i jak działać. Układ składa się z części analogowej, tzn. dwóch detektorów tonu (LM567) odpowiedzialnych za detekcję "bitów" łącza fizycznego. Chodzi o to, że rozpoznają "swoją" częstotliwość i gdy stwierdzą zgodność z obwodem czasowym, na swoim...
A czy czasem ten encoder nie ma wyjścia typu OC (otwarty kolektor)? Jeśli tak, to przy takiej dużej częstoliwości impulsów, odległość pomiędzy może być tak mała, że na skutek tworzenia się układu całkującego możesz źle interpretować te impulsy. Jeśli rzeczywiście jest to encoder o wyjściu OC to : Jakie rezystory masz na kolektorach? Spróbuj je zmniejszyć...
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...
dzięki za podpowiedzi, najlepiej było by w obudowie DIP łatwiej się bawić na płytce stykowej ale nie wiem po co ta tablica, mam taka następną propozycję(skoro zakładam, że stan początkowy to na obu liniach 0 V to chyba powinno działać, niemniej jeśli stany portów będą inne to mogą się dziać dziwne rzeczy ;) ) co o tym myślicie ? [syntax=c]#include <avr/io.h>...
Mam problem z przerwaniami, a konkretnie na linii INT0. Program wyglada tak: main() { while (1) { ........ ........ } przerwanie() interrupt 0 usiing 1 { //podprogram przerwania } I teraz pytanie. Czy jak uzyje switcha na porcie P3.2 (to jest linia INT0),a przerwanie jest skonfigurowane, ze ma reagowac na zbocze opadajace, to czy po puszczeniu swicza...
witam INT0przerwanie zewnętrzne końcówka INT0 INT1przerwanie zewnętrzne końcówka INT1 TIMER0przerwanie przepełnienia licznika TIMER0 TIMER1przerwanie przepełnienia licznika TIMER1 Gdy używane są przerwania INT0 lub INT1, można określić warunek zgłoszenia tego przerwania. Należy w tym celu użyć instrukcji SET / RESET i ustawić odpowiednie bity w rejestrze...
Mój kod sie kompiluje U mnie nie. -Pin DRDY też mi nie działa. Bo jak już to ten pin trzeba w przerwaniu obsługiwać, na opadające zbocze. Zainicjować start konwersji i potem w przerwaniu koniecznie trzeba odczytać rejestry od wyniku. Bo dopiero odczyt powoduje, że nóżka DREDY wraca do stanu wysokiego. Ale obsługa tego pinu nie jest konieczna bo sam...
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...
zbocze opada przerzutnik zbocze opada impuls zbocze opada
z18xe wymiana silnika silnik elektryczny łożyska indesit instrukcja pralka
suszarka electrolux moment dokręcania korbowodów
Czujnik G40 w silniku BKY 1.4 16V VAG – lokalizacja i opis usterki Porsche Panamera 3.6 benzyna – moment dokręcania panewek wałka rozrządu, procedury TTY i M6