Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Работа нескольких таймеров в atmega128
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Kris2007
Инициализирую таймер 2 кодом
outb (0,TCCR2);
outb (0, TCNT2);
outb (0x06,TCCR2);
Далле разрешается прерывание по перепонению,но в независимости от предделителя(4,2,6 ..) таймер переполняется за ~1мс.

В программе есть еще таймер 1, а активно используется (он включен в ОС).

Вопрос при инициализации второго таймера надо как то мудрить с предделителями?
GDI
outb это у вас макросы какие то или функции? местами регистр и значение не перепутали случайно?
Kris2007
Цитата(GDI @ Jul 31 2007, 14:18) *
outb это у вас макросы какие то или функции? местами регистр и значение не перепутали случайно?


нет все нормально значения в регистры пишутся я проверял.
bzx
Цитата(Kris2007 @ Jul 31 2007, 12:56) *
Вопрос при инициализации второго таймера надо как то мудрить с предделителями?

А вопрос то в чём заключается? Непонятно для чего предделитель чтоли? Или как сделать прерывания с заданным интервалом?
lech196
Цитата(Kris2007 @ Jul 31 2007, 13:33) *
нет все нормально значения в регистры пишутся я проверял.


Если вы используете в своём проекте библиотеку AVRlib и подключили файл avrlibdefs.h (AVRlib global defines and macros) то это кажется странным, т.к. внутри файла эти макросы объявлены вот так:

Код
#ifndef outb
    #define    outb(addr, data)    addr = (data)
#endif


т.е. вы перепутали местами адрес и данные как вам уже сказали.
Kris2007
Цитата(lech196 @ Jul 31 2007, 15:04) *
Если вы используете в своём проекте библиотеку AVRlib и подключили файл avrlibdefs.h (AVRlib global defines and macros) то это кажется странным, т.к. внутри файла эти макросы объявлены вот так:


Не использую,тут свои библиотеки (дописанные и переписанные) и макрос опрелен именно в таком порядке(ну вот сделали так и все!).

А вопрос простой- какаго .. не работает?smile.gif
в TCCR2 именно то что я записываю.
Тут в даташите вычитал что блок предделителей отчасти общий для всех таймеров, никаких сборос этого блока не надо при включении нового таймера?
GDI
Вообще то для Т2 загрузка значения 0х06 в TCCR2 - это включение внешнего тактирования(как и 0х07) может в этом проблема?
Kris2007
Цитата(GDI @ Jul 31 2007, 16:31) *
Вообще то для Т2 загрузка значения 0х06 в TCCR2 - это включение внешнего тактирования(как и 0х07) может в этом проблема?


Да с 6 я погорячилсяsmile.gif
т.е. он у меня и при задании внешнего тактирования и его отсутствии прерывался по переполнению каждую 1 мс....smile.gif

м-да... похоже не включается предделитель
GDI
А откуда известно про значения в регистрах? и время 1 мс на железе получается или в симуляторе? если в симуляторе, то это ничего еще не значит. прескалер включен всегда, может все же сто то с функциями не то? с outb? можно на код их взглянуть?
Kris2007
Цитата(GDI @ Jul 31 2007, 17:23) *
А откуда известно про значения в регистрах? и время 1 мс на железе получается или в симуляторе? если в симуляторе, то это ничего еще не значит. прескалер включен всегда, может все же сто то с функциями не то? с outb? можно на код их взглянуть?


1мс(чуть меньше) вижу на осцилографе,устанавливая в 1 свободный вывод в обработчике прерывания.
outb, ну долго его тут искать - много файлов + ось. Нормально все с ним! Тут outb везде используется в таком виде и в сделанных уже проэктах в таком виде.
GDI
может Ось мешает блокируя прерывания? а сколько должно получиться время прерывания от Т2? Что за ось стоит?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.