http://www.avrfreaks.net/comment/1353666... Zanim AVR wykona skok do przerwania, musi dokończyć wykonywanie bieżącej instrukcji, która może trwać od 1 do 4/5 cykli. (zakładając oczywiście stabilne taktowanie oraz że w pętli głównej nic nie blokuje przerwań)
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...
W urządzeniu było mało USART, został użyty układ SC16IS760IPW. Teraz musze dodać kolejny SC16IS762IPW czyli dwa USART. Procek z USARTEM komunikuje się po SPI. Komunikacja to wysłanie adresu rejestru i zapis/odczyt danej. Teraz wszystko odbywa sie w pętli głównej, muszę jednak odbiór przenieść na przerwania. Jak sie łatwo domyśleć, nie może byc tak,...
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...
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...
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...
Obstawiam kłopot z wykonaniem funkcji uart_printf. Na czas jej wykonania masz blokowane wszystkie przerwania. Sprawdź flagę stanu USART - pewnie masz błąd buffer overrun. Jeśli potrzebujesz szybkości dużo wyższych niż 9600bps, to pomyśl też o XMEGA, w której odbiór danych z USART możesz zrealizować przez DMA, dzięki temu i kilka Mbps nie jest problemem.
Ale przecież ja tak robię czyli najpierw blokuje możliwość odebrania przerwania [syntax=c] PORTC.PIN4CTRL=PORT_ISC_INPUT_DISABLE_gc [/syntax] a potem kasuję flage [syntax=c] PORTC.INTFLAGS=0x01; [/syntax] Tak to zapisałem w cytowanym kodzie nr2. Moje pytanie jest dlaczego lepiej jest to robić maskując przerwanie INT0MASK niż tak jak ja to robię [syntax=c]...
A powinien już w tej chwili, bo IMHO XMEGI nie mają jakichś mega osiągów (jak za swoją cenę) a i cenowo i wydajnościowo ARM wychodzi dużo taniej (najtańszy to koszt koło 6 zł). Przesiadka jest na nie dość długa (jeżeli ktoś faktycznie chce wiedzieć co i jak a nie "byle żeby"), ale się opłaca. Acha i pewnie napiszecie o kosztujących fortunę JTAGach -...
Z tym blokowaniem przerwań jest tak, że mam odtwarzanie dźwięku z tablicy w RAM przez DAC w kółko i chce zmieniać zawartość tablicy w RAM, kopiując z referencyjnej tablicy we Flash. Żeby to szybciej poszło, wolę zastopować an chwilę przerwania na czas podmiany. Można by to pewnie zrobić przy użyciu DMA, jeśli ten ma dostęp do pamięci we Flash (w AVR...
(at)markolsrz Zobacz sobie do nagłówka stdatomic.h. Znajdziesz tam funkcje rozwiązujące Twoje problemy ze współbieżnym dostępem do zmiennych. Porada niestety nietrafiona, a to z braku implementacji w AVR-libc. Oczywiście można sobie samemu to zaimplementować, lecz po co, skoro już w AVR-libc mamy atomic.h. Jedyne co można poprawić, to tak jak napisałem,...
Z programowymi rozwiązaniami byłbym ostrożny. Można założyć, że przerwanie od uart wykona się w 10us. Oczekujesz na serwie rozdzielczości 1 stopień. Jak wyliczył (at)emarcus wymaga to sterowania serwem impulsami o rozdzielczości co najmniej 2,8us. Jeśli serwem nie będziesz sterował sprzętowo przez PWM tylko jak zaproponowano w #8 (https://www.elektroda.pl/rtvforum/viewt...
Zapis nie musi zajmować dużo czasu, jeśli przed wywołaniem zapisu sprawdzisz, czy żaden inny zapis do EEPROM się nie odbywa. Jeśli nie, to wywołanie _write lub _update dla bajtu trwa chwilę, bo funkcja natychmiast wraca i nie czeka na koniec zapisu. Więc tu blokowanie przerwań będzie bezpieczne. Co innego w przypadku zapisu blokowego, ale przecież nie...
Tyle że musiałoby być zasilanie niższe o spadek na diodzie od reszty układów, czy to może być problem? Ciekawe jak się to robi najczęściej (jak nie ma sprzętowej opcji), teraz każdy sprzęt zapamiętuje ustawienia? Więc tak jak pisałem - najprościej to zrobić korzystając z wbudowanego komparatora - zaleta jest taka, że procesor nic nie musi robić, dostanie...
-brak konieczności użycia kwarcu nawet przy projektach wymagających stabilności (RS232,RS485 a nawet USB) Ja na ATmegach nigdy nie musiałem kwarcu wpinać, mimo stosowania w systemie odpalającym UARTa i to w środowisku zakłóceń radiowych (proste moduły RF bez żadnych gadżetów podpięte pod UART, nie to co te nowe LORA itp.). Dodam tylko że system działał...
Ok, uporałem się jakoś z tym projektem, tak że wreszcie działa. W końcu użyłem tego gotowego przykładu: http://mikrokontrolery.blogspot.com/2011... i jakoś "ręcznie" dodałem biblioteki ASF od TWI. Było kilka niezgodności, ale się z tym uporałem. Tak więc program działa i wymienia dane z kompem. Mam...
Czyli jednak rejestr CMD jest tutaj używany? Bezpośrednio nie jest używany, ale musi mieć wartość 0x00 (no command). en zapis korzystając z funkcji eeprom.h trwa dość długo, także przymierzam się do skorzystania z nvm i wykorzystania zapisu całymi stronami. Napisz własne funkcje - zapisując stronami zapisujesz 32 bajty na raz, czyli operacja jest 32-razy...
Próbuję na razie zrobić ograniczenie prądowe do przetwornicy za pomocą komparatora i programowego blokowania. Do + komparatora mam podłączony rezystor bocznikowy a do - przetwornik DAC. Lecz program nie działa prawidłowo. Nieważne jaką wartość ustawie w przetworniku DAC to układ zachowuje się zawsze tak samo czyli: Gdy wejście + komparatora mam podłączone...
Ale z komentarzy widzę, że wykorzystany jest sprzętowy UART więc porównywanie tego jest lekko bez sensu. Dlaczego bez sensu? Praktycznie każdy AVR ma USART. Tu akurat jest kilka ledów i nie ma innych peryferii, więc można robić w dowolny sposób, co innego jak się steruje 500led i w tym czasie odbiera dane DMX. Wysłanie danych dla 500 led to 15ms (1/800e3*24bity*500led)....
Jak mam umieściś wszystko we flash, skoro nie wiem jaka treść będe generował. Są elementy stałe i są elementy, które się zmieniają. Owszem, mogę na przemian wysyłać dane z flash (stałe elementy) i generowane dynamicznie z ram ale ze względu na elementy dynamiczne nie wiem ile danych będę przysłał. Musiałbym więc najpierw zsumować wielkość elementów...
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...
W książce Tomasza Francuza "AVR Praktyczne projekty" znalazłem bardzo przyjemny sposób na użycie USART w XMEGA posługując się fprintf lub fscanf. Niestety po przejściu na DMA okazało się, że nie da się tak łatwo zastąpić fprintf przy użyciu funkcji wysyłającej dane do bufora i dalej przez DMA do komputera. Znalazłem inny przykład w sieci z wykorzystanie...
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...
xmega przerwać blokować przerwać xmega flaga przerwać
podłączenie wtyczki kolory instrukcja sterownik sprężarka zasięg telewizji naziemnej
udostępnianie internetu przez telefon samsung rsh5zlbg
Kopiowanie pilota Yooda na uniwersalny: czy to możliwe? Podłączenie silnika trójfazowego do 230V: kondensator czy falownik?