Program wyświetla to co chcesz ale w symulatorze to trwa bardzo bardzo długo. i Teraz ja licznik odlicza 100 impulsów to musisz pozmieniać obliczenia. Podczas symulacji w warunkach wpisz mniejsze wartości to się szybciej doczekasz tego wyświetlenia na lcd albo zwiększ zmienne ręcznie podczas symulacji. sygnał 125khz do generowania PWM 1,25khz. Nie rozumiem?...
Czy proponujesz zatem taki zapis: ... Jeśli w tym rejestrze wcześniej jest coś co chcesz zachować to może zostać, ja proponuje użyć operacji przypisania "=" zamiast sumy bitowej "|=" - używając sumy zakładasz że wcześniej jest tam "znana wartość", co niekoniecznie jest prawdą i czasem można się nieźle przejechać na takim założeniu... Widocznie przekroczenie...
Jeśli chodzi o mechanizm przerwań, to wszystko masz ładnie opisane w formacie pdf na stronie Atmela . Wywoływanie przerwania w procedurze obsługi jeszcze innego to porażka. Przerwania są kolejkowane i po powrocie z jednego jest wywoływane drugie, dlatego procedury obsługi powinny być jak najkrótsze (polecam asm ;)). W procedurze timera możesz sobie...
Przecież obsługa timera w AVR i '51 jest inna , zobacz jak wygląda konfiguracja dla obu wersji .
Witam. Problem raczej jest w obsłudze przerwania. Są za szybkie. Przerwania nakładają sie na siebie czyli zanim zakończy sie obsługa, timer wywołuje ponownie. Najlepiej w podprogramie obsługi przerwania na początku zatrzymaj przerwania a na końcu podprogramu wznów przerwania. Krzysztof
Czesc ! Portu B nie musisz ustawiac , po starcie procesora wszystkie porty sa ustawione jako wejscia ponadto : movlw80h movwfTRISB ustawia Ci jako wejscie jedynie RB7, pozostale to wyjscia MOVLW 0 MOVWF TRISA teraz caly porta A ustawiles jako wyjscia, malo tego uzywajac timer 0 i podzielnika 1:256 pamietaj ze aby zwiekszyc jego stan o jeden...
'do liczby 1536 trzeba by jeszcze coś dolożyć, na wykonanie instrukcji Zasadniczo nie trzeba nic dokładać, bo wartość timera jest inkrementowana sprzętowo od razu (w kolejnym cyklu maszynowym). Czyli już w trakcie obsługi przerwania. Jeżeli obsługa timera zmieści się w 255 cyklach maszynowych, to zmieniany jest tylko młodszy bajt timera - czyli w procedurze...
Wpisz dla obydwu diod te same wartości i ustaw bit FOC1A w TCCR1A. Potem poczytaj o FOC1A i FOC1B jak już będa migać naprzemiennie ;)
Nic sobie nie robi z naciskania guzika bo właśnie obsługuje przerwanie. Ja bym to zrobił w ten sposób. Przerwanie od czujki uruchamia jakiś timer i kończy się obsługa przerwania. Timer odmierza czas i po jego upłynięciu sprawdza jakąś zmienną i w zależności od niej uruchamia alarm bądź nie. I tak jeśli przed przyjściem przerwania z tego timera naciśnięty...
Err = 1 wstawiasz w obsłudze przerwania od Timera. A Err = 0 nigdzie ;)
Możesz sobie stworzyć ukryte okno, które będzie służyło tylko do odbierania komunikatów WM_TIMER. Chyba, że chcesz to zrobić bez okien. Wtedy tworzysz timer funkcją SetTimer, a następnie przechodzisz do pętli wiadomości: MSG msg; while (GetMessage(&msg, NULL, 0, 0)==1) { if (msg.message==WM_TIMER) { // kod obsługi timera...
Żeby wywołane zostało przerwanie musisz jeszcze odblokować globalną flagę zezwolenia na przerwanie (sei()) i skonfigurować kontroler przerwań - odblokować przerwanie o najwyższym priorytecie.
Przeglądając Twój program mam takie małe spostrzeżenie, a mianowicie w pętli głównej masz wywołaną procedurę Gettime - ' Call Gettime' - która działa na I2C. Co się stanie gdy podczas wykonywania procedury Gettime zostanie zgłoszone przerwanie od Timer'a?? Program przerywa wykonywanie procedury Gettime i skacze do obsługi Timera a tam jest wywoływana...
SSPIF ustawia się niezależnie od GIE, natomiast przerwanie wystąpi wówczas gdy ustawiony jest SSPIE, w rejestrze PIE1 oraz PEIE w rejestrze INTCON. Po zakonczeniu obsługi przerwania timera, ustawiona flaga SSPIF wywoła obsługę przerwania od MSSP
To, kiedy jest generowane przerwanie i jakie, nie zależy od tego, jakie napiszesz procedury obsługi przerwań, a od tego, jakie przerwania włączysz w odpowiednim rejestrze. Do każdego włączonego przerwania musisz napisać procedurę jego obsługi. Jeśli włączasz TOIE - musisz mieć procedurę timerX_ovf_vect, jeśli włączasz OCIE1A - musisz mieć TIMER1_COMPA_vect....
Teraz wyjaśniłeś trochę lepiej, i procedurę obsługi timera też jakąś sensowniejszą napisałeś. Bo o tej pierwszej to lepiej się nie wypowiadać. Tym niemniej dalej uważam, że DAC'a czepiasz się niesłusznie. Ja przyczyny niepowodzenia upatrywałbym w idei sterowania Timerem6 - właczanie i wyłączane po paczce. Próbkowanie masz ciągłe, a timer puszczasz paczkami....
Priorytetów nie ruszaj wcale - to nie z nimi masz kłopot, o ile ich nie poprzestawiałeś. Użyj tylko NVIC_EnableIRQ() do włączenia przerwania. Twój problem bierze się z błędu w obsłudze przerwania timera. Po pierwsze: jak często jest ono zgłaszane? Po drugie - kasuj znacznik przerwania timera na początku obsługi, a nie na końcu. Po trzecie: co robi AKTUALIZUJ_PWM...
Tak, niedokładność czasu delay wynika głównie z tego, że dodaje się do tego czas wykonania innych funkcji, w tym szczególnie funkcji obsługi przerwań. W przypadku odpowiedniego użycia timera tej niedokładności nie ma, a w każdym razie nie akumuluje się ona, tak jak w przypadku delay. Oczywiście jeśli coś ma być wykonywane w superdokładnych odstępach...
Chyba nie zrozumiałeś mojego pytania. Pytałem się obsługe timera w asm a nie o wstawke asm w przerwaniu timera
A ile czasu może trwać obsługa którego przerwania? Jeśli czas obsługi przerwania do synchronizacji fazy może być porównywalny z okresem timera, to może ono powodować gubienie przerwań timera. A może da się użyć jakiegoś timera 16-bitowego do wykrywania gubienia przerwań timera? Poza tym, mam nadzieję, że timer działa samodzielnie jakimś w trybie cyklicznym,...
Nienawidzę czytać datasheetów... Ooojo joj ... to będzie bolesna droga przez mękę ta nauka programowania :( W książce mam napisane że do TCCR1B jest przypisany OCR1B, ale jak widać niezbyt to działa... No to hmmm książek też nienawidzisz czytać ? tak by wynikało skoro piszesz, że ktoś tak napisał w książce. Coś chyba mało uważnie czytałeś. Nikt tak...
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).
Debouncing można wykonywać na wiele sposobów. Twój sposób jest jak najbardziej poprawny. Ta bezsensowność jest tylko z pozoru bezsensowna :) - jakoś trzeba poinformować main(). Taka technika jest powszechnie stosowana nie tylko do debouncingu. Pamiętaj także, że zawsze możesz na końcu while() w main() uśpić mikrokontroler do następnego przerwania -...
I cały czas masz podstawowe błędy w obsłudze ADC. Zapuść pojedynczy pomiar ADC pod koniec obsługi przerwania timera, odczytaj jego wynik w następnym przerwaniu i zapuść następny pomiar - na nic nie musisz czekać, ani sprawdzać bitu gotowości.
Timer jest niczym innym jak licznikiem, który zlicza impulsy zegara wejściowego, niezależnie od tego, czy procesor aktualnie wykonuje program główny, czy przerwanie. Odpowiadając na twoje pytanie: program skacze do obsługi przerwania, a timer liczy dalej.
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.
Nie możesz odczytywać kilka razy pod rząd ADC, bo w trybie konwersji ciągłej może się zdarzyć, że wartość zmieni się w trakcie Twojej zamiany. Jeśli np. zmieni się z 99 na 100, to wyświetlisz 199. % 1000 % 100 to też to samo, co %100. Nie ma też sensu zmieniać wartości wyświetlanej aż tak często - do odczytu przez człowieka max. kilka razy na sekundę....
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...
Ja robię reinit timera po odebraniu każdego znaku, stopuję timer po odebraniu całego pakietu. W przerwaniu timera obsługa time-out.
Możesz dowolnie zmieniać tryb pracy Timera.
Dodaj kolejną zmienną w obsłudze przerwania.
Witam jestem poczatkujacym programujacym Mikroprocesory i chcialbym tylko poznac lub zobaczyc maly przyklad zeby zrozumiec dzialanie licznika mam AT89S52 i chcialbym uzyskac 36Khz o wypelnieniu 50% przy pomocy timera mam kwarc 12Mhz bo potrzebuje obslugiwac nadajnik podczerwieni i prosze o pomoc jak w jezyku C sie to obsluguje prosil bym o jakis prosty...
Moim zdaniem koncepcja powinna być taka: 1. Obsługa przetwornika analog-cyfra. Na początek dobrze żebyś umiał dobrze zmierzyć liczbę impulsów. Nie wiem dokładnie jaka jest specyfika Twojego sygnału, jaką amplitudę mają owe szumy, skąd się biorą i czy nie warto by ich po prostu potraktować filtrem dolnoprzepustowym, a jeśli mają odpowiednio niską amplitudę...
(at)stozek - normalnie w Bascom nie jest potrzebna komenda Start Timer0 bo jest on uruchamiany od razu podczas konfiguracji. Używa się tej komendy tylko jeśli poprzednio zatrzymałeś Timer poprzez Stop Timer0. Rozumiem, że zatrzymujesz timer. Tak więc zatrzymywanie timera to zabranie mu źródła taktowania. Bascomowe komendy moża wiec rozumieć tak: Start...
W obsłudze timera (TIMER0_COMPA_vect) zrób wyświetlanie odpowiedniej cyfry. Wcześniej trzeba zdjąć bity maskujące. Ja w moim zegarze nixie mam rtc ds3231 i tam co sekundę sygnał 1 Hz wyzwala przerwanie w którym zmieniana jest flaga sygnalizująca że należy odczytać akualny czas i uaktualnić wartości wyświetlane na lampach.
Przede wszystkim musisz zacząć kolego od poznania timerów. Do odmierzenia czasu używamy timerów ponieważ zlicza nam czas w tle działania procesora. Używając polecenia wait zatrzymujesz kompletnie uC na ten czas. Konfiguracja dla AtMega8 8Mhz u mnie wygląda tak: Config Timer1 = Timer , Prescale = 256 ''''konfiguracja timera On Timer1 1s ''''przy przerwaniu...
Pokaż swoje próby, schemat podłączenia. Na początek wystarczy obsługa millis(), timery sprzętowe można zostawić na coś wymagającego dużej precyzji, odliczenie 60s nie musi być wyliczane z dokładnością pojedynczych cykli zegara uC. Pisanie na prive to kiepski pomysł, jeśli moje rozumowanie jest błędne tutaj od razu ktoś to poprawi (z dużą satysfakcją).
Żeby nie rozpisywac się załączam instrukcję do timera T5020. Są to dwie strony A4 i plik jest dość duży ze względu na czytelność.
Musisz chyba użyć timera ustawionego tak aby przerwanie z niego następowało później niż czas między kolejnymi wysyłanymi paczkami z pilota. Z tego co pamiętam to pilot w standardzie RC5 wysyła przy stale wciśniętym klawiszu kod co jakieś 89ms. Jeśli używasz przerwań do czytania kodu to dajesz mu wyższy priorytet niż timerowi. W timerze zerujesz pin...
(at)emarcus: O ile się nie mylę, przy prescalerze 64 i cżestotliwości 8MHz timer0 będzie miał skok co 8us, czyli licznik bedzie przepełniał się co 2,048ms, więc do poprawnego odliczenia 1s w obsłudze timera należy załadowywać do niego Timer0 = 6, i dodać licznik, który 500 razy zliczy przepełnienia. A co do tych parametrów, to zawsze wstawiałem domyślne...
Podaję skan instrukcji obsługi
Piszesz, że masz doświadczenie z LCD i Atmega8. Więc mogę Ci pomóc to zrobić.
Timer 16-bitowy chodzący w kółko, linie INT0 i INT1 zaprogramowane na przerwania od obu zboczy, obsługa przerwań odczytuje wartość timera i wykonuje stosowne obliczenia. Jeśli procedury obsługi innych przerwań będą poprawnie napisane, nie ma powodu, żeby to nie zadziałało. Powinieneś uzyskać rozdzielczość i dokładność na poziomie kilku mikrosekund.
Powyżej podałem przykład co powinno się znajdować w obsłudze przerwania od timera. Natomiast same przyciski możesz sprawdzać w pętli while() jeżeli nie chcesz angażować do tego osobnego przerwania.
Skonstruowałeś nieskończenie rekurencyjną procedurę obsługi przerwania :lol:
Skoro opanowałeś obsługę timera, to zrób jeszcze całą obsługę LED w przerwaniu timera. W pętli głównej się multipleksowania LED nie robi, bo ciężko w to wpleść jakikolwiek inny kod. Jaki wtedy jest sens podziały projektu na pliki *.h i *.c skoro część pliku "7led.c" będę miał w pliku związanym z Timer0 ? Chyba, że coś źle zrozumiałem. Źle do tego podchodzisz....
Takie rozwiązanie przyspiesza obsługę wyświetlacza i w niczym nie przeszkadza, m.in. eliminuje oczekiwanie przy obsłudze wyświetlacza (obsługa działa na przerwaniu timera). Używam w paru projektach - sprawdzone.
Nie obsługujesz przerwania od INT1, i program idzie w krzaki. int INT1_() interrupt 1 { b++; } to jest obsługa przerwania od timera 0, dla INT1 powinno być int INT1_() interrupt 2 { b++; }
Problemem jest to jakieś. Jesli timer ma np. okres 550us, a twoja pętla np. 551us to się robi problem - synchronizacja będzie się co raz bardziej rozjeżdżać, a kolejnej impulsy PWM będą co raz bardziej zniekształcone. Zamiast delay zrób tak jak pisałem - w funkcji obsługi przepełnienia timera uaktualniaj OCR. W dodatku musisz tak ustawić preskaler,...
Instrukcje obsługi znajdziesz w UNITRA-KLUB http://unitra.eu.org/node/594 Schematu sam szukam.
(at)poorchava - a co polecasz 13latkowi, który zaczyna eksperymentować z uC? BASCOM w tym momencie daje najwięcej oczekując najmniej. Oczekując najmniej od programisty oczywiście. Od MCU wymaga całkiem sporo, jako (moim zdaniem) dość ciężki do zoptymalizowania przez kompilator język. Niemniej można zrobić łatwo i przyjemnie dużo rzeczy bez potrzeby...
Porada: napisz to od nowa. W obecnej wersji masz delay w przerwaniu EXTI i brak przerwania timera do obsługi wyświetlacza.
Jednak zrób to z timerami. Twój procesor wykonuje jedną instrukcjŁ an ogół w jedną mikrosekundę. Pętla, w której odliczasz jednomikrosekundowe opóźnienia samy wykonuje się kilka mikrosekund - tak zrobione opóźnienia są trudne do określenia, w każdym razie niewiele mają wspólnego z tym, co chcesz uzyskać. Do sterowania serwem (zwłaszcza płynnego) potrzebujesz...
co ma się niby ustawić Portd.0 czy Portd.5 ? Gdzie jest procedura obsługi przerwania od Timera? Nie wiem czy reset nie działa tylko bitowo w Bascomie, myślę że lepije i bezpieczniej jest zrobić krok=0.
#pragma vector = <VECTOR_NAME> __interrupt void <ISR_NAME> (void) { // сюда вписыk... код обрабl... прерыk...
Może ten Twój jakiś dziki jest :P więc spróbuj jeszcze przenieść Sub pod pętlę główną jak ja poniżej. U mnie kompilują się wszystkie wersje wiec w załączniku masz skompilowane Hex i Bin do wyboru. Sprawdź też prywatną wiadomość ;) [syntax=vbnet]$regfile = "m8def.dat" $crystal = 1000000 $hwstack = 40 $swstack = 16 $framesize = 32 '********* TUTAJ SOBIE...
Tu potrzebna jest zmiana koncepcji rozwiązania. Zacznij od skrócenia przerwania obsługi wyświetlacza do jakichś max. 10..12 linii. Co sekundę w obsłudze wyświetlacza inicjuj start pomiaru temperatury, a po np. 800 ms inicjuj odczyt temperatury z czujnika. Całą obsługę DS18B20 zrób w postaci automatu w przerwaniu drugiego timera. Wtedy obsługa DS nie...
Dorób obsługę przerwania (tak jak masz dla timera) albo go nie włączaj.
Najważniejsze zadania "czasu rzeczywistego" można wykonywać w obsłudze przerwania timera. Usługi można wpisać w podprogramy (z jez C: funkcje) i w pętli głównej wybierac które mają byc wykonywane. Komunikacje z uzytkownikiem mozna na ogół wpisać w pętli głównej, gdyz ona zwykle jest potrzebna do podania danych przed wykonianiem zadania, lub po czyli...
W programie jest obsługa timera, więcej nic nie ma. 4047 nie umożliwił by mi przerwy.
W tej architekturze programu tego nie zrealizujesz. Ramki CAN musisz wysyłać co określony czas. Zrobisz to przy użyciu rutyny obsługi timera ustawionego na zdefiniowaną przez Ciebie częstotliwość. Dane do wysłania muszą być gotowe, gdy nadejdzie przerwanie (nie obliczamy wtedy częstotliwości). Pomiar częstotliwości jest również do przerobienia, bo teraz...
Jakoś nie widzę żebyś tu korzystał z przerwania od Timera... Bo nie musisz ;p mogłbyś pokazać jakiś przykład obsługi przycisku w przerwaniu timera ? Nawet jakiś URL do innego projektu. Więc chyba oczywistym jest że ten fragment kodu należy umieścić w przerwaniu od Timera.
Możesz użyć jednego timera. Procedura obsługi przerwania nie może przeszkadzać w obsłudze innych przerwań. W Twoim przypadku nie ma innych przerwań, więc jedyny warunek to ten, żeby procedura obsługi wykonała się w czasie mniejszym niż odstęp pomiędzy przerwaniami. To jest w sam raz dobry materiał na projekt z pustą pętlą główną, i tak to należy zrobić.
Na samym końcu funkcji której używasz- TIM_TimeBaseInit() - jest wymuszany "update", co powoduje ustawienie flagi przerwania które włączasz. BTW - używasz bibliotek które zostały oficjalnie porzucone przez producenta. Takie był dobre, że stwierdzili, że trzeba to wywalić do kosza bo nic się z tym nie da zrobić [; Miliony ludzi, którzy twierdzili, że...
Pokaż schemat połączeń, to po pierwsze. Po drugie nie potrzebujesz żadnej funkcji, ani instrukcji switch, tylko zwykłej tablicy : const uint8_t obraz_cyfry[10] = {0x7E, 0x30, 0x6d, itd...}; PORTD = obraz_cyfry[czas]; Na AVR short int ma taką samą długość jak int, a tutaj wyraźne chodzi o bajt - użyj uint8_t z stdint.h. Samo wyświetlanie multipleksowane...
Zapytaj bota Bardzo proszę. Inicjalizacja timera : Funkcja timerBegin(frequency) tworzy i uruchamia timer z określoną częstotliwością. W tym przypadku ustawiamy częstotliwość na 500 Hz, co odpowiada okresowi 2 ms. 2. Przypisanie funkcji obsługi przerwania : Za pomocą timerAttachInterrupt(timer, &onTimer) przypisujemy funkcję onTimer jako obsługę...
Większość ATmeg posiada tylko 2 timery Nieprawda, posiadają 3 timer'y (dwa 8-mio bitowe i jeden 16-to bitowy). Do multipleksowania wyświetlacza można wykorzystać detekcję przejścia przez 0 (INT). Pozostają 3 wolne timery do obsługi reszty.
Witam, poszukuję instrukcji obsługi timera technics sh-4060 obojętnie w jakim języku, z góry dziękuję i pozdrawiam.
W ATTiny timer chyba przejmuje kontrolę nad IO, więc włączenie/wyłączenie odbywa się z poziomu konfiguracji timera. CZyli robisz to tak - np. ustawiasz inny timer, aby generował przerwanie co 1s, a w obsłudze tego przerwania w zależności od potrzeby konfigurujesz timer generujący PWM. Chyba to najprostsze rozwiązanie.
Napisz wyświetlanie od nowa - w tym kodzie wszystko jest źle. Zdefiniuj obrazy cyfr w postaci tablicy stałych indeksowanej wartością cyfry. Wyrzuć procedury wyświetlania cyfr i switche, które je wywołują - to wszystko razem da się zrobić w jednej linijce kodu, a u Ciebie zajmuje to ponad 120 linii. Wyświetlacz multipleksowany MUSISZ obsługiwać w przerwaniu...
Kuniarz , Jeszcze tylko spytam - czemu w obsłudze przerwania włączasz przerwanie timera i zaraz potem znów je wyłączasz? Nie lepiej wyłączyć na samym początku i włączyć na samym końcu?
Standardowo nie masz zegara o potrzebnej rozdzielczości. Ja bym zrobił tak: napisał własną obsługę przerwania timera systemowego (nie RTC) aby uzyskać licznik do pomiaru z zadana dokładnością, podłożył ją pod tę standardową, podkręcił częstotliwość przerwań (standardowo jest to ok 18 Hz) do takiej jak potrzeba. Wtedy w przerwaniach od transmisji używał...
A nie ładujesz do timera wartości przypadkiem tylko raz? powinieneś ładować timer za każdym razem w obsłudze przerwania
Z każdym przyciskiem skojarz jedną zmienną, która będzie zawierała stan licznika timera, w chwili wykrycia jego naciśnięcia. W kolejnych przerwaniach overflow sprawdzasz: 1. czy przycisk jest ciągle naciśnięty, 2. jeśli 1. jest prawdą to czy różnica pomiędzy licznikiem timera a wartością zapamiętaną w skojarzonej z przyciskiem zmiennej jest większa...
Licząc, że jeden impuls trwa dokładnie 1 us i przy timerze zliczającym do 10 (startuje od 246 - Timer0) to po przekręceniu się timera uzyskujemy czas 10us. Przy długości impulsów w podanym zakresie timer powinien się przekręcić od 100 do 200 razy. Niestety program zlicza mi od 12 do 24 przekręceń tylko. Gdzie robię błąd ??? Nieprawidłowe obliczenia...
Właśnie robie z tego ćwiczenia sprawozdanie prosze o sprawdzenie : (* NACIŚNIĘTY ZIELONY PRZYCISK *) 0 LD %I0.0.2 sprawdź stan wejścia ( przycisk zielony) 1 S %M0 ustaw marker 0 (* TIMER0 5 SEKUND *) 2 BLK %TM0 obsługa fbd timera 0 3 LD %M0 sprawdź stan bitu m0 4 IN użyj powyższego jako wejścia timera m0 5 OUT_BLK wyjście fbd timera 0 6 LD Q załaduj...
Tu na pewno jest błąd: if(released & btn == btn) to to samo co: (poprawiłem) if(released & 1) Jeśli nie masz nieblokującej obsługi LCD w przerwaniu timera, to skoro już bardzo chcesz pisać coś na LCD w przerwaniu - obniż priorytet tego przerwania.
Tyle to wiem :) Chodziło mi raczej o napisanie obsługi timera...
Czy to nie będzie czasami typ 3400 Będzie na pewno :) Autorowi tematu pewnie chodzi o obsługę timera?
Instrukcja Wait nie stopuje procesora. Procesor odlicza czas poprzez zmianę wartości rejestrów a więc działa. A skoro działa to powinien także odczytać informację, że nastąpiła sygnalizacja od przepełnienia Timera. Spróbuj zastosować tą instrukcję. Tylko nie wywołuj jej w obsłudze przerwania a w pętli głównej. Bo gdybyś wywołał jej obsługę w przerwaniu...
Czy ktoś dysponuje instrukcją obsługi timera PZ-1, lub mógłby podzielić się własnymi doświadczeniami zwiżanymi z nastawienaiem zegara i używaniem programów ?
To jest listing programu z linku http://www.elektroda.pl/rtvforum/topic88... Jest to program sterownika ZD-100 PLC-16 Prosze sprawdzisz mój opis listingu tego programu , który poprawiłem 0 LD %I0.0.2 sprawdz stan wejścia 1 S %M0 ustaw marker 0 2 BLK %TM0 obsluga fbd timera 0 3 LD %M0 sprawdz stan bitu m0 4 IN uzyj powyzszego jako wejscia tajmera...
Metoda ta sama odnośnie pomijania niektórych próbek .. ale jak mniemam uzyskujesz częstotliwości mniejsze - ze względu na czas potrzebny na obsługę timera.
Dokładnie tak jak masz napisane, z tym, że konfigurujesz jeden z timerów do dliczania czasu. Przykładów w Bascomie z obsługą timera znajdziesz bez liku.
Zapoznaję się powoli z tematem ARM-ów i korzystam z fajnej (tak mi się dotychczas wydawało :) strony [url=http://www.dioda.com.pl/forum/topic... Generalnie najprostszy kod obsługi timera przepisałem stamtąd i niby wszystko działa ale z jednym mankamentem. Wypisuję na LCD numer kolejnego...
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ć.
CO do stanu timera pobierasz bezpośrednio z rejestru, nie znam tego mikrokontrolera (pracuje na AVR'ach), a jeśli chodzi o przerwanie po odpowiednim ustawieniu rejestrw przeskok nastapi sam do odpowiedniej funkcji, podobnie jak powyżej nie podam nazwy funkcji - skłonności do pracy AVR'ach :D
Brakuje inicjalizacji stosu i powrotu z obsługi przerwania (reti).
Oj widzę, że musisz troszkę pocztać o programowaniu... Jeśli tylko chcesz wywołać zdarzenie kliknięcia, to nic dodatkowo nie deklarujesz. Kod: Button1.Click(); umieszczasz w procedurze/zdarzeniu obsługi tego czegoś, czym chcesz wywołać "samokliknięcie" przycisku. (ale napisałem :-)). Może być to obsługa kliknięcia innego przycisku, timer, procedura,......
Witam To poszukaj sobie na polskim google - informacji na temat tej rodziny tam nie brakuję. Jaki język programowania? Do obsługi timerów: TMOD=0x11; T0 i T1 jako 16bit timery ET1=1; odblokowanie przerywania T1 EA=1; globalne przerywania TR1=1; włączenie T1 void przerywanie_T1 () interrupt 3 { TH1=jakaś wartoś; TL1=jakaś wartoś; jakaś wartość...
Witam. Mam pytanie dotyczące umieszczenia obsługi przycisków w kodzie, a konkretnie - nie wiem czy zrobić obsługę zegara w timerze, a obsługę przycisków w pętli głównej czy też odwrotnie, a może to i to w timerze.
Ja się tylko zapytam :wink: ... "na co zużyłeś tyle flashu :?: " Obsługa timera, obsługa wartości sterujących, wyboru ktory LED ma się świecić(jest ich 8), tekst wyświetlany jest elementem procedury menu, no i procedurki różne ;) Tak przy okazji tworzę szkielet do wielu innych projektów... -- Pozdrawiam, Daniel
Tak tak, wiadomo. Jeszcze dla pewności sprawdziłem co się stanie jeśli w przerwaniu mam tylko kasowanie flagi, i teraz jest już bez push i pop. Wcześniej miałem tam wywoływaną jeszcze jedną funkcję od obsługi timera.
Events OnPaint ma do wyboru przyciski które wcześniej zdefiniowałem oraz TimerTick który też zdefiniowałem. W obsłudze Timera napisałem Refrech(); Działa ale miga mi cały ekran i wygląda to nieciekawie.
Witam. Na początek napiszę że to ma być mój pierwszy program napisany w tym języku i pierwszy kontakt z mikrokontrolerami. Nie mam pomysłu jak się zabrać za uruchomienie jakiegoś "zegara". Wydaje mi się że wtrącenie w pytaniu „jakiegoś zegara” wprowadza ludzi w błąd. Z dalszej części wynika że raczej potrzebujesz obsługi TIMERA wbudowanego...
Na pewno ACSR = _BV(ACIE); // Komparator powinno wyglądać tak ACSR |= _BV(ACIE); // Komparator Nie ma już chyba uint16... I jeszcze jedno zmienną pwm musisz zadeklarować tak: volatile unsigned int pwm= 255; ważne jest słowo kluczowe volatile... Jak wygląda funkcja PWM_out()...?.?.? Może przepisuj pwm do OCR1A w obsłudze przerwania...
A co mówi instrukcja obsługi?
możesz sobie całego switcha umieścić w funkcji obsługi timera, ale zmienna licznik musi być wtedy globalna, czyli zadeklarowana powyżej main, tak sądzę... http://wkretak.pl/readarticle.php?articl...
program pisałem z Polską wersją pomocy tam nic o ctc nie pisze ale poczytam. Może Bascom nie obsługuje tego, choć wątpię, bo CTC to "popularny" sposób obsługi timera. Jeśli nawet Bascom nie obsłuży CTC to można to zrobić pisząc bezpośrednio do rejestrów.
Witam! Proszę o pomoc, buduję zegarek na Atmega8a. Problem stwarza mi obsługa timera w przerwaniu. Właściwie to nie mogę znaleźć nic konkretnego. Jak włączyć timer? Gdzie ustawia się flaga przepełnienia? Czy flagę trzeba wyzerować ręcznie? Jak to wygląda z perspektywy kodu C++? Dziękuję serdecznie za pomoc :)
obsługa timera bascom obsługa przerwania timera arduino obsługa przerwania timera
ct4810 sterownik citroen philips gniazdka hager
agilent 34401a ecc85 przestrojenie
Bęben pralki Hoover HWP4 37AMBC/1-S: klejony czy skręcany? Radio Android nie odbiera sygnału FM - brak zasilania wzmacniacza antenowego