Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 30.03.2010, 09:34  
home2010
Прохожий
 
Регистрация: 30.03.2010
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
home2010 на пути к лучшему
По умолчанию ATmega 128 . Пытаюсь запустить таймер Т2...

Пытаюсь запустить таймер Т2...

ATmega 128,кварц 7.372Мhz,AVreal

D:\Timers\avreal32.exe +MEGA128 -p378 -ab -n -o1000Khz -%% -fCKSEL=E,BOOTRST=0,BLB0=3,BLB1=3,M103C=1,JTAGEN=1 -e -w -c D:\Timers\Timers.hex
PAUSE

void InitTimers (void)
{
//инициализация таймера т2
TIMSK = (1‹‹OCIE2); //разрешаем прерывание таймера т2 при событии совпадение
TCCR2 = ((0‹‹WGM21)|(0‹‹WGM20)|(1‹‹CS02)|(0‹‹CS01)|(1‹‹CS0 0)); //режим СТС, прескалер - 1024
TCNT2 = 0; //обнуляем счетный регистр
OCR2 = 0x07; //прерывания каждые ~ 1 мс
}

//-------------------------------------------------------------------------------------------
// Прерывание от T2 1 милисекунда
#pragma vector = TIMER2_COMP_vect
__interrupt void TIMER2_COMP_interrupt(void)
{
uint Ticks = 0;
uint del = 0;

// Обработка 1 мс интервалов
Ticks++;
if(Ticks & 0x0080) {on(LED1);} else {off(LED1);}

// Обработка 1 с интервалов
if(++ del ›= 1000) {on(LED2);} else {off(LED2);}

}

Буду очень благодарен за помощь
Реклама:
home2010 вне форума  
Непрочитано 30.03.2010, 10:04  
ilya_sh
Прописка
 
Регистрация: 09.10.2007
Сообщений: 235
Сказал спасибо: 27
Сказали Спасибо 24 раз(а) в 24 сообщении(ях)
ilya_sh на пути к лучшему
По умолчанию Re: ATmega 128 . Пытаюсь запустить таймер Т2...

Сообщение от home2010 Посмотреть сообщение
TCCR2 = ((0‹‹WGM21)|(0‹‹WGM20)|(1‹‹CS02)|(0‹‹CS01)|(1‹‹CS0 0)); //режим СТС, прескалер - 1024
Для режима CTC по совпадению OCR2 надо ((1‹‹WGM21)|(0‹‹WGM20)
ilya_sh вне форума  
Непрочитано 30.03.2010, 10:13  
ilya_sh
Прописка
 
Регистрация: 09.10.2007
Сообщений: 235
Сказал спасибо: 27
Сказали Спасибо 24 раз(а) в 24 сообщении(ях)
ilya_sh на пути к лучшему
По умолчанию Re: ATmega 128 . Пытаюсь запустить таймер Т2...

Да, и точность будет не 1мс, а (1024*/7372000, где то 1,1112...мс
ilya_sh вне форума  
Непрочитано 30.03.2010, 10:35  
mrKirill
Вид на жительство
 
Аватар для mrKirill
 
Регистрация: 12.04.2007
Сообщений: 348
Сказал спасибо: 2
Сказали Спасибо 36 раз(а) в 32 сообщении(ях)
mrKirill на пути к лучшему
По умолчанию Re: ATmega 128 . Пытаюсь запустить таймер Т2...

Сообщение от ilya_sh Посмотреть сообщение
Да, и точность будет не 1мс, а (1024*/7372000, где то 1,1112...мс
Вот чего умничаете, написано же
Цитата:
...//прерывания каждые ~ 1 мс...
mrKirill вне форума  
Непрочитано 30.03.2010, 12:06  
home2010
Прохожий
 
Регистрация: 30.03.2010
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
home2010 на пути к лучшему
По умолчанию Re: ATmega 128 . Пытаюсь запустить таймер Т2...

Таймер зароботал
Нужно было ...
static uint Ticks = 0;
Для режима CTC по совпадению OCR2 надо ((1‹‹WGM21)|(0‹‹WGM20)

void InitTimers (void)
{
//инициализация таймера т2
TIMSK = (1‹‹OCIE2); //разрешаем прерывание таймера т2 при событии совпадение
TCCR2 = ((1‹‹WGM21)|(0‹‹WGM20)|(1‹‹CS02)|(0‹‹CS01)|(1‹‹CS0 0)); //режим СТС, прескалер - 1024
TCNT2 = 0; //обнуляем счетный регистр
OCR2 = 0x07; //прерывания каждые ~ 1 мс
}

//-------------------------------------------------------------------------------------------
// Прерывание от T2 1 милисекунда
#pragma vector = TIMER2_COMP_vect
__interrupt void TIMER2_COMP_interrupt(void)
{
static uint Ticks = 0;

Ticks++;
if(Ticks & 0x0080) {on(LED1);} else {off(LED1);}

}
home2010 вне форума  
Непрочитано 30.03.2010, 14:49  
ilya_sh
Прописка
 
Регистрация: 09.10.2007
Сообщений: 235
Сказал спасибо: 27
Сказали Спасибо 24 раз(а) в 24 сообщении(ях)
ilya_sh на пути к лучшему
По умолчанию Re: ATmega 128 . Пытаюсь запустить таймер Т2...

Сообщение от home2010 Посмотреть сообщение
Нужно было ...
static uint Ticks = 0;
Эту переменную ваще нуно было не в процедуре прерывания описывать, чтобы значения сохранялись (дабы не писать "статик" - приводит к путанице).
А куда делась "del" ?
ilya_sh вне форума  
Непрочитано 30.03.2010, 17:26  
home2010
Прохожий
 
Регистрация: 30.03.2010
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
home2010 на пути к лучшему
По умолчанию Re: ATmega 128 . Пытаюсь запустить таймер Т2...

Сообщение от ilya_sh Посмотреть сообщение
Эту переменную ваще нуно было не в процедуре прерывания описывать, чтобы значения сохранялись (дабы не писать "статик" - приводит к путанице).
А куда делась "del" ?
Ну тогда


uint Ticks = 0; // инициализация за пределами прирывания

//-------------------------------------------------------------------------------------------
// Прерывание от T2 1 милисекунда
#pragma vector = TIMER2_COMP_vect
__interrupt void TIMER2_COMP_interrupt(void)
{


Ticks++;
if(Ticks & 0x0080) {on(LED1);} else {off(LED1);}

}
home2010 вне форума  
Непрочитано 31.03.2010, 07:47  
ilya_sh
Прописка
 
Регистрация: 09.10.2007
Сообщений: 235
Сказал спасибо: 27
Сказали Спасибо 24 раз(а) в 24 сообщении(ях)
ilya_sh на пути к лучшему
По умолчанию Re: ATmega 128 . Пытаюсь запустить таймер Т2...

Сообщение от home2010 Посмотреть сообщение
uint Ticks = 0; // инициализация за пределами прирывания
Вот это более предпочтительный стиль написания кода.
ilya_sh вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 00:20.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot