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

 
 
> Не получается сконфигурировать таймер ATMega8515
Sirko
сообщение May 15 2011, 20:35
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 245
Регистрация: 15-08-07
Пользователь №: 29 795



Не могу даже понять, откуда проблема.
Необходимо запустить первый таймер в режиме - CTC по сравнению с регистром ICR1.

Вот исходник:
Код
void InitializationTimer1(void){
    TCCR1B |= _BV(CS11);                                //    Тактирование таймера clk/8 = 1843200 Гц
    TCCR1B | _BV(WGM13) | _BV(WGM12);                //    Режим работы - "Сброс при совпадении ICR1"
    ICR1 = (F_CPU/8)/100;                            //    Переполнение - через 10 mSec
    TIMSK |= _BV(TOIE1);                                //    Разрешить прерывание по переполнению
}

ISR (TIMER1_OVF_vect) {
    static u16 q = 0;
    if(q == 0){
        PORTA ^= _BV(PA3);
        q = 100;
    }else
        --q;
}

Теоретически, прерывание должно возникать 100 раз в секунду, соответственно, дерганье ногой, в моем случае, должно происходить каждую секунду. Но в железе видно, что это происходит раз за почти четыре секунды. Значит, почему-то в регистре ICR1 не мое значение, а 0xFFFF.
Решил глянуть в симуляторе студии. Оказывается, проблема в следующем:
строка TCCR1B |= _BV(CS11) отрабатывается корректно, а
строка TCCR1B | _BV(WGM13) | _BV(WGM12) не выставляет никакие биты, соответственно, таймер работает в режиме normal.
Когда я объединил эти строки в одну TCCR1B |= _BV(CS11) | _BV(WGM13) | _BV(WGM12), в симуляторе начали выставляться все положенные биты, но в железе нога больше не дергается.

Понимаю, что чего-то я не знаю. Вот собственно и вопрос - ЧЕГО?

Компилятор с WinAVR-20100110, makefile - студийный, оптимизация Os
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Sirko
сообщение May 16 2011, 19:58
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 245
Регистрация: 15-08-07
Пользователь №: 29 795



Цитата
Очень интересно, ждём прерывание по совпадению...

Простите, - не совсем понял. Если Вы имеете в виду прерывание по сравнению, то действительно, мне будут нужны прерывания и сравнения и переполнения. Вот только в этом топике я не вижу, где я использовал сравнение.

Цитата
и чего в итоге ждём
Скорее не ждем, а хотим запустить таймер в режиме "сброс по совпадению". Почему-то счетный регистр не хочет шевелиться.
В чем кроется загвоздка - не знаю.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Sirko   Не получается сконфигурировать таймер ATMega8515   May 15 2011, 20:35
- - demiurg_spb   Обычно делают так: Кодcli(); TCCRxB = 0; /...   May 16 2011, 04:23
- - Sirko   ЦитатаТ.е. прямо пишут байты в регистры таймера В ...   May 16 2011, 06:14
|- - demiurg_spb   Цитата(Sirko @ May 16 2011, 10:14) В этой...   May 16 2011, 06:38
- - XVR   ЦитатаРешил глянуть в симуляторе студии. Оказывает...   May 16 2011, 09:21
- - Sirko   Цитатаа с чего собственно TCCR1B должен был измени...   May 16 2011, 10:23
- - Sirko   Чет невыходит ниче. Инициализирую вот так: TCCR1B...   May 16 2011, 18:36
|- - demiurg_spb   Цитата(Sirko @ May 16 2011, 22:36) Че ему...   May 17 2011, 04:12
- - ILYAUL   Очень интересно, ждём прерывание по совпадению , а...   May 16 2011, 19:18
|- - ILYAUL   Цитата(Sirko @ May 16 2011, 23:58) Прости...   May 16 2011, 20:35
- - alexeyv   В вашем случае проще использовать режим таймера №4...   May 17 2011, 04:22
- - Sirko   ЦитатаЭто же Ваше Мое. Только я считал, что при ср...   May 17 2011, 19:20
- - ILYAUL   Цитата(Sirko @ May 17 2011, 23:20) Мое. Т...   May 17 2011, 20:13


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

 


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


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