A gdzie jest obsługa przerwania?
Dodaj kolejną zmienną w obsłudze przerwania.
Jakoś nie mogę sobie tego wyobrazić. Żeby ISR od Timera zakłócał ISR od UARTA musiałby trwać dłużej niż interwał. Podejrzewam, że raczej program główny nie wyrabia się ze skonsumowaniem zawartości bufora UARTa. Tak czy inaczej pokaż program, a co najmniej procedurę obsługi przerwania timera.
W jaki sposób obsługujesz RS ?? przerwanie ?? może wkleisz kod ? Prawdopodobnie przerwanie RS włącza się podczas obsługi LCD.
Może trzeba odblokować jakoś globalnie to przerwanie... Dokładnie :-) Należy jeszcze ustawić bit RXCIE w rejestrze UCSRB. Ale kiedy testy się skończą, to lepiej z przerwania usunąć czasochłonne rzeczy - typu obsługa LCD :idea:
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).
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.
Obsługa WS2812 na AVR nie może działać przy aktywnych przerwaniach z jakiegokolwiek źródła. Obsługa DMX korzysta z przerwania UART i masz jeszcze przerwanie timera. Proste? Zmień mikrokontroler.... Z ATmega WS2812 DOBRZE nie popędzisz.
A po co tak teoretyzować - wystarczy zajrzeć do PDF'a scalonego odbiornika TFMS czy TSOP żeby zobaczyć jak należy postąpić nie tylko z linią sygnału wyjściowego ale też jak podać zasilanie. Ludziom nie chce się tam zajrzeć a potem zdziwienie, że nawet jak działa - to jednak jakieś błędy się wkradają, czasem jakieś zakłócenia itp (jak tam już zajrzysz...
a może jakiś pull-up? 4\/3!!
Ale po co wskaźnik ? Normalnie nie da się wywołać funkcji obsługi przerwania ?
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...
przeciez nikt nie wywarza otwartych drzwi sprawdzajac w przerwaniu czy wystapilo przerwanie :| Dopiero co ktoś pytał, jak wywołać z ręki procedurę obsługi przerwania ;)
Przecież ATmega może działać na 8 MHz na wewnętrznym oscylatorze. Jeśli nie zdążysz z obsługą przerwania, po prostu "zgubisz" przerwanie. W trybie PWM przy 8 MHz nie będziesz miał z tym problemu.
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...
Żeby skasować flagę przerwania w rejestrze, musisz zapisać " 1 ". Znajdziesz to w dokumentacji mikrokontrolera. Cytat z polskiego tłumaczenia: Flaga jest zerowana po wykonaniu procedury obsługi przerwania. Lub może zostać wyczyszczona poprzez wpisanie logicznej jedynki do niej.
Nie widzę w Twoim kodzie obsługi przerwań które aktywowałeś. O ile nie ma ich w dołączonych plikach, to to jest przyczyną resetowania się procesora.
Sprawdź te fuse bity czy na pewno atmega nie chodzi na wewnętrznym kwarcu. Po drugie w obsłudze przerwania nie powinno być żadnego wait, szczególnie takiego dugiego. Zmień "Load Timer0 = 250" na "Load Timer0, 250"
W ogóle nie używamy _delay() -nie tylko w przerwaniach. Poza tym- po co jest to kasowanie flagi przerwania w przerwaniu- po obsłudze przerwania ta flaga sama się kasuje.
Do atmegi8mki Ci może nie wejść obsługa FATu. Poszukaj na elektrodzie FAT SD Atmega i coś znajdziesz gotowego. - Napewno nie Bascom :D Potem jakieś przerwanie i mierzyć czas i robić systematyczne opróżnianie buffora na drabinke R2R albo DAC.
Chodzi mi o to że w bascomie żeby przerwania działały musisz włączyć globalną obsługę przerwań, i dopiero konkretne przerwanie. Do tego widzę że nie ma jak się wykonać podprogram "readir" bo masz wyłączoną globalną obsługę przerwań. Proponuję : [syntax=basic4gl] Config Rc5 = Pine.4 On Int4 Readir Config Int4 = Low Level Enable Interrupts Enable Int4...
Tak też jest dobrze, unia to tylko nieprzenośny sposób ułatwienia sobie zadania :) Kilka błędów - użyj uint16_t zamiast unsigned short. Jak już tmf wspomniał do uśredniania musisz użyć większego rozmiaru zmiennej żeby wykluczyć przepełnienie, a na avr int ma rozmiar taki sam jak short. Użyj uint32_t. Poza tym całe to testowanie flag i numeru czujnika...
Dałem BOD - nic się nie zmieniło. Dalej robiłem testy i udało mi się sprowokować tą sytuację. Robię to tak: Wysyłam dane do komputera, odpowiadam. Hibernuje komputer. Wysyłam dane do komputera (bez odpowiedzi wiadomo) Włączam komputer. Wysyłam dane do komputera - przychodzą poprawnie. Odpowiadam do urządzenia ale nic się nie dzieje, toggle wskazuje...
Mogę naprowadzić: zapominasz o kodzie, który widziałeś, a który korzysta z delay() i robisz wszystko od nowa na przerwaniach. Problem w tym, że przerwanie związane z obsługą DS18B20 powinno wywłaszczać przerwanie wyświetlacza, co na ATmega w zasadzie jest niemożliwe. W związku z tym wypada rozejrzeć się za obsługą DSa przy użyciu UARTa, co daje pewne...
Witam ponownie, Bardzo dziękuję za rady oraz uwagi, lecz Pana odpowiedź minęła się z moim problemem. Mianowicie, system przerwań uruchamianych przyciskiem nie działa w żaden możliwy sposób. Mianowicie, nie działa najprostszy kod typu : bit_is_clear działa z przyciskiem bez problemu, ale ona mnie nie zadowala. Dodatkowo chciałbym zaznaczyć, że bouncing...
(at)Freddie Chopin: Flaga jest ustawiana wewnątrz funkcji 'przerwaniePoBicie()' i 'przerwaniePoBajcie()'. Problem w tym, że cli(); wewnątrz obsługi przerwania jest niepotrzebne, bo ta flaga zeruje się automatycznie na czas obsługi. Poza tym nie będzie efektu tej instrukcji, bo po powrocie z obsługi przerwania flaga I zostanie i tak automatycznie ustawiona....
Przepraszam za długi czas mojej odpowiedzi. Użycie 1 timera jest oczywiście tylko propozycją, ale w mojej opinii upraszcza program. Tak chodzi o osobne zmienne które inkrementujesz (w mojej propozycji było odliczanie do 0, ale to nie zmienia istoty). Oczywiście musisz też uwzględnić czas wykonywania się procedur przerwania obu Timerów przez co faktyczny...
Witam serdecznie. Prosze o pomoc bo nie umiem sobie z tym poradzić. Chciałbym zmienić ten program tak aby wykorzystać przerwania obsługujące dane które przychodza z portu RS232, nie trzeba wtedy cały czas nasłuchiwać w pętli ( w moim programie to sa pętle 'if').Program działa poprawnie ale czas reakcji po otrzymaniu danej jest długi.Wiem że trzeba zastosować...
Witam Klawiatura zbudowana jest za pomocą sześciu przycisków monostabilnych, podłączonych do portu PF0-PF5. Równolegle z każdym przyciskiem jest włączony kondensator elektrolityczny o pojemności 1µF w celu eliminacji wpływu drgań styków. Aby nie odczytywać stanu linii cały czas, zdecydowałem się na wykorzystanie przerwania zewnętrznego !INT7. Jest...
1. Wszystkie zmienne modyfikowane w przerwaniu powinny być 'volatile'. 2. Po co wyłączać globalnie przerwania w procedurze obsługi przerwania? Poczytaj datasheet - one i tak są wyłączone. 3. Sugerowałbym nie żałować klawisza ENTER - kod, w którym w jednym wierszu jest kilka poleceń jest nieczytelny. 4. Rejestr UDR odczytujesz wielokrotnie w przerwaniu....
Tzn, wiesz - sam pwm możesz wygenerować w zasadzie na dowolnym pinie przy użyciu biblioteki SoftPWM czy chociażby generując przerwania od timera i w obsłudze przerwań zmieniać stany danego pinu, ale to nie o to chyba chodzi. Ten sygnał 38kHz musi być chyba odpowiednio zmodulowany, nie? W sensie, on ma nieść jakąś konkretną informację czy tylko "jest/nie...
Proszę o prosty program który będzie obsługiwał przerwanie INT2 opadającym zboczem na procesor atmega 8535 w bascomie. Wynikiem działania obsługi przerwania może być zaświecnie ledy na dowolnim porcie. Próbowałem różnych konfiguracji i nic nie działa, INT0 i INT1 działa a INT2 nie :( z góry dziękuję george2002
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...
DDRB jest po to aby diody swieciły ADMUX = (1<<REFS1) | (1<<REFS0); // 2.56 V Wewnętrzne napięcie odniesienia? ... a może zapomniałem o obsłudze przerwań w free runinng'u
To może napisz program tak żeby obsługiwać przerwanie od INT0 i skorzystaj z przerwań. Może taka obsługa będzie poprawniejsza.
sbi i cbi nie powodują żadnej zmiany SREG więc zapisywanie i odtwarzanie SREG w tym przypadku jest niepotrzebne. Zgadza się, dlatego są zakomentowane na wypadek, gdyby jeszcze coś w tym przerwaniu miało być robione... :P Nie rozumiem tego. Skoro już używasz rejestrów is0 i is1 to czemu bezpośrednio do nich nie załadujesz ADCH i ADCL. Dlatego, że w...
Skoro już używasz timera, to zrób to na timerze :) Najprościej tak, że ustawiasz timer w tryb CTC, procedura obsługi przerwania działa tak jak to wcześniej opisałem. Jeśli chcesz uzyskać przyśpieszenie po przytrzymaniu klawisza to zmieniasz tylko wartość rejestru porównania w trybie CTC na mniejsza, w efekcie kolejne przerwania będą przychodzić szybciej,...
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....
a w asemblerze podobnie tyle że musisz w dokumentacji znaleźć adres w którym umieścić skok do przerwania, odblokować przerwania i to konkretne w odpowiednim rejestrze np: org. 0x002 rjmp int_0 .. cli ldi r16,0xxx out gimsk,r16 : (tu konfiguracja przerwania) sei int_0: (to jest podprogram obsługi prerwania) cli operacje sei reti
Żeby zrobić menu - potrzebujesz dodać kolejne funkcje obsługi odczytu i wyświetlania temperatury. Obsługę wyświetlania i poruszania się po menu itd. Ponadto istniejącą procedure obsługi PCF musisz rozszerzyć o procedury odczytu i zapisu daty oraz obsługę budzika. Kolejna sprawa to wprowadzenie przerwań. Tzn. Ustawiasz w PCF odpoowiednią datę budzika...
Nie da się tego precyzyjnie wyliczyć. Dekodowanie impulsów z enkodera na M328 odbywa się programowo - np. tak, że impulsy z jednego kanału generują przerwania (nie jest to idealne rozwiązanie, ale na początek nie komplikujmy). W efekcie to jak często mogą się one pojawiać zależy od czasu jaki MCU spędza w funkcji obsługi tego przerwania, ale także od...
No tak, przerwanie uruchamia się, i wyłącza swoją obsługę przed wywołaniem sleep_mode(). Możesz to usunąć z przerwania i umieścić zaraz po sleep_mode()? Wstawianie _delay_ms() w wielu miejscach to słaby pomysł i lepiej z tego zrezygnuj jeśli ten program ma robić jeszcze cokolwiek innego. Pokaż ten timer, który Ci pamięć zajmuje. To są dwa bajty i trzy...
A może masz gdzieś funkcję obsługi tego przerwania? Dodano po 4 Dodam, że korzystam z programowego bufora cyklicznego, który w przerwaniach odbiera dane od UDR. Jedyne co mi przychodzi na myśl to to, że przerwanie tak szybko się wykona (odebranie danych do bufora i skasowanie flagi RXC), że część programu: while ( !(UCSRA & (1<<RXC)) ); nawet...
No zrobiłem tak jak napisałeś, ale zadnej zmiany w działaniu to nie wniosło :( po wcisnięciu przycisku nadal program rusza od nowa a nie uruchamia sie obsługa przerywania.
Witam, Magistrala 1-wire posiada dość mocne restrykcje czasowe co do trwania poszczególnych stanów na DQ. Przerwanie Timera, a wiec wykonanie podprogramu związanego z obsługa przerwania, powodowało zmianę długości tych czasów, gdyż są one generowane softwaerowo przez Bascom. Czasem może się zdarzyć że kolizja i tak wystąpi pomimo że teraz wszystko jest...
Przerwania zewnętrzne INT mogą reagować na zbocze rosnące, opadające lub na jedno i drugie. W procedurze obsługi przerwania tylko ustawisz flagę, którą potem analizujesz.
W ten sposób daleko nie zajdziesz. Zacznij od tego, żeby testować przyciski w przerwaniu timera - kod bęzie znacznie prostszy i bardziej niezawodny. http://mikrokontrolery.blogspot.com/2011... żeby pozbyć się if() możesz napisać signal_incrValue = !!(PIND & 0b00000010); albo signal_incrValue = PIND >> 1 & 1;
Jeśli proc faktycznie się nudzi, to może w pętli czekać na zapalenie flagi INTx zamiast zezwalać na wykonanie podprogramu obsługi przerwania. Zyskasz na czasie przyjęcia obsługi przerwania - nie będzie odłożenia adresu powrotu na stosie, oraz wywołania funkcji z wektora przerwań. powodzenia, genetix
to w taki razie watchdog mi dupę ratuje, bo program działa w dużej pętli i okresowe kopanie kundla nie jest problemem. Analizując ten swój kod trafiłem na jeszcze jedną możliwość. Jest jedno miejsce, w którym w pewnej dość wydumanej, ale teoretycznie możliwej okoliczności jest możliwe wywołanie przerwania (tego obsługującego odczyt IR) w trakcie obsługi...
A propos: zastosowałem flage w przewaniach lecz to nic nie dało. Sprawdzasz ją tylko raz w dodatku przed pętlą główną i przed wystartowaniem pierwszej konwersji. Jaki więc to ma mieć sens? Przeanalizowałeś i wypróbowałeś przykłady z artykułu, który Ci wskazałem w poście #4? Jeśli nie, to poświęć na to swój czas.
To tego są przerwania. Generalnie ja nie lubię odbierania w pollingu.
Czy komuś udało się uruchomić prostą obsługę od przepełnienia TIMERA 2 w Atmedze 8. Mi się udało.
Przez ostatnie 2h doszedłem do tego w czym tkwi problem zarówno w obsłudze przerwania od timera0 oraz od zewnętrznego INT1. Problem polega na tym że zmienna globalna którą wykorzystuję jako flagę istnieje tylko w obsłudze przerwania,flaga nie jest widoczna w głównej pętli programu lub po obsłudze przerwania resetuje się ATmega. Wywnioskowałem to gdy...
Czekaj, czekaj. Jeden czujnik odpali przerwanie INT0 a w tym przerwaniu sie uruchomi timer. Drugi czujnik po INT1 ma go wyłączyć. Raczej o tym myślałem. Lepiej tak: czy ktoś by mi dokładnie wytłumaczył jak wywoływać timery, zbierać z nich czas, do czego służą poszczególne rejestry. Noty katalogowej tego procka po polsku nie znalazłem, a dobrego poradnika...
Argumenty do dyskusji są w nocie aplikacyjnej Atmela sprzed kilkunastu lat. Myślałem, że wszyscy wypowiadający się w temacie PWM znają ją od dawna. Tak krótko chodzi o to, że ponieważ kolejne wyjścia przestawiasz w kolejnych if-ach, to przy ustawieniu takiego samego wypełnienia rzeczywiste wypełnienia poszczególnych wyjść będą różne. Poprawnie robi...
W zasadzie dlugiiii chyba robisz w tym przerwaniu "masło maślane". To chyba będzie działać bo kasowanie flagi przerwania następuje po obsłudze ale rozumiem irytację tadzik85. Mnie taki kod też nieco irytuje.
Sprawdź czy skok do obsługi przerwania to JMP czy RJMP? JarekC
Enable PCIE0 On PCIE0 skocz do obsługi przerwania
Witam No cóż rozwiązanie problemu jest programowe. W obsłudze przerwania deklarujesz trzy liczniki zliczające do np. 100 (wygodne bo masz skok 1%). Zawartość tych liczników "przyrównywana" jest do trzech kolejnych zmiennych, na które z kolei Ty masz wpływ. W zależności od zadanych wartości coś włącza się szybciej coś później. I po sprawie. Ot, cała...
http://obrazki.elektroda.pl/2762225800_1... Jedyny taki przenośny programator układów AVR. Pomoże wszędzie tam, gdzie trzeba zaktualizować oprogramowanie, a układ docelowy znajduje się w trudno dostępnym miejscu i nie mamy możliwości (lub chęci) ciągać ze sobą laptopa i mnóstwa przewodów. Banalnie łatwa obsługa, niski koszt wykonania, super...
Buduję prosty sterownik na atmedze 8, chcę obsługiwać klawiaturę w przerwaniach od timera0 ale atmega nie widzi procedury obsługi przerwania i resetuje się. Jeżeli zatrzymam timer albo wyłączę przerwanie timera, albo wyłączę globalnie przerwania to nie resetuje się. Kod procedury obsługi przerwania (funkcje do LCD są w pełni sprawne, nawet gdy ISR jest...
Procesor ATmega od biedy "ma możliwość" obsługi przerwań zgłaszanych z częstotliwością 33 kHz, ale pod warunkiem, że jest programowany w C lub asemblerze, a nie w Arduino ani Bascomie. Obsługa takiego przerwania w C musi być b. uważnie napisana - kilkanaście linii kodu, bez wywołań procedur, mnożeń ani dzieleń.
Konfigurujesz ADC "jak zwykle" plus w ADCSRA ustwiasz bit ADIE oraz definiujesz procedurę obsługi przerwania. Po wystartowaniu konwersji nie czekasz w pętli na zgaszenie bitu ADSC w ADCSRA bo po co. Jednak warto przed startem konwersji sprawdzić czy ten bit nie jest ustawiony, co oznacza że poprzednia konwersja jeszcze trwa. Chyba że to nie ma znaczenia....
Pod koniec obsługi przerwania timera startuj ADC, a wynik odbieraj na początku procedury obsługi przerwania timera, czyli w następnym przerwaniu. No i przypadkiem nie używaj równocześnie przerwania timera i ADC - pożytku żadnego, a kłopoty mogą być.
Wszystko zależy od tego, jak jest realizowana funkcja zegara RTC - jezeli przez którekolwiek z przerwań Timer2, to należy z wyłaczaniem przerwań zaczekać do momentu, gdy układ właśnie powrócił z obsługi tego przerwania, wtedy będzie czas do nastepnego, na wykonanie jakiś "arcyważnych" czynności ;)
(at)ziguś Dostosuj ten przykład do Twojego programu czyli nie mierz w przerwaniu tylko ustaw flagę by dokonano pomiaru. Możliwa wtedy będzie obsługa innych przerwań itd.. wypróbuję rano bo całą noc muszę siedzieć w pracy
To zostaw w spokoju sprzętową obsługę PWM, i używaj przerwań do zmiany stanu tego pinu, np. On Compare1A.
No, po prostu "ręcznie" wywołać procedurę obsługi przerwania timera? Przecież to taka sama funkcja jak każda inna.
Jesteś pewien, że zmienia się wypełnienie a nie częstotliwość. Według tabelki Nr. 47 ustawienie WGM12 i WGM10 daje 5 tryb pracy timera1. Jest to Fast-PWM 8 bit gdzie top osiąga max 0x00FF i ustawiany właśnie jest w OCR1A. Aby regulować wypełnienie i częstotliwość skorzystaj z 1 trybu pracy tego timera (WGM10 na 1). A i jeszcze jedno na koniec, nie musisz...
Halogeny też będą zabronione ?? a co do projektu, właśnie zakończyłem projekt na uczelnie gdzie wykorzystuję sterowanie halogenem. jest to zrealizowane w ten sposób, że mam 100 poziomów jasności (0-100%). Sterowanie fazowe oczywiście i triak załączany impulsem. Logicznie, program działa tak: 1) system detekcji zera (transoptor) wykrywa moment w którym...
Kolego, zacznij od podstaw C, bo ten kod nie ma szans na kompilację. Np. konstrukcja: char usart_bufor[60] = ("napiencie") |(sprintf(wynik,"U=%1.3f [V]",adc)); kompletnie nie ma sensu, podobnie UDR = usart_bufor[60] = ("napiencie");. Co to ma być? Kolejna sprawa, że ISR zagnieżdżony w funkcji też nie ma sensu (funkcja obsługi przerwania nie może być...
Nie podoba mi się twoje rozwiązanie. Ja bym to zrobił tak - timer odmierzający takty w rytm podstawowego okresu PWM (czyli przerwania np. 1kHz). Teraz zamiast tych porównań z licznikami, wrzuć wartość licznika do rejestru compare register. Dzięki temu masz przerwanie po przepełnieniu timera (nowy okres) - w tym przerwaniu inicjujesz wysyłkę danych po...
Mikrokontrolery powinny pracować poprawnie mając wspólną masę i odpowidnio połaczone linie miso mosi i sck. Wartość zasilania dla obu układów powinna być jednakowa .Możliwe ze masz problem z obsługą przerwania lub czasem jego realizacji
Pewnie że mamy ;). Użyj przerwań. Najprościej jest zrobić całość 'głównej' części pracy na przerwaniach w następujący sposób: a) Pomiary na timerze 0, wywoływane cyklicznie b) Obsługa przycisków na przerwaniu int0, wystarczy że podepniesz odpowiednio przyciski do pinu int0 i AtMega automagicznie wywoła przerwanie gdy tylko wykryta zostanie zmiana stanu...
Samo działanie liczników i uarta sprzętowego nie obciąża procesora poza obsługą przerwań i konfiguracją. Jak brakuje portów i pojemności można zastosować ATMEGA 2560 w 100-pinowej obudowie.
(at)Tojmak987123 IMHO niepotrzebnie komplikujesz. Jaki jest cel tego, aby dublować funkcje odbioru znaków? Masz na przerwaniach wpisywać znaki do bufora i ew. sygnalizować, że mamy coś wartego zainteresowania (czyli jest linia zakończona CRLF). Interpretacja zawartości bufora może być zrealizowana za pomocą funkcji obsługi tokenów ze string.h. A całość...
mam następujący problem, mój program dokonuje pewnego cyklicznego odczytu od innego urządzenia, ten odczyt z natury trwa dość długo, w momencie kiedy dostanę przerwanie zewnętrzne odczyt jest chwilowo wstrzymywany i po wykonaniu przerwania nie chcę już wracać do procedury odczytu tego urządzenia bo nie muszę już czekać na jej zakończenie i w zasadzie...
Wyłącz przerwanie (to od ślimaka) na czas diagnozowania i testowania. Wyłącz wszystkie inne przerwania. Zostaw kod odpowiedzialny za obsługę wyświetlacza, resztę zakomentuj, skompiluj i wgraj taki okrojony program do testowania.
Oj przeczuwam kłopoty, piszesz że przesiadasz się z małego AtMega na AtMega128, a tam niektóe rejestry mają zmienione nazwy lub wręcz niektóre bity są w innych/nowych rejestrach. dla AtMega8..32 działa coś takiego #define GLOBAL_INT_ENA()asm("se... #define GLOBAL_INT_DIS()asm("cl... #define INT0_ENA()...
Czy są jakieś różnice w obsłudze przerwań zew. czy portu i2c pomiędzy układami atmega 16 a atmega 16a? Wg http://www.atmel.com/Images/doc8163.pdf nie ma. Jaki toolchain używasz? Pokaż kod. W definicji wektorów w iom16a.h brak jest SIG_INTERRUPTx - (są zamienione na _INTx_vect).
Widzę że ustawiasz flagę 1<<TWINT . A jak wygląda obsługa przerwania od TWI - signal( SIG_2WIRE_SERIAL )... ? ;)
Idea jest zawsze taka sama, bez wzgledu na procesor. Jezeli Verengard nie uzywa zadnego OSa to moze zrobic to na przerwaniu od timera.
Rozumiem, że nie chodzi o zliczanie impulsów w danej jednostce czasu tylko ogólnie ilość aż do wykasowania przez obsługującego lub aż do przepełnienia zmiennej. Jest to bardzo proste przy wykorzystaniu przerwania INTx Po porostu w obsłudze przerwania dodajesz 1 do zmiennej która przechowuje ilość tych impulsów.
Parę uwag: Disable Urxc - zbędne, po co? If Kod_znaku <> 13 Then Enter = 0 If Kod_znaku = 13 Then Enter = 1 Po co dwa sprawdzenia? Bascom jest okrutnie wolny i bez tego. Ale tak naprawdę to chodzi o to: Waitms 20 Co 3 dni piszę tutaj to samo zdanie: "żadnego oczekiwania w obsłudze przerwania!" Skoro specjalnie blokujesz przerwanie na 20 ms, to...
Wiesz, mam książkę Baranowskiego 'ATmega w praktyce'. A to co było??? oczywiście mi pomylił się autor ale tytuł ten sam ;) więc ją masz Co do wydajności prądowej to chyba też dostałeś już odpowiedzi różne, albo drivery ULN albo zwykłe tranzystory żeby ją zwiększyć i po ptakach Żeby nie robić na jednej nodze jednej diody nawet przez te tranzystory to...
Kłania się pojęcie funkcji w języku C. setup() i loop() to też są funkcje. Do testowania stanu styków potrzeba tylko jednego przerwania timera, nic więcej. Po co mnożyć przerwania, czy to od zmiany stanu linii, czy to od dodatkowych timerów? Przy jednopoziomowym systemie przerwań, takim, jaki ma ATmega, o ile programista nie udziwnia nic na siłę, zmienna...
To ciekawe. Co fachowiec to pisze inaczej. Z artykułu kolegi Dondu [url=http://mikrokontrolery.blogspot.com... wynika że jest możliwe wywołanie kolejnego przerwania jak z obsługi poprzedniego nie wyjdziemy. To kto ma rację. Nie pamiętam już gdzie o tym czytałem ale jak przerwanie nie jest zablokowane to procesor...
No dobra, czas napisać, jak to zrobić prosto i efektywnie: Używamy jednego przerwania - timera, zgłaszanego kilkadziesiąt..kilkaset razy na sekundę (w typ przypadku, o ile nie ma multipleksowania LED, może być np. 100 Hz). żadna pętla główna nie jest do niczego potrzebna. W procedurze obsługi przerwania odczytujemy wynik ADC, "robimy filtr dolnoprzepustowy",...
No Timer jest "buforowany" ale nie o to mi chodziło. Chodziło mi o buforowanie większej ilości danych. Ale to masz skoro masz dwie tablice. Czy mi się zdaje czy w przerwaniu odczytujesz sektory?
Kolega niech raczy zauważyć że kontraktron ma coś takiego jak drżenie styków. Może być tak że przerwanie jedno twoje załaczenie potraktuje jak wiele zboczy je wzywalających i cały pomiar weźmie w łeb bo się wykona po prostu wielokrotnie. Musisz użyć więc kolejnego sprawdzania stanu styku juz po wykonaniu przerwania tak aby się upewnić ze jest to "trzymanie"...
Jeśli mówimy o ATmega, to najmniej czasochłonnym sposobem nadawania jest użycie SPI, a wtedy trzeba generować ponad 300.000 przerwań na sekundę, co jest niemożliwe do obsługi, zstaje więc aktywne oczekiwanie na SPI z zablokowanymi przerwaniami. Każdy inny sposób transmisji na ATmega (bibang) również wymaga zablokowania przerwań na czas transmisji do...
Wiem właśnie wczoraj wieczorem zauważyłem że to wszystko przez while(1) bo kiedy wykona się program w main to wtedy się resetuje a przerwanie nie ma gdzie wskoczyć bo się ciągle resetuje i mija zbyt krótki czas
Troszkę za dużym ogólnikiem rzuciłem... Tak, stos to HW Stack (sprzętowy) i Soft Stack (programowy). Należało by zwiększyć rozmiar stosu sprzętowego, bo używasz przerwania od Trmer1. Wywołanie obsługi przerwania powoduje zajęcie 32 bajtów stosu (czyli tyle, ile masz zadeklarowane), a nie tylko do tego jest on używany. Możesz ustawić np. dwukrotnie więcej....
Program zajmuje 50%. Może i jest źle napisany ale działa.. Ja bym to stwirdzenie troche skorygował; Program działa tak jak jest napisany!... bo - "Jest jeszcze jeden problem." Co jakiś czas temperatura podskakuje o 10 stopni a czasami nawet do 200 podskoczyło co spowodowało zbędne załączenie przekaźnika. Z czym jest problem? Popatrz na pracę timera0,...
Idzmy głównym wątkiem bez cofania sie. Tak, uaktywnia ale już wiem, ze było ono przechowywane w SREG. To jest wyjaśnione. W SREG przechowywana jest informacja o fladze I, czyli fakt włączenia lub wyłączenia przerwań globalnych. Nie ma to nic wspólnego z "przechowywaniem" informacji o przerwaniach INTx. Instrukcjami operującymi na fladze I w SREG są:...
Witam Mam problem z zaadresowaniem rejestrów TIMER3 w ATMega 162. Piszę obsługę przerwań w asemblerze i każda próba adresowania rejestrów o adresach powyżej 3F kończy się błędem zgłaszanym przez kompilator. jeśli użyję LDS kompilator wyrzuca komunikat "number must be less than 32" jeśli użyję IN kompilator z kolei "number must be less than 64" . Błędy...
Bardzo dziękuję wam za pomoc. Zaraz to wszystko przeanalizuje i napisze czy mi coś z tego wyszło. Wiem jeszcze że to wszystko będzie musiało być zawarte w przerwaniu ponieważ te dane z każdego kanału będą wyświetlane na HD44780, którego obsługę już udało mi się opanować.
Mi najbardziej by pasował programowy PWM. 12 kanałów to w sumie nie tak dużo. Musze się zastanowić jak w takim razie pogodzić 12 kanałów PWM, RC5 i RSa. O ile RS pracuje niezależnie, to o tyle RC5 to juz użycie timera0 co w czasie odbioru komendy rc5 będzie gasić diody na czas obsługi przerwania timera0. Zabieram się wiec do pracy :)
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.
Podstawowy błąd programistyczny, to podejście "z księżyca" do obsługi przerwań. Ten problem idzie rozwiązać na ATmega8, a może i nawet ATtiny26 i procesor będzie ziewać...
atmega obsługa przerwać przerwać atmega atmega przerwać
oscyloskopy naprawa rubens prosty regulator oświetlenia honda civic termostat
obrotomierz motocykl obrotomierz motocyklowy
TESLA MA7812, MAA7812 – pinout, obudowy TO-220 i TO-3, opis wyprowadzeń stabilizatora 12V Akumulatory do podkaszarki Titan TTI821GGT 41N/4 – kompatybilność, modele, pojemności