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.
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)
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...
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.
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.
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...
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...
Postanowiłem odświeżyć temat. Wymiana przycisków nie pomogła. Płytka sprawdzana, ścieżki nie przerwane. Co to moze być? Przyciski nadal niesprawne. pozdrawiam
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ż...
Powtórzę ponownie: Wyrzuć wszystkie delay i zrób animacje na przerwaniach, czyli "Po Bożemu".
Powinieneś rozdzielić sprawdzanie przycisków od wykonywanej czynności. Najlepiej sprawdzanie przycisków wrzucić w jakieś przerwanie (chociażby portu) i przy okazji zrealizować debouncing. Po sprawdzeniu ustawiasz odpowiednio flagę - każdy przycisk ma swój nr. Dzięki temu dopóki nie naciśniesz kolejnego przycisku flaga będzie miała wartość odpowiadającą...
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...
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...
samo menu wielopoziomowe ze zmianami parametrów już jes dość rozbudowana częścią kodu. Samo sprawdzanie przycisku nic nie zmienia. kwestia jak kolega te pomiary zczyta i jak zrobi menu. jak zrobisz zle to czy przerwanie czy nie i tak sie zacznie mylić
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...
gdyby zatrudnić przerwanie do sprawdzania stanu przycisku to odpadłby problem sprawdzania przycisku w każdym obrocie pętli :-)
Do kolegi arktik1 dlaczego kolega namawia do sprawdzania w petli danego pinu skoro luki55 ma w programie sprawdzac tylko ten przycisk to lepiej go dac w przerwanie zewnetrzne a do glownego do__loop wstawic nop. Jesli juz taki "duzy" procesor stosowac to wykorzystac go przynajmniej tyle ile sie da i ile ulatwi zycie. P.s. Attiny13 tez bylby za duzy :D
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?
Problem to jest np. zwykły debouncing, czyli masz przycisk który powinien generować IRQ przy zmianie z 1 na 0 potem kiedy przerwanie jest obsługiwane sprawdzam stan linii od przycisku i ona nie jest zero tylko 1. Więc teoretycznie przerwanie zostało wygenerowane nie poprawnie.
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.
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...
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...
I właśnie z tego powodu należy sprawdzać stan przycisków w przerwaniu timera, bez opóźnień. http://mikrokontrolery.blogspot.com/2011...
Generalnie przy LEVEL przerwania są tak długo emitowane, aż zniknie ich przyczyna, w efekcie wywoływane jest ISR i natychmiast zgłaszane jest kolejne przerwanie. Musiałbyś więc po zmianie z LEVEL na RISING jawnie kasować flagę przerwania. W większości przypadków się więc nie używa LEVEL. Piszesz strasznie skomplikowany kod - nie prościj dać BOTH_EDGES...
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...
Jeżeli sprawdzasz przycisk podłączony do masy, to czemu przerwanie Timer ma być wyzwalane zboczem rosnącym ? Config Timer0 = Counter , Edge = Rising
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...
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.
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.
1. Definiujesz stałe w pamięci RAM, zamiast w ROM. 2. Niepotrzebnie używasz przerwania WDT i portu. Wystarczy jedno przerwanie timera o częstotliwości rzędu 100 Hz, w którym sprawdzasz przycisk, odliczasz czasy i zmieniasz światła.
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.
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:...
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...
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?
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.
Nie musi to być stricte funkcja przerwania tylko sprawdzanie flagi przerwania w pętli, która zapisuje wyniki. Po wykryciu przerwania INT od przycisku niech od razu zablokuje to przerwanie i zgasi jego flagę.
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...
A może nie wykorzystuj 2 przerwań tylko sprawdzanie przycisku wstaw odrazu do przerwania od zegara: [syntax=cpp] ISR (TIM0_OVF_vect)//3,4ms { sei(); if(przycisk wciśnięty) { t1=t1+1; } else { t=t1; t1=0; } } [/syntax] czy jest może jakaś zależność od l?? np przy l = 0 działa lepiej a przy l=4 działa gorzej albo na odwrót? PS i dołóż kondensator 100n.
Moim zdaniem jak zrobisz prawidłowe procedury debouncingu (chociaż może nazwa nie jest idealnie trafiona), to żadne zakłucenia nie powinny tutaj przeważyć. Jeżeli np ustawisz tak timer, że przerwanie będzie sie "uruchamiało" co 10ms, następnie sprawdzasz wszystkie kolumny (czy tam wiersze). Tam gdzie wykryjesz wciśnięcie przycisku zwiększy wartość licznika...
Czy po wciśnięciu przycisku program ma wykonywać w kółko wybraną sekwencję? Pewne tak, a wtedy: jak w trakcie wykonywania sekwencji program ma reagować na wciśnięcie przycisku? Ma dokończyć wykonywaną sekwencję, czy ją przerwać? Jeśli program ma rozpoznawać wciśnięcie przycisku w czasie wykonywania sekwencji, to zamiast _delay_ms() trzeba wstawić własną...
Zrób to w przerwaniu od zegara co np. 100mS. Sprawdzasz czy przycisk jest wduszony i jeśli tak to przypisujesz zmiennej typu static wartość 100. Dalej w tym samym przerwaniu sprawdzasz czy ta zmienna jest większa od 0. Jeśli tak to zmniejszasz ją o 1 i zapalasz podświetlenie. Jeśli nie to gasisz podświetlenie.
Da się zrobić. Użyj przerwania timera do sprawdzania stanu przycisku i modyfikacji wypełnienia PWM dla serwa.
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...
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ę...
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...
Jak rozumiem ma być czytane przerwanie z klawiatury ( miedzy innymi ) , a czemu nie zrobić przerwania z jakiegoś timera które będzie cyklicznie sprawdzało pin podłączony z tym klawiszem ( przyciskiem ).
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...
Oto rysunek z pomysłem. Wciskasz raz przycisk, tym sposobem zasilasz mikrokontroler, który ustawia bit na linii która steruje tranzystorem. Po puszczeniu przycisku układ jest już zasilony. Kolejne wciśnięcia w kwestii zasilania nic nie zmieniają ale na linii przerwania ustawia się poziom wysoki i zanika, wykorzystujesz to jako przerwanie dla mikrokontrolera,...
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...
W setup() powinieneś zainicjować zmienne przycisk_czas oraz uzbrojenie_czas. Podpięcie przerwania do PRZYCISK powinno być również setup(), w funkcji zmiana() możesz sprawdzać stan alarmu (przycisk_czas < millis()) i wykonywać dalszą część kodu. W obecnym stanie, w pętli loop() nie wiadomo ile razy podpinasz przerwanie pod PRZYCISK i co z tego wynika,...
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ąś...
Jaki byście podali powód niedziałania ogrzewania tylnej szyby? 1. Przycisk działa świeci się, słychać że przekaźnik pyka jak się włączy czyli jakby prąd do chodzi czyli bezpiecznik ok. 2. Nie są przerwane grzałki na szybie dokładnie sprawdzałem latarką, nie widać żeby była przerwana. 3. Kabel wygląda ok jest w osłonie oryginalnej czarnej. Co można jeszcze...
Czyli jeśli masz zewnętrzny przycisk to nie ma problemu - konfigurujesz go tak, aby generował przerwanie i już. Nie musisz wybudzać procesor, nic nie musisz sprawdzać. Ktoś wciśnie przycisk -> procesor się wybudza i robi co chcesz. Jeśli energia jest problemem to M88 zużywa jej na dzień dobry 2xmniej przy normalnej pracy.
Ok ale jak by wtedy procesor pozostawał w uśpieniu? z każdym wywołaniem przerwania sprawdzał by wtedy stan przycisku - przynajmniej tak to rozumiem. Mógłby ktoś powiedzieć czy dobrze jest ustawione wywołanie przerwania INT0? Czy jest zboczem narastającym i czy odpowiednio pod to podłączyłem przycisk.
Ja zrobiłem coś w rodzaju matrycy. np. 4 przyciski podłączone do 4 linii i przez diody do przerwania. Przerwanie wywoływane jest dowolnym przyciskiem,a w podprogramie sprawdzałem (po pewnym czsie)jaka liczba wychodzi z tych 4 bitów (przycisków). Dzięki temu mogłem zrobić kombinacje naciśnięć kilku przycisków jednocześnie. Opóźnienie odczytu liczby było...
Rzeczywiście dało się to uprościć mocno. Ponieważ dla potrzeb programu mam zrobione "fajne" makra typu: brfs Nazwa_Flagi, Etykieta ;skocz do Etykieta jeśli flaga ustawiona brfc Nazwa_Flagi, Etykieta ;skocz do Etykieta jeśli flaga wyzerowana setf Nazwa_flagi ;ustaw flagę clrf Nazwa_flagi ;zeruj flagę ..to korzystam z flag również przy przyciskach (upraszcza...
Miałem Ci odpisać wcześniej, ale czasu nie starczyło. Więc najlepiej użyj jakiegoś timera generującego przerwanie np. co 100ms. Następnie w przerwaniu od tego timera, sprawdzaj stan przycisku, a dokładniej licz czas wciśnięcia. W momencie zwolnienia przycisku, sprawdzasz ten czas i jeżeli przycisk był wciśnięty poniżej 1sek, to robisz to co było zapisane...
Witam. Szczęśliwie dla użytkowników praktycznie wszystkie wyświetlacze alfanumeryczne LCD obsługuje się tak samo. Ich chipy sterujące są zgodne z HD44780. W skrócie obsługa LCD'ka wygląda tak: - inicjalizacja (zestaw komend sterujących, ustawia się min. sposób podłączenia 4/8 bit, ilość linii itp itd.). Sprawa dosyć dobrze opisana w większości datasheet'ów...
W zasadzie nie potrzebujesz JP13. To chyba taki ukłon w stronę 8051 z dwoma przerwaniami zewnętrznymi. AVRy mają przerwania PCINT na prawie wszystkich pinach i w momencie jak wciśniesz przycisk i tak możesz wywołać przerwanie. Niemniej w ogóle nie powinieneś robić tego na przerwaniach zewnętrznych (poza wyjątkową sytuacją gdy wprowadzasz uC w głębokie...
niestety nie da się obsłużyć przerwania z tego miejsca. Możesz tylko na bieżąco sprawdzać czy nie zmienił się stan przycisku lub czy nie jest on przyciśnięty i tyle. ewentualnie podłączyć go w inne miejsce
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...
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)...
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.
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.
"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...
no a tak na szybko dopytam - jak sprawdzasz czy ci to działa czy nie? bo przy tym kodzie tego nie widać
Wiec tak: W ogóle wyrzuciłbym zmienna/flagę F. Nie jest potrzebna tutaj. W programie głównym zamiast sprawdzania F, sprawdzaj A, czyli warunek IF z przerwania przenieś do programu głównego, łącznie z zerowaniem A. W przerwaniu zwiększaj tylko A. Zamiast: If F = 1 Then Cls Locate 2 , 1 Lcd "przerwanie" Wait 1 Cls F = 0 Enable Int0 End If zrobilbym...
Muszę to chyba oddać do elektryka. Samemu mając multimetr można coś podziałać? Rozumiem, że trzeba byłoby ściągnąć boczny plastik drzwi kierowcy i sprawdzać napięcie? Chociaż może wówczas byłoby widać jakieś przetarcie, przerwanie tam, gdzie przewody "pracują" przy otwieraniu/zamykaniu drzwi.
Sprawdzam czy przycisk zostal puszczony i dopiero wtedy kończę przerwanie. Czy tak trzeba robić ?? niekoniecznie, oczekiwanie na puszczenie klawisza można zrobić w progu glównym, lub spróbuj wogóle to pominąć, teoretycznie powinno dzialać bezblędnie z opóźnieniem na drgania styków. Nie skasujesz INTF oraz RBIF, bez odczytania stanu portu, a bez tego...
rejestry PINx w atmedze128 są tylko do odczytu więc nie wolno do nich nic zapisywać. jak chcesz sprawdzić stan przycisku to robisz tak: ustawiasz pin do którego jest podpięty jako wejście podciągasz go do stanu wysokiego w pętli głównej sprawdzasz czy dany pin nie jest = 0 (co będzie miało miejsce gdy go naciśniesz) czyli mniej więcej tak: PORTA |=...
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...
A po co 8 pętli do obsługi 4 przycisków? Przerwanie nie przerywa pętli tylko wstrzymuje ją na czas wykonania programu przerwania. Wystarczy jedna pętla główna w której sprawdzasz stan całego portu do którego są podpięte przyciski, wtedy w tej samej chwili masz odczytany stan przycisków. Jak rozumiem z opisu robisz pętle do obsługi każdego przycisku?...
W zakładce I/O View wybierasz port, potem u dołu pokazują się powiązane rejestry w których możesz zmieniać ich zawartość. Ale i tak ten while nie sprawdza przycisku tylko sprawdza czy przerwanie zmniejszyło już odpowiednio wartość - więc dopóki nie upewnisz się, że przerwanie jest w porządku to raczej lipa. W kursach często zaczyna się od migania diodami...
PWM powinno być generowane przez timer. Stany przycisków można sprawdzać w przerwaniach, a nie w jakiejś pętli. W programie użyłeś funkcję delay() 294 razy, a powinieneś 0 razy. Cały kod jest napisany źle. Nie zaplanowałeś działania programu. Sklejenie po prostu dwóch różnych programów nie spowoduje, że staną się jednym programem. Hasło na dziś: "Planowanie...
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...
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
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)...
a co ze starym numerem z diodą?? Ale wtedy należy zasilić tylko jedną gałąź matrycy i sprawdzać przerwanie na jednej (4 lub nogach) Przecież nie wszystkie przyciski muszą uruchamiać procka. Odcięcie zasilania od pozostałych obwodów zrobić na tranzystorzej jak w pony progu ;)
Właśnie sprawdzam inne, SysTick działa, ale ono nie idzie na wrota NVIC'owe, zaraz sprawdzę normalne timery. No fakt :D Ale wspomniałem o tym, że w przerwaniu bym sprawdzał wszystkie przyciski to dostałem odpowiedź, że jeśli nie będę miał już timerów to co bym zrobił :p To jest taki projekt sprawdzający, więc chyba bardziej chodzi o to, żebym pokazał...
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 ------------- -------------...
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....
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.
Te typy "tak mają" i problem rozwiązuje się sam po określonym czasie od ponownego załączena zasilania. Ten czas zależy od tego, w jakim momencie (temperatura, odladzanie, ciśnienie) zostało przerwane zasilanie do płyty głównej komputera lodówki. Dobrym objawem jest pulsowanie LED wcześniej ustawionych temperatur, wystarczy wcisnąć dowolny przycisk w...
Czyli wiemy że UPC działa i reaguje na komendy w sieci CAN oraz że kompresor i jego okablowanie jest sprawne. :D Obstawiam, że gdzieś w instalacji jest przerwane. Nie bardzo. :D Teraz pytanie - czy przewody z przycisku od klimy idą bezpośrednio do UPC, czy po drodze jest jeszcze coś? Przewody z przycisku klimatyzacji idą do modułu zespolonego UCH który...
Badaj w pętli stan przycisków. Możesz wcisnąć case() do pętli. Poczytaj Książkę Kernighana i Richie'go, tam takie fikołki są dobrze opisane. Teraz twoja pętla liczy sobie zwiększając i (i++) i czeka trochę. Wciąż nie sprawdzasz tego, co przychodzi z pilota. Pętla for powinna wyglądać mniej więcej tak for(i=0;i<255;i++) { jeśli w pilocie wciśnięty...
W jednym swoim projekcie mam taką obsługę przerwań : [syntax=Basic4GL] Config Timer0 = Timer , Prescale = 256 On Timer0 Przerwanie Enable Interrupts Enable Timer0 Load Timer0 , 250 Do 'petla glowna Loop End Przerwanie: Load Timer0 , 250 Incr Czas8ms If Czas8ms = 125 Then Czas8ms = 0 Incr Sekunda End If If Przycisk = 0 Then Flaga = 1 End If Return [/syntax]...
Mam problem ze wzbudzeniem ze stanu SLEEP_MODE_PWR_DOWN poprzez przerwanie od INT0 (PIN D2). Aby wzbudzenie działało poprawnie, muszę "obudzić" Arduino sygnałem LOW. Odbiornik podczerwieni niestety daje sygnał cyfrowy 1 (HIGH). Jak "oszukać" Arduino, inaczej, jak w łatwy sposób zanegować dany sygnał, aby w prosty sposób wzbudzić Arduino ze stanu czuwania?...
Zacznij od napisania, jak są podłączone przyciski. Zupełnie nie rozumiem czemu w celu zapisu bajtu do rejestru DDR używasz pięciu operacji logicznych na tym rejestrze zamiast napisać po prostu: DDRC = Wyjscie; To samo z PORTC. Dalej . sprawdzasz, czy przyciski są zwolnione, ale nie sprawdzasz, cza są wciśnięte. Przy takiej realizacji - pętla i delay...
Mam uszkodzenie tego typu, że ciągle jest włączony głośnik i aparat oczywiście zawiesza linię. Wybierać oczywiście można ale nie możemy się już rozłączyć. Uszkodzenie bardzo typowe. Sam już nawet zamieszczałem podobne uszkodzenia w dziale usterki. Mam schemat, który ściągnąłem z Elektrody, ale jest nieczytelny. Jest tam także instrukcja serwisowa z...
Adaptacje robisz przyciskiem od podnoszenia/opuszczania szyby a jak szyba ci nie działa trzeba sprawdzić dlaczego. Zaczął bym od sprawdzenia instalacji idącej od słupka do drzwi w harmonijce gumowej, czy kable nie przerwane tam też przy okazji można sprawdzić czy jest zasilanie, masa i can to tak na początek bez większego rozkręcania, następnie to chyba...
nie trzeba analizować całości :) ale mogę się mylić Możliwe, możliwe też że problem leży w ogarnięciu siekanego stylu pisania programu. Przecież obsługa tego typu sprowadza się w zasadzie do dwóch etapów. Zapisania startu czasu przy wciśnięciu, i sprawdzaniu czy ten czas został przekroczony. W sumie z początku myślałem że chcesz tylko mieć czas trwania...
Witam. Mam taki dziwny problem - odpalam sobie przerwanie co 10ms, w nim chciałem zrobić coś w stylu bufora dla danych wejściowych, ponieważ mam przerwanie z innego timera, które trwa dość długo (odczyt temp, ustawienie na podstawie tej wartości stanu wyjść, wypisanie temp. na lcd). Na to przerwanie dałem wyższy priorytet, i po prostu sprawdzam stan...
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...
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...
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...
Co do tego przerwania timera. Ustawilem przerwanie co 30ms. W przerwaniu sprawdzam stan pinu i pytanie co jeszcze należy dodać do przerwania by funkcjonowało poprawnie? Jakieś małe opóźnienie i kolejny raz sprawdzenie stanu po czym uznawać że przycisk wcisniety realizować co potrzebuje ?
Nie znam Bascoma Odpalasz timer, tak żeby generował przerwanie co 50 ms. W tym przerwaniu sprawdzasz stan portów i to w zasadzie wszystko. W pętli głównej monitorujesz ten stan i odpowiednio reagujesz.
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...
Zarezerwuj sobie na godziny i minuty po rejestrze w procesorze. Zrób obsługę klawiatury. Ja bum dał 3 przyciski. 1 - jak przytrzymasz dłużej to wchodzi w trym ustawiania. Jak potem na krótko to przechodzi po kolejnych rejestrach i ustawiasz 2 pozostałymi wartość godziny minuty, dnia, miesiąca, roku. 2. zmienia wartość w górę 3. zmienia wartość w dół...
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ść...
przerwać timer przycisk bascom przycisk przerwać bascom przerwać przycisk
laptop wyłączać chwila volvo silnika separacja transformator pomiar
schemat elektryki skutera schemat elektryki skutera
Schemat radia NINA - gdzie znaleźć? Kod błędu 17301 w maszynach New Holland: SCR, hydraulika, paliwo