реклама на сайте
подробности

 
 
> Помогите с таймером
Neytrino
сообщение Jul 25 2009, 15:30
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 26-02-09
Пользователь №: 45 406



CODE

void init_timer1()
{
PORTB |= (1<<PIND1);
DDRB &= 0;
OCR1B = 0;
TCCR1B = (1 << WGM12) | (1 << CS12) | (1 << CS11) | (1 << CS10); //тактирование по нарастающему фронту импульсов
TIMSK = (1 << OCIE1B); // (1 << 1);
SREG |= (1 << 7); // _SEI();
}

CODE
#pragma vector = TIMER1_COMPB_vect
__interrupt void inc_delay_counter1()
{

counter++;
}


вот собственно код инициализации и прерывания. Не считает гад по импульсам, подаю сигнал - на счетчиках полный 0. Помогите победить заразу для тактирования из-вне
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Vishv
сообщение Jul 25 2009, 16:54
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 310
Регистрация: 11-07-09
Из: Екатеринбург
Пользователь №: 51 154



PIND относится к PORTD, а к PORTB и DDRB относится PINB !
Выражение "DDRB &= 0;" переводит весь PORTB в режим входов.
Если Вы хотите просто считать импульсы по Т1 тогда не трогайте TCCR1A.
А "TCCR1B = (1 << WGM13) | (1 << CS12) | (1 << CS11) | (1 << CS10); //тактирование по нарастающему фронту импульсов"
замените на "TCCR1B = (1 << CS12) | (1 << CS11) | (1 << CS10); //тактирование по нарастающему фронту импульсов".
TIMSK в этой инициализации тоже трогать не нужно.
Инициализация Т0-аналогично.
Go to the top of the page
 
+Quote Post
Neytrino
сообщение Jul 26 2009, 06:31
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 26-02-09
Пользователь №: 45 406



Цитата(Vishv @ Jul 25 2009, 20:54) *
PIND относится к PORTD, а к PORTB и DDRB относится PINB !
Выражение "DDRB &= 0;" переводит весь PORTB в режим входов.

Вот спасибо Вам, как это я раньше не заметил???? ужас.

Но таймеры все равно не считают вместе sad.gif

Цитата(Vishv @ Jul 25 2009, 20:54) *
А "TCCR1B = (1 << WGM13) | (1 << CS12) | (1 << CS11) | (1 << CS10); //тактирование по нарастающему фронту импульсов"
замените на "TCCR1B = (1 << CS12) | (1 << CS11) | (1 << CS10); //тактирование по нарастающему фронту импульсов".
TIMSK в этой инициализации тоже трогать не нужно.
Инициализация Т0-аналогично.

Если сделать так, то таймеры вообще перестают считать, только что проверил

А так получается либо один работает, либо второй, вместе не хотят
Go to the top of the page
 
+Quote Post
Vishv
сообщение Jul 26 2009, 07:01
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 310
Регистрация: 11-07-09
Из: Екатеринбург
Пользователь №: 51 154



Цитата(Neytrino @ Jul 26 2009, 12:31) *
Вот спасибо Вам, как это я раньше не заметил???? ужас.

Но таймеры все равно не считают вместе sad.gif


Если сделать так, то таймеры вообще перестают считать, только что проверил

А так получается либо один работает, либо второй, вместе не хотят

А почему Вы уверены, что они не считают?
Попробуйте читать таймеры, например в прерывании таймера2(кажется он у Вас отвечает за отсчет времени).
А вообще биты WGхх расшифровываются как Wave Generation т.е. - генерирование.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 13:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01418 секунд с 7
ELECTRONIX ©2004-2016