(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...
Ż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.
"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...
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łę...
Kolega R-MIK ma racje. Natomiast ja się zdziwiłem. Zazwyczaj nie czytałem/nie zapisywałem flagi związanej z przerwaniem tylko pisałem obsługę przerwania gdzie flaga sama była kasowana. Jako "Appendix" chciałbym przypomnieć, bo może kiedyś kolega użyje Xmegi serii E, że tam wejście w procedurę obsługi przerwania nie kasuje flagi "sprzętowo" czyli samym...
ad 1. Zastanów się co się stanie jeśli pomiędzy skasowaniem flagi, a zablokowaniem pinu nastąpi zmiana jego stanu? Flaga ponownie się ustawi sygnalizując przerwanie, które zostanie obsłużone. Dlatego lepiej najpierw zablokować możliwość sygnalizowania przerwania, a dopiero potem skasować flagę. ad 2. Kasowanie PORTC.INTFLAGS = 0x01; jest jak najbardziej...
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ń.
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...
Tak dokładnie o to mi chodziło. Spróbowałem to zrobić tak: w pętli głównej jest cały czas zapalana lampka (włączane zasilanie). W przerwaniu od zmiany zbocza sprawdzany jest stan logiczny wyjścia komparatora i gdy jest "1" to ustawiana jest flaga oraz wyłączana lampka a gdy jest "0" to flaga jest kasowana a lampka zapali się dzięki pętli głównej. Niestety...
Witam , Po dłuższej przerwie próbuję się przeprosić z AVR-ami , przechodząc jednocześnie do XMega, zadanie jest proste - pomiar obrotów z wejścia PC0 . 1. Timer TCC1 - odmierza czas 100us 2. Timer TCC0 - używa przepełnień TCC1 jako zegara , strobem do pomiaru okresu / "częstotliwości" jest routowany sygnał z PC0 3. Flaga TCC0_CCA ma być z kolei wyzwalaczem...
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...
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
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...
A masz gdzieś przerwanie od SPI w kodzie, że chcesz je włączać? Bo ja nie widzę. Ale widzę, że funkcja SPI_WriteByte() opiera się o zwyczajne sprawdzanie flagi końca transmisji, a nie o przerwania.
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...
Tak jak pisałem, obsługa przerwania ze względu na uwarunkowania kompilatora jest piekielnie długa i naprawdę na tym nic nie zyskujesz. Zobacz jak wygląda wygenerowany kod asemblerowy nawet dla prostej funkcji. Piszesz o sprawdzeniu stanu klawisza co chwile, a czym to się różni od sprawdzania co chwilę flagi, którą zmienisz w przerwaniu? Chyba, że masz...
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...
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...
Czy dobrze rozumiem, że dostęp do pamięci flash oraz EEPROM w xmegach zawsze wykorzystuje kontroler NVM? Zawsze wykorzystuje hardware NVM, ale niekoniecznie modyfikuje stan tego układu. Odczyt FLASH odbywa się bez konieczności modyfikacji NVM (o ile mówimy o odczycie bajtów/słów), więc dostęp do EEPROM nie powinien tu robić problemów. Problem zaczyna...
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...
Zminana na odczyt co 60s zmieni tylko tyle, że mignięcie będzie co 60s a nie co sekundę, niby lepiej, ale ciągle nie tak. Jeśli po włączeniu/wyłączeniu przerwań program idzie w maliny to znaczy, że masz w programie błąd. Najpewniej oprócz flagi I modyfikujesz także inne flagi tego rejestru. Zamiast modyfikować rejestr kontrolny procesora użyj sei/cli....
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ł.
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....
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...
Ogólnie się wypowiadając, większe koszty przerwania to odłożenie stanu na stos (i procesory się różnią). Tego nie widać a jest. Ustawienie flag nikt nie wymienia jako koszt. Multiprzerwania "od zawsze" były w informatyce, jak kontroler przerwań był oddzielnym chipem nota mówiła gdzie się nierozwiązanie zagadki o jakiej piszesz (skąd przyszło). Generalny...
Witam , dzięki za odpowiedź .. i to od samego MISTRZA. odnośnie kompilatora (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.939\avr8-gnu-toolchain\... . Dla porządku - jestem startującym do C , zatem wiele pytań , dla wielu pewnie w kategorii " oczywista oczywistość". Dotąd pisałem w asm. próbując przesiąść się na C , zaczynam po prostu...
Prawda jest taka, ze bez użycia przerwań nic sensownego nie da się zrobić. Czy to będzie Arduino czy ARM, czy (tfu przez lewe ramię) Bascom. Jakiej jedno proste zadanie tak. Może i kilka ale dokładając kolejne program nie nadąża w pętli głównej sprawdzać flag i wykłada sie tam, gdzie 6502 z zegarem 1MHz (0,5MIPS) daje radę bo używa przerwań (AVR 16MHz...
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...
Pokaż proponowany kod. Chodzi mi o moją funkcję regulacji, regulatora PI, w przetwornicy impulsowej. Czy można tutaj może coś lepiej zrobić? (mikrokontroler XMEGA) [syntax=csharp]/*Funcja regulacji przetwornicy*/ ISR(TCC5_OVF_vect) { int16_t wartosc_rzeczywista; //Wartość rzeczywista int16_t error; //Uchyba pomiaru static int16_t integral; //Część...
Który z AVRmega ma dwa I2C? A programowo kolega nie umie zrobić? Działa i to dobrze. Ardymenty sie kończą czy kolega chce zabłysnac wiedza na temat I2C? "Ardymenty" się nie kończą ale myślałem, że kolega trochę o tym poczyta i coś z tego, co wyczyta, rzuci mu się w oczy w odniesieniu do kontekstu wątku.Widocznie się przeliczyłem Zaczyna się komplikować...
(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,....
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,...
Hmm, po mojej przygodzie z jednym PICem z rodziny 18F nie jestem jakimś szczególnym ich fanem ;), ale może coś się zmienia w dobrą stronę? Czy ktoś jest w stanie wyjaśnić zagadkowe pojęcia typu Możliwość zwektoryzowanej obsługi przerwań Czy oznacza to, że w końcu po wystąpieniu przerwania nie trzeba "if-ować" po wszystkich możliwych flagach, żeby dowiedzieć...
Witam, mam problem z obsługą strumieni (trybu komend) na mojej xmedze. Kod przedstawia się następująco ( funkcja do trybu komend ): główna funkcja [syntax=c] int main(void) { init(); while (1) { set_read(); while(EFlag==1) { ADSgo(); my_delay_ms(1000); } while(EFlag==2) { read_time(); my_delay_ms(1000); } while(EFlag==3) { read_full_time(); my_delay_ms(1000);...
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...
Witam, postanowiłem przenieść swój układ z atmegi na atXmegę. Do tej pory do komunikacji urządzeń po serialu używałem biblioteki SoftwareSerial (Arduino) bo układ miał tylko 1 fizyczny serial. Teraz w Xmedze mam ich 5 :) Wgrałem [url=ten]http://mikrokontrolery.blogspot... programik i wszystko...
Witam Od kliku dni walczę nad implementacją ENC28J60 do Xmegi128A3U. Najpierw udało mi się zrobić malutki serwerek na Atmega32 i działa poprawnie ( bazowany na książce Mirka ). Teraz chcę go przełożyć do Xmega i nawet nie chce go pingować. Przypuszczam że błąd leży gdzieś w SPI. Xmega taktowany zewnętrznym kwarcem 16MHz , SPI - 1MHz, ENC28J60 taktowany...
flaga przerwać xmega przerwać xmega flaga przerwania
ucieka głos podsłuch telefon analogowy połączenie szeregowy grzałka
lodówka haier a3fe742cmj parkside szczotki
Pierścień na wale silnika indukcyjnego kosiarki Bosch, AL-KO, Makita – funkcje i rodzaje AutoMapa – brak wykrywania satelitów GPS na Android i PND: konfiguracja, AGPS, porty COM