Dorób obsługę przerwania (tak jak masz dla timera) albo go nie włączaj.
(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...
Ż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.
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.
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...
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...
Nie odblokowałeś w kontrolerze przerwań przerwań o najwyższym priorytecie, które generuje ADC. W XMEGA układ peryferyjny generuje przerwania o trzech różnych poziomach, które trafiają do kontrolera przerwań, który je przekazuje dalej jeśli dany poziom jest w nim odblokowany i dopiero dalej masz flagę I zmienianą przez sei(), i obsługę przez CPU.
(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...
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ń.
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ć...
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...
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.
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ń.
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.
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
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
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,...
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...
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...
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...
Ten sinus liczony w przerwaniu na Xmega to miał być żart, prawda?
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...
Przepraszam, mój błąd, chodziło mi o XMega, ATMega nie ma hierarchicznych 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...
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.
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...
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ś...
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ń.
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...
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...
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...
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...
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...
Sei() to chyba włącza globalne przerwania??
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...
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ń.
Pierwsza wstawka chodzi ale dałem 25MHz do testów przy 20MHz gubi, druga też gubi nawet z 25MHz ale dzięki narazie mi to wystarczy do testów. A czy jak w tej pierwszej wstawce zamiast pinB całego czytał maskę z 1 pinu to też dochodzi cykl zegarowy na maskę ? albo pewnie z 3 cykle ? Pisałeś też o PCINT że potrzeba dodatkowych cykli? w przypadku przerwania...
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łę...
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...
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...
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...
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ę?
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ł...
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...
"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...
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,...
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...
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ą:...
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....
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...
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?
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...
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...
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...
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ż ;)
-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...
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...
Oczywiście klasyczne AVR nie, od dawna z AVR używam wyłącznie XMEGA, innych się po prostu nie opłaca. Nic, kiedyś się za ten projekt wezmę.
Korzystając a Xmega nie potrzebujesz przerwań do obsługi operacji I/O. Po prostu skonfiguruj Event system na wywołanie transferu DMA między SRAM a portem będącym odpowiednikiem linii DTA. Jeżeli dodatkowo potrzebujesz korektę z linii adresowych, to wykonujesz transfer z linii ADR na rejestr indeksowy i w następnym takcie DTA do SRAM (czy odwrotnie)...
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 bardzo złożone ma peryferia atmega32, ale chyba DMA ma z wsparciem dla ADC. Jeśli posiada DMA to warto skonfigurować DMA w taki sposób by dane z ADC przesyłał do RAM, ale na pewno przerwania nie będą optymalne. ATMega nie ma DMA, niestety. Z AVR DMA mają tylko XMEGA. Dlaczego przerwania nie będą optymalne? Gdyż wymagają przełączenia kontekstu...
Fajne te xmegi :) Daleko im do ARM i w stosunku do nich są koszmarnie drogie. Mają jednak pewną zaletę, niespotykana w ARM, rejestr TOGGLE w GPIO i EEPROM, to czego trochę w ARM mi brakuje. Więcej zalet Xmega nie pamiętam za co serdecznie żałuję i postanawiam sie poprawić :-) Prosiłem kilka razy, aby Kolega sprawdzał informacje przed wysłaniem postu....
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...
zliczanie impulsów z dwóch enkoderów Jeżeli to są enkodery inkrementalne z sygnałem A, B i ew. Home, zrezygnuj z megi64/128. Xmegi mają wsparcie sprzętowe do obróbki sygnału z takich enkoderów przez użycie liczników w połączeniu z eventami. Na STM32Fxxx zrobisz to łatwiej i być może szybciej korzystając z gotowców. generowanie dwóch przebiegów PWM...
Twój punkt widzenia jest obarczony ... Twoim punktem widzenia, a nie moim, czy milionów innych projektantów Nie sądzę by przeszkodą była cena, by przeszkodą było max 3.6Vcore, by przeszkodą były dodatkowe peryferia. Przeszkodą natomiast jest to, że trzeba od nowa peryferia oprogramować gdy do Atmegi było zilion przykładów na uarty, adc, spi, i2c czy...
Nie napisałeś o jaki procek chodzi, więc odpowiem przewrotnie - ADC z XMEGA ma możliwość generowania zdarzenia lub przerwania, jeśli próbkowana wartość jest powyżej, poniżej lub w podanym zakresie. W innych AVR to jak kolega wyżej radzi - komparator, przy czym ze względu na brak DAC trzebaby jedno z wejść podpiąć przez filtr do PWM w celu generacji...
Jakiego typu jest zmienna adc? float? Jakie jest taktowanie IO? Jaki model XMEGA? Generalnie nie podoba mi się to kasowanie flagi przerwania, podobnie odblokowanie układu wzmacniacza na wejściu ADC. Odpal powyższy kod w symulatorze i sprawdź po inicjalizacji czy rejestry ADC wyglądają rzeczywiście tak jakbyś sobie tego życzył.
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ć...
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...
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ż.
Nie lepiej już spróbować takiego czegoś? https://www.tme.eu/pl/details/attiny416-... Wbudowany DEBUGGER i serial port przez USB, pełna integracja z Atmel Studio, możliwość graficznego konfigurowania peryferiów przez Atmel Start. Programowanie rejestrów w stylu XMEGA, przetwornik DAC, komórki logiczne,...
Na razie chciałem się skopić na całkowitych, gdyż chciałbym to móc zastosować na słabszych prockach, np. Xmega, która ma tylko 32MHz i nie ma FPU. Już ta funkcja przerwania zaczyna podchodzic gdzieś pod 600 taktów, czyli z 80% procesora :)
4. Podłączenie sygnału z wyjścia PWM do ADC1 aby ponownie spróbkować sygnał PWM A po co? Po to aby odczytać ile kroków wykonał silnik. Sygnał PWM niski wysoki niski to jeden krok na wejście STEP. I chce żeby pwm był jakoś ogarniczony. Aby silnik wykonał na przykład 20 kroków - nie więcej. Na ATMega możesz to zrobić tak jak ci napisał kol. piotrva....
Cześć, zagłębiam się trochę w wykorzystanie pamięci eeprom i flash i przeglądając avrowe funkcje nvm natknąłem się na takie stwierdzenie: The functions in this module are modifying the NVM.CMD register. * If the application are using program space access in interrupts * (__flash pointers in IAR EW or pgm_read_byte in GCC) interrupts * needs to be disabled...
Prędkość obsługi przerwań determinuje wyłącznie tempo ich obsługi. Aby AVR wykrył przerwanie potrzebne są o ile dobrze pamiętam 2 takty zegara, co niewiele zmienia, bo z taką prędkością i tak przerwań nie obsłużysz, bo samo wejście do nich trwa ponad 4 takty, a wyjście dodatkowo 2. I to w przypadku pustego przerwania. Lepiej opisz co to za proste analizy...
(at)Flesz dziękuję za odpowiedź. Układ buduję w oparciu o ATMegę32, nie ma ona takich możliwości jak XMega,która już ma w sobie funkcje do obsługi enkoderów. Taktuję zewnętrznym kwarcem 16MHz , więc przerwania z częstotliwością 14kHz powinno dać się uzyskać.
A jeśli chodzi o przerwania z samego SPI. Żeby odczytać wynik muszę wysłać 3 bajty więc, żeby złożyć wynik z przerwań to muszą nastąpić aż trzy przerwania i z nich złożyć wynik? Bo gdyby mieć np. 32 bitowy mikrokontroler to wysłałoby się raz dane i od razu odczytało cały wynik w jednym przerwaniu a tutaj muszę operować na 8 bitach.
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...
Podepnij linię R/-W LCD na stałe do masy, nie testuj bitu gotowości LCD (bo i tak nie ma to sensu), zrób obsługę LCD na przerwaniu timera i możesz spokojnie podpiąć 5-woltowy LCD pod uC zasilany z 3.3 V.
W sensie próbkowania na przerwaniu od timera aby pozbyć się drgania styków, czy podłaczyć do sprzętowego licznika (co raczej w AVR Arduino nie pyknie)? To pierwsze. Aczkolwiek w tym przypadku nie mamy drgań, więc jest ok. Sprzętowy licznik byłby ok, o ile ma enkoder kwadraturowy. W XMEGA to jest, więc tam można zrobić całość sprzętowo.
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...
Nawet prościej, bo zamiast drabinki rezystorowej można wykorzystać PWM + filtr RC low pass. Jeśli ktoś chce super precyzji, to wyjście filtra można podłączyć pod ADC. To na jeden pin AC, na drugi porównywane napięcie i włączyć przerwanie komparatora. Natomiast skoro już ktoś wspomniał o AVR XMEGA to tam można ten problem rozwiązać na kilka sposobów:...
W poprzednim (niedokończonym niestety) projekcie na Xmega, korzystałem z Fat Fs, opóźnienie do tej biblioteki programowe, przerwań miałem chyba 6, działało bez problemu. Timer, owszem. Ale jeśli zależy mi na dokładności a nie tylko na opóźnieniu, które nie ma jakichś rygorystycznych wymagań co do długości trwania. Szkoda Timera, przydać się może na...
No właśnie. można na ATTiny i WD, można dowolny ATMega z RTC, można XMEGA z RTC, co ma dodatkowo zaletę, że można go wybudzać w dowolnej chwili i ma podtrzymanie bateryjne. Opcji jest wiele.
Obsłuży przy 16 MHz i programowaniu w asemblerze lub wstawkach i NAKED. Czyli - jak się dobrze nagmnastykujemy, to może uda nam się uzyskać to samo, co na każdym Cortexie mamy bez asemblera, bez problemów i taniej, z dużym zapasem mocy obliczeniowej. Ponadto ATmega jeśli obsłuży te 260 k przerwań UART czy SPI, to nie może obsłużyć żadnego innego przerwania,...
Wrzuć swój kod na symulator. Generalnie to działa, pamiętaj tylko, że jeśli nie są włączone przerwania kanału ADC to nic nie kasuje bitu rejestru INTFLAGS, więc powinieneś go kasować ręcznie (kasuje się wpisując jeden).
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...
Popatrz na atxmegę, też na nią przeszedłem i jest to nowa jakość, peryferii full, zegar łatwo ustawić, fuse bity nie straszą, 3 poziomy przerwań, timerów full no i eventy, na tym można cuda robić. Ale Xmega, w stosunku do ARM są drogie i mają mało RAM. Nadal to 8-bit przez co trzeba walczyć z atomowym dostępem do zmiennych 16 czy 32-bit. Nie ma też...
xmega flaga przerwać xmega blokować przerwać stm32 przerwać przerwać
odblokować telefon samsung galaxy różnice attiny atmega układ centralnego ogrzewania otwarty
wentylator zasilacza wentylator zasilacza
Zmywarka Premiere nie wypompowuje wody – czyszczenie filtrów, pompa, wąż odpływowy, błędy E24, F11 Nissan Qashqai J11 P17F0 – CVT Judder, JF016E, objawy, diagnostyka, VIN SJNFDAJ11U1889701