Przerwanie TIMER1 tryb CTC

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Wrangler
-
Posty: 6
Rejestracja: 14 lis 2011, 13:08
Lokalizacja: Wlkp
Kontakt:

Przerwanie TIMER1 tryb CTC

Post autor: Wrangler » 30 mar 2012, 10:36

Zadanie polega na miganiu diodą z wykorzystaniem timera1. Chciałem spróbować dla odmiany zrobić to na timerze1, zamiast na timerze0.
Program nie działa jak należy. Dioda świeci stale zamiast migać. Nie mogę znaleźć przyczyny dlaczego.
Częstotliwość taktowania procka(atmega32) 1MHz.

Kod: Zaznacz cały

#include <avr/io.h>
#include <avr/interrupt.h>

int main(void)
{	

	DDRD = 0xFF; 
	PORTD = (1<<PD4); //led
	
	//ustawienie timera
	TCCR1B |= (1<<WGM12); //tryb ctc
	TCCR1B |= (1<<CS12)|(1<<CS10); // preskaler 1024
	OCR1B = 1953; //rejestr porównawczy compare match
	TIMSK |= (1<<OCIE1B); //zezwolenie na przerwanie
	sei();
	
while(1);
	
}

				ISR(TIMER1_COMPB_vect)
			{
				PORTD ^= (1<<PD4);	

			}	

Awatar użytkownika
tymon_x
-
Posty: 64
Rejestracja: 14 wrz 2010, 16:48
Lokalizacja: Gdańsk

Re: Przerwanie TIMER1 tryb CTC

Post autor: tymon_x » 30 mar 2012, 20:29

Wrangler pisze:Program nie działa jak należy. Dioda świeci stale zamiast migać. Nie mogę znaleźć przyczyny dlaczego
Czytamy uważnie rozdział o CTC i patrzymy na tabelkę Waveform Generation Mode Bit Description, aż nie zaczną nam łzawić oczy. Podpowiedź tygodnia, ustaw TOP.

Wrangler
-
Posty: 6
Rejestracja: 14 lis 2011, 13:08
Lokalizacja: Wlkp
Kontakt:

Post autor: Wrangler » 31 mar 2012, 10:28

Dokładnie o to chodziło. Dzięki.

ODPOWIEDZ