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

 
 
> Таймер в mega8515 100Гц, маленькая проблема...
Athlon128
сообщение May 11 2006, 12:30
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 18-04-06
Пользователь №: 16 238



Задача - вызывать прерывание каждые 10мс (100Гц). ATmega8515, кварц 16 МГц, таймер1.
Нужно это для замера коротких промежутков времени (~30 сек.).

Код
TIMSK=0x40; // set OCIE1A
TCCR1B=0x0C; // cl/256  16000000/256=62500
// 62500/100=625
// опрос каждые 10ms
//OCR1AH=0x02;  // прерывание как только досчитает до 625=271h
//OCR1AL=0x71;  //


В результате прерывание возникает слишком часто. В чём моя ошибка?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Athlon128
сообщение May 11 2006, 17:30
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 18-04-06
Пользователь №: 16 238



2topkin Вашу мысль понял, но у меня прерывание не по переполнению, а по достижению OCR1A.

2vet Вы правы, строки закоментировал по ошибке при вставке в форум. Попутный вопрос: я думал что OCR1A нужно заполнять по байту как у меня, но в итоге работает и OCR1A = 625;

2defunct Это, к сожалению, также не помогло, таймер срабатывал слишком часто, но не так чтобы в каждый такт, а примерно в 1,5-2 раза чаще, чем положено. Так же было и до перестановки OCR1A = 625;

У меня в обработчике прерывания стоит инкремент переменной и несколько проверок if. Я щас попробовал вставить TCCR1B=0x00; до инкремента и TCCR1B=0x0C; после. Замерил 1 минуту, теперь точно щёлкает. Почему это помогло я не понял.

ЗЫ: если так не понятно, приведу листинг.
Go to the top of the page
 
+Quote Post



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

 


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


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