Czy RTC (zegar czasu rzeczywistego) używający Timera 2 w trybie asunchronicznym , działa nawet wtedy gdy wyłączone sa przerwania globalne ? ... kwarc, preskaler oraz Timer2 nie potrzebuje przerwań ale to nie wystarcza do zrobienia całego RTC to wystarcza do zrobienia przerwania co 1 sekundę a reszta zegara musisz zrobić programowo i to właśnie na przerwaniu...
No dobrze - o matko (sorki) moja kurza ślepota ale zwrócę uwagę na coś innego mocno niepokojącego w twoim kodzie. On się cały czas resetuje po przerwaniu. Po pierwsz po co ci cli() i sei() w przerwaniu (przecież wyłączenie innych przerwań po wejściu w każde przerwanie dzieje się z automatu) ale już wplecenie rozkazu: reti(); to wyciągnięcie dywanika...
https://obrazki.elektroda.pl/2553827400_... Cześć, pod tą niecodzienną nazwą tematu prezentuję projekt małego, automatycznego odtwarzacza muzyki do umilania posiedzeń na toalecie. Oczywiście to jedno zastosowanie, w innych sytuacjach pewnie też może się przydać ;) Głównym założeniem była niewielka złożoność, banalny interfejs, bezobsługowość...
Po kilku godzinach program odpaliłem ..... podświetlanie się załącza dopiero po naciśnięciu kilka razy klawisza, monitor pokazuje start i numery naciśnietych klawiszy i to nie za każdym naciśnięciem. nie wiem jak "zatrzymać" dany ekran menu żeby zrealizować inna funkcje np; zmiana stanu wyjścia /* * sterownik który wykończy mnie i innych ..............
Po przerwaniu na czas jego wykonania wyłącz przerwania przez CLI a potem włęcz ponownie przez SEI. Wejście w przerwanie przy takim kodzie jak powyżej, automatycznie powoduje wyłączenie przerwania na czas jego realizacji, więc nie trzeba tego robić dodatkowo.
Dzień dobry, Jak w temacie. Czy da się w systemie DOS wyłączyć niepotrzebne procesy działające w przerywaniach DOSa? InterruptValue Function 0CPU - Divide by zero (exception interrupt) 1CPU - Single step 2CPU - Non-maskable interrupt (NMI) 3CPU - Break point instruction 4CPU - Overflow Trap 5BIOS - Print screen 6CPU - Invalid op-code 7CPU - Math coprocessor...
Witam, mam problem ponieważ opracowuję pytania na egzamin z systemów wbudowanych i na jedno z nich nigdzie nie potrafię znaleźć informacji. Pytanie brzmi: W jakiej sytuacji należy utworzyć procedurę obsługi przerwania, mimo, że wiadomo, że do danej linii niczego nie przypięto?
Witam Czy wie ktoś co znaczy przerwanie maskowane?? jaka jest roznica miedzy prerwaniem maskowanym a sytuacją wyjątkową??
Wiem że to pewnie głupie pytanie, ale czytam i czytam o tych przerwaniach i dalej nie rozumiem o co w nich chodzi... Pomożecie :?:
"...\avr-objcopy.exe" -O ihex -R .eeprom... Zrobiłem to w automacie, ale spotkało mnie coś o czym wspomniał bart-projects tzn: Hex na PC`cie zajmuje mniej miejsca niż Bin bo w Bin albo cały obraz pamięci no i gdy nie miałem parametrów z "-R" to mój wsad dla małego procesora miał...
Włączenie przerwania polega na ustawieniu bitu w rejestrze maskującym czy flagowym ?
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...
Jaka jest wielkość tego większego kołowego bufora i czy jest podzielna przez 3? Co ile sekund bufor się zawija? Gdyby nie był, przyczyna "przeskakiwania" byłaby raczej bardzo prozaiczna ;) Bufor jest malutki, 64x3 bajty. Jest takim pośrednim stopniem przed finalną obróbką danych. Do tego bufora trafiają paczki po 3 bajty, następnie w przerwaniu DMA...
Witam, mam pytanie odnośnie wywoływania i odwoływania przerwań w przerwaniu. Czy dobrze myślę, że aby wywołać przerwanie w przerwaniu należy poprzedzić procedurę komendą sli()? Ale mam jeszcze inne pytanie - czy odwołując przerwanie w procedurze jego obsługi można go wyłączyć? Czy w tej samej procedurze można odwołać inne przerwanie. Np. w kodzie programu...
Ok udało się rozwiązać. Problemem było NIE podnoszenie pinu CS po konwersji. Drugim problem było zerowanie flagi I. Nie doszedłem, dlaczego tak się działo. Wyłączenie przerwań na czas odczytu pozycji i ponownie ich uruchomienie, pozwoliło mi zamaskować problem z flagą I. Działająca procedura odczytu. Wywoływana w przerwaniu od zbocza opadającego pinu...
Witam, Mam taki oto problem. Mianowicie: W przerwaniu INT0 (wywoływanym z PCFa) wysyłam co sekundę ramkę danych (konkretnie 13 bajtów) na USART0 na którym to działa pewien czujnik. Następnie oczekuję od niego odpowiedzi (47 bajtów) w przerwaniu od USART0. Odpowiedź dopisuję do pliku na karcie SD. I wszystko jest OK. Co pewien czas (np. raz na dobę)...
Witam , Zaczynam z AS6, dotąd używałem 4.18 głownie z asemblerem Pytanie dotyczy możliwego błędu symulacji prostego kodu w AS6, do potrzeb zapytania sprowadzonego do wersji jak niżej : http://obrazki.elektroda.pl/4044092400_1... również wygenerowany kod obsługi jest poprawny http://obrazki.elektroda.pl/7240738500_1...
zmieniłem kod programu: [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include "hd44780.h" #include "stdlib.h" char Buffer[20]; int TCNT0_WART=0; volatile unsigned long imp_curr=0; volatile unsigned long imp_prev=0; uint32_t displ=0; int main(void) { //TCCR0 |=(1<<CS00)|(1<<CS01)|(1<...
Jest wyłączana automatycznie i nic nie trzeba robić. Po skończeniu obsługi przerwania, przerwania są na nowo włączane dlatego cli nic nie robi
W jednym swoim projekcie mam taką obsługę przerwań : [syntax=Basic4GL] Config Timer0 = Timer , Prescale = 256 On Timer0 Przerwanie Enable Interrupts Enable Timer0 Load Timer0 , 250 Do 'petla glowna Loop End Przerwanie: Load Timer0 , 250 Incr Czas8ms If Czas8ms = 125 Then Czas8ms = 0 Incr Sekunda End If If Przycisk = 0 Then Flaga = 1 End If Return [/syntax]...
Witam Procesor ATmega328P, kondesnatory 2 x 680 uF (równolegle), dioda schottkiego BAT15-03W Borykam się z następującym problemem. W czasie zaniku zasilania pragnę na moment podtrzymać działanie mikrokontrolera tak aby mógł zapisać pewne informacje do EEPROM. Do detekcji zaniku zasilania wykorzystuje przerwanie INT0 (wyzwalane poziomem niskim ponieważ...
Pierwsza propozycja, w czwartym wywołaniu zamiast oczekiwać 10000 itemów przestaw się na oczekiwanie 8400 itemów, wtedy nie będziesz musiał przerywać pracy DMA w innym przerwaniu (takie przerwanie pracy może powodować błędy). A miałem napisać w pierwszym poście że nie ma to sensu :D Taki sam efekt uzyskam ustawiając transfer na 9600 itemów. A nawet...
Napisałem program i mam pewne problemy z jego działaniem, w skrócie napiszę jak działa program: Mikroprocesor oczekuje na zbocze opadające po czym wywołuje przerwanie, w przerwaniu tym za pierwszym razem zerowany jest timer 1, po czym wychodzi z przerwania po kolejnym zboczu opadającym odczytywana jest wartość timera1 i zapisywana jako ref_time czyli...
Witam ponownie. Poniżej obiecany kod funkcji main (dla przypomnienia: odtwarzanie krótkich mptrójek z pamięci Flash mikrokontrolera, zegar 33,8688MHz). Może się komuś przyda :) int main(void) { int bytesLeft, nRead, err, offset, outOfData, eofReached; unsigned char *readPtr; MP3FrameInfo mp3FrameInfo; MP3Decoder hMP3Decoder; int nFrames,...
Używasz INT0 i INT1 do zliczania impulsów na linii A impulsatorów, ustawiasz generację przerwań na opadające zbocze. W przerwaniu sprawdzasz linię B danego impulsatora, jeśli B jest w stanie wysokim, to masz impuls "w lewo", jeśli B jest w stanie niskim, to masz impuls "w prawo". Pozostaje jeszcze eliminacja drgań styków... ;) Nadal nie bardzo to rozumiem....
Czyli kompilator sam w sobie jest bezbłędny z samej definicji. Już rozumiem i dziekuję za uświadomienie. Jak każdy program może zawierać jakieś błędy, ale raczej to dotyczy nowych funkcji. Cieszę się iż jednak zmieniłeś zdane z "takich bredni to tu nie powinno być", oraz "To czy program się rozjeżdża, czy nie, to wyłącznie wina programującego, a nie...
delayX to procedury opóźniające w przerwaniu akurat ma służyć odczekaniu do wygaśnięcia drgań styków przycisku. Według sugestii zamieszczam program bez definicji rejestrów i trybu SPECIAL, żeby nie zaciemniać, a to akurat nie ma wpływu na działanie. .CSEG ; początek segmentu programu .ORG 0x00 ; wektor przerwania od resetu rjmp Reset .ORG 0x04 ; wektor...
Nie wiem po co Ci ten zmienny przecinek - chyba nie ma problemu z policzeniem wszystkiego na liczbach całkowitych. Nie wiem też, na co miałbyś czekać w przerwaniu. Możesz do wszystkiego używać jednego timera, np. tego od PWM - to zwykle lepsze rozwiązanie niż zgłaszanie przerwań z kilku timerów. Sam zadecyduj, jak często chcesz wykonywać pomiary -...
Witam, Pojawił się ostatnio u mnie taki problem. Otóż odczytuję z przetwornika ADC ATmegi16, z kanału ADC0 wartość napięcia (od 0 do 5VDC). Wyświetlam sobie wynik konwersji na LCD i wszystko ładnie działa (liczba na LCD zmienia się w zakresie od 0 do 1023, jak kręcę potencjometrem). Chciałem sterować tym napięciem podłączonym do ADC0 obrotami silnika...
Poprawiłem kod, był błąd przy zamianie adc na Uwe. http://obrazki.elektroda.pl/9994453300_1...
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...
W przerwniu i programie głównym używasz zmiennych zadeklarowanych jako word. Myślę, ze tu leży pies pogrzebany. W C wystarczy użyc volatile i atomic_block. W Bascim? Był taki na Elektrodzie (niveasoft) co wiedział w jaki tajemniczy sposób Bascom zarządza takimi zmiennymi. Myślę, że nie masz wyjścia, tylko przed odczytej w programie głównym zmiennej...
Nie ma jednej, jedynie słusznej drogi. Każdą funkcjonalność można opracować na wiele sposobów. Jeśli potrzebujesz podłączyć przycisk do przerwań zewnętrznych, możesz to oczywiście zrobić. Po to one są, by z nich korzystać, byle świadomie :) Istotne jest tylko jedno - program ma działać tak jak tego sobie życzysz i spełniać założenia projektowe. Edit:...
Jeśli przerwania są wyłączone to jasne, że nie zostaną obsłużone. Niemniej sama konwersja ADC nie wymaga wyłączenia przerwań, ani ich nie wyłącza.
Tu też nie trzeba nic robić w przerwaniach - wystarczy zaprogramować timer. Jeśli trzeby wygenerować określoną liczbę impulsów - trzeba odliczyć je w przerwaniu timera i po kolejnym przerwaniu wyłączyć timer albo ustawić wypełnienie na 0.
Do kolegów co podpowiadają mi użycie makr, tak jak pisałem wczesniej, uzywam Codevision a w nim nie ma czegoś takiego - chyba. Jak już wcześniej napisałem, moim zdaniem przy takich procedurach obsługi przerwań program powinien się wyrobić bez konieczności zagnieżdżania przerwań, a przyczyna złego zliczania może leżeć gdzie indziej. Możesz oczywiście...
Prawdopodobnie procesor wisi w funkcji obsługi przerwania. We wnętrzu przerwania wyłącz je. Włącz je dopiero gdy będzie potrzebne (na przykład przed uśpieniem). Przerwanie na stan niski jest wywoływane cały czas tak długo jak stan niski trwa na wejściu.
Oj pomieszałeś :) Dwie możliwości: Pierwsza wersja (opisałem wyżej): 1. wyłącz Free Running 2. zostaw przerwanie ADC, 3. przed pętlą główną w main() wywołaj pierwszą konwersję, 4. w przerwaniu ADC wykonuj to, co aktualnie wykonujesz w przerwaniu + wystartuj kolejną konwersję. Druga wersja zaproponowana przez BlueDraco: 1. wyłącz Free Running 2. zostaw...
Przerwania nadawcze są dwa - TX Complete oraz UDRE empty. Przerwanie "USART_TX_vect" to przerwanie Complete generowane flagą TXCIE lub (w wypadku wyłączonego przerwania) testowane flagą TXC. Natomiast flaga UDRE w powiązaniu z flaga UDRIE generuje przerwanie Empty.
"Program i założenia są błędne". ;) Przycisku nie obsługuje się przy użyciu przerwania portu - należy to robić przy użyciu przerwania timera. Ponadto w programie jest jeszcze jeden paskudny błąd: z powodu operacji logicznych na portach w obsłudze przerwania, opercje na portach w pętli głównej muszą być wykonywane w sekcji krytycznej - przy zablokowanych...
Co się stanie jeśli TACCR0 +=x umieścimy na początku ISR zaś w trakcie obsługi ISR TACCR0 zrówna się wartością z TAR? Zostanie ustawiona flaga od przerwania, ale z powodu że przerwania są wyłączone (bo są wyłączane automatycznie przy wejściu w przerwanie) program normalnie zakończy obsługę bierzącego przerwania, wróci do pętli głównej, wykona jedną...
Po wykryciu stanu niskiego na INT1 zaraz po wejściu w obsługę przerwania wyłącz przerwanie od INT1 czyli: EIMSK &=~_BV(INT1); //wyłącz obsługę przerwań Int1 a dokładniej tak po nowemu: EIMSK &=~(1<<INT1); następnie w zależności od potrzeb możesz wyłączyć pozostałe przerwania. Jeżeli używasz wyjścia nIRQ układu RFM12B zwróć uwagę na to...
Napisz tak: Dim Zmienna As Byte Zmienna = 0 Config Intx = Low Level | Rising | Falling [ | Change ] 'Konfiguracja reakcji na sygnał przerwania 'za x podstaw nr przerwania wybierz jeden ze sposobów pobudzenia kocówki uC Enable Interrupts 'Uruchomienie przerwań globalnych Enable Intx 'Uruchomienie przerwania INTx On Intx Obsluga_przerwania 'wskazanie...
1. Fcclk to częstotliwość taktowania procesora w Hz. 2. Spróbuj z pojedynczym sektorem 3. Wyłącz przerwania ustawiając CPSR, a nie VIC 4. Mam nadzieję, że przerwań nie deklarujesz w kodzie z atrybutem interrupt? Albert
Jak nie zostaje wyłączone... Przecież podczas wykonywania przerwania inne są automatycznie blokowane, właśnie poprzez wyzerowanie globalnej obsługi przerwań - tak więc nie ma nawet potrzeby stosowania specjalnych zabiegów (cli) w tym celu, to właśnie żeby włączyć stosuje się sei w przypadku, gdy trzeba odblokować przerwanie tak, aby możliwe było jego...
Witam, 1. wg. mojej wiedzy w tym konkretnym przypadku jest to operacja atomiczna (przypisanie do zmiennej 'Pomiar', domyślam się że to jakiś uint) i wyłączenie przerwań/przerwania nie jest konieczne. Gdybyś jednak miał np. strukturę Pomiar {int srednia_z_10, srednia_z_5; } to wtedy należałoby to zabezpieczyć. 2. Możesz wyłączać tylko jedno przerwanie(UART)...
Brutus_gsm : Radził bym Ci przeprojektować trochę ten kod: ustawianie flagi I (sei()) w przerwaniu jest największym błędem (chyba, że wiesz co robisz oraz to kontrolujesz). Przed wyjściem z funkcji przerwania ustawiasz flagę I (jeśli przyjdą kolejne przerwania, pojawią się kolejne wywołania i przepełni się stos - błąd), po czym usypiasz procesor (zakładając...
Jak ma włączone przerwania przepelnienia to jak się flaga ustawi, przerwanie nastąpi, flaga się skasuje i w pętli zawsze będzie nieustawiona. Dlatego pytałem: Przerwania od timera wyłączone? Odpowiedział: Przerwania włączone. Wnioskuję więc, że timer stoi - źle ustawione bity CS ale ciężko coś powiedzieć, bo kod programu jest ściśle tajny. Usunąłem...
Bo nie masz WYŁĄCZAĆ przerwań tylko je WŁĄCZYĆ. Zaraz po wejściu do przerwania INTx ustaw globalne zezwolenie na obsługę przerwań. asm("sei"); Dobrze by też było tuż przed tym wyłączyć zezwolenie na obsługę przerwania INTx żeby samo siebie nie zagnieżdżało. I tutaj rejestr GICR faktycznie będzie potrzebny. Coś takiego: ISR INTx()...
Zawsze obsługa przerwania powoduje skasowanie flagi I, aby pod koniec obsługi flaga została ponownie ustawiona przez instrukcję reti. Jeśli program się przerywa po kilku linijkach, to znaczy posiadasz nie obsłużone wektory przerwań, a to jest błąd w kodzie. Albo wyłącz przerwanie od danego źródła, albo wyłącz przerwania, jeśli z nich nie korzystasz.
Najprostsze rozwiązanie - w przerwaniu od czujki uruchom sprzętowy timer. Przerwanie od timera powoduje włączenie alarmu. Jeśli użytkownik wyłączy system przyciskiem, to w procedurze przerwania przycisku wyłączasz timer. Żeby wszystko działało jak trzeba, musisz zezwolić na zagnieżdżone przerwania (czyli żeby ISR od timera mógł się wykonać w momencie,...
Zakłócenia nie trwają długo - kilkanaście us, zero jest co 10ms, można odróżnić i zrobić tak aby program reagował tylko na pierwsze zbocze, a w czasie kiedy trwają zakłócenia miał wyłączone przerwania (jeśli użyjesz do tego celu przerwań). Winę tych przebiegów chciałem zwalić na śmieci jakie są w sieci Smile Zakłócenia mogą wchodzić różnymi drogami,...
Gdy procesor jest w trakcie wykonywania procedury przerwania, następne przerwanie nie będzie przyjęte , gdyż procesor (nie kompilator!) zeruję flagę globalnego zezwolenia na przerwania. Tak samo flaga bieżącego przerwania (tego, którego procedura obsługi jest wykonywana) zostaje automatycznie wyzerowana. Po zakończeniu przerwania flaga globalnego zezwolenia...
(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...
Mój kod również działa. Na wyjściu jest dokładnie 4MHz dla rezonatora 16MHz. Przerwania nie są potrzebne ponieważ wszystko robi sam Timer i nie musi zgłaszać przerwań. Polecenie End jest w programach po to by wyłączyć przerwania i uruchomić nieskończoną pętlę gdyby program się wysypał. Myślę więc że w programie kolegi polecenie End również wyłączyło...
globalne wyłączenie przerwań stm32 wyłączenie przerwań wyłączenie przerwania przerwaniu
programy lokalizacji układy scalone audio renault laguna pasek rozrządu
rfm12 rfm22 ciągłe napełnianie krups
Audi A4 B5 1.8T – gdzie podłączyć plus po zapłonie pod maską, punkty Kl. 15 Komunikat "BUS" w Fendt 818 z 2009 roku - przyczyny i rozwiązania