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...
jeśli pokazuje ci 2mA to jeszcze nie jest niestety w najpełniejszym trybie PowerDown. W tym najgłębszym trybie miernik powinien ci pkazywać 0,6uA a skoro są mili ampery to znaczy, że bardzo częto się wybudza ze snu Dodano po 3 w związku z tym, że wykonałeś kawał dobrej roboty to tutaj pokażę ci jak ja zrobiłem usypianie procka, jak widać jest to robione...
Efekt 888 pojawia się dlatego, że używasz operatora OR w funkcji setNum() oraz dlatego, że źle korzystasz z operatorów logicznych (AND i OR). Zamiast wpisać nową wartość do rejestru PORTD, sumujesz ją z poprzednią wartością. Sama funkcja jeszcze mogłaby wyglądać inaczej, ponieważ nadal niepotrzebnie w procedurze obsługi przerwania jest ona wywoływana...
http://obrazki.elektroda.pl/6223122300_1... Domyślną metodą kontroli napięcia 230 V AC jest kontrola poprzez triak. Tak zrealizowany jest każdy ściemniacz. Kontrola taka oparta jest o kontrolę fazy - triak jest otwierany jedynie na pewną część sinusa napięcia przemiennego. http://obrazki.elektroda.pl/2250705900_1...
http://obrazki.elektroda.pl/9589280700_1... HPS 2014 Hybrydowy laboratoryjny zasilacz sieciowy. Parametry użytkowe zasilacza w skrócie: 1. Wykorzystanie tanich i łatwo dostępnych elementów. 2. Wydajność prądowa min 3A (dla niskich napięć może dochodzić do 5A). 3. Rozdzielczość DAC 12bit. (filtrowany PWM 4.9kHz) 4. Rozdzielczość ADC...
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 ..............
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...
Funkcja checkPhysicalButton() jest wykonywana w przerwaniu timera co 0,5s więc zamiast używać millis() do mierzenia czasu wystarczy policzyć przerwania (2s=4x0,5s). Możesz również zwiększyć częstotliwość przerwania timera a komunikację z blynkiem realizować co ileś iteracji. Nie ma też żadnych przeciwwskazań aby umieszczać swój kod w pętli loop.
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.
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?
"Program i założenia są błędne". ;) 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 przerwaniach. Inaczej zawartość portu będzie modyfikowana błędnie. Dzięki piękne, faktycznie wyłączenie...
"...\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ł...
Witam Czy wie ktoś co znaczy przerwanie maskowane?? jaka jest roznica miedzy prerwaniem maskowanym a sytuacją wyjątkową??
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...
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 :?:
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...
Czy wiesz co to jest prolog i epilog w assemblerze? Czy wiesz co to jest stos? Z tego co wiem w obsłudze przerwania powinno stosować się krótki i prosty kod, natomiast w moim przypadku potrzebuję po wystąpieniu przerwania przejść do wykonywania programu w pętli. Od takich spraw są flagi (czyli np. zmienne globalne), którym w przerwaniu ustawiasz jakąś...
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...
Tak pływ ał cały okres. Pomogło wyłączenie przerwania od ADC! Nigdzie w tym przerwaniu nie zmieniam zawartości jakiegokolwiek z rejestrów od timera 1. Potrzebuję ADC, więc będę musiał dojść gdzie tkwi problem.
W końcu znalazłem przyczynę problemów - dzięki sugestii Andrzej__S zweryfikowałem jeszcze raz układ by się na 100% upewnić czy mam wszystko dobrze podłączone i wszystko było OK tylko ja zapomniałem o jednej oczywistej rzeczy - sterowanie oświetleniem odbywa się za pomocą TRIAKA :) Gdy załączałem triaka w obsłudze przerwania z timera to jego wyłączenie...
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...
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ę)...
W związku z wykryciem na eketrodzie zainteresowania powyższym tematem proponuję zawiazanie takiego nowego kierunku. Jako zachetę zmieszczam artykuł p Andrzeja Struniawskiego z dawnego BPS, firmy mającej olbrzymie doświadczenia w zakresie systemów zasilania awaryjnego. W razie potrzeby służę również swoją wiedzą w tym zakresie. PAmiętajcie !!!!! Podstawowa...
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
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<...
Cos takiego powinno działac , musisz pokombinować. SP to stack pointer czyli wskaźnik stosu,a stos to chyba wiesz co to jest :) SPL określa młodszy bajt SP. Instrukjca nosave powoduje że na stos nie beda wrzucane zadne rejestry robocze. SREG to głowny rejestr kontrolny . Proponuje zajrzeć do pdfa z opisem układu. SREG.7 wskazuje na 7 bit w tym rejestrze....
Witam wszystkich, to mój pierwszy post na forum :) Od niedawna bawię się w programowanie AVRów. Zaprogramawałam na Atmedze16 coś w rodzaju programowanego termometru, tzn. aktualna temperatura jest mierzona przez czujnik DS18B20, porównywana z zaprogramowaną wartością, i jeśli zajdzie odpowiednia zależność (większa/mniejsza z dokładnością co do szerokości...
Mam mały problem z DMA podczas pracy z DCMI. nowydamian-a . Zwiększa wskaźnik na bufor i ponownie włącza DMA. Różnica jest w tym że resetowanie wskaźnika mam w przerwaniu od DCMI. Dzięki temu każda kolejna ramka obrazu powinna zaczynać się od pozycji zerowej bufora (obraz zawsze powinien być w tym samym miejscu, nawet jak po drodze któraś rama straci...
Witam Wyłączenie przerwania nie wchodzi w grę mam tam reset watchdog-a Resetowanw watchdoga w przerwaniu , to ... oględnie mówiąc głupota. . Myślę że pozostaje mi rozwiązanie 2 ale czy Kolega zgada się z moja teorią o przerywaniu transmisji danych do LCD? Rozwiązanie nr. 2 jest dobre , ale pod warunkiem , że będziesz używał LCD WYŁĄCZNIE w przerwaniu....
Tak jak myślałem, że będzie trzeba jakiś wskaźnik zastosować, niestety jakoś tych wskaźników nie mogę zbytnio pojąć, chociaż mam nadzieje że z czasem... Dodano po 7 AtMegi podczas wejścia do przerwania automatycznie blokują inne... Co do strncmp() to nie bardzo wiem... ale bufor 100 znaków to chyba za dużo na te zastosowanie ;) Mi chodzi o wyłączenie...
Witam, piszę program na STM32 F100RB(Discovery), który ma za zadanie dane odebrane od GPS(USART2) wysłać przez moduł radiowy(USART1). Nie wiem dlaczego, ale po przyjściu przerwania od odbioru USART2 program ucieka do przerwania HardFault_Handler(void) . W debuggerze całość działa poprawnie, natomiast w trybie "run" problem ten sie pojawia. Dodatkowo...
Przeczytałem wątek i nie rozumiem jednego: 1. Timer 2 dyktuje tempo. 2. Timer 1 (obsługiwany całkowicie programowo) decyduje o długości trwania impulsu. Czemu nie zrobisz tak, że w przerwaniu Timera2 ustawiasz Timer 1 i KOŃCZYSZ JEGO OBSŁUGĘ, a resztę (tzn. wyłączenie nóżki) realizujesz przez przerwanie Timera 1? (BTW, moim zdaniem to wszystko da się...
ale coś zakombinowałeś za mocno z teorią, że: Wtedy przestawiając na odbiornik możesz uciąć jakieś bity (prawdopodobieństwo rośnie przy niskich prędkościach uarta i szybkim kwarcu Toż w przerwaniu UDRIE włączasz nadajnik tylko i wyłącznie wtedy gdy coś jeszcze jest do nadania a jeśli nie to po prostu wyłączasz przerwanie UDRIE i bez sensu jest w tym...
Witam. Na podstawie kilku postów z forum zbudowałem w oparciu o Arduino nano ściemniacz do żarówki 230V. Układ po tygodniu testowania nadal nie działa, bardzo proszę o sprawdzenie schematu i kodu. *symbol optotriaka na schemacie jest nieprawidłowy. [syntax=c] int AC_LOAD = 9; // Pin wyjściowy do kontroli triaka int dimming = 128; // Ilość kroków sterowania...
Witam wszystkich, rzadko pisze bo zwykle jakoś sobie radzę, ale po trzech dniach walki jestem zdesperowany i zaczynam szukać pomocy u Was. Zrobiłem emulację odbierania RS232 na nóżce INT0. Zbocze opadające oznacza że mamy bit startu. Tak startuje odbieranie: [syntax=c] ISR(INT0_vect){ // włączenie odbierania znaku na emulowanym UART 600bps GICR&=~(1<<INT0);...
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,...
witajcie, wiem że stare wątki nie są rekomendowane do wypowiedzi, ale robię to świadomie. Szukałem niemal identycznego problemu, tropiąc problem zarówno w analogowej części, jak i w algorytmie. Analogowo nawet znalazłem do testów akumulator, próba kilka metrów od wszelkiej elektronicznej cywilizacji, na płytce stabilizator 7805, nie pomagało. Dzięki...
[syntax=c]#include <avr/io.h> #include <avr/pgmspace.h> #include <avr/eeprom.h> #include <util/delay.h> #include <avr/interrupt.h> #include <string.h> #include <stdlib.h> #include "LCD/lcd.h" //dyrektywy dla preprocesora //dioda #define LED_PIN (1<<PC7) //do którego pinu podłączona dioda #define BUZZ_PIN...
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...
Witam dokonałem pewnych modyfikacji w programie. Zmieniłem odwołanie do odczytu temperatury. Proszę o informację jak najlepiej już uśrednionym odczycie przeprowadzić takie operacje: 1.177*t_usredniona Proszę umieszczać kod we właściwych(SYNTAX) znacznikach.
kuba989898 -> hmm widzisz ja stosuję AVR Studio jako kompilator i tam makefile , wraz z tymi parametrami o których piszesz, jest automatycznie generowny. Tak więc próba ich dodania w kodzie powoduje czkawkę i warningi o tym, że coś jest dwukrotnie zdefiniowane itp. doszedłem już zgodnie z tym co mówiłem poprzednio, że jednak źle dobrałem czasy przez...
W normalnym świecie SPI działa w ten sposób, że wysyłając jeden bajt, odbiera się jeden. Pisząc pewien ogromny program, używałem powyższego założenia implementując obsługę SPI1 z pomocą kanałów DMA (DMA1_Ch2 i DMA1_Ch3). Jeden kanał używany do transferu bloku z pamięci RAM do SPI1->DR, drugi kanał do transferu w drugą stronę. Wszystko działało bez najmniejszego...
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...
Wszystko zamieściłem w 1 pliku żeby było pod ręką. Nie wiem dlaczego przy wyświetlaniu cyfr 0 i 7 nie zaświeca mi się SEG_A, przy pozostałych cyfrach nie ma z tym problemu. Co do wyświetlania temperatury to powinno być już chyba dobrze, tylko jutro muszę to sprawdzić na LM35 bo na potencjometrze to co chwila skacze mi napięcie. [syntax=c]/* * main2.c...
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...
wyłączenie przerwania wyłączenie przerwań przerwaniu atmega wyłączenie przerwania
zamiennik makita kuchenka mikrofalowa drzwiczki roleta kabel kontaktron
zablokowana stacyjka mercedes polon zasilacz
Schemat generatora akustycznego GA-1 FPN Poznań, UNITRA-ZOPAN – mostek Wiena, żarówka, NTC Ustawienie gaźnika w pilarce Faworyt RG 5300 18