Cześć. Posiadam dwa moduły RFM69, zasilone z 3,3v bez translacji napięć. Jeden z modułów co sekundę nadaje wartość od 0 do 255. Drugi z modułów ma odbierać to co nadał ten pierwszy i wyswietla to na lcd. Problem jest w tym, że po uruchomieniu modułów działa pierwsze kilka cylki, w nadajniku, co sekundę nadaje nową wartość, i wyswietla się na lcd odbiornika....
Witam Mam płytkę sterującą dwoma kanałami PWM - przez ULN oraz MOSFETY. Płytka ma dwa wejścia oraz wejście czujnika PIR - INT1. Ma przede wszystkim sterować włączaniem taśmy LED 12V z czujnika PIR ( oprócz tego z drugiego wejścia ). LED włączona przez PIR ma docelowo świecić określoną ilość czasu ( zależną od natężenia światła ) i się wyłączyć. Żeby...
Alez jest komentarz, ze liczby sa nieprawidlowe. Wklepalem byle co, zeby pozniej sobie dokladne wartosci obliczyc, a nie zawracac sobie glowy duperelami w tamtym czasie. Co masz na mysli piszac "chlapniesz"? Chlapanie tutaj na forum czy w swoim kodzie? :) Hm skoro widzisz jeszce jakies kwiatki, to bede wdzieczny, jesli sie nimi podzielisz ze mna. :)...
Witam Mam program budzika, który jako dodatkową atrakcję miał mieć możliwość mówienie czasu na żądanie i odtwarzanie oprócz buzzera utworu jako alarmu. Atmega steruje przez jedno SPI programowe układem MAX7219, a przez konwerter poziomów i drugie SPI programowe odtwarzaczem WTV020SD. O ile sam WVT020SD + PCF8563 ( wyjście CLK do INT1 ) działają dobrze,...
Tak na szybkiego możesz sprawdzić to: Wstaw w odpowiednich miejscach w swoim programie. int second=0; SIGNAL (SIG_OVERFLOW2) { second++; } int main(void) { LCD_Initalize(); LCD_Clear(); while(1) { char t1[2]; itoa(second,t1,10); LCD_WriteText(t1); } }
Witam Mam problem z RTC w atmega32. Podłączyłem kwarc 32,768kHz jak datasheet nakazuje. Jeśli Timer2 skonfiguruje następująco: [syntax=c] TCCR2 = 0b00000001; ASSR |= 1 << 3; TIMSK |= 1<<6; [/syntax] To przerwanie [syntax=c] ISR(TIMER2_OVF_vect) { TCNT2=255; ... } [/syntax] Wykona się tylko 8192 razy na sekundę zamiast 32768. Natomiast jak...
Generalnie w takich przypadkach nota układu twoim przyjacielem. Poczytaj to co napisałem w komentarzach. [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> int main(void) { uint8_t i = 0; DDRD = 0xff; //TCCR2A |= (1<<WGM21)|(1<<WGM22); // źle ten tryb jest zarezerwowany TCCR2A |= (1<<WGM21) // CTC //TCCR2A |= (1<<CS20)|(1<<CS21)|(1<&l...
... jak mogę to inaczej rozwiązać?? Może tak :?: [syntax=c] //**************procedura obs�ugi przerwania do LED************** ISR(TIMER2_COMP_vect) { static uint8_t pozycja=1; static uint8_t licznik=1; KATODY_PORT |= (C1|C2|C3); LED_DATA = pgm_read_byte( &cyfry[konw_liczby (min, pozycja)] ); pozycja++; licznik<<=1; if (pozycja>3)...
Te procesory się aż tak nie różnią. Dodatkowe funkcjonalności pinów nie przeszkadzają w niczym dopóki ich nie uruchomisz. (PCINT - Pin Change Interrupt trzeba wiedzieć jak włączyć). Jest duża różnica jeśli chodzi o Timery właśnie. Mega8 ma na przykład tylko jeden rejestr Compare dla Timer2 dlatego inaczej się nazywają. Opisałem to u siebie na stronie...
Tu masz kod który korzysta z przerwań i co 1 sekundę ustawią zmienną s1_flag na 1. Musisz pamiętać, aby ją w funkcji głównej zerować, bo tak cały czas będzie ona usttawiona na 1. Ten kod jest tylko poglądowy, ma ci tylko przybliżyć co i jak z przerwaniami. [syntax=c]int main(void){ volatile uint8_t s1_flag, /********** KONFIGURACJA TIMERA2 do wygenerowania...
Spróbuj mojego kodu do konfiguracji rcc na 72 MHz (u mnie działa na stm32f107 bez żadnych problemów), w przypadku wykorzystania kwarca 25 MHz [syntax=c] void rcc_conf(void) { RCC->CR |= RCC_CR_HSEON; while ((RCC->CR & RCC_CR_HSERDY) == 0); FLASH->ACR |= FLASH_ACR_PRFTBE; FLASH->ACR |= FLASH_ACR_LATENCY_2; RCC->CFGR2 = RCC_CFGR2_PREDIV1_DIV5 | RCC_CFGR2_PREDIV2_DIV5...
na podstawie flagi z przerwania INT2 na początku pętli głównej wchodzić w uśpienie. Ale pętla główna jest wykonywana powiedzmy 0.5 sek. Co sekundę wykonywane jest przerwanie od Timer2. Więc procesor będzie w uśpieniu tylko ok. 50% czasu. Ale problem z długim wykonywaniem się pętli głównej wystąpi tylko za pierwszym razem po zaniku zasilania (ustawienie...
Mam problem z TIMER2 - odmierzanie czasu , najlepiej 1s. Wartość b będzie zmieniała się - tylko co jaki odstep czasu. Może ktoś poratować? Albo ma może jakiś swój przykładowy programik na Timer2 z wywoływanym przerwaniem? Radzio // Testowanie timera 2 #define F_CPU 8000000UL #include <avr/io.h> // dostęp do rejestrów #include <avr/interrupt.h>...
Podejrzyj kod wygenerowany przez kompilator. Na początku musi on zachować rejestry, które będą użyte w procedurze obsługi przerwania, później dopiero obliczyć _BV(diode) oraz pwm uint8_t pwm[3] = {127,0,0}; uint8_t diode; register uint8_t pwm_val asm("r2"); register uint8_t pwm_mask asm("r3"); ISR(TIMER2_COMP_vect)...
Witam Kod jak poniżej służy do zliczania czasu trwania jednego impulsu (ta funkcja działa prawidłowo) oraz do zliczania czasu (w celu zliczania ilości impulsów na jednostkę czasu). volatile unsigned char pomiar = 0; volatile uint32_t cw_impuls,impuls = 0; unsigned char sreg; float tc1; char czas[8]; void Inicjalizacja(void) { LCD_init();...
Zadaniem programu ma być odmierzenie 1 sekundy (zmiana stanu na wy). Przerwanie od timera 2 przychodzi co 1ms. Kwarc zewnętrzny ~11MHz. Czy ktoś mógłby napisać dlaczego program nie działa? #include<avr/io.h> #include <avr/interrupt.h> int i=0; int main(void) { DDRC = 0b00001000; TCCR2=_BV(CS22); TIMSK = _BV(TOIE2);...
Mam taki przykładowy program. Chciałem zapytać kiedy program wchodzi do przerwania - wtedy kiedy wystawiona jest flaga przepełnienia licznika TF0 ?? CT0EQU 0 M0EQU 1 G0EQU 0 T0SEQU M0 + 4*CT0 + 8*G0 CT1EQU 0 M1EQU 0 G1EQU 0 T1SEQU M1 + 4*CT1 + 8*G1 TMSEQU T0S + 16*T1S THSEQU 256-180 LJMP START ORG 0BH CLR TF0 MOV TL0, #0 MOV TH0, #THS DJNZ R2, NEXT...
Witam, od paru dni mam przyjemność kodzić STM32F4 discovery, jednak mam problem z ustawieniem właściwie tim2/3. Miałem już do czynienia z AVRami, napisałem kilka małych programów / projektów. a oto co udało mi się posklejać z internetu: [syntax=cpp]#include "stm32f4xx.h" int main(){ RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; RCC->APB1RSTR |= RCC_APB1RSTR_TIM2RST;...
Po 100 tkach propozycji od YT na temat CHAT GPT postanowiłem sprawdzić czy zrobi coś na Arduino. No i go zapytałem czy zna Arduino i AVR, odpowiedział pozytywnie wyświetlając mi informacja jak z Wikipedii. Następnie zapytałem jak skonfigurowaćTImer2 na 100ms przerwania - no i wyświetlił mi listę kroków jak to zrobić. Zapytanie o kod - wygenerował 2...
Chodzi mi o podłączenie 2 timerów do siebie, gdy ustawiam czas na pierwszym np na 7min to na drugim tez jest on wyświetlany o szczegóły proszę pisać na PW http://obrazki.elektroda.pl/4538997400_1...
Witam, w moim programie na atmegę 32 wykorzystałem timer0 oparty na zegarze procesora (8MHz) aby uruchamiać pewną funkcję ok. 100 razy na sekundę. Do programu postanowiłem dodać obsługę zewnętrznego kwarcu zegarkowego 32768Hz aby móc mierzyć w miarę dokładnie czas przy użyciu timera timer2. Po dopisaniu komend do obsługi kwarcu żaden timer nie działa....
Witam panowie. Zagadka jest taka. Jest sobie arduino uno, ale programuję je bez bootloadera, bezpośrednio w c w avr studio wersja 4. W pewnym momencie w programie startuję timer 2 w trybie CTC i używam go jako wyjście zegarowe dla bufora. Timer 2 ma ustwienia prescalera na 1 i rejestru porównawczego na 7, co daje ze wzoru przy częstotliwości uC 16Mhz,...
Czy da się generować przerwania od timer2 przy każdym przepełnieniu w trybie CTC? Próbuję generować częstotliwość w zależności od ustawienia potencjometru, ale timer generuje przerwanie tylko raz, cały program poniżej: OCR2 zostaje wpisana tylko pierwsza odczytana wartość zaraz po starcie programu, dalej już nie generuje przerwań. Po wrzuceniu " OCR2...
Mam problem z którym próbuje uporać się już od dłuższego czasu. Nie wiem jaką wartość powinienem wpisać do timera dwu bajtowego aby uzyskać przerwanie co sekundę. Nie pytałbym się tu o takie rzeczy ale nawet w książce "Mikrokontrolery dla początkujących" autor oblicza wartość timera pisząc sprzeczne równanie! Od razu mówię że programuje w BASCOMIE jeśli...
Witam. Mam zestaw opisany jak w temacie. Programator STK200. Pojawił mi się problem który nawet trudno wytłumaczyć. Próbowałem juz nawet z drugim ATmegą i tak samo się dzieje. Nadmienię że do układu dołączam oscyloskop Hamega - sprawny i dokładny. Napisałem program z wykorzystaniem Timera T0 - odmierza zadany czas i zapala diodę po czym przy następnym...
Witam. Mam panowie taki problem. Coś mi nie pasowało z czasem odliczanym przez atmege w przerwaniu timer1 [syntax=basic4gl]$regfile = "m32def.dat" $crystal = 16000000 $baud = 9600 Config Timer1 = Timer , Prescale = 1024 On Timer1 Czas1us Enable Interrupts Load Timer1 = 15625 Enable Timer1 Dim Zmienna As Double Do Loop End Czas1us: Print "###" Load Timer1...
Otóż zliczam czas na timerze 2 i co 1 sekundę generuje mi przerwanie obsługiwane w procedurze signal. Jednak gdy jestem w menu które wywoływane jest za pomocą przerwania: ISR_BLOCK, czas nie jest liczony. Jak zrobić by priorytet przerwania Timera2 był większy niż przerwania zewnętrznego. Nie mogę ustawić ISR_NOBLOCK bo zapcham szybko stos. Czy w AVR...
Cześć, po zabawie z timerem 0 przyszedł czas na timer 1. Mam Atmegę 8 z kwarcem 12MHz, chciałem tak jak poprzednio odmierzyć dokładnie jedną sekundę. Napisałem program: [syntax=cpp]//Nauka obsługi timera //Atmega8 12MHz #include <avr/io.h> #include <avr/interrupt.h> void main(void) { DDRB = 0x0F; PORTB = 0x0F; OCR1A = 46874; //OCR1A - po...
[syntax=c]ISR(TIMER2_OVF_vect) { TCNT2 = 155; t = rtc_get_time(); hour = t -> hour; min = t -> min; sec = t -> sec; time[0] = num[hour / 10]; time[1] = num[hour % 10]; time[2] = num[min / 10]; time[3] = num[min % 10]; time[4] = num[sec / 10]; time[5] = num[sec % 10]; }[/syntax] Zegar 1Mhz, prescaler 1024. Niestety kod nie wyświetla godziny, wcześniej...
Witam, pisze program w którym usypiam procesor (power-save). Ponieważ przerwania działają, w procedurze obsługi przerwania INT0 (mam podłączona klawiaturke pod nie) dekoduje odpowiedni klawisz i po wykryciu go, chcę obudzić procesor. Ustawiam timer2 w następujacy sposób: TCCR2=0x00; //timer wylaczony TIMSK&=0b00111111; //wylaczylem przerwania i timer...
czy wykonywalne jest uruchomić 2 Timery w jednym czasie, podczas moich prób problem pojawił się przy wpisywaniu danych w rejestr TIMSK, w najlepszym wypadku jeden timer rusza a drugi nie
Witam, chcę zrobić prosty stoper zliczający 655.4sekundy aktywowany wciśnięciem 20H ( w symulatorze na razie), jednak nie działa mi przerwanie i nie wiem czemu, program zapętla się i inkrementuje tylko R1 i gdy licznik T2 się przeładuje to następuje zresetowanie i dalej zlicza, nie obsługuje przerwań PRZE_INT0 i PRZE_T2. Prosiłbym o pomoc :) EDIT NIE...
Problem dalej istnieje, zakreskowuję obsługę przerwania ISR(TIMER0_COMP_vect}, poprostu je wywalam i w momencie startu timera 0 wiesza się program, a wtedy przecież nie robi żadnych obliczeń. Bo nadal masz włączone to przerwanie, a nie masz funkcji jego obsługi.
Wpisz większą wartość do OCR1A, przerwanie wtedy musi wywoływać się rzadziej albo zrób tak jak czasami robię kiedy procek działa za szybko a potrzebuję mieć przerwanie rzadziej; zadeklaruj zmienną globalną, np: uint8_t licz = 0; SIGNAL(TIMER2_COMPA_vect) { licz++; if(licz >= 10) //liczba przykładowa, zależy jak często chcesz...
ustaw sobie przerwanie od np. TIMER2 co 10ms i sprawdzaj 4 ostatnie stany przycisku. teoria: http://mikrokontrolery.blogspot.com/2011... powyższe zaadoptowane do A8: [syntax=c] //**************definicja przycisku************** #define _Key _BV(PD7) #define Key_PIN PIND #define Key_DDR DDRD #define Key_PORTPORTD...
...Co bym nie robił... wynik zawsze jest ten sam... Nic dziwnego, bo Bascom ignoruje polecenie Load Timer2 = 178 Zmień na Load Timer2 , 178 'lub Timer2= 256 - 178 i sprawdź :-P
Nie włączyłeś asynchronicznego typu pracy timer2 przykład: http://mikrokontrolery.blogspot.com/2011...
Witam. Zwykły kwarc 32K. Usypiasz procesor i możesz go budzić na żądanie w określonym czasie. Jak wszystko pójdzie dobrze uzyskać pobór prądu na poziomie 1uA w stanie uśpienia.
... Ja z kolei wyczytałem w ksiązce do 8051 że jeśli zostanie zgłoszone przerwanie o wyższym priorytecie to procesor powinien do niego przejść, ale u mnie tego nie robi:( Alez robi ;) Nawet gdybyś nie ustawił wyższego priorytetu dla Timer0 , to on i tak sprzętowo ma wyższy priorytet niż Timer2. Problem w tym , że szanowny kolega nie zdaje sobie sprawy...
Dziękuję za kolejną podpowiedź:) Dzięki niej udało mi się stworzyć jakiś kod. Niestety nie mam pojęcia czy poprawny. Dlatego bardzo bym prosił o oglądnięcie czy ma on w ogóle jakieś szanse działać. [syntax=c] #define BUFFER_SIZE 32 // musi być 2^n (8, 16, 32, 64 ...) #define BUFFER_MASK (BUFFER_SIZE-1) #define SUCCESS1 #define FAIL0 uint8_t buffer[BUFFER_SIZE];...
Witam Nawiązując do tematu opóźnień w odbiorze danych mam pytanie. Czy takie zastosowanie timerów w kodzie jest poprawne? Czy może robi się to w trochę inny... może bardziej profesjonalny sposób? Nadawanie i odbiór w kodzie menchester. czas trwania jednego bitu 2ms (na razie do testów, później czas będzie krótszy). [code][syntax=c] ISR ( TIMER2_COMP_vect...
Klasa TwoWire (której obiektem jest Wire) też używa przerwań. Po wejściu do ISR przerwania są blokowane. Jeżeli chcesz, aby dane ISR nie blokowało innych przerwań można użyć ISR_NOBLOCK:[syntax=c]ISR(TIMER2_OVF_vec... ISR_NOBLOCK) { ... }[/syntax]Byłbym jednak z tym bardzo ostrożny, ponieważ może przydarzyć się przepełnienie stosu. https://www.nongnu.org/avr-libc/user-man...
może Timer2.initialize Nie można tak, nie ma klasy Timer2. Poza tym od razu radzę zrezygnować z biblioteki TimerOne przy używaniu więcej niż jednego timera. Zamiast tego samemu można napisać konfiguracje timerów i wektory ich przerwań. Oto kod demonstrujący jak to zrobić. Powinno migać diodą i niezależnie wysyłać napis. Twoim zadaniem jest teraz dobrać...
Otwórz sobie pdfa od procesora zajrzyj w sekcje Timer2, poczytaj, przejdź do opisu rejestrów i poustawiaj jak uważasz. Ogólnie dla liczników wybierasz prescaler czyli podział między zegarem (16Mhz dla Arduino) a wejściem licznika. Timer2 jest 8bitowy ma 256 wartości, więc masz kolejny podział. Jak potrzebujesz precyzyjnie to są tryby gdzie możesz zrobić...
Ja coś podobnego zrobiłem na ATmedze16. Podłączyłem enkoder pod wejścia generujące przerwania zewnętrzne i odpaliłem tajmer, zliczam różnice czasu między przerwaniami. W AT90S2313 masz przerwania zewn z PD2 i PD3. w obsłudze przerwania zewn. robisz: prędkość = (obwód_koła / rozdzielczość_tarczy_enkodera) / różnica_czasu_między_przerwaniami lub pomiar...
Procedura obsługi przerwania: ISR(TIMER2_OVF_vect) { //TCNT2 = 0x00; x++; if(x==0x03) { if(y==0x00) { x=0x00; DIODA_CZERWONA_ON; y=0x01; } else { x=0x00; DIODA_CZERWONA_OFF; y=0x00; } } } i inicjalizacja w pętli głównej TIMSK =((1<<TOIE2)); TCCR2 = 0x05; TCNT2 = TIMER2_INIT; sei(); Po tych zabiegach powinno ruszyć Timer0 śmiga jak trzeba a z tym...
Wszystko co napisałem powyżej pozostaje w mocy. Tryby normalny i CTC działają przy odmierzaniu czasu podobnie: obydwa tryby odliczaja ileś tam tyknięć rejestru TCNT i generują przerwanie. W przypadku trybu normalnego to liczenie następuje od wartości ustawianej w TCNT do wartości 0 (256), a w trybie CTC od wartości 0 do OCR (lub ICR). Zacznijmy od tego,...
Oto szkielet programu *** .dseg .include "2313def.inc" ; Jaki procesor ;.......................................... SEGMENT DANYCH W SRAM ; Twoje dane ;.......................................... SGMENT DANYCH W EEPROM .eseg .org $0000 ; Twoje dane w EEPROM ;..........................................
Jak ustawiasz wartości początkowe jak np. wyjścia portu w rejestrze DDR to nie musisz robić |=, wystarczy =. Dobry zwyczaj to także robienie tabulacji (Tab) w funkcjach, czyli: [syntax=c]if(...) { for(...;...;...) { ... } }[/syntax] Jest kod bardziej czytelny, ale to takie spostrzeżenia :wink: A Twój problem to wpisanie przerwania do głównej funkcji...
No i nie udało mi się tego zrobić na Timer0- on sie kręci bez przerwy a ja potrzebuję włączyć i wyłączyć timer. Tak że na razie na Timer1- szkoda bo 16 bitów- ale zrobię na Timer2. Spokojnie użyj Timer0, który będzie zgłaszał przerwanie np. co 1ms. W procedurze obsługi tego timera dekrementuj zmienną, jeśli osiągnie 0 to należy zatrzymać dekrementowanie,...
co 5sekund występuję przerwanie na int0 i int1 (trwające krótko , fotokomórki) czas miedzy nimi jest dla mnie bardzo ważny i dlatego potrzebuję dokładności 1uS czas 5 sekund to minimalny czas przerwy całkowitej dla przerwań
Witam serdecznie, Napisałem bardzo prosty program do migania diody oparty na timerze i przerwaniach. Procesor resetuje się w momencie uruchomienia przerwań i zaczyna wszystko od nowa. Jeśli chodzi o zasilanie, układ zasilany jest z akumulatora przy samym procesorze są kondensator 100nF i 4,7uF. #include <avr/io.h> #include <avr/interrupt.h>...
To co dawid512 napisał jest najprawdopodobniej na atmega32. Musisz poczytać dokumentację i zmienić ten kod, gdyż timer0 na atmega8 ma trochę mniejsze możliwości. [dodano] Można też skorzystać z timer2, jego obsługa będzie łatwiejsza.
Generalnie na pierwszy rzut oka program jest prawidłowy. Nie zauważyłem jednak wcześniej, że używasz timera0 do generowania PWM, więc nie możesz go zatrzymywać tak jak sugerowałem. Niewskazane jest także resetowanie preskalera, choć dla silnika to nie ma znaczenia. Jeśli masz wolny timer 1 lub timer2 możesz to zrobić na nim według wcześniej przedstawionego...
No to od razu bez szczegółowego liczenia powinieneś zrobić tak: Tak naprawdę powinieneś wykorzystać Timer2 w trybie asynchronicznym z kwarc 32,768kHz na pinach TOSC1 i TOSC2, a mikrokontroler popędzać wewnętrznym 1MHz. Innymi słowy Twój mikrokontroler będzie prawie 100% czasu spał: - w czasie zamkniętych drzwi w trybie Power Down, - w czasie odliczania...
Na moje oko początkującego w jezyku C i znajomości w asemblerze jedynie sei, cli i pop sytuacja z zakłóceniami na INT w tym projekcie jest mało prawdopodobna. Z tego co widzę w clock.c przerwanie TIMER2_OVF_vect raczej nie wystąpi, gdyż timer2 jest zakomentowany ( i chyba słusznie) idąc więc dalej wydaje się, że można zakomentować cały ISR(TIMER2_OVF_vect)....
:arrow: dscreator Przede wszystkim koniecznie skomentuj każdą linię i wklejaj za pomocą znaczników Code , ponieważ (jak widzisz) Twój program jest zupełnie nieczytelny (forum usuwa spacje na początku linii). Program powinien zaczynać się zaraz za obszarem wektorów przerwań. Jeśli jakiegoś przerwania nie wykorzystujesz to zamiast mnemonika rjmp wstawiasz...
I teraz pierwsze pytanie: czy da się zliczać impulsy z zewnątrz używając Timer2? Wtedy bym podpiął do nóżki TOSC. The Oscillator is optimized for use with a 32.768 kHz watch crystal. Applying an external clock to the TOSC1 pin may result in incorrect Timer/Counter2 operation. Jak źle (lub dobrze) jest z tym w praktyce nie wiem. Tylko jeszcze zostaje...
Masz błąd w procedurze inicjującej timer2. Mianowicie powinno być: void Timer2_Init(void) { TCCR2= (1<<CS20) | (1<<CS21) | (1<<CS22) ; TIMSK = (1<<TOIE2); } to by wyjaśniło dlaczego nie czyta wartości z adc ale co to niema raczej nic wspólnego z klawiszami... i oczywiście bit...
Dawno nie używałem AVR wiec mogę się mylić. Ale timer2_ovf_vect nie jest wywoływany po przepelnieniu TCNT2 (255 -> 0)? Jeśli tak to nie sprawdzisz tam wartości bo zawsze będzie taka sama (0?)
Witam :) Próbuje odpalić tryb CTC na Atmega8-przerwanie co 5ms i nie mogę sobie poradzić pomimo czytania PDF.Mało rzeczy robiłem na przerwaniach a jeśli już to na Atmega32 gdzie korzystałem z tego: Przerwanie co 5ms więc mam 1 sekundę. ATMEGA32: [syntax=c] TCCR0 |= (1<<WGM01); tryb CTC TCCR0 |= (1<<CS02)|(1<<CS00); preskaler = 1024...
Jeżeli dobrze zrozumiałem to ma to wyglądać tak: ISR(TIMER2_OVF_vect){ //LED_PORT |=(1<<7); //if (count > val[0]) {LED_PORT &=~(1<<0);} else {LED_PORT |= (1<<0);} //if (count > val[1]) {LED_PORT &=~(1<<1);}...
Przerwanie TIMER0_COMP_vect, które było użyte w przykładzie od piotrva zastąpiłem TIMER2_COMP_vect. Taktowanie procesora w fusebitach ustawiłem na 4MHz- wystarczające? Mruganie dwukropka zrobiłem jako zwyczajną pętlę(pewnie powiecie że trzeba też wrzucić to w przerwanie). Nie wiem co z ustawianiem godziny. Może zostać w tym miejscu, w którym jest? Wszystkie...
Nie to nie jest cały kod. Mam problem z wklejeniem z tagami syntax, ale spróbuję to jeszcze zrobić. W moim przypadku, to że przerwanie będzie generowane zbyt często nie ma praktycznie znaczenia bo korzystam z jednego kanału i nie muszę się martwić o gubienie pomiarów czy jakieś błędy. Ten programik jest tylko dla celów nauki. W obsłudze przerwania ustawiłem...
Mam problem z przerwaniem w trybie asynchronicznym - Amtega328. Załączam program uproszczony do niezbędnych elementów: [syntax=c]//co 0.5s ISR(TIMER2_OVF_vect) { ... _delay_us(30); //V1 //while(TIFR2 & (1<<TOV2)); //V2 //while(TIFR2 & (1<<TOV2)) _delay_us(1);//V3 //while(TIFR2 & (1<<TOV2)) TIFR2 |=1<<TOV2;//V4 //cli();...
to też jest "arcy"-ciekawa koństrukcja: void czekaj (void) //to chyba zly pomysl na zwiekszenie przerwy??? { ISR (TIMER2_OVF_vect) { PORTB |= 0x80; PORTB = 0; } } coś mi pachnie, że ten twój cały program może nie tyle za szybko działa , a twoje "specyficzne" zabiegi jego spowalniania nie przynoszą żadnych efektów,...
Dzięki za zainteresowanie panowie ;) Wrzucam poprawiony kod, serwomechanizmy nie reagują. Póki co zdecydowałem się w ciemno wykorzystać wartość zaproponowaną przez BlueDraco. Jeśli chodzi o prędkość serwomechanizmów, to nie jest to problem mniejsza prędkość, to w moim projekcie większa dokładność, po drugie prędkość zawsze będzie można zwiększyć. Ale...
Po małych zmianach działam na czymś takim. Pomimo taktowania z wewnętrznego kwarcu nie widać efektu. Jakiegokolwiek. [syntax=c]/* * RealTimeClock.c * * Created: 2013-11-17 01:46:48 * Author: Piotr Pabian */ #include <avr/io.h> #include <avr/interrupt.h> void init_RTC(void) { //ASSR = 1<<AS2; //Enable asynchronous mode TCCR2 = (1<<CS22)|(1<<CS21)|(1<&l...
przerwania timer2 timer2 atmega32 timer2 atmega328p
atmel studio programator whirlpool lodówka termostat pompa miele
bialoruśka wymiana pompy bezpiecznik piszczy
Samsung SM-G500FU czarny ekran, telefon wykrywany przez komputer – co zrobić? DFM alternatora: co to jest i jak działa?