Skocz do zawartości

[C] [ATmega32A] TIMER1 tryb normalny


Stonka

Pomocna odpowiedź

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;
}

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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 😉

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

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!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.