(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...
Dorób obsługę przerwania (tak jak masz dla timera) albo go nie włączaj.
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...
Ż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.
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...
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.
(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...
Co do symulatora to coś nie zadziałało, powinien ustawić ADCA.CTRLA na 0b00000101 natomiast na przykładzie widać, że się nic nie zmianiło: No właśnie zadziałało i chyba ci pokazało co jest grane. Nie masz czasem wyłączonego ADC w rejestrach oszczędzania prądu? Sprawdź stan rejestrów PRP.
To sprawdź czy sysclk_init(); albo procedury inicjalizacyjne USB nie wyłączają timerów w rejestrach redukcji poboru mocy PRP.
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...
Dokładniej to nie AVRy, tylko ATMega ma jednopoziomowy sytem przerwań, XMEGA (która też należy do AVR) ma 3-poziomowy system przerwań. ATMegi mają też sztywnie przydzielone priorytety przerwań (o ile jest w ogóle sens mówić tu o priorytetach), XMEGA mają kilka schematów priorytetowania. Tak jak piszą koledzy powyżej można zrobić obsługe nieblokującą...
Jest jeszcze coś takiego jak kontroler przerwań, więc należałoby włączyć obsługę przerwań dla jednego z poniższych poziomów, które wybrałeś (nie wiem czemu masz zaznaczone dwa poziomy). ADCA_CH0_INTCTRL |= _BV(0);//ADC_CH_INTLVL0_bm; //włączenie przerwania ADCA_CH0_INTCTRL |= _BV(1);//ADC_CH_INTLVL1_bm; //włączenie przerwania Do tego...
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ń.
0. PORT_ISC_LEVEL - jak sama nazwa wskazuje, generuje przerwanie tak długo, jak długo jest stan niski. Skasowanie flagi przerwania nie eliminuje przyczyny przerwania. Gdybyś blokował przerwania INT0 dla portu, to miałbyś pojedyncze wyzwolenia, a tak to obserwujesz 2 (i pewnie też więcej) dla przytrzymanego przycisku. 1. Xmegi mają sprzętowe odwracanie...
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.
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,...
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...
Prawie nie do zrealizowania samym scanf. Moesz co prawda napisac wasną funkcję obsługi stdio ale problem jest że nie wpływa to na przerwanie sscanf. Jest to generalnie ciężko obejść jako że nie ma zaimplementowanej funkcji select np. Musisz czytać własnymi funkcjami uarta i pisac do bufora - kiedy bufor jest pełny (tzn np osiągnie odpowiednią ilość...
W układzie resetu nie ma, jest tylko podciągnięcie 10k do VCC, bo programuję poprzez PDI. Ale spróbuję rzeczywiście dodać w następnej wersji PCB. Chodziło mi o to aby struktura była taka jak jest stosowana w układach resetu, czyli rezystor do zasilania, kondensator do masy obwodu. W ten sposób zmniejszasz podatność pinu na przypadkowe zmiany stanu...
when the entire frame in the shift register has been shifted out and there are no new data present Z czego wynika, że przerwanie jest generowane, gdy w UART nic nie ma (czyli nic nie ma w rejestrze nadajnika i buforze sprzętowym). W przypadku ciągłej transmisji nie jest więc generowane TxC. Co zresztą nie miałoby sensu. Dzięki temu możesz rozpoznać...
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 .
Dokładnie w taki sam sposób jak w ATMega. Różnice występują w konfiguracji całego podsystemu przerwań.
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.
Przecież nawet w nowszych AVRach możesz skonfigurowac przerwanie Pin Change na każdym porcie, więc w czym problem? robiw
Oczywiście, że event system może reagować na zbocza - robi to analogicznie jak system przerwań. Czyli musisz skonfigurować poziom/zbocze i podłączyć pod event system.
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...
Samo wejście i wyjście z przerwania nie kasuje sprzętowo flagi w typie Ex. Skasuj flagę przerwania "ręcznie" w przerwaniu i daj znać jak taka akcja się skończyła :D
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...
Rozwiązałem sam :) Okazało się, że miałem odblokowane przerwanie, które nie miało swojej funkcji obsługi...
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...
http://obrazki.elektroda.pl/7758360200_1... Energooszczędny błyskacz LED ze średnim poborem prądu poniżej 5uA? Tak, z XMEGA32E5 udało mi się tego dokonać. 5 lat błyskania LEDem na zasilaniu z 2 paluszków alkalicznych? Czas pokaże. Ponad 10 lat przy baterii litowej CR123A? Z pewnością możliwe, gdyby nie drobne przeszkody techniczne....
No zgodziłbym się z Wami w 100% gdyby nie to, że niestety nie do końca to działa tak jak opisujecie. Jeżeli faktycznie Bit 0 – BBPODF: Battery Backup Power-on Detection Flag odpowiadało za sygnalizację, że bateria jest po wyłączeniu zasilania powinna być ustawiana ZAWSZE (przy podłączonej baterii), a tak nie jest. Ustawia się tak 50/50. I drugie....
Generalnie jeśli odblokowuje się jakieś przerwanie to wypadałoby napisać jego handler. Ty odblokowujesz przerwanie odczytu i zapisu, a jednocześnie kod ich nie obsługuje i z jakiegoś powodu jest napisany tak, żeby z przerwań nie korzystać... Poza tym w TWI trzeba obsługiwać różne stany magistrali, które masz opisane w nocie procka. Mieszasz też rejestr...
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...
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ś...
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...
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, moim zdaniem źle odbierasz dane ze sprzętowego spi. Nie ma sprawdzenia czy dana (bajt) jest przez spi odebrana, a Ty zczytujesz ją zanim odbieranie sie zakończy. Przy spi programowym Ty wysyłasz zegar i po ośmiu taktach sprawdzasz liczbę odebranych bajtów. Przed odczytem SPID.DATA sprawdź flagę przerwania - co znaczy że odebrano, bądź wysłano...
Znaczy to, że ostatnio obsłużone przerwanie ma najniższy priorytet i następnym razem zostanie w sytuacji konfliktowej obsłużone jako ostatnie. Wygodne, jeśli masz przerwanie występujące bardzo często i chcesz zagwarantować, żeby inne przerwania też dostały swoją szansę.
Ten sinus liczony w przerwaniu na Xmega to miał być żart, prawda?
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...
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;....
Przepraszam, mój błąd, chodziło mi o XMega, ATMega nie ma hierarchicznych przerwań.
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...
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...
Z grubsza słuszna. Nieco bardziej odpornym na błędy pomysłem jest dekrementacja w przerwaniu timer zmiennej czasu oczekiwania (pod warunkiem, że nie jest zerem). if (utimer) utimer --; a tam, gdzie masz czekać, "nastawienie" jej i sprawdzenie, czy się wyzerowała.
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...
Problem jaki widzę to że czasem taki uklad drga minimalnie np 1-2 piki enkodera i jak to się trafi na progu przepełnienia, układ będzie ciagle w pętli przerwań.
Witam. Układ zmontowany, programuję i się okazało, że XMEGA nie obsługuje DMA <> SPI w trybie master. Wiem, mogłem sobie to doczytać. Fakt, przeoczyłem :( Póki co wyciągam programowo 25kSPS dla 4 kanałów jednocześnie :( Ale niewiele tej mocy obliczeniowej mi zostało. Jest sposób by w jakiś magiczny sposób uruchomić DMA, by ciut odciążyło procesor?...
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...
W przerwaniu, albo korzystając z DMA - DMA może inicjować pomiary ADC, co jest wygodne, bo konfigurujesz tylko kanał, określasz, gdzie w pamięci mają się znaleźć próbki i wszystko robi się samo. Zarówno DMA, jak i ADC w takim układzie może mieć własne triggery. Dla potrzeb oscyloskopu zauważ też, że masz rejest z którym porównywana jest zawartość ADC...
To o co pytasz nie zależy od Bascoma, tylko od architektury procesora. AVRy po przyjęciu przerwania blokują wszystkie przerwania (z wyjątkiem XMEGA, które mają przerwania wielopoziomowe i NMI). Tak więc sam nigdy nie musisz w handlerze przerwania ich blokować. Pytanie, kiedy je odblokowywać przed zakończeniem obsługi. W kilku sytuacjach, np.: 1. Kiedy...
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...
Potrzebuję porady. Przeznaczenie układu jest banalne - zewnętrzny czujnik dla stacji pogodowej. Generalnie układ działa tak, że co 15 min wybudza się, zbiera wszystkie dane i je wysyła radiem, następnie zasypia. Tryb uśpienia konfiguruję tak: [syntax=c] #include "power_cfg.h" #include "wdt_driver.h" void power_sleep_mode_cfg(void) { set_sleep_mode(SLEEP_MODE_PWR_SAVE);...
Ok udało się rozwiązać. Problemem było NIE podnoszenie pinu CS po konwersji. Drugim problem było zerowanie flagi I. Nie doszedłem, dlaczego tak się działo. Wyłączenie przerwań na czas odczytu pozycji i ponownie ich uruchomienie, pozwoliło mi zamaskować problem z flagą I. Działająca procedura odczytu. Wywoływana w przerwaniu od zbocza opadającego pinu...
A AVRach oprócz nowej serii Xmega nie ma priorytetów przerwań. Obsługa przerwania blokuje wszystkie przerwania. Rozwiązaniem jest timer. Nie zwykłem wykorzystywać przerwań zewnętrznych do przycisków. Lepiej wykorzystać timer. Sprawdzając co np 100ms ich stan. 2x wykrycie kolejno mamy akcję. Dodatkowo w ten sposób łatwo zrealizować inna funkcje przycisku...
Lepiej zacząć od razu od Cortexa, teraz chyba szkoda sobie zawracać głowy ARM7. Nie znaczy to oczywiście, że to złom i definitywnie nie warto, ale ARM7 to już raczej ślepa uliczka, nic nowego w tej materii nie powstaje i raczej nie powstanie. Wszyscy producenci przeszli na Cortexy, bo są szybsze, lepsze, nowocześniejsze, prostsze a jednak o większych...
Nie dziwi mnie, że powyższy kod nie działa. AC_ACnOUT_bm są w CTRLA, nie CTRLB. Nie masz też ustawionego multipleksera wejść i odblokowujesz przerwanie,, a nie wiadomo, gdzie jest jego handler. Jeśli pokazujesz kod, to pokaż kompletny kod, który można analizować. Bo tak to możemy jeszcze 70 postów napisać zanim dojdziemy o co chodzi. Jeśli masz debugger,...
Na AVR Xmega z 32MHz przerwania miałem na 80kHz, tutaj też tyle ustawiłem i program zaniemówił. Albo może nie do końca zrozumiałem ideę tych systick? Muszę po prostu wygenerować przebieg przez DAC, odczytując w stałych odcinkach czasu poszczególne wartości i przesyłać je do DAC. Ot taki prosty DDS. Być może SYSTIC się do tego nie nadaje?
I priorytetów jako tako tym przerwaniom w AVRACH (nie Xmega) nie można nadawać należy jednak przyjąć że priorytety są zgodne z wektorem przerwań. Gdy nastąpią w tym samym czasie 2 przerwania zostaną wykonane wg kolejności ustalonej przez wektor przerwań.
Witam, wymyśliłem sobie, że dane z czujnika PMSA003 będę odczytywał UARTem z udziałem DMA. Wygląda to zatem tak, że na poczatku: deklaruję tablicę o rozmiarze ramki z czujnika w trakcie debugowania okazuje się, iż dane w tablicy nie są właściwe . Ramka powinna zaczynać się od bajtów startu 0x44 i 0x4D, a wg debugera takie wartości pojawiają się też...
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łę...
Witam Mam problem z uruchomieniem timera w Atmel Studio 7, program przeznaczony jest dla procesora xmega128a3u Mam załadowane następujące biblioteki: [syntax=c]#define F_CPU 2000000UL #iinclude <util/delay.h> #include nclude <avr/io.h> #<avr/interrupt.h> uint8_t licznik = 0; [/syntax] i poniżej definiuje ustawienia timera [syntax=c]TCC0.PER...
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...
Witam dziękuję za odpowiedzi. Oczywiście przypisanie wartości stopy do int'a było moim bezmyślnym babolem. Przelecę nią przez "dłuższy" typ do metrów w int'cie i zrobię zaraz testy. - Soft odbiera poprawnie, ale do testów na szybko używam terminala. - Aż takiej dokładności konwersji jednostek nie potrzebuję. Wystarczy przybliżenie *0.3 ;) - No magia....
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...
"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...
Grupa: PORT_ISC_BOTHEDGES_gc jest w innym rejestrze. Powinno być: [syntax=c]PORTC.PIN4CTRL = PORT_ISC_BOTHEDGES_gc;[/syntax]
Udało się, z Waszą pomocą. Wszystkie zmienne uczestniczące w modulacji muszą być znakowe. Dodatkowo dane do odczytywania przygotowałem znakowe 12-bitowe (-2047 +2047). Oto uproszczony listing, do nauki dla potomnych. [syntax=c] signed int PRZEBIEGI[2048] PROGMEM = { //tu dane liczbowe z zakresu -2047 do +2047 //2048 próbek }; int main(void) { volatile...
W takim razie: 1. Weź dowolnego procka ze sprzętowym USB. Dla Ciebie chyba każda Xmega poza serią E będzie ok. Nie piszę o ARM czy PIC, ponieważ napisałeś na wstępie AVR. 2. Odpal sobie demo HID z ASF w AS6. 3. Skonfiguruj dowolny licznik do generowania cyklicznych przerwań, np. co 10ms, (albo skorzystaj z przerwania USB_SOF co 1ms), a w przerwaniu...
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?
Pod TC_CLKSEL_DIV1024_gc kryje się: [syntax=c] (0x07 << 0) [/syntax] Czyli wg XMEGA Manual A odpowiada to prescalerowi /1024. A pod TC_OVFINTLVL_HI_gc: [syntax=c] (0x03 << 0) [/syntax] Czyli wg XMEGA Manual A odpowiada to ustawieniu przerwania na poziom wysoki.
A cóż to za urządzenie, gdzie przerwania mogą zakłócić pracę?
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...
A ja słyszałem, że w Ameryce biją murzynów. Na oscylatorze wewnętrznym mogą się dziać różne rzeczy, do UART potrzebny jest kwarc, chyba, że używasz XMega, lub wiesz co robisz. Po drugie, jeśli mamy ci pomóc to daj nam chociaż szansę. Popraw błędy o których pisałem. Jeśli masz krzaki to powodem jest albo transceiver, albo niedopasowanie częstości taktowania...
Skoro po resecie też przestaje działać, to by wskazywało na jakiś problem z niezainicjowanymi zmiennymi. Generalnie jakość kodu z ASF IMHO jest bardzo dobra i nigdy nie spotkałem się, żeby kod z ASF mi nie działał. Także raczej skłaniałbym się do tezy, że coś poknociłeś. Co do kodu Deana - tak, jest bez przerwań, lecz przerobienie tego, tak, aby korzystał...
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...
Cześć :) Postawiłem sobie za zadanie opanować i dobrze zrozumieć bibliotekę uart od Atmela. W poprzednim poście zastanawiałem się nad przerwaniem TXC, a teraz próbuję wykonać coś w rodzaju echa - mianowicie znaki, które wyślę z terminala do procka chcę wysłać na terminal w takiej samej kolejności + liczba informująca o ilości odebranych znaków. Popełniłem...
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....
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ś,...
Bo reszta pinów jest nieskonfigurowana i łapie śmieci z powietrza. Rozumiem, że działasz na Portd.3 i Portd.2 Gdybyś czytał Helpa do Bascom .... For the XMEGA, if you set the priority with CONFIG PRIORITY, you must enable the MED priority. Czy to Tobie coś mówi? :D Przedobrzyłeś. Xmega ma trzy różne priorytety przerwań. Bascom sam włącza te potrzebne,...
Najprościej użyj kodu z przykładów bez modyfikacji i zobacz jak to działa. Skoro w kodzie flaga jest kasowana to zapewne jest to niezbędne, bo nie jest kasowana automatycznie przez hardware. Stąd jeśli jej nie skasujesz, to natychmiast zostanie zgłoszone kolejne przerwanie.
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...
Dziękuję, o takie coś mi chodziło :) Napisałem wobec tego takie funkcje: [syntax=c]uint16_t pRegulator(uint16_t output, uint8_t actualValue, uint8_t desired_value, uint8_t kp) { int error = desired_value - actualValue; output += kp*error; return output; } void setActualValue(uint8_t evsysValue, uint8_t *actualValue) { *actualValue = evsysValue; } //...
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...
Dobra, kupię procka, to wypróbuję na żywo. Najpierw chciałem zobaczyć "na sucho", czy wszystkie funkcje, które założyłem w projekcie "pójdą" na tym procku, czy będę musiał szukać innego, większego proca, ale poza różnicami w składni na razie nie widzę problemów. 3 timery będą akurat. Jeden dla przerwań wewnętrznych, a dwa do obsługi enkoderów, po jednym...
Zgodzę się, że w wolnym systemie przerwania wielopoziomowe mają jakiś sens. Zmieniałeś w jakiejś architekturze priorytety przerwań ? Przydało Ci się to w jakimś realnym a nie akademickim przypadku ? W ARM ustawiam priorytety z lenistwa (nie chce mi się liczyć) ale pewnie wystarczyłby jeden. W 8051 i Z-80 to często konieczność (szybka transmisja USART),...
Wkrótce najwyraźniej pojawi się nowa rodzina mikrokontrolerów Microchipa - następców XMEGA? Póki co jest już wsparcie w MPLab i Atmel Studio, czyli po plikach nagłówkowych można się zorientować jakie będą możliwości tych układów. Oznaczenia AVR128DA64 - pierwsza liczba to wielkość FLASH, druga to liczba pinów (28, 32, 48 lub 64), 16 kB SRAM. Co mają:...
Programowe generowanie sygnału video w jakimkolwiek standardzie jest zadaniem krytycznym czasowo, dlatego bez asemblera niewiele zwojujesz. Nawet w asemblerze trudno uzyskać więcej niż 100 punktów w linii. Zresztą zerknij na: Rejestrator przebiegów cyfrowych - przystawka do TV z EP Rejestrator przebiegów analogowych - przystawka do TV z EP Nie jest...
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...
tmf Powiem bez bicia, że nie tak łatwo znaleźć te kody. Udało mi się ściągnąć bodajże z helionu paczkę o nazwie avrppr ale, nie odnalazłem przykładu z ADC. Natomiast znalazłem błąd w samej konfiguracji projektu. Kiepskie oświetlenie i moja ślepota doprowadziły do tego, że zamiast stworzyć projekt z Xmega 128A3 U to zrobiłem z Xmega 128A3. Po tej zmianie...
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ć...
Witam, Mam problem odnośnie modułu W5100. Mianowicie, po fizycznym resecie modułu (przycisk), moduł zachowuje się w 3 bliżej określonych stanach: 1. działa stabilnie - nie mam nic do zarzucenia 2. działa, ale odbiera tylko niektóre ramki 3. nie działa Opis: Z komputera, za pomocą skryptu, wysyłam ramki w odstępie 100ms do płytki z W5100 i mikrokontrolerem...
Czyli błąd w założeniach projektu - źle wybrany mikrokontroler. Należy albo obsługiwać Onewire w sposób nie wymagający mikrosekundowej precyzji przerwań (czyli przez UART, których zapewne Ci zabrakło), albo zmienić mikrokontroler na taki, który da sobie z tym radę - AVR z większą liczbą UARTów lub dowolny z prawdziwym wielopoziomowym systemem przerwań,...
GCC jakimiś protezami obsługuje przestrzenie adresowe, nie zawsze sprawnie mu to wychodzi To chyba nie dotyczy też tiny 1 series i atmega 0 series gdzie całość (eeprom, sram, flash) jest w jednolitym obszarze adresowym. brak priorytetów przerwań (nie dotyczy xmega) j.w. brak sprzętowego dzielenia Cortex M0 też ;)
Faktycznie, zupełnie o tym zapomniałem. Co ciekawe kanały można przełączać funkcją "muxpos" tylko od 0 do 7, a Xmega16A4U-AU ma pojedynczy ADC, ale chyba 12 kanałów i powyżej już trzeba kombinować, bo jak się wpisze Muxpos8 i wyżej, to wywala błąd. Zaraz poczytam sobie o tym SCAN, czy można skrócić liczbę skanowanych kanałów do 8, bo więcej nie potrzebuję,...
-te dławiki na AVCC nie są potrzebne - nie korzystasz z ADC (nawet jeśli korzystasz to wymagane są one przy superdokładnych pomiarach), - przez rezystor 1 MOm łączysz do masy osłonę gniazda USB, masy USB i układu łączysz bezpośrednio, - na USB nie ma 3,3V, jest 5V, które ci upali procka. Jeśli zasilasz układ z USB potrzebny jest LDO na 3,3V, - do realizacji...
Ok, 20 IO cyfrowych to 20 bitów, czyli 3 bajty. 10 wejść analogowych 16-bitowych, to 20 bajtów. Tyle chcesz odczytać. Do tego narzut protokołu - bajt adresu, masz 4 urządzenia, to dodatkowo 4 bajty. A więc jeden cykl to co najmniej 27 bajtów do przesłania. Ponieważ korzystasz z UART, więc jeden transmitowany bajt to co najmniej 10 bitów, a więc masz...
No właśnie u mnie się to nie kompiluje (cały projekt ze strony). http://obrazki.elektroda.pl/1352516500_1... Nie wiem jak to się fachowo nazywa ten nowy sposób ustawiania bitów czy grup bitowych ale chodzi mi to co zakreśliłem na czerwono. To mi czasami nie działa. Wystarczy że zamiast tych durnowanych nazw ustawię bity po staremu i...
xmega bascom przerwanie przerwanie bascom xmega mikro xmega
airlive reset transoptor dobór rezystorów błąd klimatronika
Jak wyłączyć automatyczną kompresję nowych folderów w Windows Piła spalinowa gaśnie po nagrzaniu - przyczyny i rozwiązania