(at)squelch No i to całkiem prawidłowa reakcja. Jeśli z jakichś powodów program ma zauważyć, że użytkownik najpierw przekręcił w lewo a potem zrobił taką samą liczbę obrotów w prawo to albo częściej musisz sprawdzać stan zmiennej enc_delta, albo dodać sobie bufor pierścieniowy w którym będziesz przechowywał informacje o kolejnych dzianiach użytkownika....
Witam, Kiedyś miałem bardzo podobny objaw i okazało się, że jedna zmienna nie była zainicjalizowana, w związku z czym przyjmowała losowe wartości, ktore zmieniały się w zależności od położenia zmiennej w pamięci mikrokontrolera - na skutek dopisywania dalszych częsci programu to miejsce zmieniało się. I raz program działał dobrze, a raz szedł w maliny...
Moim zdaniem masz żłe napisaną obsługe przerwania. Procesor jak wejdzie w przerwanie to w niej wisim i wisi. Mogą być problemy ze stosem. Ja bym to napisał tak ze timerem bym wykonywał akcje a w przerwaniu ustawiał flage wciśniętych klawiszy. Otrzymujesz przerwanie i zapisujesz do zmiennej stan klawiatury. W przerwaniu z Timera sprawdzasz jaki stan...
Podlaczasz sygnal do pinu obslugujacego przerwanie zewnetrzne. W przerwaniu tym startujesz licznik i po 1.5ms w przerwaniu licznika sprawdzasz stan.
Witam, A może kopia (pomysłu) klawiatury PC. W timerze odczytujesz np. 10 razy na sekundę klawisze i umieszczasz je w buforze. Główna pętla sprawdzasz stan zmiennej która przechowuje informację o tym ile znaków jest zapisanych w buforze.
Witam, Na module wyjść są umieszczone diody LED. Nic nie trzeba podpinać i symulować. Wszystko ładnie widać a symulować to można wygnały wejściowe ewentualnie poprzez podłączenie włączników, przycisków itp. W TIA można on-line sprawdzać stan zmiennych oraz wjść/wyjść. Nic nie trzeba dokładać. Pozdrawiam,
Dlaczego sprawdzasz stan zmiennej Err? Powinieneś sprawdzać zmienną Numer_kl czyli Do Numer_kl = Getatkbd() If Numer_kl = 0 Then Cls Lcd "err=0" Else Cls Lcd "err=1" End If Loop
Przede wszystkim, zamiast:[syntax=c] case 2051: if (results.value == 2051 && output0State == "off") [/syntax]powinno być:[syntax=c] case 2051: if (output0State == "off") [/syntax]Dodatkowe sprawdzanie stanu zmiennej 'results.value' jest niepotrzebne, skoro: [syntax=c]switch (results.value)[/syntax]już to robi. W switch..case zwykle umieszcza się również...
a co jest nie tak z pętlą while(1) bo nie mogę się dopatrzeć To, że jest pusta. Stan zmiennej flaga sprawdzasz tylko raz na początku programu, po czym zapętlasz go w pustej pętli. Poza tym sprawdzanie if(flaga=1) jest błędem, zapewne miało być if(flaga==1) - przeczytaj ostrzeżenia kompilatora generowane w czasie kompilacji.
Jeśli masz wiele warunków dla stanu tego portu lepiej przepisać do zmiennej i zmasować starsze bity i dopiero sprawdzać stan zmiennej. Wielkość kodu? Tylko kilka dodatkowych bajtów. chcesz 4 młodsze bity? przykład zmienna = pinb and 0x0F Select zmienna Case 0: ' dla wartości 0 Case 1: ' dla wartości 1 Case 2: ' dla wartości 2 Case 3:...
Sprawdzasz stan końcówek w pętli głównej i za każdym razem porównujesz stan ze stanem poprzednim. Jeśli zgodny i wysoki inkrementujesz zmienną np Czas. Jeśli przeciwny zerujesz zmienną Czas. Sprawdzasz wartość zmiennej czas i jeśli zmienna osiągnie zadaną wartość uC wystawia na swoim pinie wyjściowym określony stan. Jak widać ustalenie błędu musi nastąpić...
Analizując pobieżnie Twój program - manipulowanie przerwaniami wygląda OK. Niestety coś w kodzie nie trybi ponieważ dioda informująca o dokonanym pomiarze się nie zapala. Wniosek nieuprawniony, ponieważ w pokazanym wyżej programie nie migasz diodą w przerwaniu, ani w części kodu sprawdzającej stan zmiennej end_echo_flag, a jedynie: - zieloną, gdy pomiar...
a co do zapamiętania stanu przycisku.. dla początkującego najprościej będzie zrobić programowy przerzutnik który zmienia stan po naciśnięciu przycisku, a do debouncowania wystarczy _delay_ms(25), póżniej w pętli sprawdzać stan zmiennej ustawionej przez "przerzutnik" i układ gotowy Dodano po 2 Od jakiej negacji? suma logiczna będzie dawała wynik 1 jeżeli...
Temat opisywany tryliony razy. jak wchodzi w jakiś stan to zapamiętujesz czas wejścia w jakiejś zmiennej. Następnie sprawdzasz czy czas aktualny minus ten zapamietany jest mniejszy od timeoutu.
Ja robię to w dwóch etapach. W przerwaniu jest skanowana klawiatura i zwraca stan klawiatury do programu głównego. Natomiast w programie głównym sprawdzam stan tej zmiennej i zkolei zwracam wartość klawisza tylko wtedy jak się zmienił z "zera" na "coś" inne sytuacje są ignorowane.
Sprawa chyba nie jest taka beznadziejna. Nie wiem na czym ma być ten sterownik ale całkiem ciekawy wydaje się być ATMEGA8535. Ma na pokładzie i RTC, i pamięć EEPROM w której można by przechowywać wskaźnik zakończenia procesu. Np. w momencie uruchamiania procesu możnaby wpisać do komórki wartość jeden a po zakończeniu wartość tą wyzerować. Oczywiście...
Nie możesz podpinać tej samej zmiennej na górze i na dole. Górna zmienna jest sprawdzana (P na zbocze narastające, N na opadające), a dolna to pomocnicza do przechowywania poprzedniego stanu. Naprawdę polecam ustawić kursor na wybranej funkcji i wciśnięcie F1 :)
Chciałbym usunąć procedurę (a raczej zdarzenie) z Form1, podczas korzystania z Form5. Chodzi o Zaznacz i naciśnij Delete . :P A tak na poważnie metodę do wykonania można usunąć w ten sam sposób w który się ją dodało (zobacz w pliku Nazwa.Designer.cs): -= . W tym przypadku mógłbyś w metodzie timer'a sprawdzać stan jakiejś zmiennej ustawianej "z zewnątrz"....
Użyj zmiennej Val.. By przyciskanie zapisywało aktualny stan, wchodząc sprawdzać co było... Wsumie dwa polecenia w bution i jedno polecenie w głównej stronie
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...
Jest to po prostu: forsowanie zmiennej Dobrym podejściem jest sprawdzanie w pętli loop() stanu zmiennej bool i w zależności od jej stanu wywoływać funkcję poza loop(). Natomiast w danej funkcji forsować zmienną odpowiadającą za wywołanie funkcji. Tak, aby wykonała się tylko raz. [syntax=c] bool fnc01; loop() { if(fnc01) { turnOn(); } } void turnOn()...
Po ustaleniu aktualnego stanu zapisujesz go do zmiennych i wykonujesz działania. Przy ponownym wywołaniu pętli sprawdzasz stan i wykonujesz działania tylko wtedy gdy jest inny niż zapisany w zmiennych. Wystarczy zmienna bool, czyli 0 i 1.
Jeśli chodzi o BASCOM to niestety nie znam tego języka bo pisze w C lub w ASM. Jednak powiem Ci jak można to zrobić w prosty sposób. Zapisujesz czas a dokładnie wartość licznika sekund, do pewnej zmiennej. W pętli głównej programu sprawdzasz stan tej zmiennej i wyświetlasz na przemian czas lub temp. No chyba że chcesz wyświetlać oba na raz i co sekundę...
Witam! Potrzebuję w moim programie kolejno wyciągać bit ze zmiennej i sprawdzać jego stan logiczny. Ponieważ sam nie bardzo wiem jak to zrobić proszę o pomoc. Miało by to wyglądać jakoś tak: for (k = 0; k < 8; k++) { // Teraz sprawdzanie logicznego stanu bitu w zmiennej , jeżeli prawda (HIGH) to PORTB.1 = 1; else; PORTB.1 = 0;...
Dla enkoderów ze stykami mechanicznymi, jeśli nie podłączasz go do uC za pomocą prostego filtru RC, wykorzystywanie timera czy przerwań to ślepa uliczka. Z racji, że takie enkodery nie generują impulsów o dużej częstotliwości, to najlepiej zrealizować odczyt programowo, np. cyklicznie w systicku sprawdzać czy mamy stan wysoki przez minimalny czas i...
Ad.1. W linku, który wskazałem odczytujesz stan pinu: [syntax=c] val = digitalRead(inPin);[/syntax] przypisując zmiennej val stan pinu. Stan pinu może być HIGH lub LOW wiec sprawdzasz zmienną na przykład tak: [syntax=c]if (val == LOW) { // gdy przycisk wciśnięty }else{ //gdy przycisk nie jest wciśnięty. }[/syntax] Kod dla przycisku zwierającego do GND...
Uwierz mi najlepiej zapomnij o skokach i w ogóle o BASIC z Atari. Na mikrokontrolerach raczej unika się procedur "skaczących", a bardziej korzysta się z tzw. flag. Skokami można sobie bardzo wiele bałaganu narobić. Inaczej niż na Atari trzeba konstruować program. Nie jako procedury wykonywane linijka po linijce, lecz trzeba sobie wyobrazić, że taki...
W przykładach do biblioteki jest pokazane jak odczytywać czas i przypisywać wartość np. godzin do zmiennej. Jeśli masz w zmiennej godziny to sprawdzasz czy zmieniła się na 17 (a wcześniej nie była) i ustawiasz pin 10 w stan wysoki, a jak zmieniła się właśnie na 18 (i wcześniej nie była) to w niski.
Co zrealizować? Programowe zliczanie impulsów? Ustawiasz timer tak, żeby generował przerwanie co 100 us, sprawdzasz stan portu, robisz xor z poprzednim stanem i testujesz, które bity są ustawione - ustawiony, znaczy zaszła zmiana stanu, czyli inkrementujesz odpowiednią zmienną.
Witam, wszystko zalezy od tego jakiej biblioteki uzywasz do odczytu nacisniecia/dotyku przycisku na ekranie, potem juz bedzie prosto, taki teoretyczny przyklad: Dodałem SYNTAX - starj się o tym pamiętać.
Uczę się obsługi AVR i zatrzymałem się przy licznikach. Mam taki oto kod: licznik - w tym przypadku używam modulo. Wszystko niby działa, aczkolwiek zauważyłem, że dioda zapala się i gaśnie "na dwa kroki" - zapala się lekko, a po kolejnym przerwaniu (tak mi się wydaje), świeci pełnym światłem. Tak samo wygląda gaszenie. Podmieniając modulo na zwykłe...
Normalne.... Dajesz maksymalne obciążenie procesora poprzez ciągłe sprawdzanie. Ten wątek COŚ robi! Ciągle sprawdza stan zmiennej! sprawdz: CMP ax,Terminated JNZ sprawdz Wszystkie wolne zasoby zostaną przydzielone temu wątkowi, gdyż dokonywał on sprawdzenia. Jeśli chcesz uśpić wątek, to możesz to zrobić odpowiednią komendą (następnie wybudzić z...
Skoro opanowałeś obsługę timera, to zrób jeszcze całą obsługę LED w przerwaniu timera. W pętli głównej się multipleksowania LED nie robi, bo ciężko w to wpleść jakikolwiek inny kod. Jaki wtedy jest sens podziały projektu na pliki *.h i *.c skoro część pliku "7led.c" będę miał w pliku związanym z Timer0 ? Chyba, że coś źle zrozumiałem. Źle do tego podchodzisz....
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...
ok, będę w przerwaniu sprawdzał stan pinu. a jak to wrzucić do jednej zmiennej tak żeby to wysłać na UART? myślałem o tym żeby czas trwania ramki ( jednej składającej się z 32 bitów) podzielić na 32 i sprawdzać co zadany czas stan pinu. Tylko jak to wrzucić jako jedną zmienną składającą się z 32 bitów.
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...
volatile jest konieczne jeśli zmienna może zmienić swój stan niezależnie od głównego ciągu instrukcji, a taka zmiana jest niemożliwa do prześledzenia przez kompilator. Przykłądem jest np. sprawdzanie stanu zmiennej w jednym miejscu, kiedy ta zmienna może niezależnie (np. w przerwaniu) ulec zmianie. Bez tej wiedzy kompilator może zoptymalizować i wyrzucić...
Co masz na myśli pisząc o wykresie CK? Generalnie rysowanie tych wykresów nie jest trudne, taki wykres reprezentuje stan w danej chwili czasu. Dla każdego stanu ustalonego (odcinków oddzielonych pionowymi liniami w przebiegu dla każdej ze zmiennych) wejścia masz pewną wartość wyjściową. Zaczynasz od początku wykresu i dla początkowego stanu sprawdzasz...
Witam, Nie wiem za bardzo co można sprawdzić w tym listingu, bo nie wiadomo co ma do końca robić, ale się nie kompiluje z kilku powodów: -niezadeklarowana zmienna "T1" -zmiennej typu String "H" nie można zwiększać ani zmniejszać jak zwykłej zmiennej, także nie można jej porównywać ze zmienną liczbową -polecenie "Lowerline" nie jest równoznaczne z jednoczesnym...
Istnieje taka możliwość. Mianowicie jakaszmienna sprawdzasz poszczególne bity w bajcie i już wiesz na którym pinie masz 1, lub 0.
Teraz zauważyłem że masz źle to zrobione, powinno być tak ustawiasz serwo na pozycji, czekasz, sprawdzasz stan portu, zapisujesz do zmiennej. Ty natomiast czekasz, ustawiasz, mierzysz w zmiennej zostanie zapisane to "zauważył" czujnik przed dokonaniem wpisu w danej zmiennej tzn. ostatni parametr a nie to co było w czasie ruchu czujnika.
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.
bo dane na porcie szeregowym pojawiają się dopiero po zakończeniu ruchu( domyslam się, że to przez funkcję delay) i to w "bliżej nieokreślonym" języku. Tak jakbym pomylił się w określeniu prędkości w Serial. begin . Drugą częścią komplikacji jest to, że nie ma mam pojęcia ( gdy uda mi się rozgryźć enkoder ) jak opisać ograniczenie obrotu. To co jest...
zdecydowałem się na zastosowanie uC aby wyeliminować efekt falowania wody (a tym samym podnoszenie i opadanie włącznika pływakowego co skutkowało kilkunastoma krótkimi włączeniami pompy przy każdym dolewaniu wody). Nie wystarczyło zastosować filtr RC? Dodaj na wszelki wypadek rezystor 10kΩ podciągający RESET do Vcc. Przy takich urządzeniach jak...
We funkcji getlinex zakładasz zmienną lokalną i natychmiast sprawdzasz jej stan. A jaki on jest?
Proponuję w ramach otwierania garażu utworzyć zmienną pomocniczą, którą będziesz załączać na początku i wyłączać na końcu procedury sterowania bramą garażu. Stan tej zmiennej będziesz sprawdzał w innym warunku sterującym światłem, gdzie już użyjesz millis do podtrzymania załączenia na określoną zwłokę.
Nie potrafię zrozumieć dlaczego wg mnie poprawnie napisany kod nie działa jak należy. Ciekawa koncepcja poprawności kodu, szczególnie jak się patrzy na deklarację zmiennych :) W języku C jest coś takiego jak tablica... Jeżeli sprawdzasz przyciski stanem niskim to zainicjuj zmienne oldjoy xx wartością 0xff [same jedynki].
Powinieneś też zdefiniować jakąś zmienną "tryb", wówczas w pętli robisz tak: - zmienna tryb=0 - sprawdzasz stan dip-switchy - każdy dip switch ustawia jeden bit w zmiennej tryb - po tej operacji masz w zmiennej tryb np. wartość 5. - komendą SWITCH albo serią IFów na podstawie wartości w zmiennej tryb wywołujesz odpowiednią sekwencję LEDów.
Prostą rzecz skomplikowałeś jak tylko się dało... Jeżeli już chcesz czarować i nie robisz z przycisków typu matrix, to... 2 zmienne ... podczas każdego sprawdzania działasz w taki sposób, że(zakładam, że '1'-wciśnięty) porównujesz wartości zmiennych z wartością rejestru(logiczny iloczyn - AND). Wynik tej operacji to stan '1' dla wciśniętych przycisków...
Nie- polling to sprawdzanie stanu (wejść, wyjść czy jakiejkolwiek zmiennej) co jakiś czas. Zwykle w głównej pętli- ale wtedy nie wiemy co jaki czas. A w tym wypadku zależy nam aby wiedzieć co jaki czas sprawdzamy. Po to aby obliczyć czas. To że w przerwaniu- to tylko dlatego że chcemy wiedzieć ile czasu trwa sygnał wysoki na wejściach.
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...
Przycisk środkowy służy do sprawdzania stanu bramy (otwarta/zamknięta), działa tylko z kodowaniem zmiennym i napędami z łącznością dwukierunkową. Jeżeli naciskasz krótko (mniej niż 1s) i zwalniasz przyciski zewnętrzne to jaki kolor diody LED widzisz? P .
A co zrobić żeby kolejne kliknięcie zmieniło x na zero? To nie zadziała zbyt dobrze, bo przytrzymanie przycisku będzie ciągle zmieniać stan x na przeciwny. Zresztą taką zmianę szybciej można zrealizować za pomocą x^=1; Stąd też najlepiej PINC przypisać do jakiejść zmiennej tymczasowej i sprawdzać czy od ostatniego sprawdzenia stan przycisku uległ zmianie....
Te kolorowe pudełka jak dla mnie to tylko wygladają dobrze i dają tylko bardzo poglądowe dane. Jak prostownik to tylko z transformatorem, aby testować ładowanie szybki dobry miernik cęgowy, do sprawdzania stanu akumulatora miernik ze zmiennym wyborem obciążenia aby można było zadać odpowiednie do pojemności aku. i z pomiarem pradu i spadku napiecia,...
Chciałbym również zwrócić uwagę szanownych kolegów, że operator logiczny OR (||) różni się w działaniu od operatora sumy bitowej OR (|). Przynajmniej jak ostatnio sprawdzałem, tak było :D . Ta podpowiedź powinna wam wystarczyć. [edit] Ups, kolega już mnie uprzedził i podał jak ma być.
Popracuj na składnią bo piszesz bardzo niezrozumiale. W pierwszym cyklu sterownik sprawdza wejścia, w drugim wykonuje program w oparciu o stany wejść sprawdzone w pierwszym kroku oraz o stany zmiennych wewnętrznych czyli markerów itd. Ich nie musi sprawdzać bo je zna. Procesor zna stany swoich wirtualnych zmiennych, czas zajmuje mu tylko sprawdzenie...
Według mnie to wygląda na miejsce podpięcia dodatkowego wymaganego bloku funkcyjnego. Poszukaj w bibliotekach bloku funkcyjnego, który jest typu "itfIntegrator" lub zwraca tego typu zmienną. Jeżeli znajdziesz taki blok to zadeklaruj go. Następnie jeśli jest to blok tego typu to zadeklarowaną nazwę podepnij pod to wejście. Jeżeli będzie to blok zwracający...
Wiem, chodziło mi o to aby nie sprawdzać stanu styków co 100ms tylko zmieniać wartość zmiennej w zależności od stanu wejścia i inkrementować inną zmienną dając tym samym czas na ustalenie się drgań styków. Ale to i tak bez znaczenia, bo autor nie chce używać procesora do obsługi klawiatury.
Wprowadź do programu dodatkowe zmienne (flagi) zmieniając ich wartość/stan i monitoruj je. Jeśli użyjesz zmiennych bajtowych, to użyj np rozkazu "cjne" i porównaj to do zera lub jedynki. Wartości zmiennych ustawiasz przy sprawdzaniu wciśniętych klawiszy, natomiast ich stan sprawdzasz w pętli.
czy c na kompie różni się mocno od tego c na mikrokontrolery? W praktyce najważniejszą różnicą jest to, że na mikrokontrolerach bardzo często używa się operacji bitowych, np. ustawiania i zerowania poszczególnych bitów w zmiennej lub sprawdzania ich stanu, co na pecetach nie występuje tak często.
Zaraz.. Z twojego opisu wynikało, że masz sprawdzać stan przełączników, czyli zmienną 'a'. Stan przełączników będzie 1111 gdy zmienna 'a' osiągnie wartość integer 15, czyli 0xF szesnastkowo. Wydaje się ok, ale po co mnożenie jej przez 100000..? Zamiast: [syntax=c]a=(przel[0]+(przel[1]*2)+(prze... if(a==15*100000) { while(1)...
Nie tędy droga, Ty musisz zrobić coś dokładnie odwrotnego - nie wygenerować sygnał, ale go zmierzyć. Rozwiązania są 2, ale jeśli programujesz w bascomie i nie masz ochoty na operacje na rejestrach w procesora to kurczą się do jednego. Mianowicie: 0. ustawiasz timer na zliczanie impulsów i zmianę wartości jakiejś zmiennej - parametry dobierz w zależności...
Sprawdzasz stan portu np co 2ms. Jeśli reakcja ma nastąpić przy zboczu opadającym to jeśli masz stan niski zwiększasz jakąś zmienną co te 2ms, jeśli stan wysoki to zerujesz. Po tej operacji sprawdzasz czy zmienna osiągnęła np 10 co oznacza że przez 20ms teoretycznie stan był stabilny i nie powinno być już więcej drgań styków więc możesz wykonać operację...
zarowno vhdl jak i ise to nie moja bajka, ale moze przydadza ci sie takie ogolne uwagi: hmmm... spotykalem sie z opiniami aby unikac asynchronicznych sygnalow, ale reseta raczej pozwalano mi zostawic taki globalny reset to jakis 'guzik', ktory ma ustawic cala logike w dobrze zdefiniowany stan poczatkowy; naciskasz reset, F-F sa zerowane, zwalniasz reset;...
Witajcie Mam dość prostą funkcję ISR, która korzysta z kilku zmiennych statycznych (flag typu uint8_t) oraz sprawdza stan (switchem) jednej zmiennej globalnej (oczywiście volatile) by sterować swoim działaniem w wyniku którego ustawia (lub odczytuje) poszczególne bity kolejnych bajtów niewielkich tablic globalnych (typu uint8_t) oraz wachluje portem...
Według dokumentacji arduino : Rozumiem że digitalRead w przypadku gdy pin ustawiony jest jako wyjście nie ma sensu?? ale działa... i nie tutaj jest chyba problem ponieważ nawet gdy sprawdzam stan pinu za pomoca zmiennej do której wpisuje odpowiedni stan (zmienna stan) to sytuacja wygląda identycznie w przeglądarce. Pośrednio poradziłem sobie dając...
Witam Procedura gotowa, działa na przerwaniu i wyrabia się w 40 cykli zegara (około), ale nie odkładam rejestrów licznika na stos, jeżeli licznik będzie w SRAM to trzeba dodać zachowanie na stosie rejestrów Y. Na razie popatrz na asembler i napisz co z tego rozumiesz, acha, algorytm jest inny niż twój. INT0INT1: push r16 ;odłożenie rejestrów i SREG...
Algorytm jest już prawie gotowy bo opisałes co ma być zrobione. Mozesz sobie to narysować w postaci schematu blokowego. Gdyby monitorować 1 pin i sterowac 1 wyjście sprawa wtedy jest prosta i da się to zrobić bez timera dokłądnie realizując zapisany algorytm i "czekająć" określony czas. Gdy się ma juz wiecej wejśc/wyść obsłużyć w ten sposob to jednym...
Serwo po zmianie wypełnienia błyskawicznie ustawia się na nowej pozycji więc jeśli chcesz płynnie zmieniać pozycję serwa to musisz sam powoli zmieniać zmienną "pozycja". Najlepiej w jakimś przerwaniu zegarowym. Proponuję tak: - robisz zmienną "pozycja" i zmienną "zadana" i nadajesz im odpowiednie wartości początkowe W pętli głównej: - inicjalizujesz...
Jedyne sensowne rozwiązanie to wykorzystanie instrukcji warunkowych. Każdy z 4 bitów zmiennej sprawdzasz i w odpowiednio do tego zmieniasz stan wyznaczonego pinu. Szybko i prosto, spokojnie wystarczy dla tego LCDka.
Niestety projekt mam do oddania "na wczoraj" więc nie będę się w to bawił. Ale na pewno porada przyda się na przyszłość. Mam pytanie z innej beczki: Do interakcji z urządzeniem będę wykorzystywał 5 przycisków. Czy dobrym pomysłem jest sprawdzanie ich stanu w przerwaniu generowanym np co 25ms?
Nigdzie nie widzę definicji PINCx, a więc zakładam domyślne pochodzące z avr/io.h (iom8.h): /* PINC */ #define PINC66 #define PINC55 #define PINC44 #define PINC33 #define PINC22 #define PINC11 #define PINC00 Tak więc są to stałe zdefiniowane jeśli dany pin istnieje, zawierają numer bitu który należy sprawdzać. Nie są to marka do sprawdzania stanu pinu...
W takim wypadku pętla zostanie przerwana dopiero po upływie czasu w delay(), Dopóki "odmierzasz" czas z użyciem delay() takie niedogodności będą się pojawiały. W mojej stopce jest artykuł na temat nie mogę w *dowolnym* momencie przerwać pętli. To chyba pozostaje już tylko wymuszenie przerwania watchdog. W obsłudze WD musiałbyś zapamiętać w EEPROM kod...
AVE... Ustaw timer tak, by odmierzał 2,5ms. Licznik wierszy o jeden w górę, pobierasz bajty z pamięci, wprowadzasz do rejestru i potem zapodajesz sobie pętlę nieskończoną. Jak timer Cię wyrwie z pętli, to powtarzasz powyższe kroki czytając kolejne dane, podnosząc licznik i robiąc inne pierdoły. Gdybyś potrzebował dodatkowych funkcji, to możesz jeszcze...
Sprawdzałem kod programu bez podłączenia kontaktronu (otwarty obwod) jak i z podłączonym (na otwartym obwodzie i zamkniętym-zbliżony magnes) w każdym przypadku stan 1 zamiast 0 mimo przypisania stanu 0 do zmiennej, tak jak w programie. Działa wszystko jak chodzi o kontaktron który jest odłączny do D8. Kontaktron po przełożeniu z D8 do D5 też ma.caly...
Najprościej będzie jeżeli użyjesz przerwania które wykona się za każdym zboczem opadającym impulsu. W procedurze przerwania podnosisz wartość zmiennej o jeden. Natomiast w głównym programie sprawdzasz wartość zmiennej. Jeżeli będzie równa 24 to ustawiasz stan wyjścia 1 na LOW. Mogę Ci coś takiego napisać na priv ale dobrze by było gdybym miał schemat.
"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...
Możesz spróbować mniej więcej tak: // deklaracja zmiennych globalnych volatile uint8_t prev_tcnt, T; // w funkcji 'main' // skonfiguruj przerwanie INT0 tak, by reagowało na obydwa zbocza MCUCR |= (1<<ISC00); // używaj raczej makra ISR ISR(INT0_vect) { // sprawdzasz które zbocze wywołało przerwanie // jeżeli zbocze narastające,...
Witam. Może to głupie pytanie, ale nigdzie (nawet w dokumentacji nie mogłem się dokopać) nie znalazłem porządnego opisu typów zmiennych w SDCC. http://sdcc.sourceforge.net/doc/sdccman.... Aha, w SDCC stawiam moje pierwsze kroki ;) Ale to wcale nie zwalnia od myślenia , wręcz przeciwnie :D Jeszcze jedno, mamy załóżmy liczbę 18-to bitową....
Witam, a co nie dziala ? Z tego co widze to jak przycisk jest wcisniety == LOW to gasisz wszystkie LED a jak puszczony to wykonuije petle - zle - wcisniecie przycisku ustawia pewna zmienna, pierwsze wcisniecie ja ustawia drugie kasuje i tak w kolko, a petla glowna sprawdza stan tej zmiennej inaczej do wylaczenia musisz trzymac przycisk wcisniety. Cos...
Zamiast męczyć maliny z poziomu każdego użytkownika osobno (jak polecają w poście wyżej). Możesz sprawdzać stan malin z serwera (z niego wysyłać zapytanie) - w wypadku gdy stan portów zmienia się w dużej częstotliwości, w tym wypadku polecam cron'a. Możesz przy zmianie stanu portu wysyłać post do serwera i tam mieć zapisane stany dla każdej maliny osobno,...
hmm zaraz bo ja jakoś to zrobiłem tak, że działa normalnie nawet jak zostanie w pozyji przejściowej czyli ze zwartym X'em Dodano po 3 dałem zmienną BIT która jest ustawiana gdy oba (można zrobić warunek tylko dla X) piny enkodera X i Y są w stanie wysokim (nie zwierają do masy) i potem warunek, że jeśli ta zmienna bit = 1 to wtedy dopiero sprawdzam...
Funkcja milis czeka na określoną wartość timera systemowego. Jak sama nazwa wskazuje licznik liczy w milisekundach. I działanie jest takie: [syntax=arduino] time=0 //przypisanie do zmiennej time wartości 0 If (millis()-time >= 5000); //sprawdzanie czy minęło 5000ms czyli 5s. Wartość millis cały czas rośnie, o 1 co 1ms. digitalWrite(LED, HIGH) // ustawienie...
Nie byłem w domu od czwartku i nie miałem dostępu do neta. A jak skomunikować ze sobą kilka maszyn stanu? Zmiennymi globalnymi? Czy po prostu używać wskaźników na te same funkcje? Wiem, że to wiele zależy od konkretnego projektu, ale chciałbym zobaczyć jakieś przykładowe powiązania między np dwiema różnymi maszynami stanu. Co znaczy skomunikować maszyny...
Może przerwania wcale nie są generowane co 1s i inkrementacja zmiennej czas_przyciskania_plus odbywa się tak szybko, że szybko jest ona większa od 2? Twój warunek może być maksymalnie spełniony przez 1s w przypadku ciągłego wciśnięcia przycisku. Nie zamieściłeś całego kodu ale może zastąp warunek czas_przyciskania_plus==2 warunkiem czas_przyciskania_plus>=2....
Nie można w ten sposób "szeregowo" wstawiać warunków na sprawdzanie, czy coś jest w buforze Serial: Co się stanie, jak pierwszy warunek nie będzie spełniony, ale drugi już tak, albo następny ? Kompletna sieczka tzn. przesyłane dane trafią nie do tych zmiennych, co trzeba. Lepiej w takiej sytuacji sprawdzić od razu, czy w buforze Serial jest komplet...
Proponuję: if (r >=g && r >= b) PORTD |= _BV(PD4) Analogicznie dla "g" i "b". Należy także gasić wszystkie diody przed sprawdzaniem warunków. Założyłem, że stan wysoki na porcie zapala diody. Jeśli zachodzą warunki podane przez kolegę Andrzej_S , to zapalają się te diody, które są równe pod warunkiem, że są to wartości największe.
Nie napisałeś nic o tym, ile będzie trwał stan wysoki (czas minimalny jeśli dany pin jest podciągany pod VCC), czy są jakieś czasy krytyczne. Co ile może pojawić się zbocze ? Generalnie ja to widzę tak: potrzebujesz zmienną. Jej wartość odpowiada wartości danego pinu, na którym masz wykrywać zbocze. Załóżmy wartość początkową 0. Gdy zmienna=0 i odczytany...
Przetrzymuj w pamieci ostatni stan portu (tylko tych bitow co cie interesuja - najprosciej trzymac bajt po funkcji AND na te bity) Teraz w petli while(1){...} jezeli stan wejscia sie zmienil dla ktoregos bitu z 0 na 1 to dodaj 1 do jego licznika - nastapil impuls. Na koniec petli ponownie do pamieci wrzuc nowy stan portu Kod by wygladal mniejwiecej...
const int stepPin = 8; unsigned long stepperTimer; int currentStepperSpeedDelay = 500; // bieżąca prędkość krokowa opóźnienie byte stepInState = 0; // stan wysoki lub niski dla następnego kroku int stepCounter = 0; // licznik kroków int targetSteps = 200; // docelowa ilość kroków bool running = false; // flaga informująca, czy silnik działa void setup()...
Wystarczy zerknąć do DS i sprawdzić jak poustawiać rejestry. To jest kilka linijek kodu - uruchomienie timera w tryb input capture + przerwanie overflow od niego - uruchomienie innego timera w trybie ctc liczącego np 20ms. - obsługa przerwania w którym ustawiamy flagę (tego z ctc), że trzeba obliczyć szybkość - w przerwaniu overflow inkrementujemy jakąś...
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...
Wypowiadając się w stylu tego tematu: Zastosuj dodatkową zmienną, która będzie przechowywać stan, jaki był poprzednio na pinie w chwili sprawdzania warunku sprawdzaj też, czy stan pinu się zmienił i wykonuj funkcję tylko wtedy, gdy taka zmiana rzeczywiście nastąpiła, fajnie się czyta? Pozdrawiam.
Ja pomiar czasu (i to nawet precyzyjnie) zrobiłem na timerze i przerwaniu od INT0. INT0 ustawiłem na przerwanie od dowolnej zmiany stanu. W funkcji przerwania sprawdzam czy jest to san wysoki czy niski, i uruchamiam z którymś z nich timer i przerwanie od zrównania licznika z rejestrem. Program leci sobie dalej jak chce i co jakiś czas następuje przerwanie...
Zastosowałem się do instrukcji i dalej nic mi nie wychodzi.Przepraszam ,że zawracam głowe ale ja dopiero się uczę i to moje pierwsze pisanie. Dodano po 7 Teraz wygląda to tak: $regfile = "2313def.dat" $crystal = 800000 Config Pind.0 = Output Config Pind.1 = Output Config Timer0 = Timer , Prescale = 256 On Timer0 Odmierz_1s Dim Licz_8ms As...
Teraz kod sprawdza przycisk co około 1,4s, a więc musisz trzymać przycisk tak długo. Nie chodzi mi o sprawdzanie co jakiś czas, tylko o wykrycie samego faktu, że na wejściu nastąpiła zmiana stanu z 1 na 0: //.... unsigned char pina_laststate = PINA; for(;;){ PORTC= 0b11111110; PORTB=LED[j]; _delay_ms(4); PORTC=0b11111101;...
przecież w tytule napisałem że WinAVR :) Problem się rozwiązał więc temat można chyba zamknąć. Muszę przyjąć że poprostu coś wariowało.. w sumie była akurat burza u mnie =) A to zero przy pierwszym pomiarze brało się z czego innego chyba - nie sprawdzałem stanu flagi i zanim dokonał się pomiar defaultowa wartość zmiennej była wyświetlana (czyli 0)....
rozrząd wymieniałem, sprawdzałem i dalej tak samo. odkąd go kupiłem tak jest, jakiś idiota zaślepił wtyk od czujnika i wsadził go na sztukę żeby równo chodził. a błąd: uszkodzony czujnik zmiennych faz rozrządu, stan wysoki.
Jeżeli możesz wykorzystaj PWM jak sugeruje BoskiDialer. Ale jeżeli nie to : Jeśli chodzi o zmianę czegokolwiek w RS-ie niema możliwości protokół jest narzucony przez specyfikację i dane przychodzą w nieprzewidywalnych odstępach czasu - nieregularnych. Rozwiązanie z timerem i cyklicznym sprawdzaniem czy coś przyszło załatwia ten problem. Tu jest kwestia...
Nie będę tłumaczył linijka po linijce to bo to bez sensu. Po co miałem definiować S1 jak o Port? Jak wciśniesz Down to sprawdza czy S1 = 0. S1 będzie równe 0 gdy przycisk wcześniej nie był wciśnięty. Jak nie był wciśnięty to zaznacza że już jest wciśnięty (S1 = 1) i zwiększa zmienną X. Przy kolejnym sprawdzaniu stanu przycisku dojdzie do wniosku że...
sprawdzanie zmiennej odczyt stanu zmiennej sprawdzanie stanu serwera
prawa konsument excel losować liczba płyta indukcyjna wybija bezpieczniki
Czy można pospawać złamane wiertło widiowe? Kod błędu 21 w Iveco Daily - przyczyny i diagnostyka