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...
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
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...
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ś...
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...
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.
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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;...
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.
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...
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
sygnał podany na wejście PD2.
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...
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.
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...
BTW: ten LCD ma być uaktualniany z przerwą 30ms? Rozumiem, że to _delay_ms to tylko tymczasowo. Oczywiście, cały przedstawiony program jest tymczasowy i służy wyłącznie do testowania przerwań. ISR zamień na INTERRUPT albo do ISR dodaj atrybut ISR_NOBLOCK. Jakie czasy maja impulsy na wejściach INT? Dzięki za ciekawy trop, wieczorem przetestuję i dam...
Nie wiem o co chodzi. Poprawiłem kod jak niżej. ale nadal wartości mam losowe (od 11000 do 300). Przy jednakowej prędkości obr. tarczy. [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> #include "config.h" #include "LCD.h" #include <util/delay.h> #include<stdio.h> //float czas=0.00000; volatile unsigned char odczyt=0;...
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);...
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...
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...
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...
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ą:...
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?
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, 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...
. Zamierzam zrobić tak by mogli wprowadzić korektę (jeśli będzie potrzebna) i zapisać w eeprom. czy to dobry pomysł? Jakoś tak; $Crystal=12000000 Config Timer1 = Timer , Prescale = 8 On Timer1 Inter_1mS Inter_1mS: Counter1 = Counter1 + Licznik (64036 - wychodzi z obliczeń, że da to 1ms) /tu odliczę sobie 103/ Błednie to rozumujesz, albo błednie podałeś...
No to zrobiłem pare testów 8-) Dostałem jakieś LS4013 - SANYO. 4076 "cienias" Poltronik nie miał. :D Okazało się, że bardzo nie lubią wolno opadających zboczy impulsów. Usunąłem kondensator na CLK (220 nF) i działa bez zająknięć. Dodatkowo zmieniłem rezystor 220 k w puncie wspólnym katod diod na 10 k. Zrób to samo i napisz, jakie wyniki. PS. Switche...
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...
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
Widziałem tysiące programów, ale jeszcze nie wiedziałem ani jednego, który wskakiwał by w przerwanie po to aby stwierdzić, ze nie ma co robić i wychodził z niego, wykonywał jeden obieg pętli głównej i tak w kółko. To jest bez sensu tym bardziej, ze tu można to rozwiązać (jeśli już muszą być przerwania od czujników) od zbocza. Przyznam, ze jestem ciekaw,...
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....
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ą...
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...
Manual na to : Mcucr = 00001111 ale jakos mi to nie dziala dlatego wiec pytam!!!
Witam Mikroprocesor PIC16F84 + 10Mhz Kwarc. Problem: Jak najszybsze wykrycie zbocza widocznego na rysunku poniżej:(kolor zółty). http://aycu16.webshots.com/image/15175/2... Teraz sytuacja wygląda tak: Przerwanie w procesorze wywoływane opadającym zboczem. W procedurze obsługi przerwania zmiana pinu portu na stan wysoki(na rysunku...
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...
zbocze opada opada zbocze przerwa zbocze
wspólnota mieszkaniowa domofon przedzwonić linię scalony konwerter poziomów logicznych
Podłączenie kostki stacyjki Audi A3 do Skody Octavia III Warystor 20K371 - Dane techniczne i zastosowania