To co piszą Koledzy Twoim kodzie to sensowne konkrety. Podzielam ich zdanie na temat potrzeby zmiany koncepcji obsługi przerwania. Do Twojego przykładu idealnie pasują główne założenia "programowania przerwań" a szczególnie ta, że powinno być możliwie krótkie czasowo. Wg mnie, po obejrzeniu kodu, tkwisz mocno głęboko w programowaniu całkowicie liniowym...
Witam. Natrafiłem dziś na problem z przerwaniem. Mianowicie mam DS18B20, LCD, UART i timery. Program wygląda tak, że temperatura z DSa jest wyświetlana na LCD, wszystko gra. Mam też przerwanie, w którym co sekundę wysyłane jest 6 bajtów do kompa (przez UART). Przerwanie jest od Timera co 1 sekundę. Wszystko gra do czasu. W pewnym momencie program sie...
Skonfiguruj przerwanie zewnętrzne INT0 pod przycisk. Gdy przycisk zostanie wciśnięty, w przerwaniu ustawiasz odpowiednia flagę zaczynająca odliczanie czasu, oraz załączasz przekaźnik. Ustaw sobie jakiś timer np. timer0, preskaler 1024, w trybie overflow. Przy taktowaniu 1[MHz], częstotliwość przerwań wynosi ok. 4[Hz]. Co czwarte przerwanie timera, inkrementuj...
Do tej pory omówiliśmy znaczenie ostrożnej obsługi przerwań, metody solidnej strukturyzacji ISR oraz uwagi wymagane do zmiennych globalnych i lokalnych ( Uważaj na przepełnienia bufora danych Generalnie używamy programowych buforów do interfejsów komunikacyjnych. Na przykład, mikrokontroler może zapewnić podrzędny interfejs komunikacji szeregowej I²C...
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...
Każda aplikacja osadzona na ogół zawiera w sobie zestaw funkcji. I nawet najprostsza, na przykład do regulowania temperatury, obejmuje szereg zadań, takich jak odczytywanie danych wejściowych od użytkownika lub z czujnika temperatury/wejścia ADC, wyświetlanie zasobów na wyświetlaczu LCD i sterowanie wyjściem zarządzającym pracą wentylatora/grzałki itp....
Czysto teoretycznie przy układzie XOR może wystąpić sytuacja w której jednoczesna zmiana dwóch wejść nie zostanie wykryta. Kiedyś w silnie uwarunkowanym czasowo układzie zastosowałem dodatkowy rejestr zatrzaskowy, sterowany z procesora, co pozwoliło mi odroczyć obsługę zbyt szybko następujących po sobie zmian na wejściach.
Witam wszystkich Elektrodowiczów! Potrzebuję zrobić ciągłą konwersję w przetworniku ADC (żeby nie tracić przebiegu sygnału analogowego, w czasie przesyłania już skonwertowanej wartości) i wysyłać dane po UARTcie. Do tego chcę wykorzystać przerwanie w ADC. Na 578 str. dokumentacji jest rozdział 29.5.3 o rejestrze AD0INTEN (Interrupt Enable), który mówi...
Cześć. To mój pierwszy post na forum dlatego witam wszystkich. Post można podzielić na dwie części: to działa i to co nie działa. Zacznę od tego co działa. Do pinu PD0 przypisałem przerwanie. W procedurze obsługi tego przerwania zwiększam zmienną o 1 i wyświetlam na LCD. Kabelkiem połączeniowym połączyłem pin od przycisku tj. PB7 do PD0. Przerwanie...
Witam. Tak zgadza się można to zrobić też sprzętowo nawet mam aplikację na przerzutniku 74HT123 gdzie mogę dodatkowo uzyskać pewną stałą czasową np 10ms. Ale właśnie staram się to zrobić programowo bo szczerze mówiąc nieche mi sę znów wytrawiać przerabiać urządzenia :) Pozdrawiam Warhard Dodano po 3 W odpowiedzi Do Pana Dextera sam już niewiem co myśleć...
Set Eifr.intf0 Co ta funkcja robi ? Ciekawi mnie czy wlozenie if'ow w przerwanie nie spowoduje duzych opozniena czasowe. Bo juz o tych waitms 50 wogole nie ma mowy.
Potrzebuje pomocy przy przerwaniach czasowych/zegarowych, nie wiem jak to się dokładnie nazywa. Chodzi o to, że co np.20ms wykonywało się dane przerwanie. Proszę o kod i wytłumaczenie jak to działa.
Szukam jakis przykladow assm, dla przerwan . Chodzi mi oto aby jeden timer byl wolny dla komunikacji szeregowej a drugi timer do przerwania tak aby mozna bylo kozystac z klawiatury lub innych procedur ktore wymagaja stalej czasowej.... dajcie jakies przyklady....
Mało danych. Chcesz, żeby dioda migała na przerwaniach? Czyli przerwanie włącza, następne wyłącza - tak to zrozumiałem. Co do obsługi T0 musisz zrobić obsługę przerwania od adresu 0x0BH (czyli wyzwalanie przez flagę TF0). Wstaw coś takiego po LJMP start na początku: [syntax=text]ORG 0Bh ; start przerwania CLR TF0 CPL P1.4 ; zmiana stanu wyjścia sterującego...
Udało mi się uruchomić ten przetwornik. Jak zauważył janbernat niesłusznie uznałem, że nie ma sensu podpinać wyjścia oznajmującego zakończenie konwersji przez przetwornik (SSTRB) do INT2. Pracuje on ładnie zarówno gdy między ADC, a uC pośredniczy BC547C lub BD237(tranzystor NPN firmy SGS-THOMSON, akurat takie coś miałem pod ręką). Nie sprawdzałem natomiast...
Potrzebny mi wylacznik czasowy, takie cos jak do swiatla na klatce schodowej. Czy ktos moze wie jak napisac taki program?? Mialby on byc na procesor atmel at90s8515, juz mam jeden program, ale napisany 'przestarzala' metoda. Zamieszczam go ponizej, moze wiecej wam to wyjasni. Potrzebuje miec to napisane w formie funkcji...hmmm...chyba nie jestem dobra...
Wykombinowałem sobie taki oto prościutki alarm samochodowy: Rl to przekaźnik od klaksonu, ew jakiś inny sygnalizator. Założenie jest takie, że po przerwaniu któregokolwiek z 3 kontaktów tranzystor zostaje wysterowany i puszcza prąd na obciążenie. Układy RC przy kontaktach mają na celu opóźnienie reakcji układu. Problem jest następujący: symulowałem...
vp32: Do czego jest Ci to potrzebne? Rozumiem pęd do wiedzy, ale mam wrażenie, że gonisz własny ogon. SetPriority robi dokładnie tę samą głupotę, niezależnie od typu rdzenia, tylko zapis tego dla M3 niekiedy jest jeszcze bardziej pokręcony niż dla M0. Ja na ogł ustawiem priorytety przez bezpośredni zapis do rejestrów. Dzięki temu mogę używać tego samego...
Szukam schematu włącznika czasowego o takiej charakterystyce: - po włączeniu zasilania włącza on od razu przekażnik na określony czas - po upłynięciu tego czasu wyłączany jest przekaźnik o ile w tym czasie nie zostanie przerwane "odliczanie" czasu zewnetrznym impulsem - upływ np. połowy czasu od włączenia układu do wyłączenia przekaźnika jest sygnalizowany...
Napisanie programu to juz szczegol. Zaczalem czytac o prockach '51 i nie sadzilem, ze to takie dziecinnie latwe wszystko :). Na początku jest łatwe. no tak... korzystając z zegara i2c to zostają trzy pszyciski i nie można sobie sterować podświetlaniem LCD. ale czy nie można w celu zegara ywkorzystać sprzętowy timer, który znajduje się we wnętrzu 2051?...
Jeśli piszesz w ASM to wszystkie zależności czasowe sa przejrzyste. Kod o długości 2tys linii nie jest mocno uwikłany w zależności czasowe i ta metoda się sprawdza dobrze, ale chyle czoła przed Twoją, postaram sie następnym razem ją zaimplementować, mimo, że staram się unikać przerwań. Może to się zmieni... ;) Pozdrawiam
Z swojego doświadczenia wiem, że programowo na komputerze ( z Windowsem ) ciężko jest uzyskać częstotliwość większą niż 1Khz. Na to składa się kilka czynników, raz że w tle jest obsługiwanych więcej programów, więc procesor swój czas poświęca każdemu procesowi. Dwa funkcja może się nie wykonać do czasu następnego "przerwania". W Windowsie można pierwszy...
Witam. Tworzę mały projekcik i natrafiłem na pewną zagwózdkę. Na początku wprowadzenie co układ ma robić i jak działać. Układ składa się z części analogowej, tzn. dwóch detektorów tonu (LM567) odpowiedzialnych za detekcję "bitów" łącza fizycznego. Chodzi o to, że rozpoznają "swoją" częstotliwość i gdy stwierdzą zgodność z obwodem czasowym, na swoim...
Obsługa LCD trwa długo , w tym czasie prawdopodobnie często Bascom blokuje przerwania . i dlatego są błedy. I jeszcze jedno - liczysz przerwania co 2ms a ile trwa proces wyświetlania na LCD? Możliwe że czasem nie zliczysz wszystkiego w ten sposób co piszesz. Spróbuj albo wywalić obsługę LCD i zrób wyświetlanie np na diodzie (jak jest równa iluś tam...
Witam wszystkich zainteresowanych. Może zacznę od opisu kontekstu: W swoim projekcie wykorzystuje czytniki kart. Zasada ich działania jest taka, że gdy na jednej lini pojawia się zbocze opdajace, z drugiej odczytujemy logiczny stan. Wysłanie jednego numeru to wysłanie 40 bitów. W moim urzadzeniu wykorzystuję dwa takie czytniki. W załaczonym obrazku...
Witam! Na wstępie chciałem zaznaczyć, że od niedawna dopiero poznaję procesory z serii ARM. Bardzo dawno temu miałem styczność z 51- jedynką i keilem. Moje doświadczenie w programowaniu C też nie jest oszałamiające, natomiast asembler na ARM jak na razie jest przeze mnie mało zrozumiany. Proszę o wyrozumiałość przy pisaniu ewentualnych odpowiedzi, za...
... sprawdzenie czy przycisk został puszczony po określonym czasie ale to zajmuje czas i nie może być zrealizowane w przerwaniu int0 ... Ależ oczywiście, że można. To kwestia podejścia do problemu i odpowiedniego napisania programu w zależności od konkretnego projektu. Gdybyś chciał to zrobić w taki sposób trzeba to zrealizować inaczej i w przerwaniu...
Mam dziwny problem ze znikającym jednym tickiem w liczniku gdy są włączone przerwania przy przepełnieniu. Licznik pracuje w trybie normalnym, taki sam efekt przy 8 i 16 bitowym, zaobserwowałem na atmedze 16 i 644P (bo takie miałem akurat pod ręka). Normalnie bez przerwań, licznik przy przepełnieniu zeruje się i zaczyna liczyć od 0, wszystko tak jak...
Dzień dobry, Mam problem, z którym nie mogę sobie poradzić. Jest to właściwie zadanie od prowadzącego które męczy mnie już od kilku dni. Korzystając z licznika T/C1 (ARDUINO UNO) i trybu przechwytywania mam określić moment wciśnięcia przycisku (znacznik czasowy) podłączonego do złącza B0 (wejście ICP1 licznika) i przesłać go przez interfejs szeregowy....
ogolnie jest zasada tak ze w przerwaniach nie powinno byc jakis procedur opozniajacych, przerwanie powinno sie wykonac , obliczyc i wylaczyc jak najszybciej,glowny program jest od czasowek , komunikacji i2c itp. przynajmniej ja sie staram trzymac tych zasad.czasami mozna je nagiac oczywiscie.to zalezy od zlozonosci projektu. ja PCF8583 obsluguje zawsze...
Jeśli będziesz miał przerwanie o czestotliwości 10 kH to nigdy nie uda Ci się porozmawiac z DS-em. Czasu nie rozciągniesz (he he ). Natomiast przy przerwanich z częstotliwością nie większą niż czas potrzebny na obsługę DS-a zmieścisz się ze wszystkim, tak jak piszą wyżej. Nie mów nigdy... Kwestia spojrzenia na problem z innej perspektywy. Jeżeli zależności...
na samym koncu listingu masz procedure przerwania, tam jest dosc dokladnie widac jak realizowane jest to 5s jesli to twoj poczatek zabawy w programowanie proponowalbym jednak basic + assemblerowe wstawki - efekt przyjdzie szybciej i mniej trzeba sie naklepac Dodano po 3 na samym koncu listingu masz procedure przerwania, tam jest dosc dokladnie widac...
A więc tak - na 10 minut ma załączyć i po tym czasie przerwać na 5 sekund. Cyklicznie. Przerwanie może być mniejsze niż 5 sec. Ewentualne opuźninie coś około parunastu sekund. Jeżeli jest większe to można by ustawić na 9-8 minut zamiast na 10 i było by po problemie. Prosił bym o jakiś schemacik z miare czytelnym oznakowaniem bo co tu ukrywać - moja...
Witam. Pewnie to już gdzieś było ale nie mogę nic znaleźć , więc w razie czego przepraszam za powtarzanie tematu. Chcę wykożystać przerwanie Timer1 do robienia odstępów czasowych , więc dzielę częstotliwość na 256 ale teraz pojawia się pytanie : - jak zrobić żeby po pojawieniu się przerwania mikrokontroler wykonał podprogram znajdujący się w etykiecie...
Nie, po wystąpieniu przerwania jest ustawiana flaga w specjanym rejestrze i jest ona kasowana dopiero w momencie wywołania obsługi danego przerwania. To daje nam pewność, że jeżeli 2 zdarzenia wystąpią prawie równocześnie, to nie zostanie pominięte to, które było później. Spróbuj zasymulkować swój program w AVRStudio i będziesz widział,jak to się dzieje...
Nie do końca wiem dlaczego tak się dzieje ale jeśli bardzo zależy Ci na równych odstępach czasowych między krokami silnika to na czas wykonywania przerwania Timer0 powinieneś wyłączać system przerwań: na początku Disable, zaś na końcu przerwania od Timer'a0: Enable Timer1. Rano posiedzę nad Tym... pozdrawiam
Jeżeli znane są z grubsza zależnosci czasowe obu przerwań a tak tutaj jest to można w pierwszym przerwaniu sprawdzać flagę drugiego przerwania (w krótkiej pętli żeby zdażyć) i wykonać wtedy drugie przerwanie, skasować ręcznie flagę drugiego przerwania, podjąć obsługę pierwszego itd. do czasu zakonczenia pierwszego przerwania. Jest to bezpieczniejsze...
Witam, Napisałem program do odpytywania stanu klawiszy na Atmega16, kwarc-16MHz. Według wyliczeń przerwanie powinno sie pojawiać co 2,5ms, jednak tak nie jest, jest o wiele wolniej (ponad 1s). Analizowałem program i sam juz nie wiem co może być źle. Pomóżcie Preskaler clk/1024=16000000/1024=15625 1/15624=0,064ms 40*0,064ms=2,5ms #include <avr/io.h>...
Witam ponownie. Wracając do tematu opóźnienia w uC 51, można też wykorzystać działający timer który generuje cyklicznie przerwanie. Zliczając przerwania i znając częstotliwość ich powstawania można precyzyjnie odmierzać czas i mieć odpowiednio długie opóźnienia. Pozdrawiam Krzych
całość jest bardzo rozbudowana bo sterownik ma robić i inne rzeczy (prawie 8kb) podam te fragmenty o które mi chodzi: Sub Aux Readeeprom Aux_g_on , 2 Readeeprom Aux_m_on , 3 Readeeprom Aux_g_off , 4 Readeeprom Aux_m_off , 5 If Aux1_1_wyk = 0 Then If Aux1 = 0 Then If Godziny = Aux_g_off Then If Minuty = Aux_m_off Then Set Aux2 Aux1_1_wyk = 1 End If End...
Może zbocza sygnału hsync nie są zbyt ostre i układ różnie reaguje.. Tu warto pomyśleć nad wykorzystaniem timera do generowania przerwań, a sam sygnał hsync próbkować w podprogramie obsługi przerwania, jeśli sygnał się przesuwa, to co kilka wywołań wprowadzać do timera jednocyklowe poprawki (chyba, że przesunięcie jest zbyt duże). Przerwanie od timera...
Napisałem sobie takie oto funkcje do obsługi DS18S20: #include <DS89C4xx.H>// biblioteka uC DS89C430 typedef unsigned char BYTE;// definicja typow danych typedef unsigned int WORD; sfr led_10 = 0x80;// port P0 wyswietla cyfre dziesiatek sfr led_01 = 0xA0;// port P2 wyswietla cyfre jednosci sbit DQ = P0^7; sbit run = P1^0; sbit error_sensor = P1^1;...
No to temat troszke ruszam, korzystam oczywiscie z kawalkow gotowych kodów co by nie klepac od nowa. W zwiazku z tym iz czekam dopiero na plytki w ktorych bedzie i RTC i podtrzymanie zasilania bawie sie na tym co mam , czyli atmega8 i zegar obsluguje na nim. '8 MHz/256/31250 = 1 s $regfile = "m8def.dat" $crystal = 8000000 Config Pinb.3 = Input...
Witam, W przerwaniu RX USARTa (asynchroniczne 38400, po odebraniu odpowiedniego bajta) chciałbym wysyłać dane (Start, Adres, 2 bajty, Stop) korzystając z TWI (nie wykorzystując przerwania od TWI co oczywiste) przy f magistrali 400kHz. O ile czasowo przerwanie się wyrobi o tyle zastanawia potencjalna możliwość powieszenia układu w przypadku padnięcia...
A może wykorzystać przerwania ? Na 1 sek. wywoływanych jest 18 przerwań i coś można z tym już zrobić.
no wykonuje ci się wszystko bardzo wolno - ponieważ w procedury obsługi przerwań pakujesz sobie czaso-żerne procedury w tym te najgorsze czyli opóźniające. popatrz ile np u mnie zajmuje kod przerwania od zegarka PCF // przerwanie INT1 generowane jest przez PCF8583 co 1 sekundę // ustawiana jest flaga od której zależy wyświetlanie // czasu, daty, temperatury...
Oczywiście, że pomieszałeś, bo pod PD3 jednocześnie masz podłączone sterowanie anodą wyświetlacza i przycisk - jak wciśniesz przycisk, to odpowiednia cyfra wyświetlacza będzie zawsze aktywna... Użyj Timer1 w trybie CTC do odmierzania 0.01s - przy F_CPU = 1MHz chcesz mieć przerwanie z f=100Hz czyli odliczasz do 10000-1. To będzie za mała częstotliwość...
Witam ,napisałem sobie następujący program który ma pełnić funkcję prowizorycznego zegarka. W obsłudze przerwania timer inkrementuję sobie sekundy , ale gdy chce wyświetlić je w main ciągle wyświetla zero na led. Natomiast gdy ostatnią linijkę kodu zamieszczę w obsłudze przerwania działa ok . W związku z tym moje pytanie jak zrobić, żeby przekazywać...
Witam, chciałem podłączyć pod ATmegę 4 enkodery z myszek PC. Znalazłem taki kod w sieci: * * ENCODER - Checks rotary encoder and returns the following: * * 0: no movement * -1: ccw rotation * 1: cw rotation * *---------------------------------------... signed char encoder(void) { static unsigned...
Po wylaczeniu sprezarki zmieniasz zmienna np "status" na 1 i odpalasz timer. W przerwaniu (tak na prawde po ilus przerwaniach ) zmieniasz status zmiennej na 0. I tylko jak starus==0, mozesz ponownie wlaczyc sprezarke. Na bascomie sie nie znam ale tak bym to napisal w C ;) A kilka przerwan musi minac bo przy powiedzmy 1sekundzie opoznienie jakie mozesz...
Nie wiem co rozumiesz przez stwierdzenie: " aby regulacja temperatury była zależna od czasu", jak i kiedy realizujesz obsługę przerwań ale błędy odczytu temperatury prawdopodobnie są wynikiem zakłócania cyklu odczytu ds-a przez przerwanie od timera. Poczytaj o zależnościach czasowych 1-wire. Jest to interfejs asynchroniczny i musisz zapewnić aby poszczególne...
Ja nie pisałem o generatorze 15Hz w kontekście symulacji tylko wykonania rzeczywistego :-) W 51' masz 2 poziomy przerwań. Jeżeli zgłoszone zostanie przerwanie od timera i zacznie się wykonywać a później zgłosi się przerwanie zewnętrzne to to pierwsze zostanie zawieszone, wykona się przerwanie zewnętrzne a później program wróci do przerwania od timera...
Witam Zasiadłem do BASCOMa AVR i poczyniłem zawiły ale zadowalajacy (jak na to srodowisko) soft dla atmega8, wszystko byloby ok gdyby nie mały problem z obsługą przerwania... mianowicie, na jedno z wejść tj. INT0 podaje przebieg prostokątny, okres 20ms, w aplikacji wymagane jest aby w chwili gdy wystąpi zbocze opadające owego przebiegu (dopiero od pewnego...
A jaki $crystal wewnętrzny ma tiny13? Mozna dać prawie dowolny aby tylko w przerwaniu ustawić odpowiednią wartość licznika aby przerwanie było co ok. 1ms. Ściągnij sobie jakiś kalkulator AVR. I 4800000 wewnętrzny to chyba nie jest. A, i trochę pomyliłem się w opisie działania. Jak wciśniesz przycisk to dopóki nie skończy sekwencji nie reaguje na dalsze...
Witam forumowiczów, Sytuacja wygląda tak, że z jednostki nadrzędnej słane są ramki danych, Po każdej ramce jest szczelina czasowa tak aby nasza ATmega zdążyła odpowiedzieć, Mamy Atmega16 kwarc 16MHz i transmisje 57600 (w przybliżeniu), Gadamy przez RS485 tak, że między ramkami jeszcze przełączam linie bufora, Steruje równocześnie buforem wejścia i wyjścia...
Witam, próbowałem ostatnio przenieść mój program (wyłącznik czasowy) z Atmegi8 (działa idealnie) na Atmegę16 (gdyż ma więcej "nóżek"). Problem pojawił się przy pierwszym uruchomieniu - w miejscu, w którym uruchomione zostają przerwania program się resetuje. Zaznaczam od razu iż spędziłem wiele godzin szukając odpowiedzi w internecie, znalazłem nawet...
Najbardziej newralgicznym czasowo punktem jest obsługa INT0- i od tego trzeba zacząć. Odczyt temperatury trwa 3.3ms a wysłanie żądania odczytu 2.5ms. Oczekiwanie na przetworzenie 750ms- ale nic nie stoi na przeszkodzie żeby odczytywać co np. 5s- temperatura nie zmienia się tak szybko. Obsługa wyświetlacza też jest wolna- spróbuj z biblioteką: $lib "Lcd4busy.lib"...
R0 leci na stos, praktycznie każda procedura ma w sobie R0, softu prawie 6kB i nic się nie sypie prócz tego 1w. Problemy w zapisie wykluczyłem w taki sposób że przy nadawaniu jak i odczycie całego bajtu wyłączałem przerwania. Potem dla nadawania wyłączałem przerwania tylko dla wysyłki danego bitu- dalej działało OK. Jeśli w odbiorze wyłączyłem przerwania...
Byłem trochę zdesperowany. Teraz wiem że nie powinienem wykorzystywać przerwania TXC bo w sumie spowalniam transmisję nie potrzebnie, oraz ono do tego nie zostało zaprojektowane. Ale to i tak nie zmienia faktu, że program merytorycznie był ok, i dalej nie wiem gdzie w nim był błąd. Ogólnie pierwszy raz wykorzystywałem go z kwarcem 16MHz i pierwszy raz...
To co napisał shg- trzeba uważać. Jeżeli pierwsze przerwanie odłoży na stos to co trzeba i drugie przerwanie wewnątrz pierwszego też odłoży na stos to co trzeba i z tego przerwania zostanie wywołane jeszcze raz pierwsze albo drugie- bo znów zostało wywołane- i znowu odłozy na stos to co trzeba- to stos może się przepełnić. To znaczy wejść w obszar pamięci...
Witam Próbuję napisać obsługę pilota, który używa kodowania [url=]NEC. Następnie chcę przesłać kod na okno terminala za pomocą USART. Próbuję to realizować bez użycia funkcji typu delay_ms(), zamiast tego chcę użyć przerwań. Idea jest taka, że po pojawieniu się pierwszego zbocza od odbiornika podczerwieni, wywoływane jest przerwanie, uruchamiany jest...
Witam Utknąłem z moim kodem i plątam sie w koło ciągle, dlatego proszę o pomoc. W podprogramie "przyciski" przerwania od timer0 mam zrealizowany odczyt przycisków i zrobiłem sobie "flagi czasowe" przyciski: 'przerwanie co 26ms . kod sprawdzania przycisków . incr licz if licz=19 then ' flaga co ok 0,5 s flaga_500ms=0 ' w warunkach początkowych flaga_500ms...
Borykam się z problemem napisania dla ATMEGI "programatora czasowego" opartego o zegar. Czy taki algorytm zapewni mi włączanie oświetlenia w następujących warunkach: -Włączenie urządzenia gdy czas uruchomienia ustawiono prędzej na 23 a wyłączenia na 2:00 na ten właśnie okres czasu (23:00-2:00) - Ustawienie nowego czasu na np: 12:00, zaprogramowane prędzej...
Na początek witam forumowiczów. Jako że właśnie zacząłem z mikro kontrolerami (Atmega8), pojawiło się sporo niewiadomych (dla tych wtajemniczonych pewnie śmiesznych); staram się napisać (a właściwie nauczyć jak to napisać), tak żeby zagrało jak przewiduję. Mianowicie Chodzi o sterowanie przekaźnika (na PC0) wraz z LED (na PD2), z tym że przekaźnik ma...
1. Załanczać czy załaczać czy może załączać? ;p 2. Do wyliczenia odstępu czasowego można korzystać z funkcji opóźniającej zrealizowanej o timer. (funkcja powinna przyjmować jako parametr odstęp czasowy w zależności od tego ile wybierzemy z menu) 3. Robisz proste menu typu: w pierwszej linii LCD jakaś informacja - Podaj odstęp czasowy: ,w drugiej wyświetlaj...
Niestety nie znam algorytmu, który ma być realizowany ale z doświadczenia wiem, że KAŻDY problem ma co najmniej dwa rozwiązania i zamiast wykonywać wszystkie instrukcje w jednym przerwaniu może wystarczyło by je rozbić na sekwencje... Znacznik z przerwania dla kodu w pętli głównej ma sens tylko w przypadku gdy ramy czasowe są elastyczne i nie ma obowiązku...
...natomiast drugie występuje naprzemiennie z przerwaniem pierwszym (z niewielkim przesunięciem czasowym) bez względu na to jaką wartość wpiszę do OCR1B Tak niestety będzie. Wartość OCR1B określa stan licznika, przy którym następuje przerwanie, a nie z jaką częstotliwością. O tym, z jaką częstotliwością jest wywoływane przerwanie decyduje wartość,...
Ok. A czym w takim razie różnią się od siebie te dwa zapisy ? ADC1->SR &= ~(1<<0); ADC1->SR &= ~ADC_SR_AWD; gdzie ADC_SR_AWD jest równe 0x01 a zresztą nie działa mi kasowanie przerwania w żadnym z tych przypadków, dodając również opóźnienie czasowe o różnych wartościach aby dać mu czas na reakcję. Wchodzi mi w przerwanie nawet jeśli...
Knoty to jak wszysko w przerwaniu sie wykonuje i kazdy o tym wie. Transmisje i długotrwałe obliczenia to tez w przerwaniu ? Ticka nie zgubisz w przerwaniu w moim sposobie... najwyżej spóźnisz się z obsługą zdarzenia jak Main przymuli ... ale nie rozwalisz podstawy czasu innym modułom, które być moze potrzebują przecyzyjnego czasu. Małe kawałki kodu...
Podczas obsługi przerwań podczas zliczania impulsów nie dzieje się nic innego poza inkrementowaniem tych dwóch zmiennych. Wkleiłem je tu w całości tak jak są. Poniżej zamieszczam przebiegi czasowe zarejestrowane oscyloskopem. Na potrzeby sprawdzenia długości trwania obsługi przerwań dodałem do nich instrukcje ustawiające wyprowadzenie jednego z portów...
Najpierw musiałbyś sprawdzić, ile i jakich instrukcji procesora zawiera ta pętla i jaki jest czas wykonania obiegu. Na tej podstawie należałoby dopiero wyznaczyć liczbę powtórzeń. Tylko że taki sposób - to czysta amatorszczyzna, nadająca się tylko do programów z serii "umiem pomigać diodą przy użyciu mikrokontrolera". W praktyce programowanie zaczynasz...
Bardzo prosty wyłącznik czasowy spełniający wszystkie Twoje założenia: Może nie jest zbyt miniaturowy ze względu na zastosowane elementy, ale z powodzeniem można zastosować mniejsze elementy. Może prawie analogowo, 555 (8-pinowy) w wersji SMD CMOS? Niestety do czasu 1min potrzebuje sporej pojemności kondensatora (ze 100uF). Albo (ale to już więcej...
Może wtrącę swoje 3 grosze Wynik jest taki jak przypuszczałeś (at)dondu , zmienna intliczba znacznie odbiega od wartości przechowywanej w licznik . W niektórych przypadkach zwiększa się nawet od 5 do 10 razy przy jednym skoku impulsatora. Z testu wynika że procesor reaguje na każde drgnięcie, uruchamiając kolejne przerwania, ale z powodu nieustabilizowania...
wyliczyłem dla 10 ms. Przy zegarze 12 MHz cykl rozkazowy trwa 1 us (tak jest taktowant licznik T0) 1 ms = 1000 us , czyli 10ms = 10000 cykli 65536 - 1000 = 55536 dec = d8f0 hex U ciebie widzę jeszcze jedną nieprawidłowość , w głównej pętli czekającej na przerwanie 2 x masz dostęp do rej. IE, a podczas tego dostępu przerwanie nie może być wykonane. Takich...
to z tym ne to układ znacząco nadmiarowy, w wypadku uC układ zamykałby się w 2kondensatorach, rezystorze, attiny13 i ew stabilizatorze(i 2kondensatorach do niego). Najbardziej łopatologicznie to sprawdzać stan przycisku w pętli do czasu przerwania z licznika który zerujesz / uruchamiasz w czasie pierwszego wykrycia zmiany stanu i zmienić stan wyjścia...
Dziękuje...jeszcze pytanie o nadajnik - rfm02. Wg dokumentacji , patrząc na przebieg czasowy, jest tak, że aby wysłać dane przez SDI, należy wpierw nadać 0xC6, a potem bez zegara nadawać daną...jak to synchronizować (skąd wiadomo, że nadaną np. jedną jedynkę a nie dwie jedynki)? Patrząc na przykład programowania stąd: z kolei mamy kod: [syntax=c]void...
Mam problem z rozumieniem języka ASM. Niby wszystko działa OK ale jest pewien fakt dla mnie niezrozumiały i aż zjadam zęby. Krótki opis działania programu: w podprogramie ustawiany jest 7 bit w zmiennej bajt który następnie jest sprawdzany w głównej pętli i jeśli jest ustawiony to zmienia się na 0 logiczne, a następnie zmienia się stan na przeciwny...
Rozwiązałem tak: Piotrus_999 to często się wypowaida ale nidy nie są to wypowiedzi rzeczowe. Nigdy nie pochwalił się nawet fragmentem swojego kodu. Co do opóźnień w irq. Wysuwa się wniosek, że twórca klasy CDC dla AVR jest kiepskim programistą bo tak rozwiązał problem komunikacji po USB.
Wszystko fajnie, pod warunkiem, że chce się używać STM32. Dodanie podstawowego wsparcia dla innych układów jest porównywalne z postawieniem projektu na FreeRTOSie - ot po prostu musisz mieć tablicę wektorów i skonfigurowane rozmiary/adresy pamięci i dokładny typ układu. We FreeRTOSie przecież wsparcie dla STM32 czy dla LPC tak samo nie istnieje - tablicę...
Tylko i wyłącznie w sytuacji, gdy zmienna local_data jest jednobajtowa. Dla wielobajtowych zmiennych to też zadziała, ale... to jest wolniejsze niż blokowanie przerwań. Pokazana konstrukcja wymaga co najmniej 2 odczytów, a czasami nawet 4. To będzie kosztowne czasowo. Zwykłe zablokowanie/odblokowanie przerwań to instrukcje jednotaktowe na AVR (odnosze...
mam problem z obsługą przerwania od T0 w at90s2313. oto programik: ;program .nolist .include"c:\avrtools\appnotes\2313def.in... .list .deftemp=r16 .defcounter=r17 .deftime=r18 .defone=r19 .defzero=r20 .deftim_reg=r21 .cseg .org$000 rjmpreset .cseg .orgOVF0addr rjmpintrpt reset:rjmpinit intrpt: ;obsługa przerwania in r22,SREG push r22 inccounter pop r22...
Rozwiązaniem może być wejście go przerwania skontrolowanie ile jeszcze naliczył Timer od jego wygenerowania i od wartości przeładowywanej odjąć tę wartość nadliczoną. Nie unikniesz tego w inny sposób a raczej ja nie znam innej możliwości. Nawet i wtym przypadku pewnie stracisz z 1 lub 2 impulsy które można sobie na ślepo doliczyć analizując liczbę i...
Potrzebuję układ czasowy najlepiej na 555, który steruje dwoma optotriakami. Po włączeniu zasilania załącza się pierwszy i pozostaje w tym stanie przez około 4s. Nasteępnie załącza się drugi i po 1s trwania załączonych obydwu wyłącza się pierwszy a drugi pozostaje załączony az do przerwania zasilania. Niech ktoś pomoże.
Tryb CTC to tryb pracy timera, w którym przerwanie (od porównania, nie przepełnienia) jest wywoływane na skutek zrównania się wartości timera z rejestrem OCRA timera (jest o tym w dokumentacji do attiny2313). Moje wytknięcie jest raczej przypuszczeniem. Jeśli ów redaktor sprawdził, upewnił się, że wartość do timera jest wpisywana w dopuszczalnym zakresie...
Ten sposób się czasem stosuje - tworząc tzw. zagnieżdżone przerwania, ale jest to ryzykowna zabawa i powinna zazwyczaj dotyczyć tylko obsługi jednego przerwania, jeżeli musi być ono dłuższe czasowo, aby nie blokować procesora i reszty programu. Pzdr. N.
1. Wyłączyć przerwanie na czas wyświetlania. 2. Jeśli całość nie jest skomplikowana i krytyczna czasowo wyświetlać w podprogramie obsługi przerwania.
Mam problem z aktywacją przewań czasowych a konkretnie blokami OB35 i OB32. pierwszy to przerwanie cykliczne 1ooms drugi 1 sek. Jeżeli symuluję program to nie ma żadnych problemów a jak próbuję załadować program do sterownika to ładuję cały program z wyjątkiem bloku OB32 i pojawia się błąd że nie może skopiować tego bloku bo klasa piorytetu przerwania...
A nie masz li jakichś śmieci na tym przerwaniu? Poza tym, to 1wire jest czułe na opóźnienia i w czasie transmisji nie ma prawa pojawić się przerwanie (przynajmniej w tych krytycznych miejscach - na początku slotu czasowego).
Na Timerze. W przerwaniu od INTx ustawiasz wartość początkową Timera i uruchamiasz go. A w przerwaniu od Timera ustawiasz/kasujesz pin wyjściowy.
Witam mam domofon, w którym chcę "przerwać" na noc przewód sterujący dźwiękiem "gongu" w unifonie. Sterownikiem czasowym chcę sterować czasem a przekaźnikiem "zwierać" przewód Pozdrawiam
Witam, Chciałem zrealizować opóźnienie czasowe załączenia urządzenie po wystąpieniu przerwania o czas tau2 który został zliczony przez timer wynosi on ok 70ms, tau2 jest w us czyli ok 70000us Napisałem dwie funkcje w oparciu o delay_ms i delay_us i otrzymuje dwa różne rezultaty, dlaczego? ISR(INT0_vect) { if (zal==1) { wl=1;...
Doczytałem dokumentację i muszę przyznać, że masz absolutną rację Andrzeju. Pozornie nie ma zagnieżdżonych przerwań: normally interrupts will remain disabled inside the handler until the handler exits Można jednak sobie poradzić z ręcznym priorytetowaniem. W obsłudze dowolnego przerwania można maskować tylko te przerwania, które faktycznie mogą być...
mirekk36 . Na razie nie wiemy jakie kolega ma długieee te transmisje danych. RAM nie jest z gumy, a powinno jeszcze starczyć na całą masę zmiennych i trzy stosy, a zwłaszcza na HWStack, który by tu mocno puchnął. Kolega używa GETRC5. Nie zapominaj o nim, bo połączenie przerwania z INTx (słynne GETRC5 w przerwaniu) + dwa z USART-u (via bufor SERIALIN)...
Ok. Oczywiście pomogło tylko nie do końca wiem dlaczego... Rozumiem z twojej wypowiedzi (przynajmniej tak mi się zdaje :)) że jak przeznaczę na PWM cały port to problem zniknie. Puki co pomogło: void LCD_Out(uint8_t Data, uint8_t isCmd) { uint8_t x; if(isCmd) LCD_PORT |= LCD_CS; cli(); LCD_PORT &= ~(LCD_CLK|LCD_CS);...
Mirku jak już dajesz link reklamujący twoją stronę to chociaż podaj taki, który coś wnosi. Bo tam widzę tylko teksty typu "Bzdura", podczas gdy nie ma tam nic wartościowego dla kogoś kto twojej książki nie kupił. Nikt nie pisze, że OW nie da się zrobić bez UARTa, UART po prostu jest najprostszym rozwiązaniem w sytuacji w której intensywnie są wykorzystywane...
Zauważyłem to, jak już kliknąłem wyślij. Z tego co widzę, działamy na "sztucznym kodzie". Pozostały mi jednak dwie teorie. Mniej prawdopodobna mówi, że JTAG nie jest wyłączony. Bardziej prawdopodobna mówi, że to przerwanie nie jest wywoływane w trybie FastPWM. Polecam autorowi spróbować z przerwaniem od przepełnienia. Formalnie będzie to prawie to samo...
Mam dobry pomysł na owy problem :) A więc zatrudnię timera2 i tryb asynchroniczny. Na nóżki PC7 (TOSC2) PC6 (TOSC1) podłączę kwarc zegarkowy. Przy odpowiednim preskalerze będzie mi on generować przerwanie co 1s. Aplikacja C# wyśle mi ustawione przeze mnie dane czasowe na atmegę - np 18/6h. Atmega przeliczy sobie ile sekund to te dane godziny i podstawi...
Nie, procesor usypia się w pętli głównej, jak to wyżej napisałem. Wyobraź sobie, że nie "jechałem na delayach", bo gdzieś tam dawno temu usłyszałem, że taka technika programowania jest do bani i odbija się czkawką przy jakiejkolwiek próbie rozszerzenia funkcjonalności projektu. Zauważ, że kod, który pokazałem, wyłączy urządzenie w określonym czasie...
(at)BlueDraco hmm przerwania owszem i ich wielopoziomowosc jest przydatna ale tez nalezy pamietac ze rdzen ARM7TDMI ma niestety tez sporo gorzej rozwiazane niz Cortex-y... a male procesory to tez nie sa ;) Jednak nie o tym mialo byc... W sumie nie zawsze petla glowna jest zlym rozwiazaniem, czasami mozna w niej przeciez zbudowac maszyne stanow ktora...
Mam obecnie przepływowy podgrzewacz wody, po którego włączeniu faza idzie do stycznika, który odcina trójfazowe zasilanie podgrzewania podłogowego. Chcę dodać programator czasowy, który miałby wyłączać zasilanie podgrzewania podłogowego w określonych godzinach. Oglądam instrukcję programatora Zamel ZCM-11, ale jak dla mnie niezbyt jasno jest tam wyjaśnione,...