Myślę, że pierwsze podejście jest jak najbardziej poprawne. Chodzi o to by po pierwszym przerwaniu wystąpił jakiś czas nieczułości na kolejne przerwanie zewnętrzne. Może on być nawet znacznie dłuższy- nie sądzę by ktoś chciał klikać przycisk do wyświetlania kilka razy na sekundę. Wybudzanie mikrokontrolera cyklicznie co 400ms z pewnością nie poprawi...
W jakimś przerwaniu timera migasz diodą. w trakciemigania sprawdza jakąs flagę czy ma migać a jak nie to wylacza diodę. W pętli jak klawisz sie nacisnie (zakładamy tylko jeden stan - wyłaczenie - a właczenie migania następuje poprzez inny magiczny przycisk = reset) ustawiasz flagę na niemiganie. Jezeni wyłaczenie ma nastapić natychmiast (a nie przy...
Jak się nazywa to zobacz w pliku gdzie masz wektory. Ale nawet jeżeli tak się nazywa to przycisk w takim przerwaniu to zły pomysł. Dlaczego to poszukaj sobie na forum bo temat wraca co kilka dni. Zresztą nie widzę włączenia zegara dla exti. Zresztą wątpię żeby tak się nazywał: np starup z Cube to EXTI0_IRQHandler albo EXTI15_10_IRQHandler
Nie ma jednej, jedynie słusznej drogi. Każdą funkcjonalność można opracować na wiele sposobów. Jeśli potrzebujesz podłączyć przycisk do przerwań zewnętrznych, możesz to oczywiście zrobić. Po to one są, by z nich korzystać, byle świadomie :) Istotne jest tylko jedno - program ma działać tak jak tego sobie życzysz i spełniać założenia projektowe. Edit:...
1. Zaprogramuj timer w tryb CTC, np. na częstotliwość 100 Hz. W przerwaniu timera: - sprawdź, czy przycisk naciśnięty; jeśli tak - zapal diodę i załaduj wartość 1000 do zmeinnej - "timera programowego". - jeśli zmienna timera ma wartość różną od zera, zdekrementuj ją, a jeśli zdekrementowała się do 0 - zgaś diodę. Razem daje to 5 linii kodu w przerwaniu...
marco47 - przepraszam, nie zauważyłem. marek19951 - proste if-then nie załatwi problemu. Jeżeli masz zapał, a widzę , że masz, zacznij od procedury obsługi klawiatury , która nie powoduje opóźnień poprzez martwe pętle ( czyli m.in wait, debounce, bitwait itp). Ja to zrobiłem na przerwaniu programowym z timer1, które odliczało mi okresy 10 ms w połączeniu...
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ąś...
Witam, No trochę jaśniej jest. Ram który przeznaczyłeś na stos jest prawie całym obszarem RAMU mikrokontrolera. 0x1FE4 - wielkość twojego stosu (obliczone wierzchołek stosu(0x1FF0) - początek sterty(0xc). Stosu Ci zapewne nie zabraknie. np. wywołujesz w mainie moja_funkcja(int param1, int param2, char tab[20]) to musisz przy wywoływaniu z przekazaniem...
Dzięki Freddie za dotychczasowy poświęcony czas i cenne uwagi To masz magiczny przycisk "POMÓGŁ", z którego nota bene jak widać nie korzystasz. EXTI + przycisk = wałkowane to tysiące razy.
Proponuję zastanowić się czy mikrokontroler będzie tylko i wyłącznie czekał na przyciśnięcie przycisku czy robił coś jeszcze poza tym. Jeżeli tylko i wyłącznie będzie oczekiwał na przycisk to porty ustawiasz jako wejścia i sczytujesz stany. Natomiast jeżeli zajmiesz go czymś to proponuje wykorzystać przerwania. Nowsze mikrokontrolery (potomki Atmega8...
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:...
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...
Chyba dokładniej się nie da skomentować ;) Powinno być już wszystko jasne... [syntax=basic4gl]Do ' pętla główna jakiegoś programu ' ' ' tu jest badany przycisk If P = 0 Then 'czy wciśnięty przycisk (P to pin procesora od guzika) If Lk = 0 Then 'czy licznik programowy doliczył już do zera Lk = 50 'jeśli tak to ustaw znowu na 50ms ' (można też nieco mniej,...
Należy zapomnieć o używaniu: _delay- w przerwaniu _delay_ms(time_del)- od zmiennej _delay- w ogóle. I zacząć korzystać z timerów.
Tlumaczylem, ze restart bedzie tylko raz mozliwy, w petli programu. Nie napisales jasno, ze ma byc w kazdej chwili. Moze jutro ci wlepie kawalek kodu. ________________________________________... CONFIG INTx = LOW LEVEL On Intx Przerwanie Enable Interrupts do loop:end Przerwanie: disable intx '.... tu reset '.... enable intx Return...
całość należy podzielić na dwa człony : - mostek H - sterowanie przekaźnikami z podtrzymaniem i zabezpieczeniem zasada pracy mostka H polega na zmianie polaryzacji napięcia podawanego na silnik to powinno wszystko wyjaśnić http://pl.wikipedia.org/wiki/Mostek_H styki S1/ S4 to a1/a2 , S2 /S3 to b1/b2 chyba nie będzie problemu z zrozumieniem pracy oczywiście...
Przesada, jeśli przycisk nie wisi na zakłócanym kablu - wystarczy porównywać stan bieżący z poprzednim w odstępach większych niż czas drgań (co 10..20 ms). Jeśli wisi na zakłócanym kablu - próbujemy z max. okresem zakłóceń/drgań (co większe) i patrzymy na trzy kolejne stany, "poprawiając" stany 101 na 111 i 010 na 000. Wykrywamy stany 011 i 100 jako...
Zacznijmy od tego, że: Przycisk podpięty do INT0 (PB2) i do +5V. Jaki według Ciebie jest poziom na wejściu INT0, gdy przycisk nie jest naciśnięty? Zmienna status także powinna być volatile. Drobiazg: cli() i sei() w przerwaniu są zbędne, ponieważ: The I-bit is cleared by hardware after an interrupt has occurred, and is set by the RETI instruction to...
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...
A w ogóle spróbowałeś tak zrobić, jak napisałem? Czy z góry założyłeś, że nie mam racji? zauważ, że blokada INT0 wystąpi w przerwaniu tylko wtedy, gdy odczytany zostanie kod inny niż 0xFF No właśnie o tym piszę. Jeśli przycisk był wciśnięty w momencie wykonywania instrukcji GIMSK |= (1<<INT0); i przytrzymany dłużej niż opóźnienie 50ms w procedurze...
Opowiem trochę na przykładzie sprzętu SICK'a, ale spokojnie możesz to przełożyć na innych producentów. Generalnie sterownik PLC ma realizować pełną logikę całego układu bezpieczeństwa za pomocą swoich dedykowanych "bezpiecznych" bloków logicznych. Tak jak w przypadku zwykłego układu sterowania, PLC ma wejścia i wyjścia (w tym przypadku "bezpieczne")....
Faktycznie aktywnym stanem jest zero i wtedy ten fragment kodu nie powinien dać żadnego rezultatu, ale co dziwne cokolwiek nacisnę i tak się wykona. Znaczy, dlaczego nie. Jak wcisnąłeś przycisk 0, a sprawdzasz 2, to przerwanie sie wygeneruje, ale na dwójce jest stan wysoki, to warunek (pierwszy) zadziała. Jak sprawdzam czy stan jest równy zero to też...
Załóżmy, że to też błąd przy wklejaniu kodu (inaczej asembler zgłosiłby błąd). Powinno być R21 , a nie R121 . Być może to też błąd przy wklejaniu. Bity WGM12 , CS12 oraz CS10 nie znajdują się w rejestrze TCCR1A tylko w TCCR1B . Istotne jest jednak to, że ustawiając tylko bit WGM12 ustawiasz TIMER1 w tryb 4, czyli tryb CTC, w którym timer liczy od 0...
Teraz spłodziłem coś na chacie w bascomie ;-) Może w końcu ta koncepcja ruszy.... uwzględnia drgania styków, działa na innej zasadzie... powinna byc odporna na wszelkiego rodzaju czasy między puszczeniami wciśnięciami itp... w przerwaniu co 10ms sprawdzamy stan przycisku zadziałanie przycisku następuje najwcześniej po 10 jego sprawdzeniach (po 100ms)...
http://obrazki.elektroda.pl/9745806300_1... Witam. Sesja się zbliża, więc tradycyjnie zacząłem już prokrastynować :D . Ostatnio zacząłem pisać bibliotekę do obsługi klawiatury PS/2 w C dla AVR i postanowiłem na szybko w godzinkę lub dwie stworzyć jakiś praktyczny projekt w celu jej przetestowania. Początkowo nie planowałem tego publikować,...
Akurat w przypadku tego kodu przycisk wyjątkowo zwierał do plusa. Jeśli zwiera do masy, to powinno się porównywać z wartością 0b11111110. Na ogół nie ma sensu rejestrować aż 8 stanów - wystarczy wymaskować zmienną keystate maską złożoną z 2..3 jedynek i porównywać z odpowiednią maską, np. 0b110. keystate jest typu uint8_t. Wyglądałoby to np. tak: if...
Twojego programu nie analizowałem, nie chciało mi się, albowiem od razu Ci powiem, że ja bez przerwań w ogóle bym się za to nie zabierał i dotyczy to nie tylko enkodera ale także zwykłych przycisków. Tak jak napisał tmf , każdy zestyk ma tendencję do drgań, a więc enkoder również, jest to opisane w książce Pieńkosa i Turczyńskiego "Układy scalone TTL...
Pytana do układu: 1. P1 i P2 podciągnięte do plusa za pomocą rezystorów? Bo w programie nie masz "włączonego" wewnętrznego podciągnięcia? Jeden z twoich problemów to: Po naciśnięciu guzika zmniejszającego wartość spada ale dzieje się to bardzo powoli tak jak by układ się przycinał na czas odczytu temp. nie dziw się ponieważ w funkcji Odczyt_t podczas...
Takie programy to się całe pisze w przerwaniu bez zbędnych kombinacji. Przy okazji można dodać funkcję płynnego przechodzenia pomiędzy jasnościami PWM żeby to jakiś bajer miało. Przycisk sprawdza się dwuetapowo, że został wciśnięty i że został puszczony. ale nie można tego robić za szybko bo zakłócenia wchodzą. Efekty świetlne trzymaj w DATA, tak łatwiej...
http://obrazki.elektroda.pl/5924959500_1... Witam ponownie! Kilka dni temu chwaliłem się projektem "PALM v1.0 BETA Atmega128", a dziś chciałbym przedstawić komputerek do motoru lub roweru jaki zrealizowałem już jakiś czas temu na zamówienie. Urządzenie miało zastąpić oryginalne psujne, mechaniczne zegary. Funkcje i założenia: *Wyświetlanie...
Chciałbym przedstawić jeden z możliwych sposobów wykonania cyfrowego regulatora PID Przestawiony regulator nie ma konkretnego zastosowania , to do czego zostanie wykorzystany zależy od czytelnika. Opis regulatora kieruję do osób które zaczynają przygodę z automatyką i układami regulacji. Spróbowałem wyjaśnić jak działa cyfrowy regulator PID, czemu ich...
https://obrazki.elektroda.pl/9337556500_... Pewna wyjątkowa osoba zasługiwała na równie wyjątkowy prezent, a że nie jestem fanem kupowania niespodzianek, postanowiłem "zrobić" coś własnym rękami. 1. Wstęp, motywacja 2. Zarys konstrukcji 3. Płytka z diodami - projekt (łączenie diod) 4. Płytka z diodami - projekt (zatrzaski) 5. Eagle...
http://obrazki.elektroda.pl/3265192600_1... Witam serdecznie. Na wstępie powiem iż jest to moja pierwsza konstrukcja jaką przedstawiam na forum i liczę na konstruktywne opinie. Podstawowe założenia projektu: 1. Zbudowanie "żarówki" (źródła światła) emitującego światło RGB oraz białe, 2. "żarówka" musi być zasilana z 230V i musi mieć...
http://obrazki.elektroda.pl/7565365900_1... Jakiś czas temu na alledrogo kupiłem układzik który nazywa się "Wyłącznik sensorowy Exterminator". Stwierdziłem - przecież będzie prościej, pewnie i taniej a na pewno szybciej. Po oględzinach okazało się jednak, że mimo tego co zapewniał sprzedawca nie można odbezpieczyć układu przy otwartych...
https://obrazki.elektroda.pl/1761046600_... Pokażę tu jak uruchomić z Arduino czterocyfrowy wyświetlacz 7-segmentowy sterowany poprzez rejestr przesuwny 74HCT164 i cztery tranzystory BC546. Płytka z wyświetlaczem znów będzie odzyskana z elektrośmieci. Będzie to już kolejny temat, w którym uruchamiam wyświetlacz, gdyż omawiałem już...
Warunek w if nie będzie spełniony bo raczej te kilka instrukcji w przerwaniu nie bedzie się wykonywać 20ms. Czas wykonywania tego ISR nie ma nic wspólnego z wartością _debounce_timer w momencie porównania.
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...
https://obrazki.elektroda.pl/7417895700_... Motywacja Jeden ze znajomych poprosił mnie, aby taki śmieszny pad na USB (kształtem przypominający dżojstik od konsoli NES) https://obrazki.elektroda.pl/5837949700_... https://obrazki.elektroda.pl/8178021400_... przerobić tak, aby dało się go podpiąć właśnie...
Próbuje zrobić obsługę przycisku w przerwaniu z funkcją eliminacji drgań. Problem polega na tym,że po odmierzeniu zadanego czasu przerwanie wywołuje się samo po raz drugi mimo że nie naciskam przycisku. Próbuję to zrobić tak, że gdy zmienna naciskany jest przycisk na PB3 to blokuje przerwania od tego wejścia, uruchamiam timer i gdy zmienna "delay" doliczy...
https://obrazki.elektroda.pl/1570592100_... Witajcie, zapraszam na relację z konstrukcji zegara na PIC18F2550 napisaną w formie tutoriala, wszystko krok po kroku. Pokażę tu jak i z czego tworzyłem prosty projekt DIY na prośbę jednego z czytelników. Wykorzystamy tu wyświetlacze 7-segmentowe, rejestr przesuwny, obsłużymy przyciski a...
(at)MajsterXXL Wrzuciłem twoje poprawki do swojego szkicu. Niestety nadal mi coś średnio pilot działał. Zacząłem się przyglądać tej funkcji analizy pulsu i wydaje mi się, że brakowało w niej sprawdzenia poprawnie początku ramki. Odbiornik IR czyta kod i wystawia go w sposób zanegowany (wyjście jest typu OC z pociągnięciem 10k pull-up). Ramka zaczyna...
Oczywiście to co pokazuję jest w C ale jestem otwarty na pomoc i propozycję rozwiązań mojego problemu z tego względu jest napisane powyżej, w moim poprzednim poście "...C/C++...". C czy C++ nie jest mi straszne i tym bardziej obce. Drgania wyeliminowałem jak na razie sprzętowo i tak zgodzę się odczyt odczyt przycisku w przerwaniu. Podpowiedzcie mi...
http://obrazki.elektroda.pl/8414552600_1... Jakiś czas temu przedstawiałem elektroniczny przełącznik, który zbudowałem na zawody samochodowe: http://www.elektroda.pl/rtvforum/topic19... Chciałem przedstawić nie planowanej rozbudowy urządzenia. W tej chwili urządzenie nie współpracuje tylko z chronometrem i jedną fotokomórką,...
Mam problem z zamykaniem bramy, ale trochę inny niż typowy. Przez długi czas działała poprawnie, jednak ostatnio zauważyłem dziwne zachowanie napędu. Zwykle przed samym zamknięciem fotokomórka na moment uruchamiała impuls (takie „samotestowanie”), po czym brama normalnie się zamykała. Teraz to „self-testing” się nie pojawia. W efekcie, gdy nacisnę przycisk...
https://obrazki.elektroda.pl/2872521200_... Witajcie moi drodzy. Najpierw pokażę tutaj wnętrze dość starego, budżetowego odtwarzacza DVD, a potem zaprezentuję jak można praktycznie wykorzystać odzyskane całkowicie za darmo komponenty ze środka. W temacie wystąpi też Arduino. Spróbuję uruchomić panel przycisków (dość dziwnie zorganizowany),...
http://obrazki.elektroda.pl/4883645800_1... Niniejsza wytrawiarka powstała z konieczności, moja dotychczasowa mniej więcej 25-letnia wytrawiarka w formie kuwety fotograficznej na przyklejonych kółkach, kołysanej silniczkiem od programatora zaczęła się już rozpadać, poza tym od początku miała pewne ograniczenia, od braku podgrzewania...
http://obrazki.elektroda.pl/2563369400_1... Witam wszystkich! Chciałbym zaprezentować pewien mały projekt, który wykonałem na prezent. Jest to drzewko szczęścia, w którym rolę liści pełnią diody LED RGB. Był to jeden z moich pierwszych projektów oraz pierwszy zawierający część analogową (dlatego zarówno projekt jak i wykonanie nie jest...
Emulator po przerwaniu gry klawiszem F7 pamięta ostatnio używany, aż do ponownego uruchomienia go. Proszę sprawdzić klawisz F8. Resetowanie (klawisz F7) to jest reset samego procesora tak, jakby był przycisk resetu zwierający linię "reset" procesora Z80. Zerowanie (klawisz F8) to jest przywrócenie stanu początkowego całego emulatora, czyli nie tylko...
https://obrazki.elektroda.pl/3711757000_... Witajcie, dzisiaj przedstawię uruchomienie układu AS1115 z Arduino w oparciu o gotową bibliotekę. AS1115 to kontroler wyświetlacza 7-segmentowego (do 8 cyfr) oraz klawiatury (do 16 klawiszy) z interfejsem I2C, oferującym dodatkową linię-przerwanie dla zdarzeń pochodzących od klawiatury. Temat ten...
http://obrazki.elektroda.pl/3092945800_1... Witam Nie jest to mój pierwszy projekt ( było ich już z kilkunaście ;) ) , jednak jestem z niego nieco bardziej zadowolony niż z innych; włożyłem w niego także więcej pracy dlatego postanowieniem go opublikować. Ponieważ postanowiłem podciągnąć/ sprawdzić swoje umiejętności programowania /...
void setup() { for(int i=24; i<=36; i++) { pinMode(i,OUTPUT); } pinMode(23,INPUT_PULLUP);//wstawiamy przycisk } boolean stan=0;// wstawiam zmienną boolean void loop() { int a; for (a=24; a<=36; a++) { digitalWrite(a,HIGH); digitalWrite(a-1,LOW); delay(500); if(digitalRead(23)==LOW)//wstawiam przycisk wł wył { delay(20); stan=!stan; while(digitalRead(23)==LOW);...
Witam, chciałbym napisać program. Urządzenie składa się z 1 przycisku i 1 diody po wcisnieciu przycisku raz dioda ma się zapalic na 3 min, po wcisnieciu tego samego przycisku w trakcie trwania tych 3 min powoduje zgaszenie diody i powrot do poczatku Próbowałem w C z przerwaniami od tego przycisku ale w zaleznosc od tego na jakie zbocze reaguje mikrokontroler...
bascom przycisk przerwaniu opóźnienie przerwaniu rs232 przerwaniu
zmiana nagłówka kupić panel kenwood kenwood radio naprawa
Seagate Barracuda 320 GB vs WD Green 320 GB – porównanie szybkości HDD Telewizory z matowym ekranem w Polsce – Samsung The Frame, The Serif, The Sero, OLED S95D