Proszę o informacje, gdzie w nocie katalogowej można znaleźć informacje na temat priorytetów wykonywania przerwań, jeżeli wystąpią w tym samym czasie. Nie można, ale ten co ma niższy adres w tablicy wektorów wykona się pierwszy jak przyjdą w tym samym czasie. Co najwyżej możesz właczyć przerwania na początku obsługi aby umożliwić obsługę kolejnych...
Kiedy leci pytanie i Atmega ma przerwanie od USART... Pokaż lepiej jak to wygląda. Handler obsługi USART. Od zboczy też by się przydał, a najlepiej cały kod.
To nic Ci nie da, nawet jeśli dałoby się zrobić. Problem nie leży w priorytecie przerwań ale w obsłudze przerwań. Musisz ją tak napisać aby nie były zbyt długie, albo zastosować obsługę nie blokującą.
1. ok, z 1 się wycofuję bo masz zrobione zewnętrzne pull-upy ale niepotrzebnie mnożysz rezystory, gdyż takowe są wewnątrz procesora - wystarczy tylko włączyć je z poziomu programu. 2. to teoretycznie może powodować problem - najlepiej sprawdzaj przerwania w jakiś inny sposób - np. w każdym tylko zapalać lub gasić diodę 3. Rozumiem istotę Twojego problemu,...
Piszę w C program na atmega do komputerka podającego spalanie w samochodzie i mam problem z przerwaniami. Jednym przerwaniem będzie liczony impuls wtrysku a drugim zliczane impulsy drogi (zapomniałem dodać, że jest jeszcze przerwanie zliczające impulsy czasu rzeczywistego). Jeśli w danym momencie nastąpi otwarcie wtryskiwacza a chwilę później impuls...
Nie tyle musi być zadeklarowana jako reentrant, bo takiej deklaracji nie ma:) co musi być tak napisana, aby była reentrant. Co do zmiennych statycznych to mogą one być wykorzystywane - w końcu taka jest idea zmiennych statycznych, żeby były dzielone przez wszystkie instancje/wywołania funkcji. Co do innych zmiennych to dopóki się używa zmiennych lokalnych...
Czyli żeby ustalić hierarchię, musisz na początku podprogramu przerwania o niższej hierarchi zezwolić na przerwania o wyższej hierarchi. Softwareowo, ale da się. Domyślnie nie ma żadnej hierarchi, jak nade mną napisane ;) Więc żeby ją utworzyć musisz się trochę pobawić
jeśli czytałeś uważnie jakiegoś helpa i tam napisano, że np ATmega8 a raczej jej przerwania INT0 i INT1 nie mogą być wyzwalane zboczami to masz rację - jest to błąd ;) dokładny opis na 100% znajdziesz w nocie pdf ;) danego procka i na tym zawsze się opieraj jako najważniejszym źródle informacji. ... jak słusznie zauważyłeś ta nóżka ma dwa alternatywne...
Witam Otóż mam taki dylemat ... Mam taki prosty programik robiący mi za licznik modulo 8. Samo liczenie odbywa się w przerwaniu timer'a ale to nie jest kwestia którą chce poruszyć. Po wywołaniu zewnętrznego przerwania, nie da się go przez czas paru/parunastu sekund wywołać. Czego to może być wina ? (pomijając że moja). Czy przypadkiem nie powinno to...
Zastanawiam się, jak się odbywa zapis zmiennej 16 bitowej w procesorze 8 bitowym. Najpewniej najpierw przepisywana jest pierwsza połowa, następnie druga. A czy możliwe jest, żeby jeśli przerwanie wystąpi równo w tym momencie i będzie chciało odczytać wartość tej zmiennej to odczyta pierwszą połowę nową, a drugą starą? czyli jeśli a=0000 zmieniam na...
Potrzebuje dwa przyciski i postanowilem wykorzystać w tym celu przerwania zewnętrzne int0 i int1. Napisalem programik ale chyba coś poplątałem bo zwarcie do masy (przez przycisk) portu int0 nie powoduje uruchmienia podprogramu przerwania. Program wygląda następująco, jeśli ktoś ma chwilkę to proszę o podpowiedzenie czy procedura obsługi int0 jest poprawna....
Witam. Na obecnym etapie pewnego projektu wyrzuciłem instrukcję Input blokującą pętlę do czasu wprowadzenia klawisza ENTER. Teraz pobieranie znaków przychodzących na UART odbywa się z użyciem przerwania (przykładowy kod poniżej). [syntax=basic4gl]$regfile = "m32def.DAT" $crystal = 8000000 $baud = 4800 Nadawanie Alias Portd.7 Config Nadawanie = Output...
Witam! Mam problem ze zrozumieniem działania zewnętrznych przerwań w mikrokontrolerach atmega (avr). Dla przykładu posłużmy się konkretnym osobnikiem - Atmega48. W specyfikacji http://www.atmel.com/dyn/products/produc... (strona 64) wyróżniają dwa przerwania INT0 i INT1 i dodatkowo 24 - PCINT23..0. Te 24 przerwania są podzielone...
Witam, Zmagam się z problemem przerwania w Atmega 8. Bez zagłębiania się w szczegóły mojego projektu, dajcie mi prosze znac czy to normalne zachowanie: 1. Przycisk S1 oraz Impulsator z przyciskiem S2. Impulsatorem "chodzę" sobie po menu i klikam przycisk impulsatora S2, który akurat w tej pętli nic nie robi, przerwania sa wyłączone cli(); ale uruchomione...
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ć?
W projekcie założyłem sobie dwa przerwania z dwóch timerów. Jedno (nazwijmy je A) wywoływane często i krytyczne czasowo (przerwanie musi być obsłużone jak najszybciej po jego pojawieniu się), trwające tylko kilkanaście cykli. Drugie (B) mniej krytyczne (właściwie w ogóle nie krytyczne), wołane rzadziej, trwające kilkaset cykli. Główna pętla programu...
Czesc włąśnie robie robota który skręca po wciśnieciu jednej z dwóch krańcówek które są podłączone z jednej strony pod +5V a z drugiej pod piny int0 i int1 atmega8. No i rzadko kiedy układ reaguje na wciśniećie krańcówki co powoduje rozłączenie obwodu i pojawienie się stanu niskiego. Niewiem czy to wina krańcówek czy może powinienem wpiąc w ten przewód...
Witam. Próbuję uczyć się C na Atmedze 8 i mam problem z obsługą przerwania. Kod wygląda następująco (z resztą pisany na podstawie kursu z EdW): #include <c:\WinAVR-20090313\avr\include\a... #include <c:\WinAVR-20090313\avr\include\a... #define F_CPU = 1000000 int volatile wyjscia; int indeks; int main (void)...
Witam, jakiś czas temu zacząłem zabawę z AVR no i w końcu natrafiłem na problem, którego nie mogę rozgryźć. Mam w programie (multipleksowany wyswietlacz 7 seg) linijkę o treści : DOKŁADNIE o ten zapis, wiem ze lepiej uzyć całego portu a nie mieszać jak powyżej D i C, ale nie rozumiem DLACZEGO zapis, który nie powinien ruszać bitów PD2 i PD3 generuje...
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...
Jak po przyjęciu int0 ,zablokować go na czas (500 ms), odblokowując int1, po tym czasie ponownie odblokować int0, blokując int1 itd.? czas dowolny (rcall czas).
Dziękuję za załączniki. Akurat znam je, bo na ich podstawie robię próby opisane w tym wątku. Wciąż nie wiem, dlaczego program nie chce wysyłać kolejnych instrukcji bez (znacznych) opóźnień między nimi. Myślałem nawet, że to Slave nie wyrabia z wykonaniem funkcji, ale jak pisałem "zwykła" Atmega wysyła te dane bez problemu, wystarczą jej opóźnienia "...I2C_WaitTillStopWasSent..."....
Witam , mam nadzieję iż nie zanudziłem bez reszty.. W zestawieniu z moimi "dokonaniami asm." kolega michalko12, jest najbliższy temu co ja kiedyś robiłem . Oto wersja asm z przełącznikiem kompilacji aby kompilować jako samodzielny plik - kto chce ->ten może :D ( ta wersja to 16-timerów, 16-nasto bitowych, każdy cztery tryby konfiguracji, oczywiście...
Może przerwanie od INT0 albo INT1 :?:
1. z tego co piszesz to przerwanie o najwyższym piriorytecie będzie występowało z częstotliwością 4kHz. Zakładając że będziesz miał zegar 8MHz to na obsługe przerwania (zapisanie 8 bajtów) i obsługe innych przerwań będziesz miał: 8MHz/4kHz = 2000 cykli zegarowych co w przypadku procesorów typu RISC daje jakieś 1500 instrukcji. A to jest całkiem sporo....
Przecież twój kod się nawet nie powinien kompilować, więc jest faktycznie zły :) Jak sobie wyobrażasz zagnieżdżenie ISR? Mieszasz nowe makra (ISR) ze starymi (SIGNAL). Poza tym ATMega nie ma czegoś takiego jak priorytety przerwań. Przerwanie TIMER1_COMPA_vect nie zostanie przerwane, chyba, że jawnie odblokujesz wszystkie przerwania co zapewne doprowadzi...
W trakcie wykonywania tego podprogramu zostało zgłoszone przerwanie zewnętrzne na nóżce int1 atmega328p. Czy atmega328p przerwie wykonywanie podprogramu nóżki int0 Zależy jak zadeklarujesz przerwanie, czy ISR bez atrybutu lub z atrybutem ISR_BLOCK albo jako SIGNAL czy ISR z atrybutem ISR_NOBLOCK lub jako INTERRUPT. Jeśli przerwanie w przerwaniu jest...
Chwila. Timer bez preskalera, częstotliwość procesora nieznana, załóżmy, że 1 MHz (nieistotne). Timer zgłasza przerwanie co 21 cykli zegara, czyli ATmega zajmuje się na okrągło obsługą przerwań timera, nie mając szans obsłużyć żadnych przerwań o niższym priorytecie (ADC).
Czy w bascomie też trzeba dopisywać instrukjce sei aby uzyskać niższy priorytet przerwania?
Na jakiej podstawie twierdzisz, że problemem są priorytety przerwań? Przerwania występują na tyle sporadycznie, że nie ma tutaj miejsca na problemy. Jeśli wysyłany jest znak '2', to porównanie (i==2) jest błędne TCCR2 = 1<<CS00 | 1<<CS02 | 0<<CS01 ; proponuję zapisać tak: TCCR2 = (1<<CS00) | (1<<CS02) |...
Z Erraty: "po wejściu do handlera wyjątku (np. ISR) wyjątki (w szczególności przerwania) nie są blokowane jak w AVR" No to akurat nie jest prawdą. Przerwania są blokowane dokładnie tak samo, jak w AVR, czyli blokowane są przerwania o priorytetach nie wyższych niż bieżący. AVR ma tylko dwa poziomy priorytetowe (wątku i przerwania), więc wszystkie przerwania...
Witam Czy ja dobrze widze, ze mikrokontrolery serii ATmega nie maja ustawianego priorytetu przerwan ? Z manuala wynika, ze po wywolaniu przerwania system przerwan zostaje wylaczony. I zostaje wlaczony dopiero po wykonaniu podprogramu obslugi tego przerwania. Tak to wyglada i w manualu i w Bascomie. Oczywiscie mozna w podprogramie obslugi przerwania...
Czyli rozumiem, że jak jednocześnie nastąpią przerwania INT0 i INT1 to du*a ? Przeczytaj jeszcze raz to: W tym przypadku nic się nie stanie - każde przerwanie ma swoją flagę, więc się kolejkują . Chyba, że dojdzie do dwóch przerwań tego samego typu , wtedy informacja się gubi. Tu jest tabelka wektorów przerwań na przykładzie ATMEGA8: http://obrazki.elektroda.pl/6297702500_1...
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ż ;)
Twoje pytanie nie ma związku z ATmega - to są kwestie definicji języka C. Jeśli modyfikujesz (np. inkrementujesz) zmienną w kodzie o dwóch różnych priorytetach (np. w przerwaniu i w pętli), to żaden volatile nie pomoże - musisz zablokować przerwania w programie głównym na czas modyfkacji zmiennej. Co innego, jeśli np. w przerwaniu inkrementujesz,a w...
W ATmega 16 nie ma możliwości zmiany priorytegów przerwań. Ale jest lekarstwo na Twoją bolączkę, możesz poprostu włączyć przerwania zaraz na początku obsługi przerwania od INT0. Przerywanie przerwań wcale nie jest takie niebezpieczne.
Witam. Sprzętowo na samym procku sie raczej tego nie da zrobić. Ale można zrobić bez problemu na przerwaniach. I stabilność częstotliwości wyjściowej będzie bardzo dobra. jeśli będzie to przerwanie miało najwyższy priorytet to bez problemu będzie tak samo stabilne jak sam kwarc. Przecież na przerwaniach od timerów buduje sie zegary i są one stabilne...
Przeważnie zadania które nie mogą czekać, pisze się wykorzystując właśnie przerwania. przerwania to przerwania, a nie zadania, które nie mogą czekać. W programowaniu wielowatkowym ważność zadań reguluje się priorytetami. RTOS odpowiednio wywlaszcza zadania przekraczając je. Nie ma znaczenie czy zadanie będzie się wykonywali godzinę czy 1ms. Dostanie...
To zależy czego się oczekuje. 3 dekady temu na 8 bitowym 1MHz procesorze był graficzny system obsługiwany myszą Oczywiście tak -pomijając różnice w architekturze tak było te 3 dekady temu. Tyle, że dziś w kieszeni każdy ma "komputer" o możliwościach obliczeniowych których nie powstydziły by się kilkadziesiąt lat temu poważne ośrodki obliczeniowe. Dlatego...
Jeśli rzeczywiście będzie to po kolei to powinno się wykonać automatycznie stąd if nie są zagnieżdżone, ale kolega MNCHH z jakiegoś :) powodu broni się przed przerwaniami :( Więc nie ma gwarancji, że coś po drodzę się nie wydaży i wysłanie znaku będzie możliwe dopiero za jakiś czas, czyli kolejny znak będzie już czekał w bufforze :( więc trudno powiedzieć...
A ja Ci powiem tak, Xmega to jest tylko taka ulepszona atmega. I z takim podejściem można śmiało zaczynać, bo zbyt wielu różnic nie ma, z tym, że są ogromne korzyści wynikające z nieporównywalnej funkcjonalności. I jak dla mnie, przesiadka była całkowicie bezbolesna.. no, może najwięcej bólu sprawiło mi wydanie kasy na nowy programator :) Czyli minimum...
Ha ! no to przynajmniej wiemy, że to nie jest bug Atmela. Co prawda, jak pisałem, to jest M2561, program jest "przeportowany" z M128. Właściwie bez zmian, tyle że w M2561 nieco inaczej jest z timerami właśnie. Ok, zmotywowałeś mnie to dalszego szukania... Co prawda, jak jutro tego nie rozwiążę, to będzie poważny kłopot. No ale nadzieja umiera ostatnia...
Niemniej ten błąd jest taki sam dla każdego kolejnego pomiaru przez co odejmuje się on i otrzymujesz dokładne wskazania O ile nie ma uruchomionych innych przerwań. Nawet, jak te inne przerwania zrobi o "niższym priorytecie" to i tak mogą wystąpić w tym samym czasie lub te "niższe" trochę wcześniej niż przerwanie np PCINT. To może spowodować konieczność...
"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...
Jest możliwość zrobienia stopera/minutnika z poczwórnym wyświetlaczem 7-segmentowym używając mikrokontrolera z rodziny atmega? Wyświetlacze najlepiej multipleksować w przerwaniach timera, żeby mieć pewność, że każda cyfra będzie wyświetlana jednakową ilość czasu. Odmierzanie czasu dla stopera/minutnika oczywiście też trzeba oprzeć na przerwaniach timera....
No dobrze- rozumiem że za moich czasów nie było kopiuj/wklej tylko znajdź w bibliotece/wypożycz/znajdź dziewczynę piszącą na maszynie/znajdź maszynę/dyktuj/sprawdź. Nie priorytet przerwań i nie dwa w tym samym czasie. Jakby tak się zdarzyło że dwa różne- to tak. Ale prawdopodobieństwo tego jest bardzo małe. Dlatego w AVR to chyba nikt nie próbuje tego...
Dlaczego? Ponieważ do SPI są przypięte 2 porty USART. Dlaczego? Ponieważ brakło portów USART w układzie, który jest na płytce. Dlaczego? Ponieważ nie chcemy zmieniać uC i wolimy dodać osobny układ z USART, który potrzebuje SPI, ma status EoL i kosztuje tyle samo co uC dostarczający wszystkie funkcje :) Przeprojektowanie całego układu, który już jest...
A ja przewrotnie zapytam o jaki AVR ci chodzi? Gdyż np. ATXMega mają priorytety przerwań.
No tak jeśli przerwanie będzie symetryczne to nie obejdzie się bez sumowania, chyba że będziesz wiedział jaka jest różnica w asymetrii. Ale wydaje mi się że to za dużo kombinacji. A może maskować co drugie przerwanie przychodzące z proc audio wtedy mierzył by czas 1 okresu bez potrzeby sumowania. ATmega 128 obsługuje takie maskowanie, pewnie inne ATmegi...
Nie do końca tak jest. Pierwszy problem to podpisy cyfrowe sterowników. Win8 wymaga, a Win7 prawie wymaga tych podpisów. W efekcie brak może znacznie utrudnić korzystanie z takiego USB. Podpisane sterowniki (sterownik to dużo powiedziane, bo to tylko plik inf dla Windowsa) są dostępne od Atmela. Kolejny problem jest poważniejszy - biblioteki softwarowe...
Nawet jeśli wystąpią w tym samym czasie wyższy priorytet ma int0 i jak się wykona to przerwanie powinno się wykonać INT1 . Jeśli chcesz zmniejszyć ryzyko zwiększ częstotliwość zegara . Teraz Atmega działa na wewnętrznym kwarcu 8MHz. Wieczorem spróbuję z kwarcem 16 MHz, zobaczę czy jest różnica. Jak pisałem wcześniej, teraz sygnał podłączony jest do...
... mocno nie zbaczamy z tematu ;) ... każdy po trochu pokazuje koledze autorowi na co tak ogólnie trzeba zwracać uwagę robiąc jakieś układy i wykorzystując procki. Ważne jest aby nie dyskwalifikować jakiegoś procka albo nie gloryfikować innego ;) ... każdy ma właśnie swoje wady i zalety - przy czym ta rola może się odwracać w zależności od zastosowań...
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...
Wiesz 5 lat, nie 5 lat. Atmega8 to proc. który wg noty katalogowej pierwsze wydania miał w latach 2001-2002, więc posiadanie kompilatora z 8 letnim stażem i uaktualnieniami powinno być zdecydowanie bezpieczne, zwłaszcza, że atmega, czy attiny to nie kombajny posiadające takie perełki jak wsparcie dla zewnętrznych pamięci SDRAM, wsparcie dla wielowątkowości,...
"Aż 10 instrukcji.." Ok. Zarejestrowanie strobu - min. 2 instrukcje w pętli. Odczyt dwóch części adresu po 8 bitów - min 2 instrukcje. Sklecenie adresu i odczyt pamięci (skąd w ATmega wziąć 64 KiB RAM na emulowany EPROM?) - załóżmy optymistycznie, że 3 instrukcje. Wystawienie danych na port - min. 1 instrukcja. Wykrycie końca cyklu - min. 2 instrukcje...
Już nie pamiętam dokładnie, ale zmniejszyłem czasy w funkcji w1_bit_io zamieniając na funkcje delayMicroseconds(), no właśnie wtedy przydaje się analizator, bo pauza miała być na 14us a była ponad 25. I tak jest w okolicy 20, ale już działa z Atmegą. Tobie pozostają inne czujniki lub wykonanie kilka delikatnych prób po parę us w dół i w górę. Nie sprawdzałem...
Witam serdecznie! Przejdę od razu do sedna. Napisałem program do megi328, z przerwaniem INT1, odpowiednio poustawiałem rejestry, uruchomiłem globalną obsługę przerwań sei(), i niestety atmega po podłączeniu zasilania od razu wykonuje przerwanie, mimo, iż switch nie został wciśnięty, wiem, że tak się dzieje, ponieważ w przerwaniu dla przykładu zapalam...
IRQ tester https://obrazki.elektroda.pl/3243423400_... IRQ Tester to proste narzędzie, głównie do testowania czasu odpowiedzi na impulsy, lub czasów międzyzboczowych dostarczonego sygnału. Program został napsiany na ukontroler AVR Atmega168, a jego głównym zadaniem jest funkcja multiwibratora monostabilnego, którego działanie polega...
Witam. Podczas projektowania robocika 4 kołowego z 4 silnikami(pololu lub HL149) chciałem założyć na oś 4 tarcze z myszy kulkowej i układ opto (dioda IR +fototranzystor podwójny)+komparatory LM358D Planuje kontrolować przebytą drogę jak i kierunek obrotu kół(coś ala kontrola trakcji), 8 wyjść z komparatorów planuje podłączyć pod 8 przerwań zewnętrznych...
Niestety, ale priorytety w AVRach są "sztywne" i nie da się ich zmienić. Jedyne co możesz zrobić to na samym początku jednego przerwania, włączyć obsługę innych (są blokowane na czas obsługi przerwania).
Od kiedy avry mają priorytety przerwań, to raz, dwa nic nie wyłącza, ba mają to samo dzialanie (defaultowo) bez parametrów;)
Wektory przerwań mają odpowiednie priorytety ... jeżeli odczyt czasu masz w przerwaniu to przerwanie klawiatury powinno być o mniejszym priorytecie. Jeżeli obsługę odczytu masz w pętli głównej - to zrób własny "kontroler przerwania" :P Po odczytaniu godziny itd. sprawdź czy flaga przerwania jest ustawiona, a jeżeli tak to skocz do procedury obsługi...
Dzięki za radę ! :D Popróbuję jeszcze tym trochę pobawić się. A czy da się w jakiś sposób ustawiać te priorytety przerwań w ATMega32 ?
priorytety przerwań atmega obsługa przerwań obsługa przerwań atmega
ricoh reset bębna miernik dzwiek vectra poziom sygnału
philips hr7958 instrukcje obsługi radia kenwood
Jak skopiować zawartość pamięci NVM? Nawijanie 12 cewek na fazę w silniku 3-fazowym