(...) oznacza to, że ten program w ' ż eczywistych warunkach' działał by poprawnie? (...) Tego nigdy się nie dowiesz nie budując układu fizycznie :) Program to jedno, a praca w warunkach rzeczywistych to całkiem inna sprawa ;) Ale już jakaś część sukcesu niewątpliwie jest ;) Ja używam WinAVR-20070525 i tam już delay.h siedzi w util , a to tylko jedna...
W znacznej mierze zależy to od obciążenia fototranzystora, które z kolei decyduje o szybkości działania całego transoptora. Wszystko znajdziesz w pdf-ie.
Możesz zamienić waity na pętle, w których będziesz sprawdzał stan przycisków i odpowiednio reagował.
Sprawdzać stany obu przycisków. Przy wykryciu wciśnięcia przycisku 1 ustawiać Active=1, przy wykryciu wciśnięcia przycisku 2 ustawiać Active=0. Kiedy Active jest 1, wywoływać w pętli tę funkcję, którą zamieściłeś; kiedy 0, nie wywoływać. Można zrobić na jeden przycisk, ale to wymaga bardziej złożonej akcji przy sprawdzaniu - zapamiętywania, jaki był...
Wydaje mi się źe coś jest nie tak ze sprawdzaniem stanu przycisku- nie bardzo mogę to zrozumieć. Klasycznie to robi się tak: if(przycisk==0) delay() if(przycisk==0)//dalej 0 przycisk=1 //naprawdę wciśnięty Można też inkremantować jakąś zmienną aby sprawdzić to 3 czy więcej razy. A lepszym sposobem jest do liczenia opóźnień wykorzystać Timer. I tak masz...
Wszystko z powodu udziwnień które stosujesz. A wystarczą definicje dla LEDów ON i OFF. Oraz sprawdzanie stanu przycisku. [syntax=c]if(PIND & KEY_UP1) LED1_ON; else LED1_OFF;[/syntax] Eliminacja drgań styków jest niepotrzebna skoro ma to być układ kombinacyjny, a do tego niczym nie sterujący a jedynie zapalający LEDy.
AVE... To bardzo proste: 1. Programujesz mikrokontroler by pracował jako urządzenie USB HID. 2. Tworzysz deskryptor HID klawiatury lub kontrolera do gier i dołączasz do programu mikrokontrolera. 3. Tworzysz fragment odpowiedzialny za sprawdzanie stanu przycisku lub przycisków (jeśli robisz jeden, to czemu nie od razu 16-256, może się przydadzą kiedyś)...
Na początku nauki programowania warto rozpisać krok po kroku problem oraz algorytm rozwiązania. Późniejsze przełożenie tego na kod jest już sprawą prostszą. Problem (o ile dobrze zrozumiałem) przedstawia się następująco: - wykrycie momentu wciśnięcia przycisku, - wykonanie jednorazowej akcji (włącz led), - odczekanie określonego czasu, - wykonanie jednorazowej...
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...
Spróbuj zrobić tak Co4ms: 'procedura obsługi przerwania od Timera T/C0 wykonywana co 4ms Timer0 = 6 'załaduj do Timera0, żeby zliczył 250 (=256-6) impulsów Incr Licznik If Licznik = 6 Then 'zmienna Licznik liczy do 6 aby Licznik = 0 'sprawdzanie stanu przycisku następowało If Pind.0 = 0 Then 'co ok.24ms If Pomoc = 1 Then 'jeśli zmienna Pomoc...
Dwie ważne rzeczy! Pierwsza to pamiętanie o napięciach. Jeśli teraz mierzysz na pinach 12V i podepniesz to na wejście cyfrowe Arduino (5V), to je spalisz. Druga rzecz to konieczność stosowania mechanizmu debounce w kodzie do sprawdzania stanu przycisków :)
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?
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...
Robisz to tak - albo pull-upy 10k do 5V i przyciski między linie portu LPT a masę, wtedy sprawdzasz, czy pojawił się stan 1, albo pull-downy 10k do masy i przyciski między linie portu LPT a 5V (możesz też dodać szeregowo z każdym przyciskiem rezystor 680R - 1k), wtedy sprawdzasz, czy pojawił się stan 0.
Witam, warto sprawdzić częstotliwość odświeżania panelu HMI, gdyż przy jej malej wartości, sprawdzanie stanu przycisku odbywa się np. co kilka sekund a nie w czasie rzeczywistym
Da się zrobić. Użyj przerwania timera do sprawdzania stanu przycisku i modyfikacji wypełnienia PWM dla serwa.
Tak. Dzięki temu, tam gdzie było delay(), teraz mikrokontroler może wykonywać inne procesy - na przykład sprawdzać stan przycisku.
W załączniku poprawiona wersja programu - wystarczy zmienić kolejność sprawdzania stanu przycisków. Teraz powinno już być ok
w pierwszym warunku powinno sprawdzać stan przycisku oraz flagi, inaczej będzie wysyłać cały czas komunikat o załączeniu.
Wiem co to jest millis tu raczej nie będzie problemu ale jak sprawdzać stan przycisku podpowie ktoś jak się za to zabrać
Ja bym to zrobił tak: - wyłączam zasilanie na wyświetlacz np. pierwszy z lewej - RB5 wyjście w stanie wysokim - RB0 jako wejście - sprawdzam stan RB0 - czy wciśnięty przycisk - przełączam spowrotem na sterowanie wyświetlaczem - wyłączam zasilanie na kolejny wyświetlacz... itd...
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.
gdyby zatrudnić przerwanie do sprawdzania stanu przycisku to odpadłby problem sprawdzania przycisku w każdym obrocie pętli :-)
dla Arduino potrzebuje podłączyć i zaprogramować 3 servo na przycisk w taki sposób, że servo1 jest ustawione na 90* i na naciśnięcie porusza się do 0* i wraca do pozycji startowej, dwa pozostałe servo na ten sam przycisk poruszają się od 0* do 90* i z powrotem. Zacznijmy od podłączenia serwomechanizmów i przycisku do Twojego Arduino. Główne punkty,...
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...
Program można zrobić za pomocą wait lub delay itp. Skoro mamy załączyć lub wyłączyć to i tak nie ma się co bić o marne 5s. Przed pętlą główną po 5 s oczekiwania procka sprawdzasz stan przycisku. Jeśli wciśnięty to na odpowiedniej końcówce wystawiasz odpowiedni sygnał do włączenia i podtrzymania zasilania. Jeśli nie to każesz prockowi wyłączyć zasilanie....
Ale ja sprawdzam stan przycisków i mimo to występuje takie zjawisko. if (P1IFG & 0x08){
Użyj przerwania timera do migania diodą, a najlepiej do wszystkiego (czyli również do sprawdzania stanu przycisków).
To są pozostałości po testach - wg mnie już niepotrzebne, ponieważ w funkcji encoder_check() (wywoływanej w loop) sprawdzam stan przycisku (z użyciem biblioteki debouncera - debouncer.update()), i w zależności od stanu albo włączam silnik (gdy menu_id==1) albo wyłączam (gdy menu_id==99).
Nie znam kompletnie arduino, więc tylko sugeruje rozwiązanie jakie bym zrobił w C. Być może komenda do badania klawisza już ma w sobie debounce (antydrgamiowy filtr) Oczekiwanie robisz tak, że sprawdzasz stan przycisku i jeśli wciśnięty to program oczekuje, lub przeskakuje fragment odpowiedzialny za zliczanie
Korzystam z samego modułu ESP na autorskim PCB którego już nie zmienie. Przyciski celowo podłączyłem do GPIO0 GPIO2 żeby trzymając je dwa i startując układ wchodził w download mode. Wygląda na to że będę musiał zrobić fuszerkę tj. porzucić nie działające przerwania i taskiem co 50ms sprawdzać stany przycisków
to nie miało by sensu tak jak sprawdzanie stanu przycisków z taką częstotliwością. Skupiasz się nie na tym problemie wiec zamykam temat. Pozdrawiam
"pod koniec obsługi przerwania wyzerowć jego flagę". Po czym następuje proces zdejmowania ze stosu. Ileś cykli trwa. W tym czasie teoretycznie może nastąpić jeszcze jedno ustawienie flagi. Teoretycznie- bo czekanie na wygaszenie drgań 2x80ms to jest wieczność. Dlatego sądzę że używanie przerwań zewnętrznych do sprawdzania stanu przycisku tylko komplikuje...
Eh Ja powtórzę TIMERY, albo chociaż podziel te oczekiwania na 50ms odcinki w pętli for w której będziesz sprawdzał stan przycisków.
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...
1. Wyrzuć R13. - zupełnie nie wiadomo czego służy. 2. Naciśnięcie przycisku zasilania przy włączonym uC spowoduje zwarcie jego wyjścia do masy. Użyj innego wejścia uC do sprawdzania stanu przycisku, 3. R11 może być sporo większy.
Oczywiście że bez delay. Spróbuj tak jak napisałem. Pewnie nie jest to optymalne, ale myślę, że dobry początek. Zacznij od obsługi wejścia. Sprawdzasz stan przycisków (czujek) cyklicznie, nie w przerwaniu, i ustawiasz odpowiednie zdarzenie, np PRZYCISK_UP, PRZYCISK_DOWN.
Musisz utworzyć dodatkowy licznik do zliczania czasu naciśnięcia przycisku. W każdym cyklu zegara sprawdzasz stan przycisku, jeżeli jest nacisnięty to zwiększasz licznik, jeżeli nie to zerujesz licznik. Potem sprawdzasz czy licznik osiągnął założona wartość , jeżeli tak to zerujesz godziny. W zależności czy start odliczania ma nastąpić od razu czy dopiero...
No jak "za ciasno" z timerami to można zrobić PWM programowy. Wtedy jeden timer do teoretycznie dowolnej ilości PWM. I tym samym timerem sprawdzasz stan przycisku. Zaczyna się na str.395 książki.
Niedawno zbudowałem timerek w którym stan przycisków sprawdzam tak : callsprawdz ;sprawdzaj stan przyciskow -------------- ------------- ------------- sprawdzcallspr_s1 callspr_s2 return ;---------------------- spr_s1btfscPORTB,4 ; wcisniety ? return ; nie btfscPORTB,4 ; puszczony goto$-1 ; nie -------------- ; tak, puszczony ------------- -------------...
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...
Prawie wszystko jest nie tak - oczekiwanie w przerwaniu, brak eliminacji drgań. To nie tak się robi - potrzebujesz przerwania timera zgłaszanego ze stałą częstotliwością, np. 100 Hz, i w nim robisz wszystko - sprawdzasz stan przycisku i odmierzasz czasy impulsów.
Generalnie postaraj się tak napisać program, żeby uniknąć instrukcji "wait" i "waitms". Program w tym czasie nie robi kompletnie nic, a już tym bardziej nie sprawdza stanów przycisków. Zamiast Wait można użyć pętli które się wykonują wielokrotnie. Zdefiniuj X jako word, wykonaj pętlę for x = 1 to 50000 - w pętli umieść sprawdzanie przycisków i masz...
W książce do której jest link w mojej stopce są darmowe przykłądy do ściągnięcia. Masz tam m.in. implementację takiego sprawdzania przycisków. Ale ok, można to zrobić też na timerze. Więc po kolei - zainicjowałeś timer, teraz w procedurze obsługi jego przerwania sprawdzasz stan przycisków. Dzięki temu ich stan będzie okresowo sprawdzany. Potrzebujesz...
AVE... Dodać przycisk na wejściu i sprawdzać stan rozładowania akumulatora przez jego wciśnięcie. To lepsza opcja i nawet większy pobór prądu komparatora i diody LED nie będzie problemem...
To korzystając z okazji jeszcze dopytam. Skok daleki, czyli RJMP tak? I jeszcze uściślę. Po uruchomieniu mikrokontrolera jako pierwszą rzecz w pętli main sprawdzam stan przycisku. Jeżeli jest wciśnięty to skaczę do bootloadera. Jeżeli nie to idę dalej. Czy to jest bezpieczne? Po prostu nie bardzo rozumiem jak ma wyglądać skok poprzez reset?
Kolego diodak1992, bateria jest już wyeksploatowana. Przy nadawaniu jest ona obciążona i radio wykrywa znaczny spadek napięcia co jest sygnalizowane pikaniem. Jak sprawdzasz stan baterii przyciskiem na odbiorze to jest ona minimalnie obciążona i dioda pokazuje , że bateria jest ok. Wszystko ze strony radia jest jak najbardziej ok - a bateria jest do...
Witam! Lepiej co jakiś czas w przerwaniu zegara sprawdzać stan przycisków, nawet jeśli zegar jest potrzebny do czegoś innego można rozbudować jego podprogram. Popieram, też tak robię. Sprawdzam stan klawisza po 20ms od wykrycia wcisnięcia w celu eliminacji drgań styków. Było to opisane kiedyś w EP.
Zmieniłem obsługę przycisków z generowania przerwań na sprawdzanie ich stanów w przerwaniu timera. Oczywiście wydaje mi się, że mogłem pomylić pojęcia priorytetu przerwań DMA, a priorytet DMA. Człowiek się uczy całe życie, a z ARM'em mam styczność dopiero od ponad miesiąca. Dodatkowo dodałem sprawdzanie stanów przycisków przed uzupełnianiem bufora do...
Witam, projektuję układ z mikrokontrolerem ATTINY414 zasilany bateryjnie. Jego zadaniem jest cykliczne, co 3 s, wykonywanie pomiaru temperatury i obliczanie średniej. Ponieważ jest zasilany bateryjnie, układ będzie normalnie uśpiony i tylko co 3 s Timer wybudzi uC, aby zmierzył temperaturę i dalej się uśpił. Teraz mam taki problem: do urządzenia chciałbym...
No dobra.... Rozumiem że muszę np. sprawdzać stan przycisku co kilkadziesiąt ms i jeżeli dwa kolejne sprawdzenia stanu są takie same uznam że klawisz jest wciśnięty a jeżeli wciśnięcie nie zostanie potwierdzone, uznam że klawisz jest puszczony... Hmmmmm tylko jak mam to zrobić??? I gdzie to w ogóle wstawić?
Czy Ty w ogóle wieszm jak działa program, który pokazałeś? W którym miejscu zaświecasz diodę, w którym ją gasisz? W którym miejscu sprawdzasz stan przycisku? Gdybyś to wiedział, moja wskazówka byłaby dla Ciebie oczywista. Jeśli nie wiesz, to czytaj program tak długo, aż go zrozumiesz. W najprostszym podejściu: zaświecaj diodę gdy wiesz, żeprzycisk jest...
A jak to miałoby działać? Dopisz sobie w miejscach, gdzie sprawdzasz stan przycisków komentarze dotyczące przycisków i staraj się przejść przez program na tej podstawie. Jak są podłączone przyciski? Czy masz rezystory podciągające na zewnątrz? Jeśli nie - to włącz wewnętrzne. Popatrz, co się dzieje przy wciśniętym przycisku dołączonym do PC1 i PC0 -...
Dzięki za wszelkie sugestie i nowe doświadczenia. Program ma dokonywać pomiaru rzędu pojedynczych sekund. Rozpoczęcie pomiaru w momencie pojawienia się stanu niskiego, zakończenie (zatrzaśnięcie licznika) rowniez na stan niski. Już jestem świadomy więc z przerwania od przecieku rezygnuję. Nie chciałbym rownież w pętli while cały czas sprawdzać stanu...
Opisałem to w uproszczeniu, bo jeśli pisze, iż odpalam timer to nie znaczy, że zanim timer nie odmierzy mi tych 30ms to nie sprawdzam stanu przycisku i tak dalej. Pisałem z telefonu, więc nie miałem możliwości wklejania kodu. Jeśli chcesz to oceniać, Twoja sprawa. Jak masz się poczuć lepiej to spoko, luz. A co do faktu, że przyciski same się nie wciskają...tak...
Już Ci ktoś tłumaczył w innym temacie, że _delay_ms(i) gdzie i się zmienia nie zadziała tak jak trzeba. Jak widać nauka poszła w las... W Twoim przypadku dzieją się tylko 2 rzeczy równolegle: 1) sterujesz silnikiem (z odpowiednim opóźnieniem między impulsami, od 4 do 1000 ms) 2) sprawdzasz stan przycisków (co 30 ms). Dlatego ustawiasz sobie timer na...
Co do odświeżania masz gotowy kawałek w moim drugim poście. Po co sprawdzanie stanu przycisku co 4 ms? Jak chcesz pomiar temperatury co 1s, to dorzucasz odpowiednio skonfigurowane przerwanie z timer1. Zczytywanie co 100ms masz przecież zrobione flagą chyba że nie działa. co do przyciska masz w moim pierwszym poście. Jeżeli coś jest nie zrozumiałe to...
Programowaniem bawię się co prawda od niedawna, ale tak sobie myślę, że nie bez powodu w konsolach 8 bitowych były 4 przyciski i krzyżak. Dzięki temu w 1 przesłanym bajcie od razu przesyłasz stan wszystkich przycisków. No a jak jest pilot "master" to w 2 - jest jeszcze start/menu. Oczywiście w Arduino podłączasz 8 przycisków do różnych pinów - najprościej....
Musisz podłączyć przycisk do wejścia przerwania zewnętrznego (INT0, lub INT1). Przerwanie musi być ustawione na wyzwalanie poziomem. Wyzwalanie zboczem nie działą w trybie power-down. Inne rozwiązanie to uruchomienie watchdoga, który co pewnien czas będzie resetował uC, a ten zaraz po resecie będzie sprawdzał stan przycisku i jeżeli przycisk nie będzie...
Działać na baterii ma jak najdłużej - myślę że miesiąc czasu mnie zadowoli ale im więcej tym lepiej. Procek - prawdopodobnie ATmega 88V w wersji SMD. Najwięcej prądu będzie zużywało pewnie wyświetlanie wyników obliczeń na dwóch, siedmio segmentowych wyświetlaczach led (wyświetlanie wywoływane przyciskiem). Drugą kwestią jest sprawdzanie stanu przycisku...
Unsigned char to jeden bajt zaś int nie może być mniejszy niż 2 bajty. Opóźnienie 100ms w warunku eliminuje drgania styków. Dla zabezpieczenia można oczywiście dodać flagę a następnie sprawdzać jej stan w momencie sprawdzania warunku.
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...
Toż to najgorsza możliwa rzecz - opóźnienie w przerwaniu! To zbrodnia dla programu! Jak się to robi profesjonalnie? Np. tak: W każdym przerwaniu sprawdzam stan przycisku, jeśli jest wciśnięty to liczę liczbę przerwań podczas których jest wciśnięty, jeśli jest puszczony to tę liczbę zeruję. Jeśli liczba przekroczy zadaną ilość (~czas drgań) to wykonuję...
A sprawdzałeś przyciski jaką mają rezystancję w trakcie spoczynku i wciśnięcia? W jakim stanie kondensatory w płycie cyfrowej?
Podglądając Kolegi program napisałem swoją procedurę która szuka plików tekstowych (dowolną liczbę) i wybiera jeden z nich do otwarcia. Ja sprawdzam stan przycisków w osobnej procedurze w pętli dopóki nie zostanie wciśnięty przycisk. Następnie również ustawiam odpowiednią zmienną. Potrzebowałem to ujednolicić żeby ciągle nie pisać odczytu w innych...
Ciężka sprawa, tym bardziej, że prawie wszystko zalezy od schematu. Przez przełącznik powinien cały czas płynąć pewien niewielki prąd, żeby można było sprawdzać jego stan. Co jakiś czas prąd będzie musiał być zwiększony jak rozumiem (impuls czyszczący). Konwerter poziomów musi być więc na tyle sprytnie zrobiony, żeby te 20mA mogło przejść od 12V przez...
Witam Pierwsze co mi wpadło w oko, wywal z funkcji sprawdzanie stanu przycisków. Po to właśnie masz debounce . Druga sprawa, zrob sobie zminne które tylko będą czytane z pamięci eeprom przy starcie programu , poczytaj helpa a załapiesz o jaką definicję zmiennch chodzi. Następnie pracujesz sobie na innch zmiennych, gdy zajdzie potrzeba zapisania czegos...
Zależy od programu. Jeżeli np. sprawdzasz stan przycisku na starcie a późnej program wchodzi w while do można w ogolę nie sprawdzać. Natomiast jeżeli układ ma działać szybko i np. naciśnięcie przycisku wywołuje przerwanie to trzeba dać sprzętową. Ja stosuje if(PINA&(1<<PA0)... { ... while(PINA&(1<<PA0)...
wader_669 dobrze Ci radził. Powinieneś po opóźnieniu ponownie sprawdzać stan przycisku. Chodzi o eliminację drgań styku. Ponowne sprawdzenie po chwili czasu upewnia Cię, że przycisk jest wciśnięty zatem If S3 = 0 And A = 0 Then Waitms 50 If S3=0 Then ...
Najprawdopodobniej zanim kondensator się naładuje po włączeniu podciągania to sprawdzasz stan i otrzymujesz stan niski.
Makro LED_bb_B odnosi się do rejestru ODR który pozwala na zmianę stanu pinu. Ty natomiast musisz skorzystać z rejestru IDR który odwzorowuje rzeczywisty stan wyprowadzenia.
Przerwania to nic innego jak wywoływanie konkretnej funkcji, gdy wystąpi określone zdarzenie (np. przepełnienie licznika, odebranie danych z UARTA, zmiana poziomu na pinie INT0) Polecam zapoznać się z datasheetem od uC, którego używasz. Tam znajdziesz informacje o przerwaniach, m.in jakie przerwania są dostępne, jakie rejestry odpowiadają za odblokowanie...
Takiej odpowiedzi też się spodziewałem :D Czyli sprawdzasz stan przycisków 1000 razy na sekundę? Ciekawe co z zakłóceniami. Nimi też się nie przejmujesz bo przecież użytkownik też nie będzie na siłę wprowadzał zakłóceń żeby spowodować błąd, no nie? Rozumiem też że projekt jest zamknięty i wartości elementów są tajne. Jeżeli nie są tajne, to tylko nie...
Witam. Piszę właśnie program na Atmegę8 i jestem zmuszony zoptymalizować kod do wymaganych 4kb kodu (dla wersji Demo). Chciałbym skorzystać z wstawek asemblerowych do sprawdzania stanu przycisku. Do tej pory wykorzystywałem Config debounce, ale jest on zbyt pamięciożerny. Próbowałem z: $asm sbis pinb, 0 $end Asm Ale niestety nie spełnia on moich oczekiwań....
Przycisków nie wolno podłączać bezpośrednio do sygnału zegarowego przerzutników! Takie użycie to proszenie się o kłopoty. Powinieneś użyć tego sygnału jako zwykłego wejścia kombinacyjnego - czyli taktowanie rejestrów za pomocą sygnału 'zegar' i sprawdzanie stanu przycisków. Poza tym masz błąd w procesie - powinno być np. tak: if bcd >= 9 then bcd...
Nie może się zmieniać - kod wykonuje się raz i tylko raz przy rozruchu sprawdza stany przycisków. Zrób sprawdzanie przycisków w pętli. Dodatkowo znacznik, który poinformuje Cię, że przycisk był naciśnięty poprzednio, bo inaczej stan licznika będzie zmieniał się tak szybko, że nawet tego nie zauważysz. Poza tym, wypadałoby przepisać stan zmiennej a spowrotem...
Jedynym przerwaniem, jakiego potrzebujesz, jest przerwanie timera, tego samego, który generuje PWM. W obsłudze przerwania sprawdzasz stan przycisku, pamiętając przynajmniej jeden poprzedni stan w jakiejś zmiennej. Jeśli nastąpiła zmiana stanu - zmieniasz tryb pracy i ładujesz nowe wartości PWM. Coś z lekka podobnego masz tutaj: http://mikrokontrolery.blogspot.com/2011...
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...
Temat założyłem po tym, jak na innym forum zapytałem Cytat: ----------------------------------------... Zaciekawiło mnie to zdanie, bo jeżeli to prawda to w moim projekcie mogę spalić układ. Kiepski pomysł. Wiszące "w powietrzu" wejście cyfrowe ma stan nieokreślony - tzn. może się na nim pojawić zarówno LOW, jak i HIGH.....
Witam. Czy posiada ktoś jakieś materiały, e-booki dotyczące wykorzystania timerów i przerwań od nich, dla programowania w języku C? Chcę wykonać następującą rzecz: W chwili wciśnięcia przycisku podpiętego do jakiegoś tam portu uruchamiam timer0 (tryb 1), który po 10ms sie przepełnia i wywoływane jest przerwanie. Za każdym razem w przerwaniu, tj. co...
Kolego chrobek W programie zastosuj jedną pętle Do Loop i w niej umieść sprawdzanie przycisków,stycznika,komparatora,stanu przekażników.Uruchom programowy licznik i w pętli Do Loop wykorzystaj go do sprawdzania stanu przycisków i innych zewnętrznych urządzeń.Do podprogramów skacz tylko aby go wykonać (nie używaj Waitms a tym bardziej Wait 1 w tym czasie,...
Warto zacząć od uwzględnieniu sytuacji awaryjnych: 1. Co jeśli czujnik się odczepi, uszkodzi. Brak światła? 2. Co jeśli bateria pod wpływem wstrząsów chwilowo straci kontakt a mikrokontroler zasilanie. 3. Skoro to mikrokontroler, to może warto dodać stan baterii? Natomiast kolejne wciśnięcie switcha podczas ściecenia LED nie resetuje licznika czasu....
W takim przypadku masz wszystko ok. Podpowiem ci tylko że jako gotową klawiaturę możesz wydłubać coś ze starych telefonów stacjonarnych, można kupić naklejane klawiaturki membranowe lub metalowe wandaloodporne. Możesz też odczytać 8 przycisków za pomocą tylko 3 linii procesora. Układem np 74LS164 liniami DATA i CLK wysyłasz 1 stan wysoki kolejno na...
Mała poprawka... ten kod : do portb.0=1 'zalaczasz diode waitms 500 'czekasz portb.0=0 'gasisz diode loop spowoduje że ... dioda będzie świeciła się ciągle ;-) poprawnie będzie tak: do portb.0=1 'zalaczasz diode waitms 500 'czekasz portb.0=0 'gasisz diode waitms 500 loop Acha, do sprawdzania stanu przycisków polecam komendę "debounce" - programowo niweluje...
Podczas wciskania i puszczania klawisza występuje wielokrotne łączenie i rozwieranie przycisku, bo to element elektromechaniczny. Typowy czas takiego "bouncingu" to kilkanaście ms. Jeśli sprawdzasz stan wejść przycisków częściej to szybki mikrokontroler pojedyncze wciśniecie klawisza odczyta jako wielokrotne.
gaskoin- a eliminacja drgań styków sprzętowa to jak niby wydłuża czas życia przycisków? Bo ciekawy jestem. kaczor90- w ustawianiu rejestrów w ARM to Ci nie pomogę- strasznie to wszystko porąbane. Może kiedyś. Ale zwróć uwagę na to co napisał gaskoin. Sprawdzanie stanu przycisków za pomocą przerwania zewnętrznego jest takie sobie. Lepiej robić to za...
Dość trudno będzie to zorganizować. O ile możesz podłączyć równocześnie 2 myszki, obie będą przez system traktowane jednakowo. W normalny sposób ; tzn. używając zdarzeń OnMouseDown, będzie raczej ciężko określić która myszka została właśnie użyta i czy naciskałeś przycisk na myszce nr 1 czy nr 2. Rozsądnym rozwiązaniem jest użycie jednej myszki + jakaś...
1. Podprogram obsługi przerwania "Przerwanie" musi kończyć się instrukcją "Return" 2. Wciśnięcie przycisku z tego co widzę łapiesz przerwaniem zewnętrznym INT0, w takiej sytuacji równolegle z przyciskiem przydałby się kondensator rzędu 100nF lub większy (trzeba popróbować), inaczej będziesz miał trzaski i w efekcie wielokrotne pojawienie się przerwania...
Config Debounce = 30 Config Portd.1 = Output 'tx do vfd Config Portd.6 = Input 'enkoder Config Portd.7 = Input Set Portd.6 Set Portd.7 Config Portd.0 = Input 'przyciski po koleji : -v , +v , +/-a , wyświetlacz Config Portd.2 = Input Config Portd.3 = Input Config Portd.4 = Input Set Portd.0 Set Portd.2 Set Portd.3 Set Portd.4 Coś tutaj nie tak... Jeżeli...
Witam. Mam napisany program do obsługi silników krokowych. Chcę aby taki sterownik posiadał przycisk ON/Stand-by ponieważ będzie on wyposażony w podświetlane przyciski i LCD. Próbowałem przed pętlą główną (w której są badane stany wejść portów) zastosować komendę bitwait po której znalazła by się komenda ustawiająca stan wysoki na porcie, który steruje...
Witam. Czasami komórka pamięci o adresie 0 może zostać nadpisana przy rozbudowie programu, lepiej używaj pierwszego adresu o nr.1 do eepromu. W sprawdzaniu stanu przycisku dałeś wait2 (2s), to nie za długi czas?, standardowo aby wyeliminować drgania zestyków wystarczy czas 20-30 mS. Jeszcze jedna uwaga, pisząc bardziej rozbudowane programy unikaj polecenia...
Gdy już usuniesz wewnętrzną pętlę do..loop to zwróć uwagę, że stan przycisku będzie sprawdzany raz na 60s. Możesz zrobić sprawdzanie np. tak (co 1 sek.): dim x as byte ... do 'sprawdź przyciski if x=60 then x=0 toggle ... end if wait1 incr x loop end Albo wykorzystać timer lub przerwanie.
Dlatego napisałem że najprościej... "Ale tu pojawi się następny problem - przycisk trzeba będzie trzymać na końcu sekwencji efektu, bo dopiero po jej zakończeniu sprawdzany będzie stan przycisku." - możemy stan przycisku sprawdzać częściej i przerywać dany efekt który będzie w pętli, instrukcją break. A resztę proponuje podobnie jak autor powyższego...
Witam dzięki _jta_ za wskazówkę. Możesz coś więcej powiedzieć o możliwych problemach z zakłóceniami ? Obecnie wrzuciłem dodatkowe sprawdzanie stanu przycisku po czasie zobaczę czy pomoże. Obecnie kod wygląda tak [syntax=python] def light(input, output, modul, name): inputState = modul.digitalRead(input) if (inputState == MCP23S17.LEVEL_LOW): time.sleep(0.05) in...
Sprawdzasz stan wysoki, a piszesz, że zwierasz wejścia przyciskami do masy. Zamień "1" na "0". W aliasach zamień Portd na Pind.
Aby to zlikwidować skorzystaj i innej metody eliminacji drgań styków a najlepiej umieść obsługę przycisków w przerwaniu... ...timera, tu jest przystępnie wytłumaczone jak obchodzić się z timerami http://diycenter.acid19.linuxpl.com/read... Timery działają asynchronicznie w stosunku do głównej pętli programu, więc timer licząc czas...
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...
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.
Oczywiście, że pomieszałeś, bo pod PD3 jednocześnie masz podłączone sterowanie anodą wyświetlacza i przycisk - jak wciśniesz przycisk, to odpowiednia cyfra wyświetlacza będzie zawsze aktywna... Użyj Timer1 w trybie CTC do odmierzania 0.01s - przy F_CPU = 1MHz chcesz mieć przerwanie z f=100Hz czyli odliczasz do 10000-1. To będzie za mała częstotliwość...
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...
kontrola stanu przycisku sprawdzanie przycisku przerwaniu sprawdzanie stanu serwera
thunderbird konfiguracja oświetlenie kurnika astra tylne hamulce
głowica telewizyjna lampowa głowica telewizyjna
Częstotliwość pilota i radia FM w wieży Tetris MCD 543 Czy warto kupić wzmacniacz Technics SU-V450?