Żeby wywołane zostało przerwanie musisz jeszcze odblokować globalną flagę zezwolenia na przerwanie (sei()) i skonfigurować kontroler przerwań - odblokować przerwanie o najwyższym priorytecie.
(at)niveasoft To nie ten przypadek. Wyjaśnienie tej zagadki jest raczej proste - flaga przerwania jest kasowana, ale zwieranie mechaniczne powoduje bouncing, więc zgłaszanych jest więcej niż jedno przerwanie. Samo wyłączenie przerwania nie wpływa na odpowiednią flagę, więc przy kolejnym drganiu jest ona ustawiana, ale przerwanie nie jest obsługiwane...
cli i sei zmienią globalną flagę przerwań, blokując lub odblokowując wszystkie. Na to nakładają się priorytety przerwań kontrolera przewań i na końcu masz przerwania z danego modułu. Kolejne możesz zablokować tak jak masz, wpisując blokadę do PINCTRL lub w rejestrze kontrolnym przerwań dla danego peryferium (w tym przypadku PORT). Normalnie RETI na...
Tak, są błędne. ATMega32 dysponuje jednopoziomowym systemem przerwań i aktualnie wykonywana funkcja obsługi przerwania nie może być przerwana. Chyba, że jawnie na to zezwoli odblokowując flagę I rejestru stanu. Z AVR dopiero XMEGA posiadają 3-poziomową obsługę przerwań.
Jeśli dobrze rozumiem, chcesz by przerwanie pochodzące od komparatora wywołało szybką reakcję ( np. odcięcie zasilania czy ograniczenie prądu do zewnętrznego, sterowanego obwodu ), czy tak ? Więc wybierasz przerwanie zboczem narastającym, w obsłudze przerwania ustawiasz flagę i.. tyle. Resztę realizujesz za pomocą tej flagi. Resetować ta flagę możesz...
A propos przerwań - widzę, że masz tam jakieś przerwanie od pinu (funkcja Initialize_INTERRUPT_For_nRF) - pamiętaj, że w XMEGA kontroler przerwań jest wielopoziomowy, tak więc, oprócz odblokowania danego przerwania musisz określić jego poziom (LO, MED, HI), a także odblokować przerwania danego poziomu w kontrolerze przerwań oraz globalną flagę zezwolenia...
Cześć Czy może ktoś mi podpowiedzieć, jak generować przerwanie od zmiany sygnału na lini SS? Obecnie próbuję to zrobić dodając przerwanie na PIN4 portu C [syntax=c] PORTC.INT1MASK=PIN4_bm; PORTC.INTCTRL= PORT_INT1LVL_LO_gc| PORT_ISC_BOTHEDGES_gc; PMIC.CTRL = PMIC_LOLVLEN_bm; [/syntax] oraz przerwanie [syntax=c]ISR(PORTC_INT1_vect) { nr_bajtu=0; }[/syntax]...
Witam Utknąłem z moim kodem i plątam sie w koło ciągle, dlatego proszę o pomoc. W podprogramie "przyciski" przerwania od timer0 mam zrealizowany odczyt przycisków i zrobiłem sobie "flagi czasowe" przyciski: 'przerwanie co 26ms . kod sprawdzania przycisków . incr licz if licz=19 then ' flaga co ok 0,5 s flaga_500ms=0 ' w warunkach początkowych flaga_500ms...
Witam. Mam problem z kodem programu. Do pinu F5 XMegi128A3U mam podpięty przycisk wywołujący przerwanie INT0. O tak: http://obrazki.elektroda.pl/6613783300_1... Kod włączający i konfigurujący przerwanie: http://obrazki.elektroda.pl/8557297900_1... PORT_ISC_LEVEL_gc używam ze względu na to, że domyślnym stanem przycisku...
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 , Zaczynam z AS6, dotąd używałem 4.18 głownie z asemblerem Pytanie dotyczy możliwego błędu symulacji prostego kodu w AS6, do potrzeb zapytania sprowadzonego do wersji jak niżej : http://obrazki.elektroda.pl/4044092400_1... również wygenerowany kod obsługi jest poprawny http://obrazki.elektroda.pl/7240738500_1...
Pisze program na atXmega 16A4 w C (AVR Studio 5). Skonfigurowałem ADC w ten sposób: [syntax=cpp]// ustawienia dla ADC ADCA_CH0_MUXCTRL |= _BV(6);// ADC_CH_MUXINT3_bm; // wejscie na ADC8 - PBO ADCA_CH0_INTCTRL |= _BV(0);//ADC_CH_INTLVL0_bm; //włączenie przerwania ADCA_CH0_INTCTRL |= _BV(1);//ADC_CH_INTLVL1_bm; //włączenie przerwania ADCA_EVCTRL |= _BV(0);//...
Pozwolę sobie jeszcze raz po czasie poruszyć temat enkodera obrotowego. Jak zmodyfikować [url=https://extronic.pl/content/59-kurs... program żeby każda zmiana stanu enkodera generowała przerwanie. Chodzi o to żeby nie czytać stanu rejestru TCC0.CNT cyklicznie i sprawdzać czy przypadkiem coś się w nim nie zmieniło tylko odczytywać...
Czemu przestają działać przerwania jak skorzystam z funkcji spi_send() To jest wycięty najmniejszy działający kawałek kodu z [url=http://www.elektroda.pl/rtvforum/to... wątku Do pinu D0 mam podłączony brzęczyk. Po 2 sekundach w momencie wysłania czegokolwiek na SPI brzęczyk milknie ale tajmer się kręci dalej bo sprawdzałem przez terminal....
Witam, z tego co wiem na temat przerwań, to gdy się takie pojawi, wówczas program główny jest przerywany (stan licznika stosu jest zachowywany), przerwanie jest obsługiwane w funkcji, a po jego zakończeniu jest skok do miejsca w którym był program przed wykryciem przerwania (poprawcie mnie jeśli się gdzieś mylę). Zależałoby mi natomiast, aby móc po...
Witam Was, Podłączyłem do xmegi ADC MCP3421 rezystory pull-up 1k ( próbowałem z innymi ) transmisja 100kHz ( próbowałem z innymi prędkościami ) problem w tym że działa tylko chwilę zawsze zawiesza się w tym samym miejscu po takim samym czasie. Reset układu nie pomaga - powstaje tylko szpilka: http://obrazki.elektroda.pl/5611210900_1...
Prywit! Mam problem z obsługą przerwania zewnętrznego. Do pinu INT0 podłączyłem włącznik zwierający do masy. Jak widać w programie podciągnąłem końcówkę do plusa. Do pinów C.1; C.2; C.3 podłączyłem diody LED do zobrazowania problemu. Napisałem taki oto krótki program i jestem zdziwiony działaniem. Po uruchomieniu programu dioda podłączona do pinu C.1...
Witam, Używam przerwania zewnętrznego na INT0 w konfiguracji na zbocze opadające. Funkcja przerwania jest definiowana w ten sposób: [syntax=c] ISR( INT0_vect, ISR_BLOCK) { //ciało przerwania } [/syntax] Wszystko działa bardzo dobrze, oprócz jednej rzeczy. W przerwaniu wykonuje się kod, który powoduje powstanie zbocza opadającego na pinie, z którego...
Witam, chciałem skorzystać z mikrokontrolera atxmega32e5 ale nic mi na nim nie idzie(programowałem tylko z serii A), nawet taki prosty program nie działa prawidłowo. Zmienna wybor powinna być wyświetlana na LCD co około 1,6 s a jest wyświetlana z o wiele większą częstotliwością. Nie mam już żadnego pomysłu co tutaj jest źle. Program: [syntax=csharp]#include...
Potrzebuję zrealizować komunikację przez USART z możliwością obsługi przerwań. Chodzi o to, że w czasie odczytu danych z enkodera chcę móc wywołać przerwanie od danych przychodzących z komputera. Nie bardzo wiem jak się za to zabrać. Nie mogę używać strumieni do pobierania danych z USART bo mogły by zablokować cały program (getch lub scanf). Chciałem...
Witam Mam problem z Xmegą. Otóż - na płytce z mam złącze goldpin, na którym jest wyprowadzenie do dwóch portów + masa i zasilanie 3V3. Obok znajduje się wejście programatora. Problem jest taki, że gdy zbliżę palec do tego złącza / przypadkowo dotknę mikrokontroler milknie / wyskakuje z programu i nie resetuje się mimo ustawionego watchdoga. Co ciekawe...
Napisałem sobie program który po wykrytym przerwaniu zapala diode led. [syntax=c]#include <avr/interrupt.h> #include <util/delay.h> void init() { cli(); PORTB_DIR =255; PORTA.DIR = 0; PORTA.INT0MASK = (1<<2); PORTA.PIN2CTRL = PORT_OPC_WIREDORPULL_gc | PORT_ISC_FALLING_gc; PORTA.INTCTRL = PORT_INT0LVL_LO_gc; PMIC.CTRL|=PMIC_HILVLEN_bm|PMIC_MEDLVLEN...
Próbuję zrozumieć działanie przerwań i coś mi to nie wychodzi, chciałem uzyskać efekt że po naciśnięciu przycisku program który jest w pętli nieskonczonej obsługuje przerywanie ale mi to nie wychodzi, o to fragmenty kodu: #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> ENABLE_INT0_FLAGING; waitms(unsigned...
Witam. Buduję kolejny oscyloskop, z pewnych względów kodu pokazać nie mogę więc postaram się opisać problem jak najlepiej. Otóż, przy pomiarach bardzo małych sygnałów (o amplitudzie ok 150 mV) zauważam zakłócenia. Sygnał pochodzi z generatora funkcji zaimplementowanego również w tym urządzeniu. No nic dziwnego, zakłócenia jak zakłócenia, sygnał jest...
"Nowe" czyli od Xmega i nowsze AVR mają mozliwość priorytetu przerwania. Poprzednie miały ustalony. Nie wiem jaki to AVR, ale jeśli ustawisz Timer i przerwanie od niego to jak będzie w przerwaniu to oczywiście zauważy potem flagę przerwania z USART, ale może być za późno, dlatego jeśli nie trzeba, to się przerwań od wszystkiego nie uruchamia. Rzadko...
...Czy SPI działa "niezależnie" tzn do rejestru wpisujemy wartości i SPI samo działa sobie z boku... Dokładnie tak; nie wysyłasz bitów 'ręcznie'. Jeżeli włączysz SPI, to zapisanie bajtu danych do rejestru automatycznie rozpoczyna transmisję i równolegle odbiór 8 bitów. Po zakończeniu operacji zostanie ustawiona flaga/flagi przerwania, a samo przerwanie...
Nie wiem jak jest w atxmega, ale jakby coś to zawsze możesz sobie co przerwanie pod koniec zapisywać stan pinów do zmiennej a na początku porównywać tą zmienną z aktualnym stanem. Dzięki temu będziesz wiedział który pin wygenerował przerwanie. Poza tym w atmegach na ten przykład każdy port ma swoją własną flagę. Ale może niech wypowie się ktoś kto zna...
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łę...
O kolejkowaniu też myślałem ale to sporo przebudowa programu. Tylko jeśli program jest koszmarnie napisany :) Kolejkowanie to jedyne sensowne rozwiązanie. W aplikacji sprowadzi się do prostej wymiany instrukcji odwołującej się do SPI na funkcję realizującą transakcję. Wkleiłbym ci kod, ale jest tego trochę, tak jak pisałem, ściągnij sobie przykady...
Witam, bawię się jako początkujący procesorami ARM i Xmega. I mam kilka przemyśleń, nie wiem czy słusznych. Zależy mi na bardzo szybkiej reakcji na przerwanie zewnętrzne INT. I tu jest moja wątpliwość, otóż co z tego, że taktowanie wynosi 72MHz, jeżeli w każdym przerwaniu zewnętrznym muszę najpierw dać ifa sprawdzającego skąd ono pochodzi czyli np:...
Rozwiązanie pierwsze jest bez sensu, bo po co ci przerwanie ustawiające flagę, która jest ustawiana sprzętowo (OVF)? Rozwiązanie drugie jest ok, aczkolwiek zamiast sei w przerwaniu lepiej zastosować ISR_NOBLOCK. Oczywiście to zadziała tylko pod warunkiem, że czas wykonywania obliczeń jest krótszy niż odstęp pomiędzy przerwaniami OVF. W przeciwnym przypadku...
Witam, chciałbym rozbudować kod znaleziony tutaj: http://mikrokontrolery.blogspot.com/2011... Na razie chciałbym dodać obsługę timerów, niestety przerwania nie działają ;/ Sprawdzam działanie przerwań za pomocą JTAGa (Atmel ICE) i stawiam breakpoint'y w funkcjach obsługi tych przerwań, niestety program...
Przede wszyskim sprecyzuj jakie sygnały chcesz badać - częstotliwość i szerokość badanych impulsów (granice). Od tego zależy czy wybrana metoda jest dobra. Po drugie sprecyzuj co chcesz badać - mierzysz szerokość impulsów, czy interesuje cię różna reakcja na zbocza? Wśród AVR masz różne rodziny, ATTiny, ATMega, XMEGA, niektóre znich mają specyficzne...
IMHO jedyne logiczne rozwiązanie. Niby tak, ale równie dobrze ustawienie bitów EVSYS = 0 mogłoby nic nie robić i wtedy osiągnęli byśmy to samo. Tak czy inaczej powinienem raczej użyć ustawienia EVACT = SYNCSWEEP, aby mieć pewność, że ADC będzie wyzwalany przez system zdarzeń i za każdym razem zanim rozpocznie konwersję w tej samej chwili? Czy jednak...
Czy wróbelek ma jedną nóżkę od drugiej? Tak, ale... Kolego, jak chcesz uzyskać sensowną odpowiedź, to zadaj sensowne pytanie. Mogę się domyślać, że włączenie oznacza zezwolenie na obsługę przerwań i wtedy polega to zazwyczaj na ustawieniu bitu w rejestrze maskującym układu peryferyjnego + ustawieniu bitu zezwoleń na przerwania od danego układu (np....
No tak.... Zasugerowałem się pierwszym postem piotrva i nawet nie patrzyłem na program. Co robisz w programie po ustawieniu zegara i włączeniu SPI? Nic nie wysyłasz, odczytujesz status SPI i migasz diodą. A czy gdziekolwiek kasujesz flagę w rejestrze statusowym? Nie. Flagę możesz skasować na 2 sposoby: albo zezwalając na przerwanie w momencie rozpoczęcia...
Odpalam mapowanie na początku i cały odczyt traktuję jak SRAM, tak samo w przerwaniu jak i w pętli głównej? Jeśli tak, to rzezczywiście bardzo wygodne. Dokładnie tak. Dobrze rozumiem, że do problemu dojdzie, gdy akurat korzystam z rejestru CMD kontrolera i odpali się przerwanie, które będzie czytało z flash, a rejestr CMD nie będzie wtedy 0x00? Czy...
Ostatnio zapragnąłem męczyć się z tym maleństwem (xmega32E5).. Próbuje skonfigurować timer tak aby udało mi się zmierzyć szerokość impulsu na jednym z portów. Dla Xmega128A3U nie stanowi to problemu i mój kod konfiguracji timera wygląda tak: [syntax=c] PORTA_PIN5CTRL= PORT_ISC_BOTHEDGES_gc | PORT_OPC_PULLUP_gc; EVSYS_CH2MUX=EVSYS_CHMUX_PORTA_PIN5_gc;....
Czy prawidłowo zastosowałem się do wskazówki stosując najpierw zapis: OSC.CTRL |= OSC_XOSCEN_bm; a na końcu całej operacji wyłączając 2MHz tak: OSC.CTRL = OSC_XOSCEN_bm; ? IMHO tak jest prawidłowo. Wyłączenie generatora 2 MHz nie jest niezbędne, po prostu zmniejsza zużycie prądu. Stosuję optymalizację Os więc pewnie pomimo mojej niewiedzy wszystko...
O ile pierwsze miały jakieśtam problemy, to w kolejnych rewizjach je usunęli (aczkolwiek errata nigdy nie była długa). Atmel ma tą przyjemną cechę, że wypuszcza kolejne rewizje procków w których poprawia znalezione błędy, w przeciwieństwie do wielu innych producentów, którzy je powielają i wmawiają, że tak musi być:) Z pewnością tańsza i w sumie lepsza...
(at)osctest1 Dlatego z ULA na jednym procku raczej nie przejdzie. Obraz musi być generowany co do taktu, na zwykłym AVR samo przerwanie będzie zbyt kosztowne (w Spectrum ULA pracuje równolegle do CPU). Na XMEGA, z DMA myślę, że by dało radę, ale to musiałbym przemyśleć, niewykluczone, że trzebaby użyć jakiegoś glue logic, w celu uzyskania koloru,....
Sam wiesz lepiej jak masz zbudowany program, więc nie będę się sprzeczał. Ale ciągle nie rozumiem czym się różni wywoływanie obsługi przycisków w celu sprawdzenia ich stanu, od sprawdzenia flag, które masz ustawione w przerwaniu. Czy twoje GUI jest reentrant i wielozadaniowe, tak, że jeszcze w przerwaniu masz reakcję na przyciski? To by uzasadniało...
Oj coś koledzy krążycie wokół tematu a nie widzę nigdzie pełnej odpowiedzi. Niektóre są za to błędne albo upraszczające. F_CLK_ADC, to tak jak ktoś pisał, tylko częstotliwość taktowania ADC. A że jest to przetwornik typu SAR (z sukcesywną aproksymacją) to konwersja 1 próbki trwa n cykli zegara F_CLK_ADC. W przypadku tego ADC jest to: - 25 cykli dla...
Rozumiem, w takim razie, że zawsze warto używać _update, zamiast _write? To zależy co chcesz zrobić. Jak zainicjować EEPROM domyślnymi wartościami to obowiązkowo write. Jak zapisać blok danych uprzednio odczytanych z eeprom to zdecydowanie update. Zawsze można dać _update. Jedyna różnica pomiędzy _write i _update polega na tym, że _update sprawdza,...
Trochę już odbiegliśmy od głównego wątku, ale nikt nie narzeka, więc ok. Na szybko: Dokument Atmela, który podałeś nie dotyczy gcc, to stary dokument. tak tak, wiedziałem o tym, że był pisany pod kątem IAR. W każdym razie sporo zasad jest tam uniwersalnych. Chociażby kwestia optymalizacji globalnych flag - bo to dotyczy już przestrzeni adresowej AVRek...
Witam Próbuję wykonać ćwiczenie z kursu Leona http://www.leon-instruments.pl/2014/01/k... Uruchamiałem ten kod pod eclipse Luna z najnowszym toolchainem. Ww właściwościach projektu dla AVR hardware podałem właściwą sygnaturę procka i jego częsttliwość 62000000 Hz , kompilator wykrzykuje ostrzeżenie jak mam definicję zegra...
Kolejna sprawa dlaczego brakuje u ciebie w części zasilaczowej magazynu energi tylko jest sam ceramik(LM7805)?? Po mostku jest 1000uF dla dwóch stabilizatorów (9V i 5V). Po LM7805 jest 470uF. Pobór prądu z LM7805 nie powinien przekraczać 100mA, więc energii jak aż nadto. Rozważam tu raczej zastosowanie Lm317 w miejsce LM7805, aby zwiększyć napięcie...
Piszac przypadłosc miałem na mysli fakt ze flagi zwiazane z przerwaniem sa w innych xmega automatycznie kasowane po wejsciu w obsluge przerwan. Wiele rzeczy uporzadkowana szczegolnie jesli chodzi o nazwy rejestrow w xmegacg i wszystko jest dosc konsekwentnie. Tylko w xmedze e5 jest z tymi przerwaniami inaczej. Nigdy jeszcze ich nie uzywalem ale kolega...
Witam wszystkich, Próbuję uruchomić kartę mikro SD na płytce extrino od Leona, Mam książki Pana Tomasza Francuza i przerabiam przykład "Inicjalizacja" z katalogu KartySD. Książka "AVR Układy peryferyjne". Używam Atmel Studio 7. Uruchomiłem przykład na płytce DIL64 (także od Leona). Działa w trybie SPI. Ponieważ docelowo będę potrzebował SPI_USART sięgnąłem...
flaga przerwać xmega przerwać xmega flaga przerwania
zmywarka candy sygnał dźwiękowy odprężnik kompresora schemat wzmacniacza 1200w
Podłączenie klaksonu w Toyocie Prius 3: schemat i diagnostyka Amica E01 – błąd blokady drzwi w pralce, elektroblokada, naprawa, modele PA PB PC