Warunek w if nie będzie spełniony bo raczej te kilka instrukcji w przerwaniu nie bedzie się wykonywać 20ms. Czas wykonywania tego ISR nie ma nic wspólnego z wartością _debounce_timer w momencie porównania.
Czyby to znaczyło ze jak używam int to nie mogę PCINT? Eee? Aaaa? Yyyy? Że co? Jak? Nie wiem o co Ci chodzi. Flaga PCIE0 uruchamia PCINTY od 0 do 7 a ty używasz PCINT15 który jest podpięty pod PCINT1. Nijak się to nie ma do INTów.
Przede wszystkim PCINT wymaga większego nakładu programowego. Przy włączonych wielu źródłach danego przerwania PCINT trzeba analizować, który pin zgłosił przerwanie i w jaki sposób się to odbyło (które zbocze). PCINT jest niżej w hierarchii przerwań, zatem na obsługę tego przerwania trzeba czasem dłużej poczekać (w zależności od konstrukcji programu)...
Witam.Osobiście nie piszę w bascomie ale przerwanie (przerwania) PCINT wyzwalane są zmianą stanu na pinie a ty natomiast próbujesz konfigurować aby wyzwalane było niskim poziomem.
Przerwania PCINT maja tą zaletę, że mogą wybudzić procesor ze stanu Power Down (oscylator nie pracuje więc oszczędność energii jest największa) w reakcji na zmianę stanu pinu. Przerwania INT w Power Down mogą wybudzić uP w reakcji na stan niski i aby procedura przerwania została wykonana stan niski musi utrzymywać się na tyle długo by procesor zdążył...
Nie znam się na C :) ale wydaje mi się że błąd jest w tej linii: [syntax=c]PCMSK |= (PCINT0); //PCINT[/syntax] raczej powinno być tak: [syntax=c]PCMSK |= (1<<PCINT0); //PCINT[/syntax] PB0 ma być ustawione jako wejście.
PCINT to specjalne przerwania aktywowane zmianą stanu pinu. Dodatkowo wszystkie przerwania PCINT w tych procesorach wywołują jedno przerwanie, w którym należy programowo określić, który pin je spowodował ważny jest też rejestr PCMSK, który odpowiada za maskowanie nieużywanych przerwań. Polecam lekturę datasheetów tych procesorów w celu dokładnego poznania...
Pyt 1: Tak. Jeśli nie ma innych wskazań żeby koniecznie korzystać z INT1 to w m328p można uaktywnić przerwanie PCINT na pinie Rx, wtedy nie potrzebaa żadnych dodatkowych połączeń między pinami. Pewna niedogodność jest taka, ze przerwania PCINT reagują na oba zbocza oraz wektor przerwań jest wspólny dla całego portu. Pyt 2: Tak. Nie. Można to sobie teoretycznie...
Możesz czytać timer w przerwaniu INT lub PCINT
Witam! Kiedyś zmagałem się z podobnym problemem w jednym z urządzeń ale chyba ostatecznie było to zrobione w pętli głównej. Może źle zrozumiałem pierwszy post, ale przyciski podłączone do PA nie wygenerują przerwania PCINT(patrz nota katalogowa).
Witam. Pytanie na szybko - czy ATMega8 obsługuje przerwania PCINT? Nie znalazłem o tym informacji w datasheet, nie znalazłem również rejestrów PCMSK i GIMSK. Czy to oznacza że takie przerwania nie są obsługiwane przez ATMega8? Pozdrawiam
wróciłem i sprawdziłem i coś jeszcze nie tak po zmianach w kodzie µK już nie startuje z sekwencją tylko idzie spać... Tylko że jak go obudzę to jest zły i wykonuje sekwencje losową ilość razy... zmieniłem też trochę sekwencję i zastanawia mnie dlaczego polecenie cbr r16, (1<<portb1) gasiło mi 2 diody na raz (po uprzednim ich zapaleniu)....
Przerwania typu PCINT działają podczas zmiany stanu pinu, obojętnie czy to jest zbocze narastające czy opadające. Poprostu ma być to zmiana stanu, tak więc jeśli naciśniesz przycisk to przerwanie bedzie generowane dwa razy (w momencie naciśniećia i puszczenia). Natomiast inaczej jest w przypadku przerwań INT0 i INT1 gdzie możesz sobie wybrać kiedy ma...
W atmedze 128 nie ma przerwań PCINT, są tylko przerwania INT0-3 na pinach PD0, PD1, PD2, PD3. Przerwania PCINT są tylko w nowszych atmegch.
Po pierwsze...nie ma takiego przerwania PCINT w ATtiny. Konfigurujesz to w zupełnie inny sposób (BOTHEDGES). Po drugie z założenia nie patrzę na kody Arduino, gdyż nie jest to jakikolwiek rezerwuar jakichkolwiek rozwiązań. Z resztą nie w tym problem. Popełniam jakiś błąd programowy a nie koncepcyjny, gdyż zawsze działało to dobrze... R
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...
Ten pomysł z takim wykorzytaniem diod wydaje mi się bardzo mało szczęśliwy - tym bardziej, że nie będziesz miał na procku 0V tylko tyle co na spadku napięcia na diodzie a w tym momencie na wejście portu będzie podawane dla procka niższe napięcie niż jego GND ... Diody to można byłoby próbować zastosować do wybudzania procka ze stanu uśpienia którymś...
Skróć czas kiedy przerwanie są zablokowane - wywal wysyłanie danych po RSie poza ten obszar kodu gdzie są zablokowane przerwania.
Jak nie włączyłeś przerwań, to powinny być wyłączone... no, chyba, że bascom to zrobił za Ciebie... Dodano po 46 A skąd wiesz, że się odpalają przerwania PCINT?
okazało się że włączyłem przerwania PCINT a ich funkcję dałem do komentarza, w celu późniejszej realizacji. Na to jest sposób ISR( ISR_BAD)
Bascom moze tego nie obslugiwac. I ile recznie mozna wpisac do rejestru wlaczenie tego przerwania, to podanie wektora przerwania pewnie bedzie juz problemem - moze edycja pliku z danymi o ukontrolerze. Przerwania zmiany stanu na PCINT przypisane sa do portów, i dodatkowo mozna zdefiniowac które piny maja byc monitorowane (nie musza byc wszystkie).
A przerwania PCINT, w które coraz częściej wyposażone są procesory AVR?
Balu -> widzę, że nie tylko ja nie zauważyłem tej ATmegi8. Taka jest siła sugestii tych przerwań PCINT w tekście. A jak wspomniał kolega - wyżej, ATmega8 jest w temacie.
ja zdaje się ze tak ale na innym procku. Jak mówiłem ci o ile robisz to jak należy czyli nie włączysz pinów PCINT na których jest AC, który wykorzystujesz to wszystko jest w porządku. i to nie tylko może ale i musi działać.
Chyba zrobię przerwanie PCINT, od wejścia Rxd i zmierzę czas trwania impulsu. Pytanie tylko którego. Musisz mieć coś na początku transmisji o znanej wartości. inaczej nic nie zmierzysz. Np pierwszy bit 1 to wtedy mozesz zmierzyć start bit. Albo np 0x1d i znając co odbierzesz przy okreslonej prędkości określiswz aktualną predkość transmisji Masz tu...
OK tylko kol.ogor11 potrzebuje mieć detekcję na dwóch pinach a 13-tka ma tylko INT0. Wydaje mi się więc że trzeba pin 5 i 6 ustawić na wejście i napisać obsługę przerwania PCINT w którym będzie sprawdzenie które wejście zmieniło stan i to obsłużyć. INT0 od PCINT różni się tym, że PCINT ma tylko jeden tryb wyzwolenia ( zmiana stanu ) i jest jedna procedura...
A co do samej realizacji to najprościej zastosować do analizy wejść cyfrowych przerwanie PCINT Nie wiadomo co znaczy analiza, tak że odpowiedź jest niemożliwa. Musisz też pamiętać, że przy tak dużej ilości pinów wejściowych, generujących przerwania, będziesz musiał analizować stan każdego z nich z poprzedniego przerwania, aby zidentyfikować pin, który...
Racja, wracam honor, ale moim zdaniem do tego wystarczy w zupełności sposób zaproponowany przeze mnie i kol. tmf. W Atmega644p masz przerwania PCINT na wszystkich pinach, więc też można wykorzystać.
Szukałem w datasheet, na stronach 66-70. Nie znalazłem rozwiązania problemu uruchamiania przerwania PCINT przy zboczu opadającym i narastającym. Mogę prosić o jakąś dodatkową wskazówkę?
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...
To ciekawe bo na 31 stronie tejże dokumentacji: http://www.atmel.com/dyn/resources/prod_... Jest tabelka... wg. procek reaguje na INT1 a także na przerwania PCINT Zresztą na przerwania od INT1 na pewno reaguje bo sam to przed chwilą sprawdziłem.
Są 3 przerwania PCINT - spróbuj przeczytać rozdziały: 16. Interrupts 17. EXINT - External Interrupts w dokumentacji mikrokontrolera. Korzystaj z nich, bo po to właśnie są, a zaoszczędzisz moc obliczeniową mikrokontrolera w stosunku do sposobu, który opisał kol. krzysiek_krm.
Szukam sposobu na wywołanie przerwania z programu. W ARM sprawa prosta, wpis do NVIC i mam dowolne przerwanie. W AVR rozwiązywałem to przez wolny pin GPIO. Ustawiałem jako PCINT, gdy potrzebowałem przerwania, ustawiałem GPIO w stan niski. W przerwaniu PCINT przywracałem poziom wysoki. Niestety nie mam wolnych pinów. Jest w AVR rozkaz BRK generujący...
(at)mirekk36 Użyj przerwania PCINT (Pin Change Interrupt), będziesz miał wtedy do wykorzystania 8 linii mogących "obudzić" mikrokontroler z trybu Power-down. Do takiego zastosowania kwarc jest niepotrzebny, dokładność wewnętrznego oscylatora jest zupełnie wystarczająca.
Mam pytanie odnośnie kodu. Dlaczego ustawiasz bity ISC00, ISC01 i aktywujesz przerwanie INT0, skoro do wysyłania impulsów używasz przerwania PinChange? Czy to jest wymagane do wybudzenia uP ze stanu uśpienia? Pytam, bo dziś za nic nie mogłem zmusić mojego ATTiny13 do wybudzenia się za pomocą przerwania PCINT.
snnaap dal rade - dzieki. Najwyrazniej problem jest w tym ze stan logiczny pinu nie nadaza za zmiana zbocza. O dziwo bardzo podobny kod do pierwotnego tylko na przerwaniu PCINT dziala normalnie. Jak by ktos potrzebowal: [syntax=c]GIMSK |= (1<<PCIE); PCMSK |= (1<<PCINT1); ISR (PCINT0_vect) { if (PINB & (1<<PB1)) { ledon; } else...
Panowie, dziękuję Wam za dotychczasową pomoc. To co z Waszą pomocą zrobiłem wcześniej w zupełności wystarczyło. Teraz korzystając z wolnej chwili pobawię się tym tematem jeszcze trochę. Wydaje mi się, że nie spełniasz warunku, że przerwania mają być generowane przy każdej zmianie sygnału A i B przerwania w AVR od PCINT nie mają za wiele rejestrów do...
jeśli czytałeś uważnie jakiegoś helpa i tam napisano, że np ATmega8 a raczej jej przerwania INT0 i INT1 nie mogą być wyzwalane zboczami to masz rację - jest to błąd ;) dokładny opis na 100% znajdziesz w nocie pdf ;) danego procka i na tym zawsze się opieraj jako najważniejszym źródle informacji. ... jak słusznie zauważyłeś ta nóżka ma dwa alternatywne...
hmmm dowolnym przerwaniem, a jeśli ma ich być wiele np 5 albo 6 to może wykorzystać nawet przerwania PCINT Ma być ich wiele i PCINT to jedyne rozwiązanie. Tylko, czy to będzie dobrze działało? Jak by miała wyglądać procedura przerwania od PCINT? Mogę prosić jakiś kod szkieletowy? Masz tyle kanałów ile chcesz, częstotliwość spokojnie można wyciągnąć...
Każde wduszenie przycisku wygeneruje kilka/naście/dziesiąt odbić i tyle samo wywołań procedury obsługi przerwania. Warto by je doliczyć do rachunku. Ale nawet bez ich uwględnienia: Owszem ale tylko w przypadku ,kiedy nie zablokujesz przerwania pcint na czas drgania styków . Tak samo stanie się w przypadku odpytywania też musisz wykonać procedurę związaną...
Napisać program od nowa bez żadnych waitów . Zastosować przerwania od PCINT i krótkie podprogramy ich obsługi.
Przerwanie PCINT wystepuje na skutek zmiany. Nie ma mozliwości zrobić aby było np tylko na jedno zbocze. Musisz w procedurze obsługi przerwania sprawdzić, jakie to było zbocze.
Albo najlepiej zastosować zupełnie inną metodykę - piny podpiąć pod przerwania zewnętrzne (PCINT, INT + diody 1n4148 itp.) i skorzystać z jednego timera generującego podstawę czasu.
Zapewne ma nadmiar mocy w swoim uC. Dla przerwania PCINT występującego z częstotliwością 100Hz, w którym trzeba wpisać zera do dwóch bajtów w RAM(powiedzmy 6 cykli procesora razem z obsługą przerwania), a potem gdzieś w kodzie sprawdzenie , czy ten licznik inkrementowany w przerwaniu Timeranie przekroczył jakiejś wartości (powiedzmy 8 cykli procesora),...
To trzeba już nałożyć programowo na przerwanie PCINT. Ogólnie konfigurujesz PCMSK tak, aby były aktywne piny 3 i 4, a potem w programie przerwania sprawdzasz, który pin zmienił stan (wygenerował przerwanie) oraz w jakim był stanie przed przerwaniem (stąd wiesz jakie zbocze wygenerowało przerwanie). Można więc nawet programowo przypisać inne funkcje...
Portów to można użyć i jednego ;), a pinów to wystarczy trzy, pod warunkiem, że zamiast ATmega16 użyjesz ATmega164 (identyczny rozkład wyprowadzeń) z przerwaniami typu PCINT (Pin Change INTERrupt).
Coś te flagi przecież ustawiło... Najpierw włączasz obsługę tych przerwań, potem włączasz podciąganie pinu to flaga już ustawiona...a kasowana jest przez AVR sprzętowo kiedy obsługiwane jest przerwanie. Bascom nie musi obsługiwać żadnego kasowania flagi przerwania bo robi to sam procesor tyle, że w przerwaniu (jednym w wyjątków potwierdzających regułę...
Enkoder można na kilka sposobów oprogramować..PCINT (przerwania) albo POOLING (testując stan co jakiś czas Timerem). Wszystko sie dobrze sprawdzi gdy dobrze zastosowane :D
Pytałeś o wybudzanie procesora, odpowiedz masz w linku dla przykładu klawiatury matrycowej. W ogóle lepiej zastosuj power-down A wybudzić możesz tylko stanem niskim przerwania int0. A jeśli chodzi o przerwania pin change warto zapoznać sie z rejestrami z tym związanymi a wszystko stanie się jasne. Chodzi o to ze przerwania zostaje wywołane, jeśli choć...
Przerwanie PCINT w byle nowszej atmedze, np. m88. Masz ich tyle ile wolnych pinów.
Przykładowo możesz wykorzystać dwa liczniki. Jeden do regulacji częstotliwości, a drugi do regulacji wypełnienia. - licznik pierwszy odlicza czas pomiędzy okresami od 1 sek dla 1Hz do 50 ms przy 20Hz. - licznik drugi oblicza czas trwania impulsu. Powiedzmy że zmiana stanu pinu X generuje przerwanie uruchamiające licznik drugi który po upływie zaprogramowanego...
co do bascoma to powiem Ci tak, na początku niby łatwiej i fajniej się programuje wszystko w bascomie, ale nietypowych rzeczy w nim nie zrobisz tak prosto (choćby np. obsługa dwóch lcd...) a ma on swoje ukryte "atuty" - bugi, które skutecznie zatruwają życie (np. skopana obsługa timerów na niektórych uP, błędy przy niektórych operacjach porównywania,...
Udało się, działa. Przyczyna - jak się okazało to nie up Atmega169 a Atmega169PA, do tej pory myślałem że litery na końcu up PA ,A to mało znaczące jak w Atmega8 i Atmega8A; a w przypadku Atmega169PA różnią się rozmieszczenie bitów w rejestrze EIMSK i EIFR odpowiedzialnym za przerwania na pinach PCINT. Opisuje to pdf [url=http://ww1.microchip.com/downloads/...
A najlepiej zmienić procesor na taki z przerwaniami typu PCINT na prawie każdej nóżce, np. pinowy nowszy odpowiednik poczciwej atmega8 - atmega88: http://www.atmel.com/Images/doc2545.pdf
Przerwanie PCINT na pinie PD7. W procedurze obsługi przerwania włączenie któregoś timera i zerowanie jego licznika. Timer skonfigurowany na PWM z zadaną częstotliwością i wypełnieniem. W procedurze obsługi przerwania Comp timera odliczanie trzech impulsów, potem wyłączenie timera i reinicjowanie licznika impulsów. Jeżeli koniecznie jest zachowanie okresu...
Ewentualnie przy większej liczbie sygnałów - przerwania INT lub PCINT. Ale to już bardziej programowy pomiar, przez co mniej dokładny ale dokładniejszy niż w przerwaniu od timera.
Witam! Zrobiłem prosty projekt wysokościomierza ciśnieniowego. Wszystko działa w jak najlepszym porządku. Teraz muszę go przekonwertować aby działał na mniejszej płytce zasilanej z baterii. Z tego powodu postanowiłem użyć funkcji sleep i przerwań. Program ma działać tak: - w funkcji setup następuje inicjalizacja karty i czujnika, jeśli wszystko działa,...
Wpisywanie $CRYSTAL bez rzeczywistej zmiany taktowania procesora będzie powodować, że wszelkie opóźnienia i obliczenia kompilatora dotyczące liczników nie będą zgodne ze stanem faktycznym. GETRC5() korzysta aktywnie z licznika TIMER0. Tak manewruje wartością wpisaną do rejestru licznika oraz preskalerem by otrzymać jednakowe odcinki czasu zliczane później...
Proponuję zastanowić się czy mikrokontroler będzie tylko i wyłącznie czekał na przyciśnięcie przycisku czy robił coś jeszcze poza tym. Jeżeli tylko i wyłącznie będzie oczekiwał na przycisk to porty ustawiasz jako wejścia i sczytujesz stany. Natomiast jeżeli zajmiesz go czymś to proponuje wykorzystać przerwania. Nowsze mikrokontrolery (potomki Atmega8...
Dziwisz się? A dlaczego MAIN wykonujesz cały czas od początku, w ten sposób cały czas inicjalizujesz timer0 na wartosci początkowe. Kolejna sprawa to zdecyduj sie czy korzystasz z przerwania INT0 czy PCINT (to sa dwa rózne bloki), jeśli INT0 to korzystasz z nie tego wektora, jeśli PCINT to nie włączyłeś tego przerwania.
//CIACH Widze danielbela że wykorzystujesz atmege 16 więc można tam wykorzystać przerwania PCINT (wywoływane zmianą stanu) więc można wsio robić w przerwaniu i bez diodek (jeśli nie chcemy skanować jej ciągle). //CIACH Niestety nie da się wszystkiego zrobić na przerwaniu. Tj. można zrobić odczyt samego naciśnięcia klawisza. Jednak jak będziemy chcieli...
No w ten sposób oczywiście się da i też o tym myślałem. Tylko że każdy port (Przynajmniej w AVR) może generować jedno przerwanie PCINT, czyli potrzebuje aż 4 porty. Moje pytanie jest dalej aktualne. Czy każdy port XMEGi może generować niezależne przerwania INT0,INT1.
Pierwszy błąd który rzucił mi się w oczy, to to, że korzystasz z Serial'a i jednocześnie wykorzystujesz pin 1 (TX ! ). Poza tym jakie Arduino posiadasz? W przypadku Uno, do przerwań można użyci tylko 2 i 3 pinu (nie mówię o PCINT), chyba, że posiadasz Leonardo.
Łopatologicznie: 1. zgłasza się przerwanie ze zbocza opadającego. wywołana jest procedura jego obsługi. jesteśmy teraz w niej. 2. włączasz licznik by zliczał impulsy zegarowe przez prescaler. 3. czekasz tak długo aź stan na INT0 się zmieni na przeciwny - koniec impulsu. 4. zatrzymujesz licznik. odczytujesz zawartosc licznika i zapamiętujesz w zmiennej....
Witam. 1 - Stosuj aliasy. Np: drzwi alias portd.0 Później w kodzie po prostu drzwi = 1 lub drzwi = 0. bardzo poprawia czytelność kodu. 2 - Odczyt z przetwornika ADC powinien być do zmiennej WORD (przetwornik jest 10 bit). 3 - w pętli głównej masz instrukcje Wait. Powstaje problem ze sprawdzaniem stanu wejść, pętla może się wykonywać bardzo długo, w...
Ale jak ktoś mógłby wyjaśnić przerwania na innych pinach niż 2 i 3 to będę wdziezny Jeżeli masz płytkę Uno, to obsługa przerwań zewnętrznych jest standardowo dostępna tylko na pinach 2 i 3: https://www.arduino.cc/reference/en/lang... Jest jednak możliwość obsługi przerwań na innych pinach, ale jest to...
Pierwsza wstawka chodzi ale dałem 25MHz do testów przy 20MHz gubi, druga też gubi nawet z 25MHz ale dzięki narazie mi to wystarczy do testów. A czy jak w tej pierwszej wstawce zamiast pinB całego czytał maskę z 1 pinu to też dochodzi cykl zegarowy na maskę ? albo pewnie z 3 cykle ? Pisałeś też o PCINT że potrzeba dodatkowych cykli? w przypadku przerwania...
Każdy z pinów ATTiny może wywoływać przerwanie PCINTn... Skoro miałem dzialający program na arduino to mysłałem że bez problemu da się go wgrać do ATTiny. Nie rozumiem toku myślenia - Arduino UNO to ATMega328P, która jest dostępna w obudowie DIL, TQFP, QFN - do wyboru, do koloru. ATmega328P na 2 kB RAMu i 32 kB Flasha, a ATTiny85 0,5 kB RAMu i 8 kB...
Cześć, mam pytanie odnośnie Timerów w uC ATmega. Potrzebuję następujących opcji: - zliczanie impulsów z dwóch enkoderów - generowanie dwóch przebiegów PWM - generowanie przerwania co kilka ms. ..............? Czy są jakieś AVR'y mające 4 timery? ........... Pozdrawiam, Bartek Wystarczy ci Atmega48/88/168 Dla 2-ch sygnałów PWM wystarczyłby 1 timer z...
AT90S2313 to starszy brat ATtiny2313. Ten drugi ma większe możliwości, co ważne ma już wbudowany wewn. oscylator dzięki czemu nie zawsze trzeba stosować rezonator kwarcowy (nawet przy transmisji RS232). Oczywiście, że można go programować za pomocą PonyProg'a - tylko zassij sobie najnowszą wersję 2.06f beta. Co do pisania programów to tak samo jak na...
Nie mogę, bo port ADC mam zajęty dla TFT, zaś inne wykorzystanie ADC (pomiar przez AREF) ma również miejsce w tym układzie. Takie rzeczy robi się na przerwaniu INT lub PCINT.
Mam ustawiony timer na 4kHz [syntax=csharp]cli(); TCNT1 = 0; TCCR1 = 0; OCR1C = 249; // 4000 Hz (16000000/((249+1)*16)) OCR1A = OCR1C; TCCR1 |= (1 << CTC1); TCCR1 |= (1 << CS12) | (1 << CS10); TIMSK |= (1 << OCIE1A); sei();[/syntax] W przerwaniu timera machałem pinem [syntax=csharp]ISR(TIMER1_COMPA_vect) { //licznik timer1 przepełnienie...
Jest jeszcze przerwanie PCINT wyzwalane dowolnym zboczem. Wejść PCINT jest zdecydowanie dużo, zatem można reagować nie tylko na dwa przerwania INT0/1. Fakt, nie wszystkie AVRy to mają. Co do programowej obsługi to trzeba skanować klawiaturę w krótkich odstępach czasu i porównywać stan bieżący z poprzednim odczytem. Niestety czas musi być dość krótki...
Rozwiązaniem jest obsługa przycisku na przerwaniu bądź to INT bądź PCINT
A, że tak dopytam...... tatuś się ni w ząb na tym nie zna? a chce zamieniać scalaka? tzn jak? - sam będzie go programował ? jeśli tak to czym? - tzn czy ma kod źródłowy, który można przekompilować ? bo jeśli ma - to można sobie czasami jeszcze z tymi różnicami poradzić o ile są one istotne w kodzie właśnie. (bo tak jakoś od tyłka strony podchodzisz...
Oczywiście że procesor z dwoma portami UART może spokojnie obsłużyć/używać ESP i BT. Właśnie pisałem taki program połączony z dedykowana aplikacją na Android przez Wifi albo BT. Kwestia jest raczej w tym by od razu mieć projekt/schemat co z czym będzie połączone a nie najpierw pisać program a potem dopiero się drapać w głowę jak to połączyć. Chyba że...
Trochę mi rozjaśniłeś sprawę. Chodź jeszcze nie do końca wiem jak to zrobić. Mianowicie z powyższych informacji znam długość impulsu w stanie niskim dla zera i jedynki, ale nic nie wiem jak długo będzie trwał impuls w stanie wysokim. Jakoś kompletnie nie mogę pojąć jak to robić przy pomocy timera w capure mode. Jedynie po głowie mi chodzi taka myśl:...
https://obrazki.elektroda.pl/2143173200_... W Loop mam w uproszczeniu taki kod : Takie opisy są guzik warte. Podaje się kod: includy, inicjacje i użycie. Jeśli kompilator wyrzuca jakieś błędy to wkleja się cały komunikat. na atmega8 softserial nie działa Nie wiem czy na arduino jest jakiś lib który nie korzysta z przerwań PCINT, może...
Przerwania PCINTx wykonują się przy każdej zmianie stanu logicznego, niema możliwości konfiguracji np. tylko dla zbocz narastającego lub opadającego. Stan zbocza na poszczególnym pinie sprawdzasz w przerwaniu. Attiny13 ma 6 pinów PB.0-PB.5 (PCINT0 do PCINT5) które mogą wywołać przerwanie. I tu jest jedna myląca rzecz :) dla tych pinów jest tylko jeden...
Jak już robić koniecznie na przerwaniach zewnętrznych to na nowszych układach z PCINT, podpinając tylko jedno przerwanie na enkoder, drugie jest całkowicie zbędne. Obsługujemy tylko jedno zbocze w przerwaniu, drugie odrzucamy. W obsłudze przerwania należy pamiętać poprzedni stan, aby nie odczytywać drobnych drgań jako pełnoprawnego impulsu.
Dzięki za błyskawiczną odpowiedź i za rozjaśnienie pewnych kwestii. Attiny13 nie należy do grupy/rodziny Attiny25/45/85. Tak, masz rację. Pisanie o północy może być przyczyną różnych dziwnych pomyłek. Najpierw sprecyzuj, do których interruptów referujesz i masz zamiar je wykorzystać. Czy są to INT0 i INT1, czy też chcesz użyć któreś z PCINT. W programie...
(at)kaimaz Schemat masz w poście #6, dodatkowo pod PB2 jest podpięty moduł radiowy, kod załączam, płytka jak widzisz - zmontowane na uniwersalnej + pająk. Fusy - zegar ustawiony na 1.2MHz [syntax=c] /* Nazwa: DOMOFON Data: 2013-11-11 */ #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <avr/pgmspace.h>...
Jeśli korzystasz z architektury AVR to rób inaczej: 1. Na wyjściach wierszy ustaw 0 (skonfigurowane jako wyjście) tylko na aktualnie wybranym wierszu, pozostałe wiersze ustawiasz jaki wejścia z podciąganiem do vcc (taka mała ochrona przed zwarciem w wypadku wciśnięcia kilku klawiszy) 2. Wejścia kolumn ustawiasz wszystkie jako wejścia z podciąganiem...
A jakie dostajesz komunikaty błędów. Te definicje: [syntax=c]#define LEDtop PORTB5 #define LEDmiddle PORTB2 #define LEDbottom PORTB1 #define Relay PORTD4 #define LIMITSWITCHmiddle PORTD5 #define LIMITSWITCHbottom PORTD6 #define LEDMOSFETRED PORTB0 #define LEDMOSFETGREEN PORTD7[/syntax] są co najmniej dziwne.
Podział na analogowe i cyfrowe a Arduino jest sztuczny. Jezeli weźmiez pinout npo atmegi 328 (z Arduino uno) to piny które moga być wejściami analogowymi sa oznaczone ADCx. Te same piny mają tez inne funkcje w zależności od tego co zapiszesz w rejestrach procesora. Tak ze w Arduino mozesz wejscia "analogowe" używac tak samo cyfrowo. Dla przykładu pin...
Dane USART prądkosc 57600 Trochę szybko jak na AVR, jedno wejście da radę ale więcej? Wątpię? Trzeba by ustawić przerwanie PCINT na wejściu i wysterowywać odpowiednie wyjścia. Aby program był szybki, przerwanie NAKED. Operacje na GPIO nie zmieniają rejestru stanu, więc nie trzeba nic zapamiętywać na stosie. Jeśli jednak trzeba sprawdzać warunki (najlepiej,...
Jak chcesz mieć odczytany stan pinu niezależnie od wstawionych delay i działania reszty programu w pętli loop to w bibliotekach (te wbudowane - manager bibliotek i wyszukaj) znajdziesz takie do PCINT, to przerwania od zmiany stanu pinu. Niezależnie od momentu wciśnięcia przycisku ten fakt zostanie odnotowany w wybranej przez Ciebie zmiennej (pamiętaj...
Te procesory się aż tak nie różnią. Dodatkowe funkcjonalności pinów nie przeszkadzają w niczym dopóki ich nie uruchomisz. (PCINT - Pin Change Interrupt trzeba wiedzieć jak włączyć). Jest duża różnica jeśli chodzi o Timery właśnie. Mega8 ma na przykład tylko jeden rejestr Compare dla Timer2 dlatego inaczej się nazywają. Opisałem to u siebie na stronie...
Witam! Napisałem na szybko taki oto kod: ;Cała Ramka w R26:R27 .include "tn13adef.inc" .cseg .org 0 rjmp Init .org 2 rjmp PCINT .org 10 Init: cli ldi r16,ramend out spl,r16 ;Stos ldi r16,32 out GIMSK,r16 ldi r16,1 out PCMSK,r16 ;Ustawienie Przerwania PCINT0 sbi ddrb,pb2 sbi ddrb,pb1 sbi portb,pb2 cbi portb,pb1 sei Main: ;Pętla...
Panel dotykowy z 6 diodami sterowany po i2c na ATTINY44 Poniższy materiał przedstawia próbę ugryzienia tematu krytycznych zależności czasowych w asemblerze. Zadaniem było stworzenie stabilnie działającej aplikacji która obsłuży: komunikację z procesorem nadrzędnym w trybie slave i2c sterowanie multipleksowanymi diodami z 8bitowa regulacja jasności...
Można włączyć przerwanie od zmiany stanu na PB3 (to chyba PCINT3) i w obsłudze przerwania zrównać jakąś zmienną czekania. Czyli jak czekasz aż coś spadnie do zera to piszesz w przerwaniu "Ta_zmienna = 1" Wtedy po wyjściu z przerwania Decr spowoduje że warunek "If Ta_zmienna = 0 Then" Analogicznie w górę możesz w przerwaniu napisać "Czekaj = 34" A teraz...
W projekcie założyłem sobie dwa przerwania z dwóch timerów. Jedno (nazwijmy je A) wywoływane często i krytyczne czasowo (przerwanie musi być obsłużone jak najszybciej po jego pojawieniu się), trwające tylko kilkanaście cykli. Drugie (B) mniej krytyczne (właściwie w ogóle nie krytyczne), wołane rzadziej, trwające kilkaset cykli. Główna pętla programu...
...zamiast 14700us PB2 włącza się 1,7ms po PB3... Nie wiem, z jaką dokładnością mierzysz te 1,7ms, ale jako że 14,7ms/ 8 =1,8375ms (czyli może być w granicach błędu pomiaru) sugerowałbym sprawdzenie, czy fuse bit CKDIV8 jest prawidłowo ustawiony. Po prostu wygląda na to, że masz 8MHz zamiast 1MHz. TCCR1B = 0x04; //preskaler dla TC1 0x01 - CLK, 0x02...
http://obrazki.elektroda.pl/7861935900_1... Jest to przykładowy projekt zastosowania 16-kanałowego sterownika PWM PCA9635PW firmy NXP o 16-bitowej rozdzielczości, wbudowanego w moduł MOD-23 ( Podłączenie Sterownik PWM podłączony jest do platformy Arduino UNO przez magistralę I2C . Wyświetlacz LCD podłączony został zgodnie z biblioteką...
dodatkowo podpiął bym to przez najzwyklejsze diody do INT0 i w przerwaniu obsługiwać wykrywanie zwartego pinu. albo lepiej, skoro masz procesor z PCINT to wykorzystaj dwa piny PCINT i odpowiednia obsługa programowa. dokładając timer możesz z grubsza mierzyć czas impulsu żeby eliminować drgania styków
A jak mam się odnosić? Przecież już kolega (at)dondu opisał o co chodzi. Nie rozumiem w czym masz problem. PCINT jak sama nazwa wskazuje jest przerwaniem od zmiany stanu więc utrzymywanie na takim wejściu niskiego czy wysokiego stanu nic nie zmienia. Więc jeśli trzymasz linię PCINT w stanie niskim/wysokim i w takim momencie zmienisz stan wejścia INT...
Stanem aktywnym odbiornika jest stan niski, więc świecenie na odbiornik wywoła przerwanie. Chyba, że chcesz zrobić barierę podczerwieni. Wtedy możesz skorzystać z wejścia PCINT skonfigurowanych tak by przerwanie było wyzwalane zboczem narastającym.
Jednym słowem pcint to nie to samo co int0 ;) A dla potomnych int 0 w m2560 pin43 i o ile się nie mylę to to zabrakło opisu że program jest napisany w Bascomie ... Popraw temat zgodnie z normami ;)
Widziałem tysiące programów, ale jeszcze nie wiedziałem ani jednego, który wskakiwał by w przerwanie po to aby stwierdzić, ze nie ma co robić i wychodził z niego, wykonywał jeden obieg pętli głównej i tak w kółko. To jest bez sensu tym bardziej, ze tu można to rozwiązać (jeśli już muszą być przerwania od czujników) od zbocza. Przyznam, ze jestem ciekaw,...
Nie mam już siły do tego przerwania INT0. Co bym nie wpisywał aby go wyłączyć ono i tak jest aktywne. Teraz mam taki program: [syntax=basic4gl] $regfile = "attiny44.dat" Config Pinb.2 = Input 'przycisk Portb.2 = 1 Config Portb.0 = Output 'dioda zielona Config Portb.1 = Output 'dioda czerwona Config Porta.1 = Output 'xpg Config Porta.2 = Output 'xml...
przerwania pcint atmega przerwania pcint attiny pcint attiny
prędkość nagrywania magnetofon szpulowy jakiś włączyć zapłon esp8266 flashowanie
Czerwona kontrolka akumulatora po złym podłączeniu Schemat elektryczny wyważarki Uni-Trol 2050 - dostępność i alternatywy