W przerwaniu przycisku blokujesz przerwanie przycisku i uruchamiasz timer sterujący wyświetlaniem, który kiedyś tam, gasząc wyświetlacz, włącza przerwanie przycisku. To "czekanie 20 ms" i powtórne sprawdzanie przycisku to jakaś magia i nie ma ani trochę sensu.
Mikrokontroler mega.2560. Arduino Mega, czy sam "czysty" mikrokontroler, bez środowiska Arduino? Pierwszym projektem jaki się robi podczas nauki na mikrokontroler jest miganie diodą. Drugim projektem jest włączanie diody przyciskiem. Stan przycisku możesz sprawdzać poprzez przerwanie zewnętrzne (tylko na niektórych portach), cykliczne sprawdzanie w...
Podłącz przycisk do nóżki INT, skonfiguruj jako wejście z podciągnięciem, ustaw int jako low level, procesor ustaw w powerdown. W przerwaniu tylko sprawdzaj czy przycisk wciśnięty dłużej niż 3s czy krócej (wtedy znów powerdown). I nie trzeba tu bitwaitów. Nawet timera do sprawdzenia 3s (robisz do-loop while i w tej pętli co np 100ms inkrementujesz jakąś...
http://obrazki.elektroda.pl/5385398300_1... Zaprezentować dziś chcę projekt lampki RGB który wykonałem na pracę zaliczeniową z systemów wbudowanych. Moim zdaniem osiągnięty efekt jest zadowalający więc może ktoś będzie zainteresowany wykonaniem urządzenia według mojego projektu. Jako, że jest to pierwszy zrealizowany przeze mnie projekt...
1. Sprawdzasz stan przycisku co jakiś czas, co przerwanie timera, np. 10ms (w przepełnieniu licznika np. Timer0 Overflow można regulować czasem pomiędzy przerwaniami, wpisując na początku obsługi przerwania odpowiednią wartość licznika, oraz wybierając preskaler w odniesieniu do częstotliwości zegara systemowego {1; 8; 64; 256; 1024}). Procedura timera...
http://obrazki.elektroda.pl/3025550100_1... Mając do dyspozycji jedną matrycę 8x8 czerwonych diod LED o boku 60,2mm oraz mikrokontroler ATtiny861 pozostałe po innych projektach postanowiłem zbudować to, co każdy elektronik chociaż raz w życiu zbudować musi: zegar ;). Ze względu na charakter wyświetlacza miał to być zegar binarny, ale...
Czasami przy naprawie elektroniki mamy na płytce drukowanej przerwę której nie umiemy znaleźć. Czy w takiej sytuacji możnaby do takiego układu (np. płytki wzmacniacza) podpiąć fazę 230v i czujnikiem fazy zobaczyć gdzie się ona kończy? Wiem, że to bardzo niebezpieczne nawet dla życia ale chodzi mi o teoretyczną możliwość. Czy samo podłączenie fazy zniszczy...
Witam. Mam takie -może banalne- pytanie: jak zlokalizować miejsce przerwy w 50metrowym przedłużaczu zrobionym z przewodu 2x2,5 mm w podwójnej gumowej izolacji? Po pomiarze czujnikiem fazer jeden z przewodów (dokładnie niebieski :-) wykazuje brak ciągłości, tylko nie wiem konkretnie w którym miejscu, a nie chcę rozcinać całego przedłużacza. Przewód był...
Chciałbym wykonać funkcje do obsługi przetwornika A/C która po wciśnięciu przycisku wykonuje pomiary do czas aż nie wciśnęto innego przycisku. Poniżej zamieszczam kod który nie realizuje moich założeń. W poniższym kodzie nie wpisałem realizacji przetwarzania A/C zastąpiłem to migającą diodą. Wykorzystałem do tego funkcję do-while. Proszę o jakieś sugestie...
Witam, potrzebuję pomocy z kodem do Digisparka. Wszystko ładnie pięknie śmiga ale chciałbym rozpoznawać prócz ilości przyciśnięć również długość (czas) przyciśnięcia np. do 0.5s krótkie przyciśniecie a przytrzymanie powyżej 1s jako długie przyciśnięcie. Wszystkie próby zakończyły się fiaskiem i postanowiłem poprosić o pomoc :) Poniżej kod z nieudaną...
Przyciski między pinami PD2, PD3 a ziemią. Według mnie przerwanie powinno następować tylko przy naciskaniu klawisza. Jednak wyzwala ono się również w znacznej części "puszczeń". DDRD = 0x00; PORTD = 0xFF; MCUCR = _BV(ISC01)|_BV(ISC11); Co może być przyczyną, co zrobić żeby tak się nie działo? Narysować schemat? Z góry dziękuję za wskazanie...
Witam, pytanie brzy bardzo amatorsko a jest stosunkowo trudnym zagadnieniem do poprawnej jego realizacji. W różnych realizowanych przeze mnie projektach nie było potrzeby do sprawdzania stanów klawiszy z dość dużą dokładnością jednak teraz nadszedł ten moment i prawdę mówiąc mam trudny orzech do zgryzienia bo nie mogę sobie z nim w prosty sposób poradzić....
Pomijając już opóźnienia w obsłudze przerwania i użycie przestarzałej funkcji obsługi przerwania (SIGNAL),ta linijka while(!(PIND & 0x04)) {} powoduje zawieszenie się programu w obsłudze przerwania, kiedy na PIND4 pojawi się logiczne 0. Ja napisałbym to w ten sposób: ISR (INT0_vect){ _delay_ms(10); if(!(PIND...
Piotrek1970 - całkowicie się z tobą zgadzam jeśli chodzi o wartość developerską Arduino. Ja miałem na myśli, że w miarę proste konstrukcje, przy odrobinie doświadczenia, można a nawet warto zrobić "od strzału", z dedykowanymi rozwiązaniami. Początkującym jak najbardziej polecam rozpocząć z gotowym hardware. Hanslik - jeśli wolno mi zaproponować, wejdź...
A wg mnie lepiej sterowanie pwm( jeśli dobrze zrozumiałem bo być może to sterownie diodami to tylko włącz i wyłącz to moja porada nie spełni oczekiwań) dać na przerwaniu np od timer0 a przyciski sprawdzać w pętli w ten sposób sprawdzanie przycisku nie wpłynie na pwm , minusem może być "mułowate" trochę sprawdzanie stanu przycisku ale wszystko zależy...
Według mnie autor opisał jasno co chce osiągnąć, mianowicie po przyciśnięciu przycisku włącza się któraś sekwencja, a po przyciśnięciu innego przycisku program "przełącza się" na obsługę innej sekwencji. Kolega nic nie pisał o przytrzymaniu przycisku więc najbardziej prawdopodobną opcją jest że chodziło mu o zwykłe "kliknięcie"(jeżeli się mylę niech...
wobec twojego magicznego słowa: tak, wiem co to jest :D i wiem jak się tym czymś mniej więcej posługiwać :D szczegóły - projekt będzie mniej więcej wyglądał tak - http://www.instructables.com/id/LED-Cube... tylko pozmieniam tam z pół rzeczy :D Jest tam, plik źródłowy, w którym to są PRZERWANIA :D A co do tego ogólnego zarysowania tematu...
No więc kombinowałem już wczesniej z tymi różnymi opóźnieniami. Wstawiałem je w kilka miejsc na wszelki wypadek i zmieniałem na bardzo duże. Niestety poległem ;) Często klawisze powtarzały się same, nawet bez wciskania przycisku :/ Nie wiem do tej pory co to było. Ale rozwiązałem już problem. Przynajmniej na razie wszystko działa jak powinno. ;) Zmieniłem...
Coś się w tym algorytmie nie trzyma kupy. Wciśnięcie przycisku zajmuje człowiekowi czas rzędu 1-10 sekundy (ok, przy trzymaniu palca na guziku daje się zejść do 1/40). Przez 1/40 sekundy przy 8 MHz próbkowaniu można zarejestrować 200 tysięcy próbek, a bufor mamy na kilka tysięcy. No to co my tu udajemy? Jakie użyteczne dane można złapać w parę kB pamięci...
Witam, Mam napisaną obsługę panela dotykowego, który w przerwaniu zgłasza koordynaty X i Y oraz obsługę wyświetlania różnych elementów graficznego interfejsu użytkownika. Zastanawiam się w jaki "mądry" sposób powiązać ze sobą te 2 tematy inny niż sprawdzanie w jakiejś funkcji czy np. koordynaty znajdują sie w zakresie wyświetlonego przycisku na ekranie...
? nie wiem co to za koslawy kod. Po 1, nie uzywa sie goto. 2, Ja na twoim miejscu bym uzyl timera 2 w trybie asynchronicznym, z zegarkowym oscylatorem. Ustawil przerwanie z timera na 1 sekunde. Pozniej w przerwaniu dodal bym zliczanie do 30 sekund. Gdy nie ma 30 Sekund osiagnietych flaga=0, gdy jest powyzej 30 flaga=1. Przycisk 1 by startowal odliczanie...
Witam, Zacząłem pisać program na atmege8 w bascomie, do sterowania preampem tda8425 przez enkoder, wyświetlając to wszystko na LCD póki co 8x2. Program jest w fazie powstawania, ale mam kilka pytań co sądzicie o moich rozwiązaniach i czy tak w ogóle może być? Enkoder obsługuję przez INT0 i INT1, zbocze opadające. Jeśli wejdzie w procedurę przerwania...
Odczyt stanu przycisku powinieneś realizować kilkukrotnie w przerwaniu, aby wyeliminować drgania styków. Twoim problemem jest fakt iż podczas zdarzenia wywołanego przyciśnięciem przycisku, cały czas sprawdzasz jego stan i znowu wywołujesz akcję. Skorzystanie z dobrodziejstw przerwań rozwiąże problem.
Jaka jest aktualna częstotliwość zegara? Jak często uruchamiane jest przerwanie? Ile trwa naciśnięcie przycisku? Musisz zmieniać opcje tylko kiedy przycisk został naciśnięty, nie przytrzymany. Dodaj do przerwania warunek sprawdzający poprzedni stan przycisku. Pomyśl nad wyeliminowaniem delay.
Powyżej podałem przykład co powinno się znajdować w obsłudze przerwania od timera. Natomiast same przyciski możesz sprawdzać w pętli while() jeżeli nie chcesz angażować do tego osobnego przerwania.
Błędów całe mnóstwo. 1. Nie robi się przerwań od przycisków. Zrób przerwanie timera np. 100 Hz, w nim sprawdzaj stany przycisków. 2. __attribute__ ((interrupt)) jest zbędne. 3. Znacznik przerwania kasuje się na początku, nie na końcu obsługi przerwania. 4. Do zmiany stanu linii portów służą rejestry BSRR- jeden zapis zmienia stany dowolnie wybranych...
1. Nie wykluczyles drgan na przycisku s1 2. Zebys wykonac to co chcesz zrobic bedzie ci potrzebne przerwanie. 3. Dziwie sie, ze sprawnie dziala ci ten kod (chyba, ze specjalnie robisz sprawdzanie przycisku w petli, zeby nie bylo przerwania i wykonal kod do konca, a pozniej sprawdzil czy przycisk jest wcisniety. W tym przypadku przepraszam)
Z każdym przyciskiem skojarz jedną zmienną, która będzie zawierała stan licznika timera, w chwili wykrycia jego naciśnięcia. W kolejnych przerwaniach overflow sprawdzasz: 1. czy przycisk jest ciągle naciśnięty, 2. jeśli 1. jest prawdą to czy różnica pomiędzy licznikiem timera a wartością zapamiętaną w skojarzonej z przyciskiem zmiennej jest większa...
AVE... Co do kodu, to nie wiem, bo jestem podchmielony lekko winem herbacianym... Program podziel na dwa kawałki: pętlę główną i przerwania. W pętli głównej za pomocą if-then sprawdzasz sobie jakieś tam flagi bitowe związane z przyciskami. I zachowujesz się adekwatnie, w sensie zmieniasz status zapalenia diod. W przerwaniu sprawdzasz po kolei dwie rzeczy:...
Dziękuję za propozycje :) Niestety nie do wykonania przeze mnie, z uwagi na poziom moich umiejętności programowania, jak zaznaczyłem na wstępie :) Kwestia drgań i zakłóceń nieistotna, tact switch dobrej jakości. Poproszę o kawałek kodu, pasujący do oryginalnego, sprawdzający przycisk w przerwaniu timera co np. 50 ms oraz dodający niewielkie opóźnienie...
Przycisk ma kondensator. Nie mam pojęcia jak miałbym sprawdzac przycisk bez przerwań w RTOSie?
Weź sobie załaduj do jakiegoś podprogramu fragment w którym sprawdzane są przyciski, jednocześnie w tym podprogramie odliczaj opóźnienie. (np zrób pętle która będzie miała waitms 1 - ilość wykonań pętli ilość opóźnienia ale równocześnie sprawdzany port przycisku) Zamiast rozkaz waitms wywołuj ten podprogram. To tak najprościej i bez przerwań.
Jak wyrzucisz z przerwania obsługę przycisków- to będzie krótkie. Jak masz przerwanie co 10ms to daj flaga++ kasowanie w głównej pętli co 3-4 przerwania- 30-40ms. w linkach -nie pamiętam. Ale niektórzy zamiast napisać "wykorzystując przerwanie" piszą "w przerwaniu" Ja napisałem tak: "Wystarczy w przerwaniu ustawiać jeszcze jakąś flagę. Potem w głównej...
Jeżeli ten program nic nie robi poza sterowaniem silnikami poprzez timery, to po co sprawdzać przycisk w przerwaniu? Sprawdzaj go po prostu w głównej pętli main i tyle. W zależności czy wciśnięty, czy nie, ustawiaj odpowiednie klucze, zmieniaj ustawienia timerów itp.
Dobry początek. Czy dioda załączona czujnikiem nigdy się nie wyłączy sama? Teraz wyobrać sobie, że w przerwaniu timera, np. 100 razy na sekundę, sprawdzasz stan czujnika i przycisku i odpowiednio zapalasz/gasisz diodę i zmieniasz stan automatu. Proste?
Witam. Wydaje mi się że w tym przypadku to nie pomoże. Przewód pewnie robi za antenę i sciąga jakieś śmieci. Kolega Tomson pewnie impuls na INT0 traktuje jako wciśnięcie przycisku. W takim przypadku każdy impuls (rzędu pewnie nawet ns) wywoła przerwanie. Cała obsługa powinna wyglądać trochę inaczej. Otóż nawet krótkie wciśnięcie przycisku zwiera jego...
Metoda jest taka ze w momencie nadejscia przerwania od przycisku odpalasz timer, ktory odmierza kilka milisekund, po czym sprawdza czy przycisk nadal jest wcisniety. Jesli tak, to znaczy ze impuls pochodzi od faktycznego nacisniecia a nie od drgania po nacisnieciu. Dla pewnosci mozna zamiast 2 dokonywac 3 sprawdzen. Czas timera musisz dobrac doswiadczalnie.
W przerwaniach masz _delay()- to wielki błąd. A _delay() w pętli- to duzy błąd. Masz Timer i masz go ustawić na przerwanie co 20ms. W tym przerwaniu ustawiasz sobie tyle flag ile trzeba i je zwiększasz. W głównej petli sprawdzasz czy flaga1==1, zerujesz i wykonujesz jakiś warunek. Potem sprawdzasz czy flaga2==5, zerujesz i robisz to co ma być robione...
to z tym ne to układ znacząco nadmiarowy, w wypadku uC układ zamykałby się w 2kondensatorach, rezystorze, attiny13 i ew stabilizatorze(i 2kondensatorach do niego). Najbardziej łopatologicznie to sprawdzać stan przycisku w pętli do czasu przerwania z licznika który zerujesz / uruchamiasz w czasie pierwszego wykrycia zmiany stanu i zmienić stan wyjścia...
Przejrzyj setkę wątków na forum poświęconych temu, dlaczego do przycisków nie uyżwa się przerwań portów, a potem zrób to w przerwaniu timera, np. tak, jak w tym artykule: http://ep.com.pl/files/10324.pdf Samo programowanie prtzerwania też masz ciut bez sensu - najpierw uruchamiasz przerwanie, potem programujesz linię portu, która ma je zgłaszać. Zanim...
Błędy są wszędzie. Pierwszy - to użycie przerwania zmiany portu zamiast sprawdzania stanu przycisków w przerwaniu timera. Drugi - to użycie delay w przerwaniu. Trzeci - to źle napisane if else w przerwaniu timera. Czwarty - użycie własnego bool zamiast standardowego _Bool. To tak na początek.
Nic sobie nie robi z naciskania guzika bo właśnie obsługuje przerwanie. Ja bym to zrobił w ten sposób. Przerwanie od czujki uruchamia jakiś timer i kończy się obsługa przerwania. Timer odmierza czas i po jego upłynięciu sprawdza jakąś zmienną i w zależności od niej uruchamia alarm bądź nie. I tak jeśli przed przyjściem przerwania z tego timera naciśnięty...
W celu eliminacji drgań styków należy użyć przerwania licznika, by odczytywać stan przycisku tylko raz na około 10 ms . Nie używamy funkcji Debounce i delay_ms ! Czy przycisk został naciśnięty sprawdzamy w zmiennej globalnej dostępnej w programie głównym.
Proponuję zrezygnować z obsługi klawiszy poprzez INTX, gdyż jest przeznaczone dla stabilnych i krytycznych czasowo sygnałów, a przyciśnięcie przycisku to ruletka impulsów, zwłaszcza, gdy już jest sporo czasu używany. Klawisze najlepiej sprawdzać cyklicznie, np. w procedurze obsługi przerwania, przypisując mu jakiś jednobajtowy kod i tworząc ogólny dekrementowany...
Mam takie zadanie. Włączać / wyłączać miganie diody. (długi czas migania) Zadanie polega na dostrzeżeniu różnicy między przerwaniem z przycisku a sprawdzaniem w pętli stanu przycisku. Różnica ma polegać na tym, że z podczas przerwania miganie zostaje natychmiast wyłączone, a podczas sprawdzania stanu przycisku w pętli występuje opóźnienie (aż pętla...
Przyciski sprawdzaj w przerwaniu timera i nie ma znaczenia czy reagujesz na niski czy wysoki stan. Pull-upy czy pull-downy musisz oczywiście dać. Może z jakimś dodatkowym kondensatorem żeby zakłócenia zminimalizować. Długie kable mogą być problemem.
Obu timerów używam do generowania PWM, można je wykorzystać jeszcze do opóźnień ? Albo lepiej, do generowania przerwań, w których sprawdzał bym stan przycisku (zamiast przerwania INT0). A na tą książkę już odkładam kase ;) Dzięki wszystkim za pomoc.
Jak masz jakieś pojęcie o programowaniu to nie powinno być problemu. Najlepiej zrobić to na timerze i przerwaniach. Sam program byłby dosyć prosty w działaniu. Ja zrobiłbym tak. Przerwanie z timera przychodzi jakieś 100 000 razy na sekundę. Robisz 1 zmienną na liczenie przerwań i porównujesz z 2 zmienną która określa jasność świecenia. Przez wszystkie...
2k dla rezystora diody, to 5x-10x za dużo. Używaj nazw pinów PD5, zamiast DDD5 czy PIND5. A może jednak błędny opis na schemacie producenta, polega na tym, iż prawidłowy jest opis, a podłączenia nie. Czyli przeciwnie niż się spodziewasz. Sprawdzałeś to? Masz multimetr? Zmierz napięcie na wejście INT0 przy naciśniętym i puszczonym przycisku.
W ogóle zabierasz się za to źle - przerwania od przełączników to zły pomysł - poczytaj o drganiach styków i zobacz ile przerwań może wygenerować jedno przełączenie. Stan przycisków sprawdzaj cyklicznie w przerwaniu timera (są biblioteki Timer...).
Klawiszy (poza wyjątkowymi sytuacjami typu wybudzanie uC) nie robi się na przerwaniach INT. Delaye w przerwaniu to nieporozumienie. Twoje przerwanie realizuje się tylko po wciśnięciu przycisku, więc trudno by było, aby zwróciło informację o jego zwolnieniu. Zrób przerwanie zegarowe co 25-50ms i cyklicznie sprawdzaj stan klawiatury. Opanujesz w ten sposób...
Tak to jest, kiedy nie sprawdza się stanu przycisków w przerwaniu timera...
Odpowiedź standardowa; zacznij od przerwania timera, zgłaszanego z częstotliwością np, 50 Hz. W przerwaniu sprawdzaj przyciski, odliczaj czas i zaświecaj diody.
Przycisk powiadasz. Wg. mnie przyciski najlepiej obsługiwać w polling-u, załatwiając od razu kwestię eliminacji odbić styków. W tym, konkretnym przypadku, może w przerwaniu TIMER1 najpierw wykonywać rzeczy krytyczne czasowo, a potem sprawdzać przycisk?
2. Takie ogólne pytanie gdzie w kodzie należy umieszczać obsługę przycisków, pomiar czasu, pomiar temperatury, obliczenia (przerwania czy w pętli while(1) ) czy może jeszcze gdzieś indziej ? Z jednej strony w wielu postach jest napisane aby w przerwaniach było jak najmniej instrukcji z drugiej strony gdzieś to wszystko trzeba przetworzyć. W przerwaniu...
Zakładam, że przyciski są podłączone do pinów i zdefiniowane jako KLIK_MENU itd. Nie sprawdzaj w pętli głównej stanu przycisków tylko wrzuć sprawdzanie do przerwania od któregoś timera z ustawianiem wartości jakiejś flagi a w pętli głównej wykorzystaj funkcję switch - case. Poza tym nie widzę inicjacji portów.
obsługa przycisku przerwaniu sprawdzanie stanu przycisku opóźnienie przerwaniu
zasilacz rentgen gadżety kolekcja montaż nóżek telewizora
radio makita przecinarka plazmowa
Czy helikopter nocą miga na czerwono? Samsung HT-E6579W - Informacje i Problemy