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
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...
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.
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.
Możesz czytać timer w przerwaniu INT lub PCINT
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...
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...
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ł...
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ć.
Przerwanie PCINT w byle nowszej atmedze, np. m88. Masz ich tyle ile wolnych pinów.
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.
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.
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...
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...
ATMega8 nie obsługuje PCINT.
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.
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.
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...
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 :)
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
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...
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ć...
Skróć czas kiedy przerwanie są zablokowane - wywal wysyłanie danych po RSie poza ten obszar kodu gdzie są zablokowane przerwania.
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ś...
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...
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).
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)
A przerwania PCINT, w które coraz częściej wyposażone są procesory AVR?
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.
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.
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...
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,...
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...
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...
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?
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ć.
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...
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. Kolega trochę za bardzo uogólnia, nie wszystkie AVRy mają PCINTy na pinach, dodatkowo autor korzysta z Atmega32, który to w...
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ż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...
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.
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)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.
Napisać program od nowa bez żadnych waitów . Zastosować przerwania od PCINT i krótkie podprogramy ich obsługi.
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łę...
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ą...
(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>...
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.
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...
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.
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...
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.
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.
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...
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),...
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).
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...
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
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...
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,...
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...
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...
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.
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
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....
Witam Mam impulsy (ok.100 impulsów) trwające 0,4us i powtarzające się co 5us (PinB.0) impulsy "0" z wysokiego stanu do masy. W czasie trwania tego impulsu na PinD pojawia się 8 bitów, które chcę zapisać do tablicy a potem chce je przeglądać. Mam jakieś przerwania bo X się zwiększa i dane w tablicy też ale to nie te dane. Czy to jest wykonalne na Atmega168...
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...
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.
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...
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...
Rozwiązaniem jest obsługa przycisku na przerwaniu bądź to INT bądź PCINT
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.
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...
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.
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...
//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...
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...
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...
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/...
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:...
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...
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 ;)
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...
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...
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...
Zawsze możesz zrezygnować z PCINT i po prostu wybudzać uC co jakiś okres czasu i sprawdzać, czy się zmienił stan switcha.
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...
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...
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...
PCINT są wyzwalane tylko zmianą poziomu (Pin Change Interrupt) i nie da się go skonfigurować jako "falling"
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...
pcint przerwać przerwać pcint atmega pcint attiny
pocztówki dźwiękowe wylać wodę zmywarki długość bagnet
częstotliwości tetra protokół serwisowy
Updating Firmware on MP5 Player 7012: Steps and Tips Zakodowany kanał w Avira 300 - co oznacza?