Ż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)Marek_Gorecki Odnoścnie ARM info o czasie reakcji na przerwania znajdziesz tutaj: http://infocenter.arm.com/help/index.jsp... Funkcje: EXTI_GetITStatus EXTI_ClearITPendingBit są specyficzne dla STM32 ponieważ wiele źródeł jest podłączonych do jednego wektora przerwania. Czas reakcji na przerwanie będzie sumą cykli...
Chyba najlepiej by było zrobić dodatkowe przerwanie, które realizowało by elementarne operacje na magistrali 1Wire, czyli włączało stan niski linii i go zwalniało. Wtedy nie byłoby tego czekania 480 us i to dodatkowe przerwanie mogłoby przerwać przerwanie silnika na nieistotny czas. Tylko, czy to nie jest za duża komplikacja? Na czas nadawania reset...
Witam Forumowiczów. Tytułem wstępu krótki "portret własny". Jestem elektronikiem-programistą-amatorem. Swoją przygodę z mikro-kontrolerami wiernie ograniczyłem do rodziny atmeli mega. Może nie narzekam , ale świat idzie do przodu, chcę się pobawić DMA i te klapki na oczach zaczynają uwierać. Ponieważ rodzina atmeli powiększyła się o serię xmega idąc...
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...
Hej, może przerwanie SPI?
Witam Czy w trybie FREERUN zgłaszane jest przerwanie? Pozdrawiam
(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...
Po pierwsze enkoder możesz obsługiwać sprzętowo na XMEGA - w tym celu konfigurujesz event system na QDEC, a dowolny timer będzie ci zliczał impulsy i pracował jako enkoder. Co do transmisji USART - można paczki odbierać przez DMA, co jest wygodne, można to zrobić w oparciu o przerwania. W tym celu odblokowujesz przerwanie RXComplete sygnalizujące gotowy...
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ć...
Nie, tego z obsługi enkodera. Jak sądę przejściu 0->top i top->0 towarzyszy przerwanie nadmiaru. Ew. można wykorzystać przerwanie compare z kanałów A-D.
Owszem, przerwanie wyzwoli, ale najpierw należy rozpocząć konwersję. Ty robisz to tylko raz, przy inicjalizacji ADC, po pierwszym przetworzeniu już nic nie wyzwala kolejnego.
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...
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. 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...
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...
Witam W projektowanym urządzeniu popełniłem pewien błąd, niestety płytki zostały już wytrawione i polutowane a znalezienie przyczyny nieprawidłowości zajęło mi dość sporo czasu, więc wolałbym uniknąć ponownego składania układu. Mam kilka przycisków połączonych z bramką NAND. Wciśnięcie któregokolwiek generuje na wyjściu bramki stan wysoki, który dalej...
Witam, Mam taki problem. Próbuje odpalić LCD z kontrolerem ST565 na Xmega32E5. Do tej pory korzystałem z dobrze opisanego większego kolegi (Xmega128A3U). Problem który opisze poniżej nie występuje na na Xmega128A3U używając identycznego kodu. Kod na potrzeby testów wygląda tak: [syntax=c] #include <avr/io.h> #include <util/delay.h> #include...
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 W moim projekcie występuje silnik krokowy, którym steruję z zewnętrznym sterownikiem. Potrzebuję więc jedynie generować sygnały DIRection i PULse. //Będzie to odwrócone wahadło. Nie mam sprzężenia zwrotnego od silnika. Silnik będzie przesuwał liniowy wózek. Będę chciał zaimplementować rozpędzanie i zwalnianie silnika. Do celu generacji PULSE wykorzystuję...
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ń.
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...
Witam, Chciał bym programować urządzenie oparte o Xmega za pomocą USB - FLIP. Jednak zamiast kombinacji przycisków RST/FLIP wolałbym użyć przełącznika dwu-pozycyjnego PRACA/PROG. Jak sądzicie, wprowadzać zmiany w bootloaderze? czy może zastosować jakiś prosty mechanizm elektroniczny? Co będzie bardziej cywilizowane?
Witam. Buduję system, w którym potrzebuję zrobić zewnętrzne wyzwalanie pomiaru przez ADC. W uC pracują 2 ADC, zapisem do buforów po 512 próbek zajmuje się DMA. Wszystko śmiga, ale jeśli wyzwalam kolejne bloki (po 512 próbek) w przerwaniu np od ADC (Compare), od komparatora albo np zwykłym przerwaniem zewnętrznym to ewidentnie na wizualizacji próbek...
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,...
Witam Mam problem z przerwaniami w Xmedze. Zarówno przy Timerze jak i UART. Najprościej mówiąc uK nie generuje mi przerwań (podprogramy obsługi przerwań nie są wykonywane). Inicjowałem przerwania w danym "urządzeniu", ustawiałem poziom przerwania, aktywowałem poziomy przerwań i aktywowałem globalnie przerwania. Co trzeba jeszcze zrobić?
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...
Priorytety są jak osobne grupy przerwań odnośnie załączania. Chcesz mieć hi_level musisz załączyć hi_level. Ich relacja wystepuje wtedy gdy obsługując przerwanie low_level dostajesz przerwanie med_level lub hi_level, to lo_level zostaje wstrzymane na czas realizacji med_level lub hi_level.
Z ciekawości możesz ustawić wszystkie nieużywane porty i te do których nie masz nic aktualnie podłączone jako wyjścia . To co opisujesz wygląda tak jak by "wiszący pin" będący wejściem generował przerwanie .
Nie dasz rady podłączyć kilka pinów pod jeden kanał system events, jest tylko jeden CHnMUX na kanał. W formie protezy na przerwanie INT z kilku pinów możesz programowo włączać przerwanie events.
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...
Tak, XMEGA chodzi max do 3,6 V, niemniej dzięki DMA można pobrać stan portu w ciągu 1-4 taktów, co dla zegara 32 MHz przekłada się na mniej niż 160 ns, w dodatku całkowicie sprzętowo, bez udziału MCU.
Witam, W przypadku XMEGA32E5 i timerówTC45 znacznik przerwania od Overflow/Underflow nie jest automatycznie kasowany po wejściu do obsługi przerwania. Należy go skasować programowo poprzez wpisanie "1" do bitu OVFIF w rejestrze INTFLAGS w obsłudze przerwania. U Ciebie występuje dokładnie efekt braku kasowania znacznika. Pierwszy okres jest poprawny,...
Mam jednak wciąż pytanie co do drugiej części, jeżeli zmienna jest volatile to dlaczego konieczne jest wyłączanie obsługi przerwań? Czy wynika to z tego, że to 4-bajtowy typ long i przerwanie może nastąpić w trakcie porównywania i zmienić wartość niesprawdzonych jeszcze bajtów? Dokładnie o to chodzi. Tu lepsze sa 32 bitowe procki, przy porównaniu long...
Co rozumiesz przez "stabilność pracy"? Jeśli chodzi o zabezpieczenie przez zawieszeniem się na skutek zaniku sygnału zegarowego to XMEGA ma ciekawy układ monitorujący sygnał zegarowy. W razie błędu automatycznie zostanie uruchomiony wbudowany generator 2MHz i zostanie zgłoszone przerwanie. W XMEGA poszczególne peryferia procesora mogą być taktowane...
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...
Tak na szybko bo w tej chwili nie mam czasu, nie możesz do zmiennej wielobajtowej, modyfikowanej w przerwaniu, odwoływać się tak jak to robisz. Zastanów się, co się stanie jeśli przerwanie wystąpi w czasie wykonywania instrukcji ltoa, lub wysyłania danych? To co uzyskasz będzie mniej lub bardziej przypadkowe. Najpierw atomowo przepisz zawartość zmiennej...
Amógłbyś jeszcze napisać czy istnieje w xmega coś jak tryb przerwania CTC w atmega? Potrzebuję przerwanie co 1 sekundę i za bardzo nie wiem jak to zrobić a strasznie mało informacji w sieci:/ Czy CTC to jest CCA w xmega? Każda Xmega ma wbudowany układ RTC orac generator 32kHz więc można sobie 1 sekundowy taimer ustawić bez problemu (i bez dodatkowych...
Panowie wydaje mi się, że właśnie w takim przypadku użycie volatile jest KONICZNE i to zdecydowanie, ponieważ to właśnie tylko w funkcjach a w zasadzie TYLKO w funkcjach zawierających pętle nieskończone bez możliwości ich przerwania dochodzi do buforowania zmiennych Nie jest to prawdą: Natomiast co ciekawe jeśli używamy zmiennej w przerwaniu to jej...
Enkoder faktycznie jest optyczny ale drgania wynikają z oscylacji regulatora lub drgań które niosą się po maszynie. Ale to raczej max kHz wiec dla 32MHx procesor się wyrobi. Ostatecznie wg dokumentacji przerwanie timera może być zgłaszane przy przepełnieniu w obie strony.
Przecież nawet w nowszych AVRach możesz skonfigurowac przerwanie Pin Change na każdym porcie, więc w czym problem? robiw
Widzę jednak, że freeRTOS działa na AVRach: https://www.freertos.org/RTOS_ports.html W pierwszej wypowiedzi nie pisałeś, że chodzi o AVR. Odpuść sobie RTOS na AVR. Ma on spore ograniczenie no i RTOS wymaga "trochę" RAM, tak jak i wszelkie bufory (np dla UART) aby RTOS mógł "rozwinąć skrzydła" a AVR mają mało RAM poza Mega1284. Tak z ciekawości - próbowałeś...
Witam kolegów. Mam pytanie co do przerwań w uC seri XMEGA. Wiem że każdy port może generować przerwanie INT0, INT1. Czy oznacza to że w sumie mam 2xnPORTOW możliwych przerwan tego typu? Potrzebuje uC gdzie mogę wykryć zboczę narastające na 4 różnych wyprowadzeniach, i zboczę na każdym z pin-ów ma wywołać inne przerwanie. Czy podobnie jak w starszych...
Istotnie są enkodery, które generują pojedyncze przejścia, albo całe cykle, lecz w praktyce nie ma to znaczenia i metoda opisana przez (at)PDT sprawdzi się w obu przypadkach. Jedynie wynik należy podzielić przez 4 jeśli enkoder generuje pełen cykl/przejście. Jeśli przerwanie tak jak w przykłądzie jest generowane co 2,5ms to potencjalnie możemy wykryć...
Popatrz na enable cycle time - 1200 ns, czyli wieczność. Obsługę tego wyświetlacza na szybkim MCU należy oprzeć np. o przerwania. Czyli w przerwaniach timera, wywoywanych co odpowiedni czas - max co 1200ns dokonujesz zapisu, jeśli masz coś do zapisania i kończysz przerwanie. Dzięki temu procesor ma szansę w międzyczasie zrobić cos sensownnego, a nie...
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...
Tego jitteru w żaden programowy sposób nie wyeliminujesz. Jego powodem jest to, że wejście w ISR trwa nie zawsze tyle samo - XMEGA wykonuje instrukcje w ciągu 1, 2 lub 3 taktów, a ISR nie przerywa instrukcji, lecz CPU musi ją najpierw dokończyć. Więc w zależności od wykonywanej instrukcji już masz jitter 0-2 taktów. Do tego, jeśli MCU wykonuje inne...
ad 1. To co piszesz jest prawdą dla niektórych procesorów, posiadających przerwania wielopoziomowe z priorytetami. AVR8 z wyjątkiem rodziny XMEGA tak nie mają. Jeśli wystąpi przerwanie to wszystkie inne są blokowane. Tylko XMEGA ma 4 poziomy piorytetów (właściwie 3 - jeden to po prostu blokada przerwań) i procedura obsługi może być przerywana przez...
Ogólnie powiem z całym szacunkiem, że z najnowszym AVR Studio jest sporo problemów. Dla początkujących do nauki polecam AVRStudio 4.18 - tam w zakresie podstawowych kostek serii Tiny AVR i Mega AVR wszystko działa poprawnie. (Jedynie najmniejsze kostki Tiny10/9/5/4 są w wersji 4.18 obsługiwane nieprawidłowo, serii XMega nie testowałem szczegółowo w...
Nie będzie to specjalnie trudne, nawet na AVR. Jak pisałem, zainteresuj się rodziną XMega, masz tam podwójny ADC z pipeline, DMA umożliwiający ładowanie wyników wprost do pamięci lub urządzenia IO, samplowanie 2Msps przy 12-bitowej rozdzielczości, a nawet szybciej dla niższej. Programowe wzmocnienie 1-64x i wiele innych. No tak, kiedyś trzeba będzie...
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łę...
Wszystkie tego samego nigdy nie mają. Nawet jeśli ustawisz je na tym samym poziomie, to najwyższy priorytet ma przerwanie o najniższym wektorze, chyba, że zastosujesz round robin lub inny, sztywny priorytet. Jeśli chodzi o wymienione trzy poziomy to wszystko zależy od aplikacji. Zauważ, że przerwanie wyższego poziomu może przerwać ISR przerwania niższego...
A mnie interesuje sprawa DMA - że niby można pobierać dane sprzętowo i np wypluwać je na LCD. Czyli że 1 poleceniem mogę zawartość bloku pamięci RAM/FLASH wypluć na port SPI? A co jeśli wypluwam do LCD dane równolegle i po każdym bajcie muszę dać sygnał E (zapisz)? Ponoć można też pobrać dane do pamięci. Przykładowo mam RS232. Ale DMA mi nie wykryje...
Zmienne globalne zajmują...... Pewnie ram dla led jest rezerwowany w chwili uruchomienia biblioteki przez memalloc. Gdybyś sam pisał obsługę led to użyłbyś tablicy o określonym rozmiarze dzięki czemu wiedziałbyś ile ram zajmuje program. Poszukaj jak wyświetlić ilość wolnej pamięci ram w czasie działania programu. Jakiś freemem jest. Trochę oszuka ale...
Zmienić tryb pracy na jaki i czy w tedy też trzeba zmierzyć offset?. W pdfie jest trochę za dużo informacji jak na jeden raz. Czy ADC idzie ustawić w tryb free run ze skanowaniem wejść (na porcie A), gdzie po przeleceniu wszystkich zgłosi przerwanie i w tym przerwaniu będzie się można dobrać do wartości z każdego wejścia?
"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...
Na ATMega644 oczywiście nie da się tego zrobić, chociażby z tego powodu, że bufor odbiornika jest jendobajtowy i odebrane znaki by się po prostu zgubiły. Natomiast z AVR da się coś takiego osiągnąć na XMEGA E5, gdy sprzęgniesz USART z EDMA w trybie wyszukiwania wzorców. Wtedy jest możliwość zgłoszenia przerwania po napotkaniu wzorca, który podałeś,...
Nie wiem jak ugryźć coś takiego: karta SD i VS1011 na jednym SPI (xmega). Odtwarzane będą pliki zarówno mp3 jaki wav. No i w przypadku wav zastanawiam jak pożenić wszystko czasowo np dla pliku 48kHz 16bit stereo. Odczyt z karty SD jednego sektora 512B trwa zapewne ok 300 - 500 us, a więc na ten czas musiałbym zaprzestać transferu do VS (a przy odczycie...
Dobrze wezmę pod uwagę że to ma też odebrać. Choć nie mam pojęcia jak i jak to wyegzekwować skoro nic nie nadaje do xmega. Tak czytam datasheety często bo daje to dużo lepszy wgląd w registry niż durne polecenia bascoma. Nie wiem jednak jak podłączyć przerwanie od SPI pod te DMA, jest coś jak eventsystem ale miesza mi się to wszystko już.
Witam; próbuje poznać procesory Xmega, a dokładnie temat Timery. I nie mogę zrozumieć dwóch kwesti: 1) który rejestr odpowiada za podłaczenie zewnętrznych pinów procesora jako efekt działania timera w trybie PWM? Otóż, jeżeli timer ustawię na pracę w trybie single_slope lub na dual_slope , to jak mam zadeklarować aby wyjścia OCxx działały z tym timerem?...
Zależy co to za sygnał. Jeśli będzie co chwilę wywoływał przerwanie komparatora to ci zamuli procka, no chyba, że ten procek i tak nic więcej nie robi. Z drugiej strony jeśli korzystasz z Mega64, to pomyśl nad przesiadką na XMEGA, obudowa ta sama, rdzeń ten sam, narzędzia te same, a możliwości o wiele większe.
Jeśli chodzi o naukę to jednak bym się zabrał za XMEGA - 4 komparatory analogowe, z możliwością podłączenia pod wejście wyjścia z DAC, dzięki czemu masz możliwość regulowania progu przełączenia, ma też ADC z możliwością porównywania wyniku - przerwanie/event w sytuacji wynik większy lub wynik mniejszy niż zadana wartość.
Ograniczeń sprzętu się nie pzeskoczy. Tylko jak już robić to programowo to można dla wszystkich trzech serw, kod taki sam, a zostaje jeden timer więcej. Ale powstaje problem pod postacią jitteru wejścia w przerwanie, jeśli mikrokontroler wykorzystuje jeszcze inne przerwania. Ponieważ ATMega ma jednopoziomowy system przerwań zrobi się bałagan. A może...
xmega flaga przerwać stm32 przerwać przerwać przerwać przerwać bascom
zuzycie benzyny oznaczenie silników spalinowych odblokowania sieci galaxy
agregat prądotworczy pistolet lakierniczy
Instrukcja obsługi radia CB Alan 95 - gdzie znaleźć? Gdzie wlać płyn hydrauliczny w Citroën Jumpy?