Witam, jeśli to nie pomyłka przy przepisywaniu to powinno być: SIGNAL (SIG_OVERFLOWx) gdzie x to jeden lub zero w zależności o który timer Ci chodzi. Pozdrawiam, Grzesiek.
wiesz... coś mi chodzi po głowie, że przy którejś wersji gcc albo avr-libc nastąpiły jakieś zmiany nazewnictwa procedur obsługi przerwań. Głowy nie dam że tak było, ale w każdym razie u mnie procedura obsługi od przerwania pochodzącego od przepełnienia timera 0 nazywa się: ISR (TIMER0_OVF_vect) { ... } A druga rzecz, to z całą pewnością...
Hmmm, ... Możesz wkleić aktualny kod łącznie z zerowaniem preskalera? Czy wcześniej używasz Timera do innych celów?
Witam. Dzięki temu $regfile = "M8DEF.dat" kompilator wie z jakim procesorem ma do czynienia. Jeżeli tego nie miałeś w pierwotnym programie, to kompilator brał tę informację z ustawienia w Opcjach. A pewnie był tam wpisany procesor, który nie miał timera nr 2. To samo z przerwaniami - wektor przerwań od timera nr 0 jest różny dla różnych typów procesorów...
//timer 1 16bit konfiguracja (ICP1) TCNT1=0; //ustawienie poczatkowej wartosci timera 1 TCCR1B |= (1<<ICES1); //pomiar na narastajacym zboczu TIMSK |= (1<<TICIE1) | (1<<TOIE1); //zezwolenie na przerwanie od ICP i od overflow TCCR1B |= (1<<CS12) | (1<<CS10) ; //prescaler 1024...
Skoro 122 wywołuje zmianę stanu diody co sekundę, to gdy doliczysz do 0.244 to będziesz miał przerwanie co 2ms :D Pojedyncze przerwanie jest wołane co 8 milisekund. Albo zmień preskaler albo użyj innego timera i po ludzki włącz ctc
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...
(at)atom1477 Jeśli ja wygeneruje przerwanie co 1 ms, to muszę mieć potem możliwość coś zrobić, czyli w przerwaniu muszę chociaż zmienną inkrementować, albo zrobię toggle pin i połączenie z głównym MCU przez INT0 tak jak pisałem post wcześniej . Mam kwarc 20ppm i nie jest on wystarczająco stabilny, dlatego poszedłem na DS3231 i źródło timera od T1....
Jednym z wielu błędów w Twoim kodzie jest przetwarzanie w pętli głównej zmiennych adc1 i adc2 zapisywanych w przerwaniu timera. To są zmienne 16-bitowe, więc pomiędzy odczytem jednej i drugiej połówki przerwanie timera może zmienić wartość zmiennej. Blokuj przerwania na czas ich odczytu, czytaj je w pętli głównej raz, skopiuj do innej zmiennej roboczej...
jak chcesz takie duze czestotliwości mieżyć to musisz użyć timera żeby liczył zewnętrzne impulsy, wtedy drógim timerem wyzwalasz przerwanie co określony czas (im dłuższy tym lepszy bo pomiar dokładniejszy) liczysz ile było ilmpusów z zewnątrz w okreslonym czasie. wydaje mi się że tą metodą dało by sie mieżyć nawet do 100Mhz ale jest jedno zalożenie...
Nie pamiętam, jak działa makro sleep_mode(); ale przecież przechodzisz do trybu uśpienia w przerwaniu od timera a jak wiadomo wejście w dowolną procedurę obsługi przerwania blokuje globalne zezwolenie na obsługę przerwań, wiec prawdopodobnie w chwili uśpienia skutecznie blokujesz także przerwanie zewnętrzne, przez co nie możesz później wzbudzić procesora...
Jaka jest maksymalna częstotliwość pracy kwarca wewnętrznego Atmegi8? ATmega nie ma w środku kwarc u , tylko oscylator RC, to tak gwoli ścisłości. Mam ustawione 4Mhz i kiedy ustawiam prescaler w timerze 16bitowym na 64 (TCCR1B|=1<<CS11|1<<CS10;) tak aby przerwanie spowodowane przepełniniem timera było wywoływane mniejwięcej co 1s 4000000/64/2^16...
Kiedyś napisałem prosty przykład użycia Timera w trybie CTC dla AVR w AVR Studio w języku C. W załączniku znajduje się ten gotowy kompletny program powodujący przerwanie od porównania (Compare) co około 250 ms i generujący przy okazji falę prostokątną na wyjściu OC0A. Otrzymujemy w ten sposób przebieg prostokątny na tej nóżce o okresie 2 Hz (2x250 ms...
Pierwszy i bardzo poważny problem zauważyłem w funkcji TIMER1_COMPA, jest nim linijka rjmp uspij. Gdy się wykona, to przerwania pozostaną zablokowane, oraz kilka bajtów na stosie zostanie uwięzionych - głównie adres powrotu z przerwania. Można temu zaradzić poprzez wstawienie pop + pop + sei przed rjmp. Drugi problem, to karygodna pętla główna - dławienie...
zrób to mniej więcej tak: .INCLUDE "m8def.inc" .cseg ; początek segmentu pamięci programu .org 0 rjmp RESET ; wektor ZEROWY (po resecie) .org OVF0addr ; wektor przerwania od przepełnienia Timera0 rjmp Przerwanie_T0 ; i tu właśnie skok do obsługi tego przerwania RESET: LDI R16, HIGH( RAMEND) OUT SPH, R16 LDI R16, LOW( RAMEND) OUT SPL, R16 ; porządek...
272 to taka nieciekawa wartość do mnożenia. Ja zrobiłem tak: Przerwania z TIM0 i TIM1 TIM0 zlicza impulsy z wejścia zliczającego, i gdy się przepełni jest króciutkie przerwanie inkrementujące parę 3 rejestrów. TIM1 zgłasza przerwanie równiutko co pół sekundy. Na samym początku obsługi przerwania jest odczytywana wartość impulsów z TIM0, i jest on resetowany....
Ten sam kod, który zaprezentowałem w pierwszym poście , natomiast przerwanie wywołane już na nodze portb.0 i działa zmienna nie jest nadpisywana. Cała reszta kodu bez zmian poza zmianą przerwania. Przerwania skonfigurowane prawidłowo. Moze przerwania masz skonfigurowane prawidlowo... ale..... Czy mozesz wyjasnic w jakim celu, w obsludze przerwania...
PC6 (RESET) - opcjonalnie nóżka resetująca procesor PD0 (RXD) - odbiornik UARTA PD1 (TXD) - nadajnik UARTA PD2 (INT0) - przerwanie zewnętrzne PD3 (INT1) - przerwanie zewnętrzne PD4 (XCK/T0) - taktowanie USARTA albo impulsy dla timera VCC - zasilanie cyfrowe GND - masa PB6 (XTAL1/TOSC1) -do podłączenia kwarcu (wejście) PB7 (XTAL2/TOSC2) -do podłączenia...
Witajcie, W oparciu o Atmegę8 zrobiłem sobie prosty sterownik. Odczytuję temp. z dwóch czujników ds18b20 i na jej podstawie steruje elektrozaworem. Chciałbym dodatkowo wprowadzić obsługę 3 przycisków. Problem w tym, że sam odczyt temp. z czujek powoduje pewne opóźnienia np. czas konwersji jest dosyć spory bo 750ms w związku z tym reakcja na przyciśnięcie...
$katalog_WinAVR$/doc/avr-libc/avr-libc-u... Tworzysz osobny plik w asemblerze (.S, nie .s) zawierający procedurę obsługi przerwania, kompilujesz do pliku .o i linkujesz z pozostałymi plikami. W dołączanym wo WinAVR szablonie Makefile jest przewidziane miejsce na wypisanie źródeł w asemblerze (ASRC = $tu wpisz nazwy plików$). Przykład,...
No Dobra program juz prawie napisałem i głowiłem sie nad wersja ze zmiennym PWM+f... ale z tego co mi odpisałes to wnioskuję ze coś tu mi nie gra... A nie możnaby programowo realizować ten restart co 80ms? Moze napisz dokładniej co to ma być a coś doradzimy :) Pozdro No wlasnie o to chodziło by nie restartorwać tego zewnetrznie bo chyba prosciej zaimplementowac...
http://obrazki.elektroda.pl/2954571700_1... Davide Gironi skonstruował automatyczną nawijarkę do przystawek gitarowych. Jeśli ktokolwiek z Was wykonywał kiedyś taki pick-up, to wie, jak trudne i jednocześnie, jak ważne jest dobre nawinięcie jego uzwojenia. Zaprezentowana nawijarka CNC pozwala istotnie uprościć ten proces. Układ sterowany...
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...
Witam. Chcę przedstawić szopkę Bożonarodzeniową. http://obrazki.elektroda.pl/9749389200_1... Całość wykonana własnoręcznie z pomocą kochanej żonki. Opiszę co i jak. Szopka ma ruchomy żłobek, dwie pochodnie i ognisko, na filmikach wszystko widać. Opiszę konstrukcję, do sterowania wszystkim użyłem Atmegi8. Trzy sprzętowe kanały PWM posłużyły...
http://obrazki.elektroda.pl/5336859500_1... Projekt został zrealizowany na potrzeby sterowania urządzeniami zasilanymi z sieci 230V , świetnie nadaje się jako sterownik do wytrawiarki lub innych tego typu urządzeń, w których konieczne jest utrzymywanie stałej temperatury. Układ oparty jest o mikrokontroler ATmega8 firmy Atmel , który...
pomyliłes timery, zrobiłeś przerwanie od timera 2 a włączyłeś timer 1.
Chyba o to chodziło. Faktycznie tak to ma działać (instrukcja). Wielkie dziękuję. A co do wyglądu, hmm.. trochę poprawiłem, ale tamto było bardziej czytelne (dla mnie) :), nieistotne, już sobie radzę pomału w treści [syntax=c] #define F_CPU 12000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> int main()...
Dziwne jest to że w starszej wersji ten kod działa, a raczej nie powinien :). W helpie pisze że funkcja GetRC5 wykorzystuje timer0 i przerwanie od tego timera. Umieszczenie tej funkcji w przerwaniu INT0 wydaje się być błędne. Przerwanie od timera się nie wykona, dopóki nie zakończy się obsługa przerwanie INT0.
Wstęp Modelarstwo rakietowe to piękny sport uprawiany przez nielicznych. Jego piękno tkwi w modelach rakiet oraz wielu silników rakietowych które tworzą amatorzy tego sportu. Elektroniczne moduły zapalające silniki są nieodzownym elementem stanowiącym bezpieczeństwo tego sportu. Moja propozycja timera (spark ignition system) do silników rakietowych...
Hmm. Dobrze napisałeś, że Tobie się wydaje, że obydwa Timery odliczają dobrze, a tak nie jest. Wydaje mi się, że chciałeś uzyskać przerwanie co 8ms ? Więc musisz po każdym przeładowaniu timera go ładować początkowa wartością. Czyli dla timer0 to będzie 6, a dla timera1 to będzie 57536. Ale i tak nie wiem czemu musisz używać dwóch timerów by generować...
Timer- np. Timer1- jako licznik zlicza impulsy zewnętrzne. Podane na odpowiednią końcówkę- T1 w wypadku ATmega8. Nie potrzebuje żadnego preskalera- bo preskaler dzieli impulsy z zegara- a tu nie ma co dzielić. Ustawiamy bity CS10-CS12 na external clock source- falling lub rising. Czy ustawiamy końcówkę T1 jako wejście- nie pamietam. Można ustawić. Ilość...
Przy ustawieniu kwarcu na 1MHz i preskalera na 1024 w przypadku tego timera przerwanie bedzie miało miejsce co 0,262s (tak mi podaje taki mały programik). Czy dla 8 bitowego timera jest w takim razie w jakikolwiek sposób realizowalne przerwanie co np 1sek? Czy tylko mogę wykorzystać do tego timer 16bitowy?
Okej, jakoś sobie poradziłem z tą konfiguracją timera. Natomiast pojawił się inny problem. Ogólnie to próbuję zrobić multipleksowe sterowanie dwoma wyświetlaczami 7-segmentowymi z użyciem układu PCF8574. Sytuacja wygląda w ten sposób, że w pętli głównej loop() chcę modyfikować dwie zmienne odpowiadające każdej z cyfr, a przerwania chciałem użyć jako...
po ustawieniu rejestrów podanych wyzej nic sie nie zmienia [syntax=c]void timer_init() { TCCR1A |= (1 << WGM12)|(1 << CS12)|(1<<COM1A0);//CTC ,preskaler256 TCNT1 = 0; //wartosc poczatkowa timera TIMSK |= (1<<OCIE1A); // przerwanie Compare Match A OCR1A = 31250;//porównanie wartosci (około 1s) }[/syntax]
http://mikrokontrolery.blogspot.com/2011... uznajmy, że zrobiłbym tak, iż w tym przerwaniu miga sobie dioda czuwania jak mogę zrobić aby ta dioda gasła po włączeniu alarmu PORTC &= ~czuwanie nie działa :(, pytanie brzmi - Jak zatrzymać przerwanie od przepełnienia timera ?
A co jest nie tak? Możesz opisać dokładniej problem. Load Timer0 , 1 Po tej komendzie licznik przepełni się po jednym cyklu. Czy na pewno to ma Tylko jeden cykl? Ciągle jest wykonywane przerwanie i dlatego procesor nie ma czasu na resztę operacji.
witam jest proste w asm ale w c też nie powinno być problemu. Przerwania INT0 i INT1 mogą być wyzwalane zmianą stanu napięcia wysokim lub stanem niskim . Odpowiednio ustawić bit w rejestrze MCUCSR. Ustawić bit aktywujący przerwanie w rejestrze GICR. mierzysz czas przez odczyt TIMERa
Masz dwa poważne błędy: alokacja dużej tablicy na stosie w przerwaniu timera i odblokowanie przerwań w przerwaniu timera. Ten drugi błąd służy zapewne do zamaskowania poważniejszego błędu - koncepcyjnego. Przerwanie timera nie powinno przeszkadzać w obsłudzie przerwania UART, a zapewne przeszkadza, bo wykonuje się za długo.
OK, uzywam juz w tym celu timera... Tylko nie do konca orientuje sie z preskalerem i czestotliwoscia.. Tzn, jak uzykac jakies w miare dokladne wartosci...? Mam uC pracujacy na wew. oscylatorze 1MHz [ATMega8, Timer0]... Chcialbym, zeby przerwanie wywolywalo sie co 1 albo 10ms, jak dobrac preskaler i wartosc poczatkowa timera [8bitowego]?
TIMSK ^= (1 << OCIE1A); - powoduje zmiane stanu pinu na przeciwny, jesli chcesz wyzerowac to stosuj TIMSK &=~ (1 << OCIE1A); a jesli ustawic to TIMSK |= (1 << OCIE1A); Nastepne - to, ze blokujesz przerwania od timera nie znaczy, ze timer w tym czasie nie liczy - w efekcie pierwsze przerwanie wcale nie nastepuje po 1778 cyklach...
Nie jestem pewny czy procesor zdąży wykonać to co masz w tym przerwaniu , zanim przyjdzie następne (mam na myśli wszystko ).Program w przerwaniu ma być krótki , chyba że pierwsza linijka jest taka " Disable timer0 " , ale w twoim programie taka instrukcja raczej odpada. I jeszcze jedno , co się dzieje jeżeli podczas transmisji po i2c lub 1Wire przyjdzie...
Bo jak ma działać? Widać kolega nie do końca rozumie mechanizm przerwań, skoro czeka na przerwanie INT0, a włącza przerwanie przepełnienia Timera0. Adresem przerwania przepełnienia Timera0 jest OVF0addr, a nie INT0addr. Przerwanie od INT0 wyzwalane jest ZEWNĘTRZNIE zboczem lub stanem na fizycznym wejściu INT0 mikrokontrolera, a nie Timerem. Skąd ten...
To może po kolei: 1. Co chcesz uzyskać i jak w związku z tym chcesz zaprogramować timery? 2. Jaka jest częstotliwość procesora i czy ją poprawie zdefiniowałeś? 3. Nie uruchamiaj timera przed jego zaprogramowaniem - robisz to obecnie z oboma timerami. 4. Popraw tę bzdurę: licznik = 0; for(licznik==0;licznik<100;) 5. Wyrzuć ze swojego kodu przełączanie...
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ę...
Tak, lecz wymaga to wpisania do timera wartości początkowej <>0 ... Czyżby :?: OCR1A=4000000/256-1,preskaler=256, Mode 4(CTC) i ... masz przerwanie co 1s , bez przeładowywania TCNT1 . To tylko jedna z kilku możliwych konfiguracji Timera1. Piotrek
witam problem w tym że wejście do przerwania i wpisanie nowej wartości do timera trwa kilka taktów i przez to powstają te przekłamania zamiast próbować z dziwnymi poprawieniami danych wykorzystaj przerwanie "compare" i ustaw automatyczny reset wartości timera. wtedy wszystko było by automatycznie.... ;) pozdrawiam
No niestety: zajrzyj do helpa . Dokładniej tu, gdzie jest opisane jak: - skonfigurować timer - włączyć timer - wyłączyc timer - odczytać stan timera Pseudokod: SKONFIGURUJ TIMER ZRESETUJ TIMER DO WLACZ TIMER (tu kod ktory sprawdzasz) WYLACZ TIMER ODCZYTAJ TIMER (tu obsluga wartosci wzietej z timera) ZRESETUJ TIMER LOOP Zeby takie pomiary...
Co do timera to na wejście podajesz sygnał podzielony przez prescaler, czyli: 1, 8, 64, 256 lub 1024. Potem możesz za pomocą trybu CTC osiągać dodatkowy podział przez wartość regulowaną z zakresu 1-256 dla wersji 8-bit lub 1-65536 dla 16-bit. A co do uruchomienia na timerze - wrzucasz ten kod do timera i wywalasz ręczne delaye - kod wykona się jednorazowo...
Witam. Przeczytałem cały temat od początku do końca i nie znalazłem dużo informacji na temat PIC. Kilka osób (m.in. McRancor) pisało że woli PIC od AVR. A ja mam pytanie czemu?? Weźmy np popularnego ATmega8 i PIC16F84a. Porównując te dwa procki, PIC (wg mnie) wypada słabo. Po pierwsze cena, brana z jednego sklepu: ATmega 5zł, PIC 9zł. Po drugie ten...
Poprawilem juz te volatile'y i dalem nowe funkcje obslugi przerwan. BTW. Czy przerwanie timera powinno byc tak: [syntax=c]ISR(TIMER1_OVF_vect) { display(); //do PWM to triac motorPwm(); }[/syntax]? Ale nijak nie wiem w jaki sposob: 1) zawiesic wykonanie przerwan, gdy zmieniam obroty silnika 2) poczekac te 4 sekundy na zatrzymanie sie silnika, przeciez...
Potrzebuję pomocy w konfiguracji Timer1 (ten mam wolny) ewentulanie modyfikacja obecnej konfiguracji Timer0. Obecna konfiguracja jest dla odliczania odpowiedniego czasu dla ramek RC5 odbieranych przez odbiornik TSOP322 przy taktowaniu procesora z F_CPU=8MHz, w celu oszczędności energii chcę zrobić odbieranie przy częstotliwości 1MHz. Jak widać z obsługi...
Ja też Bascoma nie znam więc Ci wytłumaczę jak ja bym to zrobił, może Ci się przyda. Masz zmienną impuls która jest inkrementowana w przerwaniu od zdarzenia zewnętrznego np zboczem opadającym. Ustawiasz sobie jeden Timer zgłaszający przerwanie (np od przepełnienia) powiedzmy co 1 ms. Deklarujesz zmienną milisekunda którą za każdym razem inkrementujesz...
Propozycja z 2 timerami może jest koncepcyjnie prostsza, ale zobaczmy - zalecana fext dla timera powinna być < fclk/2.5, czyli TOP timera generującego ustawiasz na min. 2 -> fext = fclk/3 (wypełnienie 1/3 lub 2/3). Stąd widać, że potrzebujesz 3x większej częstotliwości zegara niż w przypadku rozwiązania z pojedyńczym timerem. Poza tym z dwoma...
Mija się. Kluczuj wyjście timera programowo w przerwaniu timera. Ponieważ przerwanie to będzie zgłaszane z częstotliwością 38 kHz, procesor musisz pędzić na minimum 8 MHz (lepiej więcej) i praktycznie żadnego innego przerwania już nie obsłużysz - w tym musisz zrobić wszystko.
Według niej w trybie idle zatrzymany zostaje zegar CPU, zegar Timerów działa nie przerwanie. Zatem nie będą występowały ŻADNE problemy z stabilnością zegara RTC, gdy: -w pętli głównej procesor będzie wprowadzany do trybu IDLE --w przerwaniu od TIMERA co 4ms odświeżane są wyświetlacze LED - Jest zgłaszane co przerwanie od licznika TIMER2 pracującego...
W celu zezwolenia na przerwanie TIMER1_COMPA należy ustawić flagę OCIE1A, a nie TICIE1. Co do trybu PWM to chyba tylko w takim trybie mogę uzyskać porównanie licznika z którymś z rejestrów (OCR1A) w trakcie inkrementacji. Nie tylko w takim trybie. W trybie Normal też uzyskasz przerwania w momencie zrównania wartości timera z rejestrem OCR1A, dodatkowo...
Nie lepiej wykorzystać przerwanie ICP1 timer1. Tam przepisywać zapamiętaną wartość timer1 (timer1 w konfiguracji timera zmienna = capture1), i przeliczać na prędkość, znamy przecież drogę (odległość między magnesami) a potrzebujemy tylko czas pomiędzy kolejnymi przerwaniami wywołanymi tymi magnesami. Po co zliczać ilość impulsów (drogi) w danym czasie...
przepraszam,ta komenta stop timer1 była tam przez pomyłkę,wpisałem ją a przed kompilacją usunąłem i wkleiłem tutaj zły kod jak było on timer czas działało tak samo...w symulatorze wszystko działa,a w procku nic;/ ustawianie czasu działa,ale zegar stoi w miejscu nie wiem czy to coś pomoże,ale po wskazaniach tego timera wygląda na to że albo w ogóle nie...
Zacznij od napisania, jak są podłączone przyciski. Zupełnie nie rozumiem czemu w celu zapisu bajtu do rejestru DDR używasz pięciu operacji logicznych na tym rejestrze zamiast napisać po prostu: DDRC = Wyjscie; To samo z PORTC. Dalej . sprawdzasz, czy przyciski są zwolnione, ale nie sprawdzasz, cza są wciśnięte. Przy takiej realizacji - pętla i delay...
No pewnie że jest w helpie- to jest ta podstawowa zasada getatkbd. Ale jak wejdziesz w przerwania gdzie dasz wait- a oczekiwanie na kod klawisza nie wyłącza przerwań- to będą błędy. Podobnie będzie gdy przerwanie od Timera będzie np. co 100us- a nie wiadomo co ile jest- co ile Autor daje.
Kurczę, przez ponad 20 lat projektowania urządzeń z mikrokontrolerami nigdy nie zdarzyło mi się wpaść na tak dziwaczny pomysł, jak przerwanie od przycisku/styku/impulsatora służące do czegokolwiek innego niż obudzenie urządzenia z głębokiego uśpienia. Poczytaj coś o uczciwym ignorowaniu drgań styków przy użyciu przerwania timera, a potem zabieraj się...
Co to za bełkot!? 1. Timer do odmierzania czasu skonfigurowany jako licznik impulsów z zewnątrz! 2. Podprogram obliczania czasu nigdy nie będzie wywołany z pętli głównej! 3. Wyświetlana ma być wartość licznika. Podaj kolego na koncówkę 11 impulsy z zewnątrz to je zacznie zliczać i wyświetlać. Bedziesz miał przynajmniej licznik impulsów. Program do zegara...
Jesli ktoś miał by pomysł jak to ogarnąć w bascomie to bardzo proszę o propozycję. Przecież napisałem. Przenieś Triak = 0 do Triakwl: i poprzedź Waitus . Na czas transakcji 1-wire wyłącz przerwania. Jak będzie zawieszał przerwania na całą transmisję 1-Wire to będzie mu migać. Może spróbować, jak pisałem wcześniej, zawieszać na 15us przy transmisji...
Witam. Napisałem sobie prosty kod: /** * Timer - test */ #include <avr/io.h> #include <avr/interrupt.h> #define T0_INIT 0xFF //Wartość początkowa timera volatile uint32_t timer; //Odliczanie czasu przez timer /** * Przerwanie przepełnienia timera */ SIGNAL ( SIG_OVERFLOW0 ) { TCNT0 = T0_INIT; if ( timer > 0 ) timer--;...
Częstotliwość tu nie odgrywa większej roli. Regulację uzyskuje się przez zmianę śrendiego czasu wyświetlania cyfry. Czyli np, dwa przerwaina timera - overflow - zmiana cyfry, przerwanie compare - wygaszenie wyświetlacza. Regulujesz jasność przerwaniem compare, dla 16-bitowego licznika masz głębię 16-bitową (teoretycznie). Tego typu koncepcję masz pokazaną...
Sposobow jest wiele. Np: Zrob sobie prosta tablice w ktorej bedziesz trzymal wartosci dla portu sterujacego cewkami silnika. Konfigurujesz sobie jeden z timerow zeby Ci generowal przerwanie co jakis czas. W obsludze przerwania wstawiasz ta tablice i zwiekszasz za kazdym razem indeks o 1. np: unsigned char a SIGNAL(SIG_XXX) // jaies przerwanie...
Potrzebuję odliczać czas z przedziału od 10ms do 99 godz. Zrobiłem to w taki sposób że ustawiony czas zamieniam na ms (liczba 4 bajtowa) i zliczam ilość przerwań od timera ustawonego na przerwanie 1ms. Wszystko fajnie tylko czas mi się rozjeżdza gdyż dokladność kwarcu jest ok 1%. Czy można jakoś zwiększyć stabilność wewnętrznego kwarcu (ATmega8)? Jaki...
Taka sama, jak sprzętowego, tylko musisz mieć przerwanie timera zgłaszane z częstotliwością równą iloczynowi częstotliwości PWM i liczby poziomów jasności - to zwykle za dużo na oprogramowanie tego w ciężkawej zabawce pt. Bascom. Jest na ten temat u Atmela dobra nota aplikacyjna.
Witam od dawna korzystam z przerwania od timera 0 w stylu sei(); SIGNAL (SIG_OVERFLOW0) { ... ... ... } wiem że to przestarzały sposób i wykorzystuje się teraz inny zapis i powinno się teraz inaczej pisać, na procesorach ATmega8 i ATmega16 działało bez żadnego problemu teraz pracuję na ATmega128 i już program się nie działa....
Zacznij od uruchomienia samego wyświetlania. Przerwanie timera zgłaszane z częstotliwością np. 300 x liczba_cyfr Hz, a w procedurze obsługi tego przerwania jakieś 8..10 linii kodu realizujących wyświetlanie cyfr na wyświetlaczu, przechowywanych w posatci tablicy. Kiedy to Ci zadziała, bierz się za resztę. Cały program, który to robi, zapewne zmieści...
Witam. Chciałem w celach edukacyjnych zrobić częstotliwościomierz. Ponieważ nie mam za bardzo skąd wziąć zewnętrznych impulsów postanowiłem, że jeden pin procka będzie je generował, a przerwanie int0 będzie liczyć ile tych impulsów było. Do odmierzenia czasu posłużył timer1, który ma odliczyć sekundę (więc wynik od razu w Hz). Po upływie sekundy ma...
Próbuję przerobić przykład "Przyklady\LCDAlfa\LCDAlfa-transact-int\... z książki [url=http://helion.pl/ksiazki/jezyk-c-dl...
Próbowałem ustawić prescale timera 1 na 8 co powinno dać przerwanie co 32,768ms i w przerwaniu zwiększałem liczniki mikro\milisekund co eliminowałoby opóźnienie przed zmianą wartości licznka. Wynik bez większych zmian - również około 1s\2h, może minimalnie mniej. Czy to znaczy, że miałeś kod, w którym nie modyfikowałeś timera ? Bo właśnie to Ci chciałem...
Wyrzuć rezystory 10k z miejsc, w których są i wstaw po jednym takim rezystorze pomiędzy plusem a górą każdego potencjometru. Suwaki potencjometrów podłącz bezpośrednio do wejść ADC. Cały kod powinien korzystać z dwóch przerwań timera pracującego w trybie CTC ze stałym okresem 20 ms. Przerwanie końca okresu czyta poprzedni pomiar ADC, wyzwala pomiar...
Pytanie jak szybko kręci się koło. Jeżeli nawet będzie to 3000 obr/min, to jeden obrót zajmie 20 ms. Przerwanie od timera możesz uruchomić co 5 ms, a przy krótkim programie to nawet znacznie częściej. Czyli w najgorszym przypadku będziesz miał cztery odczyty licznika na jeden obrót koła. To będzie jeszcze mało?
Cześć Attiny26 może przyjąć przerwania od każdej nogi, robisz licznik od jakiegoś wewnętrznego timera i zliczasz od 0 do 255, jeśli doliczysz do 255 to włączasz alarm, liczysz oczywiście na tylu zmiennych naraz ile Ci potrzeba. Teraz dodajesz do tego przerwania od czujników, jeśli przyjdzie przerwanie to zerujesz odpowiadającą mu zmienną i znowu ją...
aha, uzywasz juz timera do multipleksowania. To spoko jak jest wywolywanie przerwanie to wraca spoworotem do petli (tak jest przynajmniej w bascomie). Dodano po 28 Dodaj do petli glownej tryb powersave i wytestuj!
Tego się tak nie robi. Uruchom przerwanie timera. Zapisz wartości strowania portów dla kolejnych kroków w tablicy stałych. W przerwaniu timera testuj przycisk, a co pewną liczbę przerwań wyrzucaj na porty kolejną wartość z tablicy.Przy takim podejściu cały kod zmieści się w kilkunastu liniach, może dwudziestu paru, a jego długość nie będzie zależała...
Witam Mam jakiś błąd w programie ale nie mogę dojść gdzie. Przed mian'em mam obsługę przerwania dla SIG_OUTPUT_COMPARE1A która teoretycznie powinna się wywoływać co 1s. Timer1 ustawiony w tryb compare na preskalerze 256, ustawienia timera są na początku maina. SIGNAL(SIG_OUTPUT_COMPARE1A) // sygnal porownania od timera 1A { sec++; sec%=60;...
Witaj. Postaram się w miarę szybko wyjaśnić algorytm działania programu. Procesor jest taktowany z częstotliwością 4MHz, i ta częstotliwość jest dzielona przez 1024 w preskalerze timera 0 - na wejściu timera 0 mamy impuls co 0.256 ms. Timer 0 jest tak skonfigurowany, że wywołuje przerwanie po jego przepełnieniu. Chcemy mieć przerwania z regulowaną częstotliwością...
Generalnie zakładam, że jak ktoś prosi o pomoc w jakiejś kwestii to jej oczekuje, a nie krytyki, że robi coś źle.. Ale wydaje mi się, że inne pokolenia nie chętnie by z tego korzystały. Może lepiej zamiast 2 różnych czasów zrobić tak: jeżeli pyknę raz wyłącznikiem, to po sekundzie zapala się pierwsze światło jeśli pyknę 2 razy to zapala się drugie jeśli...
SIGNAL(SIG_INTERRUPT0) { short int a; lcd_xy(0,0); write_text("Temp:")... GIFR = 0x40; a = odczytaj_temp(); write_temp(a); zapis_twi(0x00,0x04); //reset flagi wyst przerwania w pcf GIFR|=_BV(INTF0); lcd_xy(1,0); zapis_twi(0x07,0x80); //ustawienie wart poczatkowej...
Witam, mam pytanie odnośnie timera w atmega8. Zdefiniowałem w programie dla Timer2 tryb pracy CTC i bez preskalera (TCCR2 = _BV(WGM21) | _BV(CS20)) oraz generowanie przerwania przy zliczeniu do 4 (OCR2 = 4). Nie dokonywałem żadnych zmian przy zegarze wewnętrznym z którego korzystam, zatem z tego co wiem ma on częstotliwość domyślną 1MHz. Przerwanie...
[syntax=c] #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define TIMER0_ON (TIMSK |= _BV(TOIE0)) #define TIMER1_ON (TIMSK |= _BV(TOIE1)) #define TIMER0_OFF (TIMSK &= ~_BV(TOIE0)) #define TIMER1_OFF (TIMSK &= ~_BV(TOIE1)) #define led1_ON PORTD |= (1<<PD1) #define led2_ON PORTD |= (1<<PC0)...
Metod to jest milion. Jedną z nich może być jak najbardziej zrobienie tego na procku ATmega8 jak i każdym innym gdyby miał robić tylko to ;) .... Do sterowania serwami spokojnie można napisać własną obsługę programową bez korzystania ze sprzętowych PWMów jeśli jest ich za mało w procku. Tak więc do wyboru do koloru ;) Ja właśnie w tym robociku wykorzystałem...
Witam! Mam dość nietypowy problem z AVR-kami. Ostatnio używałem Timera na ATTiny2313. Ustawiłem preskaler /256, kwarc 8MHz, timer 16bit w trybie porównania i przerwanie. Wartość do porównania była ustawiona na ok. 31250. Ostatecznie powinienem otrzymać przerwanie z częstotliwością ok. 1Hz. To zwiększało licznik i on był wyświetlany. I tu pojawił się...
Na początek zdecyduj jakie przerwanie ci jest potrzebne... Jeżeli od timera to szukaj opisu przerwania w rozdziale opisującą jego konfiugurację... Po pierwsze trzeba uaktywnić przerwania czyli sei() Przerwania timerów aktywuje się w rejestrze TIMSK... Odpowiednio uart w swoich rejestrach posiada bity odpowiadające za aktywację przerwania od TX, RX itd......
Witam. Prescaler jest to dzielnik częstotliwości. Jeżeli użył byś kwarcu 8 MHz oraz timera 0 przepełnił by ci się on 31250 razy.Aby zmniejszyc częstotliwość wyrzucanych przerwań używa sie prescalera. Np ustawiając prescaler 64 uzyskasz przerwanie co 0,00204800 s. Co do drugiego pytania to w BASCOM'ie licznik się zeruje chyba że wpiszesz mu jakąś wartość....
Co do bascoma...jako ze generuje wolny kod to nie możesz wepchnąć rozbudowanej obsługi licznika w przerwanie, bo pogubisz takty albo wykopyrtniesz procesor bo sie stos przepełni(w przypadku gdybys w obsłudze przerwań nie wyłączał przerwań, a w trakcie trwania jego obsługi wystąpiło następne przerwanie i tak w kółko) Musisz wziąć pod uwagę czas reakcji...
Witam ponownie, przestudiowałem kilkukrotnie podane wyżej linki postaram sie juz nie wklejać nie przemyślanego kodu:) w międzyczasie zabrałem sie za modyfikacje kodu i tak jak zakładałem w początkowej fazie projektu czyli ponowny pomiar po odczekaniu 1 sekundy używając przerwania timiera w trybie porównywania ctc.Proszę o sprawdzenie poprawności kodu...
robie uklad gdzie chce wykorzystac element max6575lzut.. zapoznalem sie z dokumentacja jednakze nie otrzymuje wartosci zmierzonej.. moze wiecej szczegolow.. uklad podlaczylem do wejscia portd.2 (int0) uP atmega 8... wybralem 5us/K (przez odpowiednie polaczenie wyprowadzene ukladu max).. w programie na wstepie ustawiam port jako wyjscie i ustawiam w...
xury dla początkującego wait czy waitms to najprostsze rozwiązanie choć już naczytałem się, że nie najlepsze i by tego unikać właśnie poprzez timery w jednym z tematów mirekk36 to nawet zademonstrował na atmega8 oraz ganił za używanie wait oraz waitms Nie poradziłem sobie w przełożeniu kodu z atmegi na attine :( Sprawdzone i działa rewelacyjnie WIELKIE...
Zakładam, że można pominąć czasy Mark Time Between Frames (MTBF) oraz Mark Time Between Packets (MTBP), ponieważ zgodnie ze standardem mogą one być równe 0. Gdyby przyjąć, że zmiany w poszczególnych kanałach nie są od siebie zależne, czyli nie trzeba zmienić najpierw wszystkich (lub wybranej grupy) wartości kanałów, a dopiero później przesłać je w jednym...
Szukałem odpowiedzi na to pytanie, lecz nie znalazłem, wiec postanowiłem rozpocząć nowy temat. Otóż mam problem z liczeniem kanałów DMX, a dokładnie z timerem0 którego używam w tym celu. Mikrokontroler to jak w temacie ATmega8, częstotliwość taktowania 8 MHz, ustawienia sprzętowego UART 250 000 baud. Według specyfikacji DMX najpewniej rozpoznać nowy...
Spróbowałem własnych sił i oczywiście z pomocą forum, stworzyłem taki kod: int flaga=0; // flaga czy INT0 jest "0" czy "1" int a=0; // zmienna zwiększana przy każdym przepełnieniu licznika 0 int main(void) { //ustawienia wejścia INT0 DDRD&= ~(1<<DDD2); // konfiguracja - WEJSCIE ustawianie zera PORTD|=1<<PIND2;...
Da się i własnie na flagach timera powinno się to zrobić. Samo taktowanie obniżaniem wartości to nie wszystko. Dioda zapala się już przy bardzo małej wartości PWM i potem dokładanie jej czasu intensywność świecenia zmienia coraz mniej. Dlatego przy ściemnianiu mało się dzieje i potem nagle dioda szybko gaśnie. Chciałem wiec uzyskać taki efekt by im...
Ok posiedziałem ciut, poczytałem w necie jak się używa te Timery i ich przepełnienia . Powstał taki oto kod .Proszę wyświetlacz traktować jako pomoc pokazującą mi ile już wystąpiło przepełnień, zresztą bardzo fajnie to pokazuje. Ramowa zasada jest taka - programik ma zliczać przepełnienia do 2108 i się zatrzymać po osiągnięciu tej sumy(wstępnie ta wartość...
Cześć, chciałem przeportować kod do odbioru RC5 autorstwa Dondu za ATMega8 na ATTiny13 - http://obrazki.elektroda.pl/8294459100_1... REzystory diod 470Ω, nie zmieniłem na schemacie. Pilot samoróbka, ale 100% pewniak. No więc w czym problem? Uruchomiłem przykład na ATMega8, wszystko pięknie śmiga. Program kompiluje się dla Tiny13...
Witam, chciałbym przerobić projekt z tego linku http://www.elektroda.pl/rtvforum/topic90... Mianowicie zostawić odliczanie czasu i wyświetlanie go a dodać do niego funkcję w której o wpisanej "na stałe" godzinie w funkcji załączy przekaźnik. Przekaźnik jest 4 modułowy więc potrzebuje 4 wolnych pinów. Kod, który zmodyfikowałem wygląda następująco...
Witam Programuje 2x ADC które szczytuje mi wartości z potencjometrów podłączonych przez dzielnik napięcia do portów PC0 PC1, za pomocą przerwania ADCSRA ( ADIE -Kiedy ten bit jest ustawiony wraz z I-bitem w rejestrze SREG wtedy aktywne jest przerwanie od zakończenia konwersji.) Robię tak za pomocą przerwania a nie timera bo nie chce aby mi ciągle czytał...
stm32 przerwanie timera atmega przerwanie timera przerwanie atmega8
kondensator pompa grundfos zmywarka płytą przedni wycieraczka
kerax skrzynia biegów czujnik halla
Szarpanie silnika BMW F30 1.6 twin turbo na zimno Lokalizacja przekaźnika świec żarowych Suzuki Liana 1.4 DDiS 2004