Stonka Napisano Listopad 25, 2011 Udostępnij Napisano Listopad 25, 2011 Siedzę nad dokumentacją i netem którąś godzinę, i już sam nie wiem, czy nie zrozumiałem czegoś czy co... tryb normalny TIMER1 -> TCNT1 sobie rośnie od zera, jak dojdzie do końca (overflow) to przechodzimy do przerwania: ISR(TIMER1_OVF_vect) { np. zgaś diodę; } i wszystko się zaczyna od początku. Jaka powinna być konfiguracja, żeby coś takiego osiągnąć? Z tego co wyczytałem, wychodzi mi, że: TIMSK |= _BV(TOIE1); TCCR1B |= _BV(CS12) ; //preskaler 256, niecała sekunda to przepełnienie Timera dla zegara 16MHz Czy tu czegoś brakuje/jest źle? (Bo, jak można się domyślić, nie działa - ani razu nie występuje przerwanie). Oczywiście sei(); na początku programu jest. Jeśli ktoś chce zobaczyć cały program: //FCPU 16000000UL #include <avr/io.h> #include <avr/interrupt.h> int main(void) { ISR(TIMER1_OVF_vect) { PORTB &= ~_BV(0); } DDRB = 0x1; PORTB = 0x0; PORTB |= _BV(0); //zapalenie diody TIMSK |= _BV(TOIE1); TCCR1B |= _BV(CS12) ; //preskaler 256, niecała sekunda to przepełnienie Timera dla zegara 16MHz sei(); while(1) {} return 0; } Cytuj Link do komentarza Share on other sites More sharing options...
grabo Listopad 25, 2011 Udostępnij Listopad 25, 2011 A czy przypadkiem obsługa przerwania nie powinna być poza funkcją main? 🙂 1 Cytuj Link do komentarza Share on other sites More sharing options...
dondu Listopad 25, 2011 Udostępnij Listopad 25, 2011 Najważniejszy Twój błąd polega na tym, że ten kod Ci się nie kompiluje, wyświetla błędy, które wystarczy przeczytać i kliknąć, zamiast od razu tworzyć temat, na forum: Build started 25.11.2011 at 13:41:40../Proba_22.c: In function 'main': ../Proba_22.c:7: error: static declaration of '__vector_9' follows non-static declaration ../Proba_22.c:7: error: previous declaration of '__vector_9' was here ../Proba_22.c: In function '__vector_9': ../Proba_22.c:9: error: expected ';' before numeric constant make: *** [Proba_22.o] Error 1 Build failed with 3 errors and 0 warnings... Wyświetlane błędy dotyczą tego co wspomniał grabo, oraz zbędnego zera następującego po PORTB: PORTB 0 &= ~_BV(0); Drobna uwaga: return 0 jest zbędne. EDIT: Usunąłeś zero o którym pisałem, ale nie zrobiłeś tego co napisał grabo. Cytuj Link do komentarza Share on other sites More sharing options...
Stonka Listopad 25, 2011 Autor tematu Udostępnij Listopad 25, 2011 Muszę Was przeprosić, ten kod wyglądał tak bo był wycięty z dużego programu(który by się tu nie zmieścił). Przestawiłem to ISR wyżej i ok, błędów nie było, ale dalej nie działa. (We wklejonym kodzie było w main bo jak wklejałem na forum to przerwanie było z innego pliku i stąd to przemieszczenie:/ ) W każdym razie, już mi działa... Za długo już siedzę nad tym przed kompem i nie zauważyłem, że chciałem gasić diodę ustawiając stan niski... Zapomniałem, że w tym co mam diodę gaszę stanem wysokim 😃 Noo, te cztery godziny siedzenia nad dokumentacją TIMERA1 na pewno mi się jeszcze kiedyś przydadzą😃 wystarczyło zmienić PORTB 0 &= ~_BV(0); na np. PORTB 0 ^= _BV(0); i już było ok... Eh. Dzięki za pomoc:) A gdyby ktoś kiedyś chciał skorzystać: //FCPU 16000000UL #include <avr/io.h> #include <avr/interrupt.h> ISR(TIMER1_OVF_vect) { PORTB ^= _BV(0); } int main(void) { DDRB = 0x1; PORTB = 0x0; TIMSK |= _BV(TOIE1); TCCR1B |= _BV(CS12) ; //preskaler 256, niecała sekunda to przepełnienie Timera dla zegara 16MHz sei(); while(1) { } } Temat zamknięty. Wniosek - jak coś nie działa, szukaj również oczywistych błędów 😉 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
dondu Listopad 25, 2011 Udostępnij Listopad 25, 2011 Zdarza się nawet najlepszym. 😃 i wywal return 0 - bo niepotrzebne. 1 Cytuj Link do komentarza Share on other sites More sharing options...
Stonka Listopad 25, 2011 Autor tematu Udostępnij Listopad 25, 2011 No w sumie to return to tak z przyzwyczajenia, że jak funkcja main jest typu int to musi coś zwracać😉 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!