Nie sprawdzałem wcześniej bo uwierzyłem ci na słowo, że sprawdziłeś rejestry ATMega8. W rejestrze TIMSK przerwanie overflow dla timera0 to TOIE0 ale jest to bit 0 a nie 1. W związku z tym inicjacja powinna wyglądać tak: TIMSK=0x01 lub jak wspomniałem wcześniej zdefiniować bit TOIE0: #define TOIE0 0 wtedy zadziała TIMSK=(1<<TOIE0) Bardzo polecam...
Programuję w ASM ale tylko Atmega8/16 więc wklejam ci taki przykład: [syntax=asm] .CSEG .org 0x0000 //poczatek deklaracji skokow dla przerwan rjmp _poczatek reti reti reti reti reti reti reti reti rjmp _150_timer0 //przerwanie overflow timer0 reti reti reti reti reti reti reti reti reti _poczatek: in r16, TIMSK//timer0 overflow interrupt enable ori...
#include<avr/io.h> #include <avr/interrupt.h> #define F_CPU 1000000 int main(void) { TCCR0 = 0x05; //(1 << CS02) | (1 << CS00); prescaler na 1024 TIFR |= (1 << TOV0); TIMSK |= (1 << TOIE0); // aktywne przerwanie overflow // timer_enable_int(_BV(TOIE1)&...
Witam. Chciałbym prosić o pomoc. Czy ten kod jest poprawny. Program działa bez zarzutów. Natomiast, gdy włączę przerwanie"sei". Układ się zawiesza. [syntax=c]void init_Ex1() { // Timer clock = I/O clock / 1024 TCCR0 |= (1<<CS02)|(1<<CS00); // Clear overflow flag TIFR |= (1<<TOV0); // Enable Overflow Interrupt TIMSK |= (1<<TOIE0);...
Tutaj druga instrukcja anuluje pierwszą. Zrób to w jednej instrukcji lub w drugiej użyj operatora |= Poza tym nie ma bitow CS02 i CS00 w rejestrze TCCR1B. Wprawdzie są w rejestrze TCCR0 i mają takie same pozycje, więc kod ma szansę działać, ale jakoś źle się na to patrzy :) To jest zezwolenie na przerwanie od timer overflow. Zezwolenie na przerwanie...
Witam... Generalnie rzecz biorąc procedury opóźnienia czasowego nie nadają się do modulowania diody IR... Częstotliwość nie jest zbyt stabilna to raz... Dwa nie uzyskasz 36kHz musisz skorzystać z dobrodziejstw timera... Np. tak... #include<avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <inttypes.h> int...
To właśnie zostało uruchomione - musi działać. Pisane pod WinAVR [syntax=c] #define SET(port, bit) port|=(1<<bit) #define RESET(port, bit) port&=~(1<<bit) #define NOT(port, bit) port^=(1<<bit) //Przerwanie wywolywane 100 razy na sekunde ISR(TIMER1_COMPA_vect)// == SIG_OUTPUT_COMPARE1A { NOT(PORTD,PD6); } int main (void) { SET(DDRD,PD6);...
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...
Tu uruchamiasz timer0 z preskalerem ... [syntax=c] //######## konfiguracja timera1 ############## TIMSK |= (1<<TOIE0); //Przerwanie overflow (przepełnienie timera) TCCR0 |= (1<<CS02) | (1<<CS00); // źródłem CLK, preskaler 1024 TCNT0 = timer_start;// //Początkowa wartość licznika //######################################... [/syntax]...
Kod piszę "na sucho", więc lepiej sprawdź czy działa.[syntax=c] #include <avr/interrupts.h> void timer0_init(void){ TCCR0 = _BV(CS02); //Mode 0, normal operation, prescaler 64 TIMSK |= _BV(TOIE0); //Timer/Counter0 Overflow Interrupt Enable } volatile unsigned long millis=0; volatile unsigned int okresy_migania_ledow[4] = {100,200,300,400}; ISR(TIMER0_OVF_vect)...
Pusty blok jest dlatego, że utknąłem na konfiguracji Timer0. Jeśli chodzi o rejestry, to podejrzewałem, że jest tak, jak Kolega pisze. Wartość TCNT0 = 6; trzeba będzie wpisać do przerwania Timera Przy ustawieniach: [syntax=c] TCCR0A = (1 << CS01)|(CS00); // źródłem CLK, preskaler 64 TIMSK = (1<<TOIE0); //Przerwanie overflow (przepełnienie...
Udało się. Faktycznie nieprawidłowo odczytywałem bity. Wstawiam poprawiony program który wysyła na uart binarkę tego co przechwyci, raczej tego programu nie będę rozwijał gdyż domyślnie i tak ma to być podłączone do esp, jednakże za pomocą wzorów ze strony którą linkował (at)stomat można bez problemu sprawdzić i wyliczyć to co aktualnie jest wysłane...
Opisujesz kod inny niż wkleiłeś: [syntax=c]int main(void) { DDRD = 0xFF;//diody DDRC = 0xff;//przyciski //######## konfiguracja timera ############## TCCR0 |= (1<<CS02) | (1<<CS00); // źródłem CLK, preskaler 1024 TIMSK |= (1<<TOIE0); //Przerwanie overflow (przepełnienie timera) sei(); //Globalne uruchomienie przerwań while(1) { //...
Do ustawiania jego parametrów służą dwa rejestry TCCR1A i TCCR1B, jeżeli ma chodzić jako zwykły tradycyjny timer to powinieneś tylko ustawić preskaler w rejestrze TCCR1B, w momencie ustawienia preskalera timer jest odpalany. W TCNT1 jest aktualna wartość licznika. Jeśli chcesz przerwanie od timera to w rejestrze TIMSK ustawiasz bit TOIE1(overflow),...
//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...
Witam, Popełniłeś kilka błędów: - aby odblokować przerwania od przepełnienia timera 1 trzeba ustawić bit 2 a nie 5 w rejsestrze TIMSK - wektor przerwania od przepełniania timera 1 to nie 0x12 a 0x24 Dobrze jest przy pisaniu w C korzystać z funkcji dostarczanych wraz z kompilatorem "intrinsic function" takich jak __interrupt_enable, __interrupt_disable,...
główny plik wygląda tak #include<avr/io.h> #include<ścieżka do rc5.h> int main() { DDRD=0x00;;//Porty D jako wejścia DDRB=0xFF;//PORTYB jako wyjścia PORTB=0xFF;//portb w stan wysoki rc5_init(); sei(); while(1) { if(rc5data) { PORTB=0x00; } } } Dodano po 13 włożyłem wszystko...
Nie jestem autorem kodu, który zamieszczam. Kod znalazłem gdzieś na forum, jeżeli jego autor nie życzy sobie abym go udostępniał niech da mi znać. rc5.h http://www.roboternetz.de/wissen/images/... TSOP1736 podpinam tak jak na obrazku (tylko pod PD3 - INT1), rezystor 10k
proszę bardzo: #include <avr/io.h> #include <avr/interrupt.h> int liczba; SIGNAL (SIG_OVERFLOW0) { if(liczba++==675) { PORTC=~PORTC; liczba=0; } } int main( void ) { DDRC=0xFF; // port C jako wyjście PORTC=0x00;; // początkowy stan portu C - niski TCCR0=0x03; // prescaler 64 TCNT0=0x00; //...
Witam Mam napisany taki kod do obsługi timera. Przerwanie ma być co 100ms kwarc mam 8MHz. Czy dobrze to jest? skąd się to 12500 wzięło jak mi wychodzi 8000000/64=125000? [syntax=c]TCCR1B = (0<<CS12)|(1<<CS11)|(1<&l... // CLK/64 TIMSK = (1 << TOIE1); // Timer/Counter1 Overflow Interrupt Enable TCNT1 = 0xffff - 12500; ISR(TIMER1_OVF_vect)...
Witam. Niestety mam problem z uruchomieniem tego układu korzystam z kodu LCD+ATMEGA8+Odbiornik+pilot #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #define RC5BitHigh() (bit_is_set(PIND,PD3)) #define RC5BitLow() (bit_is_clear(PIND,PD3)) #define WAITFORTIMER()...
Z tym |= i = juz kombinowałem i nic nie dało. Ja nie chce overflow dlatego mam OCR1A ustawione i używam trybu compare i wpisuje TIMSK = 0x10 żeby włączyć porównywanie z OCR1A.
Nie wiem czy to dobrze rozumiem. [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> void mydelay(uint16_t delay) { int f; for (f = 0; f<delay; f++) _delay_ms(1); } int main(void) { //########### I/O ########### DDRB |= (1<<PB0); DDRC &=~ (1<<PC5); DDRC &=~ (1<<PC4); PORTC =0xff;...
hej mam problem win avr nie chce mi skompilowac linijek: 1). outp(0x03,TCCR0); // set prescaler to f/64 (172.8 kHz (at) 11.0592 MHz) 2). sbi(TIMSK,TOIE0); // enable interrupt on timer overflow 3). count += (count_hi << 8) + inp(TCNT0); // get counter value mianowicie przerabian program zapisany w starym zapisie na nowy i te linijki nie wiem jak...
Rozpisuj to na zdefiniowane symbole bitów, bo by to sprawdzić musimy zerkać do datasheet: [syntax=c] TCCR1B=TCCR1B & 0xBF; TCCR1B=TCCR1B | 0x40; TCCR1B=0xC1; //enable overflow and input capture interrupts TIMSK=0x24;[/syntax] No i dodawaj komentarze byśmy wiedzieli, co chciałeś daną linijką kodu osiągnąć i móc to sprawdzić. I zaczerpnij wiedzy o volatile:...
Ten kod jest napisany dla ATmega103 ( niedostępny już w handlu) a jego następca to ATmega128. Poniżej poprawki dla WinAVR ( ten kod był dla kompilatora IAR): 1. #include <iom103.h> #include <ina90.h> ma być #include <avr/io.h> #include <avr/signal.h> 2. type def struct{ ma być typedef struct{ 3. interrupt /**** A V R A P P L...
Założyłem ten temat, bo chciałbym (i prawdę mówiąc muszę) zrozumieć program znaleziony, nawet chyba u Was na forum, dekodujący sygnał rc5. Historia jest typowa: "projekt, którego nie chcę, a który muszę." Dzięki z góry za pomoc. Nie besztajcie mnie zbyt mocno. Wspomniany kod: #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h>...
Więc nie dołączyłem żadnych kondensatorów. Czy słusznie? Słusznie. Zmieniłeś nową funkcję przerwania ISR() i jej wektor na stare (przestarzałe) SIGNAL(): http://www.nongnu.org/avr-libc/user-manu... Zmień na ISR(). Szczerze muszę przyznać że nie do końca wiem co ustawiłem w TIFR oraz TIMSK, znalazłem to w którymś z tematów...
Wszystko ladnie tlumaczycie tylko ze nie posilkowaliscie sie nota katalogowa i ten program nie bedzie dzialal. ldi r16,0b10000000 out TIMSK,r16 Jesli spojrzec do noty to siodmy bit w TIMSK to OCIE2, czyli nic nie ma wspolnego z T1 czy T0. Mowilem ze ten program jest ZUPELNIE nie czytelny. Na samym pczatku juz kicha jest: .org 0x0005 to wektor od Timer1...
Musiałbyś dodać zmienną, która będzie służyła do odmierzania czasu bez impulsów, tzw. "timeout". Jeśli przez okres ponad 10 s nie przyjdzie żaden impuls, to n=0. Wbrew pozorom, liczenie timeoutów najłatwiej zrealizować w przerwaniu :) Dodano po 1 fragmenty kodu: inicjalizacja przerwań (akurat dla Atmega32) [syntax=c] TCCR0 |= (1 << CS02); TIMSK...
Witam w swoim projekcie do sterowania silnikami krokowymi wykorzystuję joysticki potencjometryczne. By określić, w którą stronę został on wychylony mierzę napięcie na potencjometrze przetwarzając je w przetworniku analogowo cyfrowym. Silniki działają bez zarzutu, tak jak zakładałem. Problem występuje jedynie przy silniku numer 1. Dokładniej po załączeniu...
Działający kod, dioda zmienia stan co sekundę. #include<avr/io.h> #include <avr/interrupt.h> #define F_CPU 1000000 char licznik = 0; //zmienna dla licznika programowego int main(void) { TCCR0 = 0x05; //(1 << CS02) | (1 << CS00); prescaler na 1024 TIFR |= (1 << TOV0); TIMSK |= (1 << TOIE0); // aktywne przerwanie overflow...
Hej, Spróbuj tego: #include<avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <inttypes.h> #define F_CPU 1000000 unsigned int c=0, s=0; int main(void) { TCCR0 = 0x05; //(1 << CS02) | (1 << CS00); prescaler na 1024 // TIFR |= (1 << TOV0); TIMSK |= (1...
Witam, naskrobałem taki program do rozjaśniania i ściemniania diody. Chciałbym dorzucić do niego warunek że jeżeli wcisnę przycisk 1 to dioda miga w jeden sposób a gdy wcisnę przycisk 2 to w inny. Tylko nie mam pojęcia gdzie wcisnąć taki warunek. Dokładniej miałoby to wyglądać tak że jeśli wcisnę przycisk 1 to dioda rozjaśnia się i gaśnie przez 10s...
zdefiniuj F_CPU w kodzie programu i zobacz czy to coś zmieni. Możliwe że nie masz włączonego zewnętrznego oscylatora tylko pracujesz na wewnętrznym (włącza się go fusbitem) Próbowałem definiować F_CPU również w kodzie programu, ale nie daje to pożądanych skutków, co do fusebitów to są poprawnie ustawione, ponieważ po odlutowaniu kwarcu układ przestaje...
Atmega32 ma rejestr TIFR, czyli usuń "1". [syntax=asm]; Clear interrupts (if any happened). sbi _SFR_IO_ADDR(TIFR), OCF1A[/syntax] ; TIFR - Timer/Counter Interrupt Flag register .equTOV1= 2; Timer/Counter1 Overflow Flag .equOCF1B= 3; Output Compare Flag 1B .equOCF1A= 4; Output Compare Flag 1A .equICF1= 5; Input Capture Flag 1 edit. Jeszcze TIMSK zamiast...
Witam. Pisze program sterujący pracą silników krokowych. Pisałem cały czas tak program by mieć konktrolę nad prędkością każdego z silników osobno (chodzi o to że silniki mają różne przekładnie a chce by wszytskie elementy poruszały się z tą samą prędkością obrotową więc prędkość ustala się raz w programie i się jej później nie zmienia) Zastosowałem...
Troche długo mnie nie było ale miałem parę spraw na głowie. Co do tego Timera to ostatnio znów walczyłem i konfiguracja jest w porządku. Wina leży najprawdopodobniej gdzieś na płytce (bądź w procesorze), bo gdy podpiąłem kwarc do innej płytki z atmega128 to Timer działał bez zarzutu. Tak więc temat zamknięty. Dzięki wszystkim za pomoc! Pozdrawiam! P.S....
Ciekawe, czytałem już te tematy. czy bez tego kwarca 32khz sie nie obejdzie? Jednak nie łapię tych timerów. Generalnie timer służy jako licznik przerwań :), wewnętrznych albo zewnętrznych na pinie TO, zewnętrzne przerwania widziane są z portu TO, a wewnętrzne przerwania generuje prescaler - wewnętrzny przerywacz "sterowany" kwarcem zewnętrznym lub...
Witam. Nie mogę dobrać parametrów timera tak by osiągnąć zadaną częstotliwość. Potrzebuje teraz osiągnąć by timer1 się przepełniał 10 razy na sekundę czyli co 100ms. Oto mój kod (jego kluczowe fragmenty): https://obrazki.elektroda.pl/3526196900_... Czyli mamy częstotliwość CPU 16MHZ. Dzielimy ją przez prescaler 64 i wychodzi 250kHz....
Witam ponownie pomijając poprzedni problem pojawił się nowy. Potrzebuje używać przerwań od przepełnienia dwóch timerów T0 i T2. Po ich skonfigurowaniu i włączeniu pojawia kłopot gdyż żaden nie chce zliczać, jeżeli używam ich pojedynczo to wszystko jest ok. Poniżej wstawiam część programu z konfiguracją timerów. TIFR |= (1 << TOV2)|(1...
wielkie dzieki za taki odzew :) niestety caly czas nie rozumiem jednej rzeczy zamieszczam plik zrodlowy w ktorym pomiedzy dyrektywa .ORG 0x00 a instr rjmp Reset znajduje sie instr nop. bez niej po wgraniu programu na kosc nic sie nie dzieje 8O .INCLUDE "m32def.inc" .CSEG .ORG 0x00 nop ; O CO CHODZI?!?!?! rjmp Reset .ORG OVF0addr rjmp Timer Timer: cpi...
Witam Piszę ten post kwoli upewnienia się czy to co zrobiłem jest poprawne. Otóż potrzebuję wykonać zegar z datą na LCD + uC + kwarc 11.0592 MHz i do odmierzenia 1 sekundy użyłem poniższego fragmentu kodu w C: #include <avr/io.h> #include <avr/interrupt.h> int liczba; SIGNAL (SIG_OVERFLOW0) { if(liczba++==675) {...
Po zaprogramowaniu timera w tryb CTC oraz skorzystaniu z porad, dioda zapala się lecz nie gaśnie po określonym czasie. Nie jestem pewny co źle zrobiłem, wykorzystanie innej zmiennej sprawiało że dioda w ogóle się nie zapala. Prawdopodobnie źle zaprogramowałem timer, a jako że info na timer timera CTC z przerwaniem znalazłem tylko po angielsku więc bardzo...
Witam mam kolejny problem z nieszczęsną atmega128. Napisałem program który działał na ATmega16 i chciałem go przenieść do atmega128 no i jest problem. Program w ogóle nie działa. W przerwaniu powinny się zwiększać wartości zmiennych. Niestety chyba nie zwiększają się :/ program wchodzi do przerwania bo wstawiłem tam naprzemienne ustawianie i kasowanie...
dziękuję dondu Twoje wskazówki pomogły i o jakieś 0,5kHz zaczął szybciej generować przebieg. Jednak to i tak jeszcze mnie nie ratuje. Poniżej podaję program główny: [syntax=c]// program główny int main(void) { DDR_AD=0x00; // Port jako wejścia analogowe i cyfrowe PORT_AD=0x00; // Wejścia z podciąganiem DDRB=0xFF; //wyjscia DDRC=0xFF; //wyjscia na zakres...
Po niewielkich zmianach powinno działać też na Attiny85. Wrzucam kod dla Attiny85 (nie testowany; nie mam jak): [syntax=c]//############################... // SPWM implementation for Attiny85 // Clock frequency 8MHz internal clock oscillator // High Fuse: 0xFF, Low Fuse: 0xE2 // // Signals generated: // - SPWM...
Coś takiego znalazłem. Co prawda na Atiny ale można przerobić. [syntax=c]// // Talking to ultrasonic sensor HC-SR04 with an ATtiny84, and // sending distance data using serial communications. // // electronut.in // #include <avr/io.h> #include <string.h> #include <util/delay.h> #include <avr/interrupt.h> #define F_CPU 8000000...
Witam! Chcąc dodać zegar do mojego projektu musiałem wygenerować przerwanie, które dodawałoby 1 do zmiennej co 1s. napisałem programik jak poniżej, lecz niestety zliczając późni się o około 1/1,5s na minute... ktos wie gdzie robię błąd? gdzieś się pomyliłem? http://obrazki.elektroda.pl/9649052700_1... Preskaler ustawiony na 64, czyli...
No to próbuję: [syntax=c] //* \section OA Original author //* Andy Gayne is the original author of this application note. //*/ //program z noty Atmela 136 //przerobiony na ATMega8, kwarc 11059200 i okrojony program #include <avr/io.h> #include <avr/interrupt.h> //! Pin mappings #define CHMAX 6 // maximum number of PWM channels #define PWMDEFAULT...
Nie ma na razie tego wiele więcej. Program do skomplikowanych nie należy. #define F_CPU 8000000 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include "funkcje.h" #include "LCD.h" volatile unsigned char sekundy; SIGNAL(SIG_OVERFLOW2) // RTC, przerwanie...
Zrobiłem takiego myka i wydaje się że wszystko działa tak jak należy. #include<avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <inttypes.h> #include <util/delay.h> int main(void) { DDRD=0x00; DDRB = 0xFF; DDRA |= _BV(PA0); PORTA |= _BV(PA0); TCNT0 = 34; //wartość początkowa...
Generalnie dobrze już kumasz czaczę :) No tak bo z każdą iteracją pętli dioda zostaje wygaszona, dodając delay wydłużę wygaszenie, ale co z przerwaniem? Ono też trwa bardzo krótko stąd czas zapalenia diody może być niezauważalnie mały a dodawanie delay w przerwaniu to chyba kiepski pomysł, no chyba żeby wyliczyć co ile mniej więcej występują przerwania......
Witam, Męczę właśnie kod do sterownika serw. Na chwilę obecną jest to coś takiego: (wartościami zmiennych stan i zegar się nie przejmujcie, ostatecznie będę inne. Procek ATTiny2313, taktowany wewnętrznym zegarem 8MHz) #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> // definicje SIGNAL, INTERRUPT// Następnie deklarujemy...
//############ Procedura obsługi przerwania od przepełnienia timera ############ ISR(TIMER0_OVF_vect) { n++; if(n>=1000) // Kwarc 16000000Hz / Prescaler 64 / timer 8 bitów czyli 256 - poczatek liczenia od 6 czyli 250 =1000Hz czyli 1us { n=00; sek++; if(sek>=60) { sek=0; min++; if(min>=60) {...
DDRD|=(_BV(PB5) | _BV(PB6) | _BV(PB7)); DDRD|=(_BV(PE3) | _BV(PE4) | _BV(PE5)); Widzisz tu subtelną różnicę...? Działające wstawki dla pwm na Tim1 i Tim2: [syntax=c]void Timer0Init(void) { DDRB|=(1<<4); TCCR0 |= (1<<WGM01)|(1<<WGM00)|(1<... OCR0=0; } void Timer2Init(void) {...
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...
Witam, piszę całkiem spory (w moim mniemaniu) program do sterowania silnikiem i paroma jeszcze innymi rzeczami (aktualnie na ATmega32L i 8MHz wewnętrznego oscylatora) i mam niezrozumiały dla mnie problem z obsługą przerwania od timera, kod obsługi przerwania wygląda mniej więcej tak: ... .org 0x0012 rjmp t1Ovf ... t1Ovf: push r16 push r17 in R16,...
Mi nie chodzi konkretnie o przerwanie. Jest tak: Timer t0 pracuje w trybie asynchronicznym i co 0.5s generuje przerwanie Ja w tym przerwaniu sprawdzam zawartosc rejestru TCNT odpowienio przeliczam ilosc impulsow ktore zliczyl i wyswietlam. SIGNAL(SIG_OVERFLOW0) { Rpm = TCNT2; Speed = TCNT1L; outp(0x00, TCNT3); outp(0x00, TCNT1L);...
Racja. Już dawno nie pisałem w assemblerze. Zastosowałem etykiety do skoków, a później wywołałem funkcje i działa (funkcja zabawa diodami). Przy obsłudze przerwania będę odkładał rejestr SREG na stos. Poniżej poprawiony listing programu. .include "m8def.inc" ;wektory przerwan .org $000 rjmp reset ;***************************************...
1. warningów brak 2. używam AtmelStudio i F_CPU podaje w ustawieniach projektu AVR C Compiler -> Symbols i w Definied Symbols F_CPU=16000000 i tylko tam 3. [syntax=c] //Ustawienia dla TIMERA 0: clk 16M, presk 1024, owerf 256, 61Hz #define _5SEK 305 #define _60SEK 3662 #define _5MIN 18311 #define _LIGHT_OFF 305//7234 //2min volatile int _5s; volatile...
Witam, czy mógłby ktoś sprawdzić czy program działa poprawnie, ponieważ w pewnym momencie jakby zawiesza się, tak jakby zakończył swoje działanie: #define F_CPU 16000000UL #include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/sleep.h> #include <avr/pgmspace.h> #include "font.h" #include <util/delay.h>...
Witam! (Dobry wieczór?) Przeczesałem "cały internet" i znalazłem wiele rozwiązań mojego problemu, ale żadne spośród tych, które zastosowałem nie przyniosło oczekiwanych rezultatów. A problem - może się wydawać - jest banalny, gdyż chodzi o obsługę zewnętrznego przerwania ze zwykłego tact switcha. Mikrokontroler steruje za pomocą PWM jasnością diody....
uczę się programowania AVR w c i na ATMEGA16 napisałem prosty programik mający zliczać impulsy w czasie 1 sekundy timer 1 odmierza czas 1 sekundy timer 0 zlicza impulsy i przy przepełnieniu inkrementuje zmienną do wyświetlenia wyniku zmienna jest przemnażana przez 256 a do wyniku dodawana jest bieżąca wartość rejestru TCNT0 do celów ćwiczenia, jako...
Witam:) mam pytanie do forumowiczów w sprawie pomiaru częstotliwości, sprawa przedstawia się następująco: chciałbym zrealizować pomiar częstotliwości przy użyciu timera0 (zliczanie impulsów) oraz ustalić czas bramkowania na 1s za pomocą timera1, problem w tym, ze uzyskany wynik strasznie skacze mi po częstotliwościach ;/ i nie wiem jak sobie z tym poradzic.....
Witam Ucze sie programować mikrokontrolery, używam Vmlab'a i Winavr. Mikrokontroler to atmega16. Napotkałem następujący błąd: Program teoretycznie powinien dodawać do wyświetlacza co 300ms nowy znak. Wszystko jest ok dopóki nie włącze Timera. Jeżeli go uruchomię to znaki zamiast się dodawać zaczynają się nadpisywać (pojawia się tylko jeden znak na 1...
Może mi ktoś powiedzieć co jest nie tak z tym kodem. Próbuje obsłużyć przerwanie przepełnienia timera 0. Licznik działa ale obsługi przerwania brak. #include <avr/io.h> // dostęp do rejestrów #include <avr/interrupt.h> // funkcje sei(), cli() #include <avr/signal.h> // definicje SIGNAL, INTERRUPT volatile int time,overflow=0; SIGNAL...
No to coś napisałem na AVRStudio 4.05.0.181 (na kolanie) :) . Co prawda na ATmega8 , ale przeportowanie to pestka(niektóre wektory przerwań do skasowania/zmiany nazwy i "2313def.inc" zamiast "m8def.inc" , prędkość kwarcu Xtal też do poprawki...), raczej tu chyba nie ma rozkazów niezaimplementowanych w AT90S2313 . ;included in next file - line ".device...
Witam Mam problem z ultradźwiękowym miernikiem odległości na atmedze8. Generacja częstotliwości przebiega prawidłowo, na odbiorniku za torem wzmacniaczy otrzymuję widoczny syglał odbity od przeszkody. Błędy pojawiają się przy komparacji sygnału z napięciem referencyjnym. Wynik jest bardzo niedokładny, ponadto od drugiego bądź trzeciego pomiaru procesor...
Dzięki, już sobie z tym poradziłem, mam za to problem z timerami w atmedze 168. Mogę włączyć tylko jeden timer, gdy ustawiam drugi TIMSK to żaden nie wykonuje przerwania .Pewnie coś przeoczyłem w datasheet , z tego co wiem imer 0 i 2 sa od siebie nie zależne i mają oddzielne preskalery. ISR(TIMER0_OVF_vect) { } ISR(TIMER2_OVF_vect)...
[syntax=csharp]#include <avr/io.h> #include <avr/interrupt.h> //definicja LED1 (do którego pinu podłączony LED1) #define LED1 PB0 //definicja LED2 (do którego pinu podłączony LED2) #define LED2 PB1 //definicja początkowej wartości timera #define timer_start 6 //zmienna pomocnicza-licznik używana w przerwaniu volatile uint8_t cnt=0; void...
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....
PWM skonfigurowałem w oparciu datasheet Atmegi32 oraz o kalkulator (http://www.et06.dk/atmega_timers/), który mi wyliczył takie wartości : http://obrazki.elektroda.pl/1205671500_1... PWM zostało więc ustawione następująco : Deklaracja buforów Przerwanie Funckja do zmiany flag buforow Czytanie danych Liczba próbek wprowadzona na stałe...
Witam Kod pilota z lirc : # brand: Cambridge Audio # model no. of remote control: RC-540R V2.0 # devices being controlled by this remote: AV Receiver : AZUR 540R V2.0 # begin remote name Cambridge_Audio_RC-540R_V2.0 bits 16->długość ramki flags SPACE_ENC|CONST_LENGTH|REPEAT_HEADER eps 30 aeps 100---> współczynnik wypełnienia nośnej 30/100 header...
Co do pierwszego postu: To jest wynik pisania czegoś takiego jak "TIMSK = 0x80;" W ten sposób załącza się przerwanie OCIE2:"Timer/Counter2 Output Compare Match Interrupt Enable" a nie TOIE2:"Timer/Counter2 Overflow Interrupt Enable", który jest bit niżej. W symulatorze dokładnie widać, że jest wykonywany nie ten wektor przerwania. http://obrazki.elektroda.net/94_12161272...
Po przerobieniu kod wygląda tak: // Testowanie timera 0 (przerwania) #include <avr/io.h> // dostęp do rejestrów #include <avr/interrupt.h> // funkcje sei(), cli() #define T0_INIT 256-250 #define tbi(PORT,BIT) PORT^=_BV(BIT) // przełącza stan BITu w PORTcie na przeciwny 1->0 ; 0->1 //unsigned...
więc tak, schemat i fotka: http://obrazki.elektroda.pl/2310798200_1... http://obrazki.elektroda.pl/4708784000_1... wszystko działa, tylko tak jak pisałem z jakiegoś powodu procesor co jakiś czas wraca do początku maina. wszystkie zmienne zostają zresetowane, wpomniany MCUCSR nie rejestruje resetu. i dodam jeszcze kod...
Witam, troche odswiezam kotleta ale moze ktos bedzie mi w stanie udzielic rady, zbudowalem wlasna wersje wyswietlacza, po częsci bazujac na tym temacie (serdecznie pozdrawiam autora) mam problem z kodem, mianowicie nie potrafie zrozumiec czemu (obstawiam jakies sprzetowe opoznienia) przy probie wyswietlenia czegos, moj procek wyswietla powiedzmy to...
Działa świetnie! Zmieniłem typ zmiennej z int na volatile, oraz wpisałem: MCUCR= (1<<ISC00) | (1<<ISC01); //przerwanie wyzwalane zboczem narastającym __|-- zamiast MCUCR=1<<ISC00; //przerwanie wyzwalane zboczem narastającym __|-- MCUCR=1<<ISC01; Nie wiem które pomogło, ale jest ok. Jedna rzecz jeszcze nie daje...
Witam! Otóż pisząc prosty program w C pod mikrokontroler AVR (konkretnie ATmega8) napotkałem na błąd, którego nie mogę zdiagnozować. Jest to fragment programu z wykorzystaniem LCD HD44780 i dwóch switchów, zasada działania prosta, przyciskami zwiększamy lub zmniejszamy zmienną i, której wartość wyświetlamy na LCD. Kod: [syntax=c] #include <avr/io.h>...
Witam serdecznie. Co poprawić w kodzie aby wykorzystywać 3xPWM z płynną zmianą, bo jak dotąd pwm od t1 działa płynnie a przy t2 przycina, co poprawić ?? #include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/sleep.h> #include "iocompat.h" /* Note [1] */ enum { UP, DOWN };...
Za moment sprawdzę z diodami, ale zauważyłem pewną rzecz - wywaliłem na chwilę instrukcje dotyczące przycisków innych niż C więc zostawiłem tylko pierwszy blok instrukcji - tam gdzie włączam timer - oraz blok ostatni, gdzie zeruję wartości obu OCRów. Teraz z kolei nic się nie dzieje, na oscyloskopie na wyjściu OC1B widzę tylko piki co jakiś czas. Czyżby...
Witam, napisałem program, który pozwala na wyświetlenie 16 znaków z tablicy na 16 7-segmentowych wyświetlaczach. Następnie program przesuwa znaki w tablicy o 1 wyświetla kolejny znak, tak że całość przesuwa się na wyświetlaczach. Problem w tym że dzieję się to za szybko i znaki biegną tak, że prawie nie można nic przeczytać na wyświetlaczu. Jeśli ktoś...
Korzystając z podpowiedzi Kolegi Osmo , udało mi się wyskrobać coś takiego: [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> volatile uint8_t jasnosc; volatile uint8_t licznik; int main(void) { jasnosc = 0; licznik = 0; DDRB |= (1<<PB2); TCCR0A |= (1<<COM0A1) | (1<<COM0A0); TCCR0A |= (1<<WGM00) | (1<<WGM01);...
Witajcie, mam problem z odczytem wartości z 2 kanałów ADC. Procesor to atmega32. Używam Timer0 żeby przełączać kanały, a na wyświetlaczu wyświeltane są 2 wartości, ale obydwie pokazują to samo- odczytywany jest tylko jeden kanał Inicjalizacja ADC [syntax=c]void ADC_init() { // ADC ADCSRA = (1<<ADEN) |(1<<ADPS0) | (1<<ADPS2) | (1<<ADSC);...
mam jeszce jeden problem, według kodu z linku dondu #include <avr/io.h> #include <avr/interrupt.h> //definicja LED1 (do którego pinu podłączony LED1) #define LED1 PB0 //definicja LED2 (do którego pinu podłączony LED2) #define LED2 PB1 //definicja KLAWISZ (do którego pinu podłączony KLAWISZ) #define KLAWISZ PC0 //definicja...
Witam, zrobiłem tak jak napisano wyżej z tym przerwaniem od timera ,niestety dalej to nie działa jak chce przerobiłem trochę schemat zeby łatwiej sprawdzić co jest grane i dopisałem kilka linijek od siebie ;/ niestety działa to tak że program zmieni się gdy trzymam przycisk ale po puszczeniu go wyrzuca go do do opcji default... nie rozumiem do końca...
Mam ustawiony timer na 4kHz [syntax=csharp]cli(); TCNT1 = 0; TCCR1 = 0; OCR1C = 249; // 4000 Hz (16000000/((249+1)*16)) OCR1A = OCR1C; TCCR1 |= (1 << CTC1); TCCR1 |= (1 << CS12) | (1 << CS10); TIMSK |= (1 << OCIE1A); sei();[/syntax] W przerwaniu timera machałem pinem [syntax=csharp]ISR(TIMER1_COMPA_vect) { //licznik timer1 przepełnienie...
Witam. Jestem poczatkujacym w C i powili uruchamiam sobie kolejne moduly proca atmega128, napotkalem niestety na problem w uruchomieniu timera1, wyglada na to ze wogole nie startuje bo nie wchodzi mi w obsluge przerwania przepelnienia licznika, ma to dzialac tak ze przy kwarcu 11.0592MHz po odpowiednim zaladowaniu licznika ma mi zapalac diode co ok...
Bardzo dziękuje za cenne rady. Oczywiście nie myliliście sie. Teraz już wiem o co w tym wszystkim chodzi:). Teraz kod wygląda tak: #include <avr/io.h> #include <avr/signal.h> #include <avr/interrupt.h> #include "delay.h" #include "lcd.h" #include "ds18x20.h" //-----ds18x20 volatile uint16_t decicelsius;...
Witam! Mam taki dość nietypowy problem. Kontroler ma reagować na jedno z trzech przerwań: TIMERa 0 i dwóch zewnętrznych (czujki ruchu). Te przerwania zewnętrzne zliczają liczbę reakcji czujek, natomiast TIMER 0 ma odmierzać czas i dzięki niemu co kilka sekund mają być wyświetlane statystyki. Bez TIMERa 0 wszystko działa ok, ale statystyki lecą cały...
Witam próbuję wysterować silniki przez PWM, przeczytałem poradnik na mikrokontrolery.blogspot.com i z kodu zmieniłem porty, lecz dalej nic się nie dzieje ze silnikami... http://obrazki.elektroda.pl/9186829100_1... http://obrazki.elektroda.pl/4064646700_1... Wie ktoś jaka może być przyczyna lub co zmienić? Z góry dzięki.
Witam. Od 3 dni siedzę już nad programowym PWM. Wykorzystuję do tego przerwanie na timerze, ale coś nie działa tak jak powinno otóż jak nie mam ustawionego stanu 1 na ostatnim bicie portu to PWM dziwnie się zachowuje. //Includes #include "avr/io.h" #include "inttypes.h" #include "stdio.h" #include "util/delay.h"...
[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)...
Jeśli chodzi o sprzętowego PWMa to chyba pokuszę się o AVR136, tylko zamiast atmegi wykorzystam attiny2313. Zasymulowałem sobie to na razie tylko w proteusie i całkiem ładnie to śmiga :) ________________________________________... Ok. Potrzebuje Waszej pomocy. PWMy ładnie działąją (12 kanałów), ale nie wiem jak zwiększyć częstotliwość tego PWMa....
[syntax=cpp]ISR(INT1_vect) { // będzie case w zależności od trybu pracy Transmiter czy Receiver. W chwili obecnej jest tylko niepełny receiver u16t data=writeCmd(0x0000); if ((data>>15)&0x01) // FFIT jeżeli fifo zapełniło zaprogramowaną wartość (u mnie 8 bitów) { if (!(TIMSK&(1<<OCIE0))) // wykonuje się tylko raz przy rozpoczęciu...
napisałem tak i nie działa ;/ gdzie może być błąd? (tranzystor PNP do OC1A - PB1 atmega8). sprawdziłem przed chwilą w bascomie, i telewizor reaguje na komendy rc5send z BASCOMA. unsigned int RRR=0; void rc5send(void) { TCCR0 |= (1<<CS00); TCCR0 |= (1<<CS01); // use CLK/64 prescale TCNT0 = 0x6F; //888 cykli dla...
Kod mojego przerwania wygląda tak. Program działa w rezultacie tak jak bym chciał, ale samo wykonanie przerwania zajmuje trochę czasu. Zoptymalizowałem kod tak jak potrafiłem i w tym momencie liczę na Waszą pomoc. SW_pwm_12_channels: volatile unsigned char chanell[12]; volatile const pwm_res = 32; volatile unsigned char counter = 0; #define...
//dołączanie bibliotek #include ... volatile uint32_t overflow; ISR (TIMER0_OVF_vect) { overflow++; } void funkcja() { uint32_t pom; overflow=0; ... ... //różne duperele związane z szyfrowaniem ... pom=overflow; } SIGNAL (SIG_INTERRUPT0) { funkcja(); } SIGNAL (SIG_INTERRUPT1) {...
Witam! Niedawno miałem na forum temat n/t próbkowania i zapisu do tablicy sygnału sinusoidalnego. Gdy się z tym uporałem, wziąłem się za pisanie algorytmu Goertzela. Szukalem w sieci dużo. Między innymi ta biblia: http://www.mstarlabs.com/dsp/goertzel/go... a także ta: http://www.eetimes.com/design/embedded/4... Koniec...
timsk przepełnienie buffer overflow overflow atmega8
paski ekranie cienkie phison firmware ps2251 kondensator pobór prądu
zderzak naprawa zderzak naprawa
Jak ustawić odstęp elektrod w świecy Oleo-Mac 937 bez szczelinomierza Strzelanie w głośnikach po czyszczeniu Sony TA-F690ES