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.
Witam. Dla wejść INT0 i INT1 możesz skonfigurować przerwanie dla zbocza narastającego, opadającego, zmiany stanu lub stanu niskiego. Przerwanie PCINT jest wywoływane przez zmianę stanu na wejściach PCINT0 - PCINT7. Dodatkowo można określić które z wejść PCINT ma wywołać przerwanie za pomocą rejestru PCMSK. Pozdrawiam - Daniel
Możesz czytać timer w przerwaniu INT lub PCINT
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...
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...
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.
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.
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.
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ć.
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ł...
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...
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.
Kamyczku - lepiej już zamilknij, bo pogrążasz się każdym zdaniem Nie życzę sobie takich zwrotów.... W ciągu sekundy jak się postarasz naciśniesz przycisk 4 razy więc 46 razy wykonasz to sprawdzenie bezsensownie . W pcint przerwanie wykona się 4 razy i wykona to te same dwa cykle . Plus cykle które wykonuje mikrokontroler przy skoku i powrocie z przerwania...
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ć...
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...
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
Przerwanie PCINT w byle nowszej atmedze, np. m88. Masz ich tyle ile wolnych pinów.
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.
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...
Oba timery z kontrolerka, wykorzystuję w trybie PWM, co koliduje z wykorzystaniem ich do generacji przerwania dla klawiatury. Otóż niekoniecznie. Timer skonfigurowany do PWMa może także generować przerwanie od przepełnienia.
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...
ATMega8 nie obsługuje PCINT.
Czego oczekuje NAZE Ci niestety nie powiem. Poszukaj informacji w manualu. Po wyłączeniu nadajnika dioda przy attiny powinna zgasnąć, bo brak PWM to brak PCINT, a tam jest załączana. Możesz dopisać symulację dodatkowych kanałów i sprawdzić, czy coś to pomoże. Dodaj sobie np. drugi output compare do tego licznika, który już masz. Jak zliczysz 6 wyłączeń...
Witam, przecież wskazanie enkodera nie zależy od wartości na pinie, tylko od zmiany tej wartości. Teraz przerwanie wywołuje enkoder drugi, a Ty przy okazji zmieniasz pozycję dla pierwszego. Pozdrawiam.
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).
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...
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.
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.
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...
Witam, Nie będzie działać poprawnie po popełniłeś jeszcze jeden błąd. Do momentu uśpienia wszystko jest ok, ale teraz następuje zmiana na porcie C, uP wstaje z uśpienia wykonywanie jest przerwanie pcint i teraz następuje powrót z przerwania. Powrót wykonywany jest jest nie do instrukcji SLEEP jak założyłeś a do pierwszej instrukcji po niej. Czyli następuje...
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...
Ok dziękuję za rady. No jest tak jak napisał mirekk36 - wybudzanie INTx działa tylko na poziom niski. Jako że chciałem mieć wybudzanie dowolna zmianą to zrobiłem wybudzanie poprzez przerwanie PCINT i zgodnie z dokumentacją działa :)
Skróć czas kiedy przerwanie są zablokowane - wywal wysyłanie danych po RSie poza ten obszar kodu gdzie są zablokowane przerwania.
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
nie mylisz się Dodano po 20 już się poprawiam, bo w temacie napisałeś ATmega8, jakoś mi to umknęło i skupiłem się tylko na tekście i pytaniach o sposobie wyzwalania przerwań. Z opisu dokumentacji jaką czytałeś poprostu domyśleć się można że chodzi o procki inne niż ATmega8 bo akurat ten procek nie ma przerwań PCINTx, Więc co do tego co przeczytałeś...
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.
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...
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.
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...
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?
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...
A przerwania PCINT, w które coraz częściej wyposażone są procesory AVR?
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)
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ś...
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...
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ąć...
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...
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. Kolega trochę za bardzo uogólnia, nie wszystkie AVRy mają PCINTy na pinach, dodatkowo autor korzysta z Atmega32, który to w...
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ę?
Napisać program od nowa bez żadnych waitów . Zastosować przerwania od PCINT i krótkie podprogramy ich obsługi.
Jeden sygnał = jeden pin ICP. Wystarczy sobie zmieniać w przerwaniu od ICP, zbocze na jakie ma reagować to przerwanie. Ewentualnie przy większej liczbie sygnałów - przerwania INT lub PCINT.
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ć.
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łę...
Zmieniłem konfigurację ISC00 i ISC01 na wszystkie możliwe i procesor nie wybudza się - jedynie gdy dam wyzwalanie niskim poziomem. Po włączeniu zasilania, przerwanie można raz wywołać a potem procesor usypia się na stałe. Czy coś robię źle ? Dodano po 9 Chyba już rozumiem kolegę co napisał poprzedniego posta. Ja chcę budzić przerwaniem z INT0 a jak...
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.
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,...
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).
Mam Attiny2313 i zamierzam ją wykorzystać. Zdaje się, że Attiny2313 może przyjmować przerwania z 8 wejść. Owszem. Jest taka możliwość. Z tym, że zawsze jest to jedno przerwanie PCINT i do Ciebie zależy sprawdzenie jaka zmiana stanu wywołała to przerwanie. Ponadto znajduje się ono niżej w hierarchii przerwań układu. Stosowanie INT0 i INT1 jest moim...
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...
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.
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...
Program na ArduinoMega działa bardzo dobrze, więc postanowiłem przenieść go na procesor Atmega 328p - ten sam co w większości płytek Arduino. Układ pracuje na wewnętrznym oscylatorze 8MHz, bootloader wgrany, program też. Pojawił się niestety problem, którego nie potrafię zlikwidować - przerwanie od przycisku powoduje restart procesora... Jeżeli dodam...
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.
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...
Zaczęło działać poprawnie. Niedopatrzenie z mojej strony, że PCINT0 i INT0 to różne przerwania. Dla pełności tematu. Jak skorzystać z PCINT? Szukałem w manualu i jakieś przykłady w sieci ale nie znalazłem nic czytelnego.
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.
(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>...
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...
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...
(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.
Rozwiązaniem jest obsługa przycisku na przerwaniu bądź to INT bądź PCINT
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,...
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
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 ;)
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...
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),...
Schemat dla fazowego jest nieco inny i prawdę mówiąc nawet go nie rysowałem. Po prostu dorobiłem dodatkowy mały układzik detekcji zera na mostku dwóch rezystorach 100k i transoptorze, podłączyłem to do jednego z wolnych pinów i w programie badam przerwanie od PCINT (końcówki od INTO i INT1 mam już zajęte) z programowym podziałem przez 2 (PCINT reaguje...
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:...
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...
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...
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.
W 328P masz PCINT na około procesora. Możesz wybrać dowolny pin i mieć z niego generowane przerwanie. To już nie jest babcia Mega8 :D
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...
Witam. Od razu mówię, że działam na ATtiny2313. Chciałbym przedstawić kod, nad którym głowię się już dość długo i ciągle nie działa, kod jes banalny a jak to mówią diabeł tkwi w szczegółach, więc może ktoś z forumowiczów może mi pomóc. Kod wygląda tak: 'Program powinien (wlasnie! - powinien) pobierac sekwencje przerwan 'z odpowiednich portow...
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...
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/...
Zawsze możesz zrezygnować z PCINT i po prostu wybudzać uC co jakiś okres czasu i sprawdzać, czy się zmienił stan switcha.
Witam. Byłem zmuszony wykożystać programowy UART w ATtinny13 i podczas moich prac okazało się że najwyrażniej autorzy (budowniczowie) Bascoma zapomnieli napisać procedury buforowania transmisji programowego UARTa O niczym nie zapomnieli , bo taka jest filozofia programowego UART-a. Odbiera i/lub wysyła dane tylko w tym momencie , kiedy programista...
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,...
Cały problem jest w tym żeby te dwie ATmegi się zsynchronizowały. Przerwanie od SPI występuje po zakończenia transmisji pierwszego bajtu. Zanim nastąpi obsługa przerwania to pierwszy bajt zostanie utracony. Nie mamy też gwarancji że dwie Atmegi "wystrzeliły" :) równocześnie i Slave nie czyta np. 4 bajtu nadanego przez Mastera. Jeżeli to by była np....
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
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...
Inny jest adres portu dla CAi niektórych przycisków. Poza zmianą programu, w sprzęcie wystarczy tylko wymienić procek i kwarc a zyska się możliwość zmiany parametrów w czasie pracy generatora. Naturalnie do zrobienia. Tak jak w przypadku portu dla CA można to robić bez sprzętu (zdaje się zmiana w 2 miejscach w programie), to w przypadku klawiatury...
Kolego (at)dioda_007 tak z zasady nikt gotowca ci nie napisze. Musisz sam coś naskrobać to dalej możemy pomóc jeśli wystąpią problemy. Generalnie musisz użyć któregoś z timerów. Ja bym to zrobił tak: Przycisk switcha podpiął pod PCINT. W podprogramie obsługi przerwania załączał timer zboczem opadającym i zatrzymywał zboczem narastającym. Potem to już...
dla pozostałych wejść masz przecież też przerwanie od dowolnej zmiany stanu na wejściach więc chyba coś można wymyślić innego niż zewnętrzna logika. Dokładnie w tym miejscu problem - w moim AtMega nie ma PCINT, więc próbuję to obejść sprzętowo. Inaczej bym się nawet nie bawił, ale dwa przerwania (INT0 i INT1) to dość niewiele dla kilku przycisków +...
//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...
hmmm jeżeli chodzi o klawisze proponowałbym zrobić tak: linie z PCINTX podciągnąć rezystorem 1M do stanu wysokiego a następnie dać na przycisk który byłby zwierany do masy(linie jako wyjście) PCINT reaguje na każda zmianę stanu na pinach (wybranych) także zwierając linię do masy wywołujesz przerwanie w którym sprawdzasz stan portu
Niekoniecznie zwróci tę samą wartość, chodzi przecież by zapytać o wartość z millis w różnych przerwaniach, a nie kilka razy w tym samym. Funkcja update z bounce2 nie wywołuje oczywiście kilku razy millis() w jednym wywołaniu. Jednak jest to bez sensu, bo samo wywoływanie funkcji w przerwaniu trwa długo, operacje są na zmiennych 32bity i zakłóci pomiary...
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...
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...
przerwać pcint przerwać pcint atmega pcint attiny
marantz wzmacniacz stereo chrysler voyager zasilania długość bagnet
simson zalewa pralka samsung ecobubble
LG 47LE8500 zatrzymuje się na logo - diagnoza i naprawa Schemat elektryczny Citroen Berlingo 2006 1.6 HDi