Witam Mam problem. Robię układ, który ma wejście na którym jest stan niski lub wysoki. Jeśli jest stan wysoki to uruchom przerwanie ale tylko 1 . Jeśli jest stan niski to tak samo 1 raz. Ale stan może utrzymywać się nawet przez godzinę a przerwanie ma wysyłać instrukcję radiem tylko 1-2 razy i ma wyłączyć transmisję. Dodatkowo jeśli jest stan niski...
Witam. Zbocze narastające to masz jedno przerwanie w momencie gdy stan zmienia się stan wejścia z niskiego na wysoki a przy stanie wysokim będziesz miał wiele przerwań tak długo jak będziesz miał stan wysoki na tym wejściu.
:D Ale nadal mnie nurtuje dlaczego przy takim programie i włączonym wewnętrznym pull-up generuje Ci się przerwanie, pomimo stanu wysokiego na wejściu INT1. Co tam masz podłączone?
PCF8563 z tego co wyczytałem ma tylko "open drain" na interrupt a ja już mam ustawione wejście w ESP32 do wybudzenia poprzez stan wysoki na wejściu. Czyli np. do wejścia ESP32 możesz podłączyć rezystor pull-down (10k) oraz użyć tranzystora PNP, który będzie sterowany z wyjścia open-drain PCF8563: https://obrazki.elektroda.pl/6625662900_...
Znając zycie wystarczy falling/rising edge;)
Witam, Przykładowo chcesz wykonać pewną operację kiedy np na jakimś wejściu cyfrowym pojawi się stan wysoki. Ustawiasz przerwanie do tego wejścia i tylko kiedy pojawi się stan wysoki na tym wejściu działanie programu w plc jest przerywane, zostaje zapamiętany moment w którym program został przerwany. Następuje wykonanie bloku od przerwania sprzętowego....
Po czym wnioskujesz, że : ... w rzeczywistości działa non stop - niezależnie czy jest stan niski czy wysoki.
Witam, użycie SPI zajęłoby tyle miejsca co wklejone przez ciebie fragmenty kodu, a domyślam się, że masz tam takiego "czegoś" więcej... Poza tym byłoby szybsze, bardziej eleganckie, pewniejsze, i wiele wiele innych... Pozdrawiam, GSM
(at)minitronik Najprostszy procesor - podajesz na wejście timera te impulsy, programujesz timer tak, że po zliczneiu do 56 generuje przerwanie zmieniające stan wyjścia na niski - do tego służy rejestr compare w timerach. Drugi taki rejestr programujesz na 4 i przerwanie z tego zdarzenia compare wystawia stan wysoki. Ot i cały program. W sumie na dyskretnych...
Kiedy zgłąszane jest przerwanie ( w tym wypadku polega na odcięciu INT0 od masy) Trzeba było zostawić jak wcześniej, że stan niski powoduje przerwanie (bo jak rozumie to teraz stan wysoki powoduje zgłoszenie przerwania). I chyba masz konfiguracje przerwania złą. nie powinno być: MCUCR &= ~_BV(ISC00); MCUCR &= ~_BV(ISC01); ISC01 ISC00 Description 0...
Jak INTX ma cały czas stan niski to przerwanie jest cały czas wywoływane, a procesor wykonuje jedną instrukcję pentli głównej na jedną obsługę przerwania - czyli działa tylko że bardzo wolno. A rozwiązanie Twojego problemu jest proste. Gdy przyjdzie przerwanie od INTX w stanie niskim to przełączasz to budzisz procesora i przełączasz to przerwanie na...
Czy wszystko będzie ok. trudno wyczuć. Zależy jaki zastosowałeś układ wykrywania przejścia przez zero. Jeżeli stan niski utrzymuje się przez większą część przebiegu i tylko w okolicach zera jest wysoki to dopóki jest stan niski to jest zgłaszane przerwanie. Jeżeli dodać do tego że przerwanie int0 ma najwyższy priorytet poza reset to przerwanie od timera...
Jak już napisałem, można kombinować różnie. W tym przypadku po prostu po 62 przerwaniach zapalasz diodę, a po 124 gasisz (lub odwrotnie). W tym przypadku czas zapalenia (62 przerwania) i czas zgaszenia (124 - 62 = 62 przerwania) są równe, ale nie muszą być. Poza tym w takim rozwiązaniu znasz stan sterowanego pinu, kiedy jest w stanie niskim (pierwsze...
SS musisz wykorzystać, bo tylko stan tego pinu gwarantuje przejście pozostałych linii interfejsu SPI w stan wysokiej impedancji. Przerwanie od SS nie jest potrzebne - niski poziom tego sygnału aktywuje interfejs i powoduje wysłanie SPDR. Po zakończeniu wysyłania bajtu danych możesz otrzymać przerwanie zakończenia transferu SPI w którym to przerwaniu...
Witam... To co się rzuca w oczy to np... Dwa razy ustawiasz port B jako wejście więc nie wiem po co jeszcze ustawiasz cały w stan niski... Po czym w obsłudze przerwania w stan wysoki...?.!.? To B ma być jako wyjście czy wejście...?.?.? Pozatym dwa razy grzebież w rejestrze TCCR1B także to co ustawiłeś za pierwszym razem zostaje wyzerowane za drugim...
sam musisz skasować to przerwanie!! Na początek zablokuj to przerwanie w procku a następnie w rejestrach NM7010a (INT_STATUS(x) i INT_REG) na tych pozycjach które pokazują jakie to przerwanie i od czego wpisz 1. Zajrzyj do funkcju API tego modułu na stronie WIZNETU. Są napisane dla '51 ale sporo rzeczy mozna znaleźć! powodzenia!
Pytanie do Andrzej__S lepiej, zmienić wywołanie przerwania na stan niski, czy zostawić zbocze opadające ? Kolega snaap skorzystał z wyzwalania stanem niskim ze względu na to, że miał potrzebę wybudzania mikrokontrolera ze stanu uśpienia. Dodatkowo w obsłudze przerwania ustawiał tylko odpowiednią flagę, a resztę operacji wykonywał w głównej pętli programu....
Na początku procedury obsługi przerwania ustaw wybrany pin GPIO w stan wysoki i na końcu procedury ustaw stan tego pinu na niski. Czas stanu wysokiego zmierz oscyloskopem. Wprowadź do wyniku ewentualną korektę związaną z czasem wejścia w przerwanie, wyjścia z niego (zwykle po kilka cykli procesora) i czas ustawienia stanu GPIO, choć przy rozdzielczości...
Problem w tym, że przez tranzystor PNP napięcie na CTRL bardzo wzrasta, czego chciałbym uniknąć, przypuszczam, że CTRL powinien wchodzić na tranzystor NPN, ale nie wiem jak to połączyć. W jakim sensie wzrasta że płynie duży prąd bazy i podnosi napięcie wyjściowe w stanie niskim? czy że próbujesz wysterować tranzystor innym i poziomami niż masa i napięcie...
Dzięki Tony wiele mi wyjaśniłeś. OK, wiec jesli dobrze zrozumiałem, wychodzi na to, że jesli przerwanie jest usatwione na zbocze to jeśli prawie w jednym czasie wystąpią powiedzmy dwa przerwania (na jednej lini przerwań) to jedno zostanie zignorowane i sie zawiesi bo: -pierwsze przerwanie wystawi stan wysoki na lini przerwań, co wygeneruje zbocze rosnące,...
Po wykryciu stanu niskiego na PD3 zablokuj przerwanie od tego pinu i odblokuj je dopiero przy ustawianiu stanu wysokiego na PB1. Pamiętaj aby przed odblokowaniem przerwania wyzerować flagę przerwania.
DAC0808 - nie ma kompletnie żadnej filozofii. POdłączasz go do jakiegokolwiek ośmiobitowego portu, ustawiasz kierunek (DDRx = 0xff;) i zapiszujesz wartość (PORTx = wartosc;). PCF8591 - http://elportal.pl/index.php?module=Cont... część szósta, pobierz listingi. ADC0820 - podobnie jak DAC0808 podłączasz do portu ośmiobitowego....
Musisz chyba użyć timera ustawionego tak aby przerwanie z niego następowało później niż czas między kolejnymi wysyłanymi paczkami z pilota. Z tego co pamiętam to pilot w standardzie RC5 wysyła przy stale wciśniętym klawiszu kod co jakieś 89ms. Jeśli używasz przerwań do czytania kodu to dajesz mu wyższy priorytet niż timerowi. W timerze zerujesz pin...
Jj_Johnys : Wcisniecie przycisku daje ok. 100ms sygnalu? Rozne przyciski maja rozne dlugosci sygnalow? Jak dla mnie to przycisk zwiera w zaleznosci jak dlugo sie go przytrzyma, po za tym przy wciskaniu przycisku nastepuja drgania stykow ktore daja duzo szpilek i napewno nie osiagniesz zadnego konkretnego sygnalu o konkretnej dlugosci. Jesli chodzi...
No tak faktycznie te 100x zrobi się w mgnieniu oka... Więc program musi dodać +1 przy zmianie na stan wysoki i koniec, jednokrotnie. Może zastosować przerwania? W momencie kiedy wystąpi stan wysoki, następuje przerwanie które zlicza +1 do licznika. Czy to miało by sens? uC to attiny 2313.
Właśnie ! Przerwanie działa ale stan wysoki podawany na kolektor transoptora nie wystarczy by podtrzymać świecenia diody led. Mało tego on tam był .Potrzebne jest naciśnięcie s1 aby Q1 zadziałał.
Skoro jest możliwość generowania przerwania od przechwycenia wartości licznika przy narastającym i opadającym zboczu to po co do tego jeszcze mieszać przerwania od GPIO? Kwestia tylko sprawdzenia w przerwaniu czy w danym momencie jest stan niski na porcie czy wysoki. Jeśli jest stan wysoki to zapamiętujemy wartość licznika do zmiennej A jeśli jest niski...
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...
Będzie działał, mój post zacząłem pisać 2 minuty przed wysłaniem go, więc trochę się pomieszała kolejność :). Ale może przy dużych obrotach fototranzystor jednak nie zdąży załapać i stąd błąd? Powinien zareagować przy czasach oświetlania diodą rzędu 20 mikrosekund, co raczej jest wystarczające, jednak może warto sprawdzić? Dodano po 1 A co to?:[syntax=c]MCUCR...
Z tego co tak na szybko wykombinowałem to musze zrobić przerwanie co 20ms, w obsłudze przerwania ustawić stan wysoki, odczekać przykładowo 1.5ms i potem ustawić stan niski? Jeszcze tego nie spr, ale myśle że powinno być ok
W Chcę żeby uruchomiło się w nim przerwanie od Timera i wystawiło stan wysoki na wszystkich wyprowadzeniach
Dzień dobry wszystkim, Prosił bym o doprecyzowanie "CEN nie jest konieczny, wystarczy przerwać 3V3 w procesie resetowania i rozpocząć flashowanie." Czy CEN powinien być w stanie niskim przed rozpoczęciem flashowania (do GND) czy wysokim i przerwać podczas startu? W ESP8266 należy podać stan wysoki przed programowaniem jeśli dobrze pamiętam. W nocie...
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ż...
Tak, tylko to _delay_ms(500) jest tylko wtedy, gdy nacisnę przycisk, a nie cały czas. Jedno przerwanie ustawia stan wysoki (compare match) a drugie niski(overflov). Co do drgań styków, to oglądałem film Pana Mirosława i tam on obalał tą tezę. Ja podzielam jego zdanie. Z resztą nie mam z nimi problemów. Co z tego że static? Nie pomyliło ci się z const?...
hardwarowo nie da się. Możesz natomiast użyć licznika do generowania sygnału PWM: np na przerwaniu od Timera ustawić ustawianie stanu zerowego na porcie, a w pętli głównej programu ustawić warunek porównujący stan licznika z jakąś stałą i jako warunek wyjsciowy dać ustawianie portu w stan wysoki. Jest to jednak dość karkołomne rozwiązanie, w którym...
Nie wiem tylko jak zmodyfikować schemat żeby wstawić dwa fotorezystory zajmując przy tym jedno wejście ARDUINO. Niestety nieprecyzyjnie określiłeś warunki Twojego projektu, bo nie określiłeś w jaki logiczny sposób mają te sygnały z dwóch fototranzystorów tworzyć ten jeden sygnał na pin Arduino. Tu masz dwa schematy: https://obrazki.elektroda.pl/1409721900_...
Odczyt przetwornika A/C też wprowadza jakieś opóźnienie, zwłaszcza jeśli używasz funkcji bezpośrednio AnalogRead(). Jak pisał przedmówca, mógłbyś użyć PWM-u, w "odbiornikach" ustawić przerwanie na wyzwalanie obydwoma zboczami i wewnątrz przerwania z użyciem funkcji micros() mierzyć czas stanu niskiego i wysokiego, a ich iloraz da Ci współczynnik PWM. Arduino...
Nie LED nie świeci. Jeśli LED nie świeci, bo jest uszkodzona - miernik będzie działał tylko w trakcie naciskania TEST, Q1 będzie nasycony przez dołączenie do jego Bazy złącza B-E tranzystora Q2, jednak podtrzymanie zasilania przez Q1 nie nastąpi, bo kolektor nasyconego z portu PD6 tranzystora Q3 "wisi" w powietrzu, przez przerwany obwód LED. Dla "spokojności"...
No, tak, teraz widać, że LED ściemnia Ci się "w drugą stronę". Mały egzamin (dwa pierwsze pytania dotyczą Twojego układu): 1. Jaki sygnał wyzwala triaka? 2. Jaki sygnał zapala diodę? 3. Na jakiej zasadzie działa sterowanie fazowe? Triaka wyzwala stan wysoki na PC0. Celowo napisałem "wyzwala" nie włącza, ponieważ triaka się nie da wyłączyć (w przeciwieństwie...
Witam. Kilka razy miałem problem z linią MCLR w PIC18 PIC12, jeśli linia była skonfigurowana jako wejście i MCLR podciągnięte do plusa zasilania poprzez rezystor podciągający wewnętrzny to mikrokotroler się resetował po jakimś czasie pracy. Czy ktoś miał podobny problem? Druga sprawa to przerwanie od komparatora w nocie dla PIC18F46K20 jest napisane...
Jeśli dobrze policzyłem przerwanie powinieneś mieć co 0,5 sekundy. 18432000 / (2 * 1024 * 4500) = 2Hz Ponieważ w przerwaniu zmieniasz stan pinu na przeciwny, to na nim powinien być 1Hz. Jeśli fusebit CKDIV8 masz zaprogramowany (fabrycznie ustawiony), to na pinie powinno być 0,125Hz, czyli stan wysoki co 8 sekund. Zakładam oczywiście, że pracując z takim...
Rezystor od kolektora do Vcc, pin procesora do kolektora. Wartość tego rezystora zależy od wymaganej częstotliwości przełączania, CTR i prądu diody, w efekcie możliwego do uzyskania prądu kolektora. Musisz go tak dobrać, żeby przy zablokowanym tranzystorze był w stanie wymusić poziom wysoki, a przy odblokowanym tranzystor dawał radę wymusić stan niski....
Nie mogę zrozumieć, czym się różnią oba przerwania. Wg datashitu INT to External interrupt, a PCINT to Pin Change Interrupt. Czyli zarówno jedno jak i drugie wygeneruje przerwanie, jak pojawi się stan wysoki/niski. Na czym więc w praktyce polega różnica?
28aug240 w podprogramie masz umieszczona petle nieskonczona DO ... LOOP. Wyglada na to ze nie chce wyskoczyc z niej za posrednictwem RETURN'a. Sprobuj zamiast niego wstawic EXIT DO. Mozesz jeszcze podciagnac P3.2 do plusa. Czasami zdarzalo mi sie, ze pin portu nadpalil sie przez niechcace podanie 12V. Dzialal, ale mial problemy ze stanem wysokim.
Freddie Chopin - gdyby nie twój tutorial i twoje przykłady prawdopodobnie do teraz bym grzebał w AVRach ;) Wracając do tematu, znalazłem [url=http://homepages.cae.wisc.edu/~brod... stronę i wynika z niej że najpierw muszę dokonać odczytu z "write-buffer status port" i poczekać aż bit 7 będzie równy 0, a potem dopiero dokonać...
Myślę, że mikro-kontroler będzie idealny. ATmega 8 będzie ok choć moim zdaniem trochę nadmiarowa. Ale jak jest w szufladzie ...jak najbardziej. Co do programu..wydaje mi się, że to raczej dość łatwa sprawa. Np. wejścia układu po obniżeniu napięcia do akceptowalnych przez AVR'a można podać na wejścia INT0 i INT1. Zmiana stanu na wejściu INT0 niech spowoduje...
a jaki powinien byc stan na tej nóżce po podlaczeniu wewnetrznego pullup?? Wysoki , 1 , ~VCC , czy jak kto woli to nazwać.Wiszący pin "robi za antenę" i trudno przewidzieć jego stan. Piotrek
Pin Change Interrupt masz zarówno jak pin przechodzi ze stanu wysokiego w niski jak i z powrotem, kiedy pin powraca z niskiego w wysoki. Mając trzy wentylatory każdy może losowo wyzwolić przerwanie stanem niskim jak i powracając w stan wysoki. Soft niby odsiewa te powroty w stan wysoki. Tylko powiedz po co on testuje te trzy warunki? Napisz obsługę...
Heh, siedzę i nie daje mi to spokoju. Kod który napisałeś - nawet nie czytam bo w C piszę od niedawna ale tylko na ARM'y czy też na LPC i nazwy rejestrów itp nic mi nie mówią. Moja koncepcja jest taka: Uruchamiasz 1 timer z przerwaniem co 50ms.(dlaczego co 50?). W przerwaniu 1 timera uruchamiasz 2 timer. Ustawiasz przerwania 2 timera, w każdym przerwaniu...
do ustawienia "1" na pinie nie potrzeba żadnego prądu. Ty musisz ustawić "0", żeby wywołać przerwanie i w związku z tym nie doprowadzasz do wejścia prądu, tylko go "wysysasz". Trzeba chyba ponad 100µA pobrać, żeby ustawić stan niski. '51 ma wyjścia typu otwarty dren z podciąganiem do + zasilania za pomocą układu na tranzystorkach polowych, ale...
A gdzie masz polecenie Start Timer0?
Nie neguję rozwiązania przerwanie-w-przerwaniu, w niektórych sytuacjach jest to rozwiązanie bardzo eleganckie i efektywne, tylko należy pamiętać aby dobrze wyłączać przerwania. Nie popieram natomiast pętli oczekującej w przerwaniu, kod warto przeprojektować względem tych pętli pozbywając się ich - czy to przez automat skończony zmieniając INT1 na przerwanie...
Usuń <br/> z końca linka, bo przez to link nie działa. Pytanie, czy te wolne piny zostawiłeś w powietrzu. Bo one generują przerwanie, więc jeśli "dyndają", to w kółko wystawiany może być stan wysoki, który powinien po tych 304us zejść na niski, ale może nie zdążyć przez kolejne przerwania generowane przez "dyndadła". Wyobraź sobie, że to wykonuje...
Zobacz co się dzieje: TCNT1 ma wartość 65535 i za chwilę nastąpi przerwanie, wykonywana jest instrukcja timer1_=TCNT1 i w tym momencie następuje przerwanie. TCNT1 po powrocie ma mniejszą wartość ale jest już po herbacie - licznik==1 warunek po if jest spełniony PORTB=0 i czekamy na następne przerwanie. Dlaczego 20 cykli jest dobrze? Bo przerwanie musi...
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...
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...
Jak masz ustawione na Low Level i trzymasz nóżkę na poziomie low to przerwanie wykonuje się w kółko, dopóki nie zmieni się stan na wysoki. W przypadku zboczy przerwanie wykonuje się tylko na zboczu - opadającym, rosnącym, lub dowolnym (jest taka opcja też do wyboru). Czyli tak jak napisałeś :)
Chcę aby podczas wykonywania cyklu sterownika gdy na wejściu np. x0 pojawi się stan wysoki przerwało dotychczas wykonywany program natychmiastowo i wykonało funkcję lub kawałek programu a następnie po wykonaniu powróciło do miejsca gdzie wcześniej wykonywany program był przerwany. Dlatego chcę użyć instrukcji do odblokowania przerwań "EN" ale nie wiem...
O ile dorze rozumiem idee tego przerwania (nie miałem okazji wykorzystać go w praktyce) to określona zmiana na którymkolwiek pinie z grupy wywołuje przerwanie... i teraz myślałem, żeby za pomocą prostych warunków zliczać, który wywołał i ile w danym czasie. Problem widzę w momencie, gdy przykładowo czujnik A wywoła przerwanie w bardzo krótkim czasie...
Witam Wiecie może czy i jak obsłużyć wejście izolowane a konkretnie przerwanie od INT1. Chce podłączyć swój układ przez wej. izolowane , a program w DSMie żeby wykrywał przerwania generowane przez sygnał z mojego układu. (np. żeby na każde przerwanie gasił lub zapalał diode testową) Czy możliwe jest tez np. przy pomocy licznika odpytującego co określony...
Nie wiem ile daje impulsów na obrót, ale jedną z metod jest generowanie oraz zliczanie wystąpienia przerwań od stanu wysokiego. Wtedy podłączamy 4 pin wentylatora pod wejście INT0 i w przerwaniu ustawiamy flagę że wystąpiło, w kodzie programu głównego sprawdzamy czy wystąpiło i jeśli tak to dodajemy do aktualnej wartości obrotów.
Witam kolegów, co prawda od niedawna czytam książki i interesuje się mikroprocesorami i znam tylko podstawowe operacje na nich jednak ciekawi mnie jedna rzecz. Czy jest możliwość zrobić w mikro kontrolerze Mega8 czasówkę na zasadzie: -Gdy pojawi się stan wysoki na wejściu na wyjściu pojawi się też stan wysoki -Gdy na wejściu stan wysoki zostanie przerwany-...
(at)mrh Tam jest panel rezystancyjny podłączony pod ADC? Jeśli tak to przed uśpieniem spolaryzuj jedną płaszczyznę ujemnie, a na drugiej włącz podciąganie pinu do stanu wysokiego. Do tego przerwanie pinu po przejściu z H do L i masz to co chcesz. Naciśnięcie na panel spowoduje zmianę stanu pinu wejściowego, wygenerowanie przerwania i dalej co tam potrzebujesz.
Software PWM możesz zrobić na dowolnym pinie wyjściowym cyfrowym. Użyłbym timera 8-bitowego. Należy wtedy włączyć i obsłużyć dwa przerwania: 1. przepełnienie (przy przejściu licznika z wartości 255 na 0) - ustaw wtedy stan wysoki na wymarzonym pinie 2. przekroczenie wartości - ustaw wtedy stan niski na wymarzonym pinie Przykładowy kod: https://www.elektroda.pl/rtvforum/viewto...
Jest to możliwe, jednak tylko w sposób programowy. Jak to zrobić? Trzeba ustawić INT0 na reakcje na oba zbocza. Po wystąpieniu przerwania od INT0 sprawdzić jaki stan jest aktualnie na INT0 i w zalezności od tego włączyć/wyłączyć zliczanie timera.
jeżeli wysterujesz wyjście i "zostawisz" je w stanie wysokim to takim zostanie gdy przerwiesz wywoływanie bloku.
Po podaniu impulsu lub stanu wysokiego na pin PB0 zapala się dioda na 10sekund na pinie PB4.W trakcie gdy dioda się pali program nie reaguje na na pin PB0, dopiero po zgaśnięciu diody można ją zapalić przez podanie impulsu a jeśli była aktywowana przez podanie stanu wysokiego czeka na przerwanie napięcia i dopiero po ponownym jego podaniu zapala diode...
Momentami odnoszę wrażenie, że nie wiesz co piszesz. Do pomiaru długości nie potrzebujesz dodatkowego timera oprócz tego t0. Wystarczy, że będziesz sprawdzał co określony czas, jeśli na wejściu będzie ten sam stan co poprzednio, to będziesz zwiększał pomocniczą zmienną. Jeśli stan się zmieni, to dopiero zapiszesz wartość do np.tablicy, żeby później...
Nie jestem pewien czy dobrze zrozumiałem ale chyba zliczasz w przerwaniu jak długo na wejściu jest stan wysoki a potem napełniasz tą wartością PWM. Jeśli tak to po podaniu na wejście sygnału takiego jakim steruje się serwa czyli 1ms-pierwsze maksymalne wychylenie 2ms-drugie to otrzymasz wypełnienie od 50% do100%. Po za tym count_temp przyjmuje wartości...
Twoje 50 Hz (pomijam, że nie da się tak dokładnej częstotliwości ustawić) daje okres = 20 Chyba źle zrozumiałeś kolegę michalko12 . Te "jego" 50Hz to nie częstotliwość przerwań, tylko sygnału sterującego serwem (tak przynajmniej sterowana jest zdecydowana większość serw modelarskich). Okres tego sygnału powinien mieć 20ms, z czego 0,5÷2,4ms trwa stan...
witam jest proste w asm ale w c też nie powinno być problemu. Przerwania INT0 i INT1 mogą być wyzwalane zmianą stanu napięcia wysokim lub stanem niskim . Odpowiednio ustawić bit w rejestrze MCUCSR. Ustawić bit aktywujący przerwanie w rejestrze GICR. mierzysz czas przez odczyt TIMERa
Jak wewnętrznie podciągnąć do jedynki ?? Żartujesz prawda? Wystawić na odpowiednią końcówkę stan wysoki.
Czy to nie jest błąd pomiarowy? To jest napięcie na zasilaniu przepływomierza czy na liniach sygnałowych? Jedyna możliwość to przebicie z układu zasilania/sterowania wtryskiwaczy, albo zindukowanie się poprzez bliskość przewodów od wtryskiwaczy, ale warunkiem jest stan wysokiej rezystancji wejściowej. Może po prostu przerwany przewód?
Chce mierzyć impulsy z zakresu 10kHz do 120kHz... 89cx051 (at)24MHz + Basic = Ciężka(niemożliwa?) sprawa przy 120kHz. Może w asm dałoby radę , ale Basic :( Zmienił bym także koncepcję/sposób pomiaru , a mianowicie: Sygnał podaję na INT0 i odwrócony(zanegowany) na INT1 , włączam bramkowanie liczników T0 i T1 i niech zliczają cykle maszynowe.T0 liczy...
Wejście pinu 2 (przerwanie) masz zadeklarowane jako INPUT_PULLUP co oznacza, że jest ono podciągnięte do zasilania czyli ma normalnie stan wysoki. W procedurze przerwania sprawdzasz wystąpienie zbocza narastającego (RISING). Zastosowany czujnik szczelinowy wystawia stan wysoki w przypadku oświetlenia i niski gdy brak oświetlenia. Zatem w teorii wszytko...
Jeśli chcesz w sposób ciągły generować sygnał prostokątny o zadanej częstotliwości i zadanym wypełnieniu, to najłatwiej użyć timera w trybie generowania PWM. W przypadku jeśli czas stanu wysokiego i niskiego mogą się zmieniać z okresu na okres, również można użyć generowania PWM (przykładowo Fast PWM (mode=15) dla atmega8) - używając T1, wpisując wartość...
Mikrokontroler w przerwaniu co 20ms podaje tylko stany wysokie? Czy tam też jest jakaś "przeplatanka" wysokich i niskich?
Zaraz, jakim cudem ustawiłeś, żeby przy wykryciu przeszkody dawał stan niski? ze schematu wynika, że albo układ podaje napięcie zasilania na piezo, albo go nie podaje. Spróbuj zrobić tak, żeby ustawić na piszczenie przy przerwaniu wiązki, potem pull-down do masy (1k), rezystor podciągający w uP wyłączony i wykrywasz stan wysoki. zmierz także napięcia...
a wiec tak zakładamy że przy up pracuje kwarc 12MHz. jeśli nie wymagasz dużej dokładnośći to timer ustawiasz w tryb 1 ( 16 bit ) tak aby generował przerwanie np: co 10ms; przy 12MHz cykl wynośi 1us czyli przerwanie będzie co 10000 cykli ( 10000 us = 10ms ). wartość po której następuje przerwanie to zmiana z 65535 na 0000. czyli do rejestrów licznika...
dlaczego ta instrukcja nie działała jak dodałem średnik na końcu tej linijki while((SPI1->SR & SPI_SR_BSY) == 0) ,a jak go usunąłem to zadziałało? Bo `while (warunek);` jest tożsame z `while (warunek) { /* kompletnie nic */ }`. Jeśli dasz średnik, to następna linijka _NIE_ jest częścią pętli while, tylko po prostu jedną instrukcją która się wykona...
A masz oscyloskop zeby steirdzic ze rzeczywiscie sie nic nie dzieje? Ja wrzucilem taki program do megi16 #include <avr/io.h> // dostęp do rejestrów #include <avr/interrupt.h> // funkcje sei(), cli() #include <avr/signal.h> // definicje SIGNAL, INTERRUPT SIGNAL(SIG_OVERFLOW0) { PORTD=0xFF; } int main(void)...
1. Poczytaj ogólnie o timerach. 2. Poczytaj o trybach timerów, Tobie radziłbym CTC. 3. Poczytaj o przerwaniach. 4. Z Timera co sekundę będziesz wysyłać przerwanie. 5. Ustaw pin z przełącznikiem jako wejście. 6. Podciągnij wewnętrzny rezystor do pinu albo daj jakiś rezystor po drodze - nie zwieraj bezpośrednio do masy. 7. Ustaw port z diodą jako wyjście....
A jak mniej więcej byś widział zasadę działania programu gdybym dołożył uC ? TXD z HC-05 wprowadził bym na RXD w uC. Dodatkowo opadające zbocze TXD HC-05 musi generować przerwanie (linia EXTI, /INT). Przerwanie ustawia stan wysoki na DE i /RE (nadawanie) nadajnika RS485 i jest dezaktywowane. Przerwanie odbiorcze z USART (przeważnie jest generowane...
Zdecyduj się o co Ci chodzi: Power down, Pull-down, Wyzwalanie przerwania zboczem narastającym/stanem wysokim, Obsługę watchdog, Bo nie wiem o co w końcu pytasz...
Wejścia GPIO w ESP32 nie mają na wejściu bramki Schmitta (jak AVR), więc jakiekolwiek fluktuacje napięcia na wejściu w obszarze pomiędzy stanem wysokim i niskim mogą powodować efekt, który opisałeś i przypadkowe generowanie przerwań. Doraźnie problem rozwiązałem softowo za pomocą takiego kodu: Napisałeś coś w rodzaju programowego przerzutnika Schmitta...
A np. logiczne zero w NECu to 560us wysoki i 560us niski. Żeby mieć liczbę całkowitą, to muszę użyć 10us. Czemu nie można ustawić przerwania od razu co 560µs?
Małe wyjaśnienie. Jeżeli porównanie ma ustawiać linię portu to dobrze by było zainicjować port (jeden z 3 bitów) zerami. Czyli: [syntax=asm51]MOV P1,#0F8H[/syntax] zamiast [syntax=asm51]MOV P1,#0FFH[/syntax] Inną sprawą jest to, że tak zorganizowane wyjście informacji jest generalnie do kitu. Wydajność prądowa portu w stanie H jest o wiele niższa niż...
Nie czytałem całego wątku , ale może tak: - wspólny sygnał przerwania dla wszystkich procków - przerwanie wyzwalane niskim poziomem - sygnał synchronizujący pomiar jest na zerze przez możliwie najkrótszy czas zależny od programu, a właściwie od tego czy w międzyczasie przerwania mogą być zablokowane w jednym z procków. - każdy procek wchodzi w obsługę...
Najczęściej z enkodera mamy dwa sygnały, A i B... Sygnały te są przesunięte względem siebie... Ja najczęściej robię to tak, że A mam podpięte pod przerwanie zewnętrzne a B pod dowolny pin... I teraz kiedy generowne jest przerwanie w jego obsłudze sprawdzam stan na linii B... Jeżeli np. jest niski to zwiększam licznik o 1 a jeżeli wysoki to zmniejszam...
Daj przycisk na pin 13 do GND i wyłączysz bzykanie... Jednocześnie zgaśnie lampka na arduino. e marcus Działa ale jeszcze nie tak .Teraz do pinu 13 mam podpięte dwa przewody (jeden ze stanem wysokim(+5v) a drugi (przycisk który podaje stan niski) - czy tak powinno być? Jak mam podany stan wysoki na pin 13 to oczywiście buzzer działa . Naciskam przycisk...
LPC_GPIOINT->IO2IntEnF |= (1<<12); Pozwala na "reakcję" na pinie P2.12 Teraz testuję, wcześniej nigdy nie obsługiwałem przerwań od pinów. Przerwanie ma w przyszłości tylko ustawiać flagę dla pętli głównej. [syntax=c] void EINT3_IRQHandler(void) { if ( LPC_GPIOINT->IO2IntStatF & (1<<12) )// czy stan niski na P2.12 flaga = 1; if...
1. Jeżeli przy braku wysyłania nośnej 36kHz na wyjściu TSOP masz stan wysoki, a podczas wysyłania nośnej masz stan niski to znaczy, że jest OK. 2. W jakim celu tak komplikujesz funkcję przerwania wykonującą zmianę pinu na przeciwny - wykorzystaj ostatni kod z mojego poprzedniego postu. 3. Najważniejsza jest jednak uwaga BlueDraco dot. sensu machania...
Witam. Chcę użyć układu LMV7219 w realizacji. Podaje mu na nóżkę Vref napięcie odniesienia i gdy na wejściu nieodwracające jest połączone do wejścia i gdy tam pojawi się takie samo napięcie co na Vref , to wtedy układ zmienia stan wyjściowy. Tylko problem jest w tym, że potrzeba aby zmieniał stan z wysokiego na niski (wyjście ma być podłączone do uC...
(at)Gunis-92: Możesz wykorzystać do odmierzania czasu np. SysTick [syntax=c] volatile uint32_t licznik_tykniec;// zmienna globalna /* obsluga przerwania od licznika/timera SysTick */ void SysTick_Handler(void) { licznik_tykniec++;// inkrementacja licznika } void delay(uint32_t czas) { uint32_t aktaualny_licznik_tykniec; aktaualny_licznik_tykniec = licznik_tykniec;...
Niestety bez zmian... co do uszkodzonego portu, to wątpię, bo działa na nim ustawianie stanu niskiego i wysokiego. Czy uszkodzenie portu może się objawiać właśnie w taki dziwny sposób, że działa ustawianie stanów wysoki/niski, wejscie/wyjscie, a nie działa przerwanie zewnętrzne?
Witam, nie znam się, ale możesz na szybko spróbować na jednym timerze liczącym do 2.5ms z przerwaniem porównania przy wartośći dla serwa gdzie ustawiasz stan niski i przepełnienia, gdzie zmienisz serwo na kolejne, ustawiając wyjście serwa na wysokie i nową wartość porównania. W pętli głównej zmieniasz tylko wartości dla serw. Pewnie słaby sposób, ale...
Ja obsługę takich enkoderów wykonuje zawsze na jednym przerwaniu. Jeden z impulsów wywołuje przerwanie, w obsłudze przerwania sprawdzam tylko stan drugiego kanału. Jeśli jest wysoki to ++licznik, jeśli jest niski to --licznik.
Próbowałem inny pin, ale wtedy nie działa wcale. Wydaje mi się, że inne piny mogą nie obsługiwać przerwań. Rotary Encoder Module KY-040 Arduino / PIC / PI Nie chcę podawać linka, bo o ile pamiętam zabronione. Jednak nie ma to chyba znaczenia, bo nawet jak go odłącze od pinu D4 to nic nie zmienia. Tak jak pisałem wyżej, to nie stan pinu wpływa na wyzwolenie...
Przeanalizuj co się stanie, gdy tarcza zatrzyma się szczeliną naprzeciwko transoptora. Na wyjściu z LM324 będzie stan wysoki, i na INT0 będzie podawany ciągle stan wysoki. Atmega nie będzie wtedy zliczać, bo przerwanie jest ustawione od zbocza narastającego a nie od stanu. Chyba że coś pominąłem?
i uważam że powinieneś pokazać schemat i cały kod Wrzucam schemat, ale prezentuje on wersję docelową, aktualnie przy testach nadajnik jest podłączony bezpośrednio do uC, a reszty komponentów (poza wyświetlaczem i odbiornikiem) nie ma. Kod wklejam bez funkcji obsługujących wyświetlacz, gdyż to raczej niepotrzebne. Kod: [syntax=c]long int volatile time...
sterowanie stanem wysokim atmega sterowanie stanem wysokim zabezpieczenie wysokim
sterowanie deskorolka schemat wzmacniacz tonsil serwer minecraft
Dokręcanie głowicy w silniku 3-litrowym V6: procedura i wskazówki Szum na UKF w amplitunerze Radmor 5102 - przyczyny i diagnostyka