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

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

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

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

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

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

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 27.06.2014, 13:32  
qweentet
Частый гость
 
Регистрация: 17.06.2014
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
qweentet на пути к лучшему
По умолчанию Atmega162 Timer1 и Timer3 работают по разному

Одинаково инициализирую 16-ти битные таймеры в Atmega162, но, почему-то Timer3 срабатывает в-2ва раза чаще, смотрел доку, прескаллеры вроди бы одинаково настраиваются...
Где я мог накосячить?
Код:
interrupt[TIM1_COMPA] void TIM1_COMPA_INT(void){
    //CCNET_WAIT_FOR_PACK=0;
    PORTB|=0x1‹‹0;
    PORTB&=~(0x1‹‹0);
    return;
};
interrupt[TIM3_COMPA] void TIM3_COMPA_INT(void){
    //ID003_WAIT_FOR_PACK=0; 
    PORTB|=0x1‹‹1;
    PORTB&=~(0x1‹‹1);
    return;   
};

void TIM1_Init(void){
    TCCR1B|=(1‹‹CS10)|(1‹‹CS11);    //Устанавливаем предделитель  64
	TCCR1B|=(1‹‹WGM12);
    #asm("sei");   
}
void TIM3_Init(void){
    TCCR3B|=(1‹‹CS30)|(1‹‹CS31);    //Устанавливаем предделитель  64 
    TCCR3B&=~(1‹‹CS32);    //Устанавливаем предделитель  64
	TCCR3B|=(1‹‹WGM32);
    #asm("sei");    
}
//Установка часов
void TIM1_Set(unsigned short ms){
	unsigned short OCRCalc;
    OCRCalc=ms*125;
    OCR1AH = (unsigned char)(OCRCalc››8); 
    OCR1AL = (unsigned char)(OCRCalc);
    TCNT1H = 0;
	TCNT1L = 0;
	TIMSK|=(1‹‹OCIE1A);     //Включить прерывание при совпадение на компараторе A
};
//Установка часов
void TIM3_Set(unsigned short ms){
    unsigned short OCRCalc;
    OCRCalc=ms*125;
    OCR3AH = (unsigned char)(OCRCalc››8); 
	OCR3AL = (unsigned char)(OCRCalc);
    TCNT3H = 0;
	TCNT3L = 0;
	ETIMSK|=(1‹‹OCIE3A);     //Включить прерывание при совпадение на компараторе A
};
void TIM1_Reset(void){
    TCNT1H = 0;
    TCNT1L = 0;
};
void TIM3_Reset(void){
    TCNT3H = 0;
    TCNT3L = 0;
};
Реклама:

Последний раз редактировалось qweentet; 27.06.2014 в 17:03.
qweentet вне форума  
Непрочитано 27.06.2014, 19:08  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

Сообщение от qweentet Посмотреть сообщение
Одинаково инициализирую 16-ти битные таймеры в Atmega162
Инициализируешь неодинаково
niXto вне форума  
Непрочитано 27.06.2014, 20:34  
qweentet
Частый гость
 
Регистрация: 17.06.2014
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
qweentet на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

Сообщение от niXto Посмотреть сообщение
Инициализируешь неодинаково
void TIM3_Init(void){
TCCR3B|=(1‹‹CS30)|(1‹‹CS31); //Устанавливаем предделитель 64
TCCR3B&=~(1‹‹CS32); //Устанавливаем предделитель 64
TCCR3B|=(1‹‹WGM32);
#asm("sei");
}
Если Вы имеете ввиду то что выше, то ето контрольный в голову, который я дописал, после обнаружения проблемы. По документу:
------------------------
CS10(CS30) - 1
CS11(CS31) - 1
CS12(CS32) - 0
-------------------------
предделитель 64.

Или Вы о чем-то другом?

Последний раз редактировалось qweentet; 27.06.2014 в 20:37.
qweentet вне форума  
Непрочитано 28.06.2014, 00:38  
vynt
Почётный гражданин KAZUS.RU
 
Аватар для vynt
 
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
vynt на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

У разных таймеров могут быть разные значения (регистров) для делителя на одну и туже частоту. И инфа на будущее, у разных камней они опять же могут отличаться (можете столкнуться при очередной переделки проекта). Внимательно перечитайте Datasheet, и уберите #asm("sei") из функций инициализации. Инициализация каждого в отдельности прерывания, должна производится при отключенном глобальном разрешении всех прерываний. Иначе значения регистров могут отличаться от желаемого...
должно быть примерно так:
PHP код:
void main(void)
{
 
//запрет всех прерываний "cli"
 //инициализация прерывания 1
 //инициализация прерывания 2
 //инициализация прерывания n
 //разрешение всех прерываний "sei"
 
while(1//бесконечный цикл
 
{
   
//сброс вачдога
   //вызов каких то процедур (не длительных)
 
}


Последний раз редактировалось vynt; 28.06.2014 в 01:11.
vynt вне форума  
Непрочитано 28.06.2014, 11:22  
SPKostenko
Частый гость
 
Регистрация: 08.08.2008
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
SPKostenko на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

Как Вы определили, что Т3 срабатывает в 2-раза чаще?
SPKostenko вне форума  
Непрочитано 28.06.2014, 11:29  
qweentet
Частый гость
 
Регистрация: 17.06.2014
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
qweentet на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

Сообщение от vynt Посмотреть сообщение
У разных таймеров могут быть разные значения (регистров) для делителя на одну и туже частоту. И инфа на будущее, у разных камней они опять же могут отличаться (можете столкнуться при очередной переделки проекта). Внимательно перечитайте Datasheet, и уберите #asm("sei") из функций инициализации. Инициализация каждого в отдельности прерывания, должна производится при отключенном глобальном разрешении всех прерываний. Иначе значения регистров могут отличаться от желаемого...
должно быть примерно так:
PHP код:
void main(void)
{
 
//запрет всех прерываний "cli"
 //инициализация прерывания 1
 //инициализация прерывания 2
 //инициализация прерывания n
 //разрешение всех прерываний "sei"
 
while(1//бесконечный цикл
 
{
   
//сброс вачдога
   //вызов каких то процедур (не длительных)
 
}

По поводу #asm("cli"\"sei") сделал по вашим рекомендациям
По поводу CSXX, я в первую очередб проверил это по DS:
Миниатюры:
Нажмите на изображение для увеличения
Название: Presc.jpg
Просмотров: 58
Размер:	125.5 Кб
ID:	66402  
qweentet вне форума  
Непрочитано 28.06.2014, 11:45  
qweentet
Частый гость
 
Регистрация: 17.06.2014
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
qweentet на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

Сообщение от SPKostenko Посмотреть сообщение
Как Вы определили, что Т3 срабатывает в 2-раза чаще?

Код:
interrupt[TIM1_COMPA] void TIM1_COMPA_INT(void){
    //CCNET_WAIT_FOR_PACK=0;
    PORTB|=0x1‹‹0;
    PORTB&=~(0x1‹‹0);
    return;
};
interrupt[TIM3_COMPA] void TIM3_COMPA_INT(void){
    //ID003_WAIT_FOR_PACK=0; 
    PORTB|=0x1‹‹1;
    PORTB&=~(0x1‹‹1);
    return;   
};
Миниатюры:
Нажмите на изображение для увеличения
Название: otladka.jpg
Просмотров: 76
Размер:	216.6 Кб
ID:	66403  
qweentet вне форума  
Непрочитано 28.06.2014, 11:58  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,856
Сказал спасибо: 2,532
Сказали Спасибо 11,771 раз(а) в 5,896 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

Опять выводы через протез? Только реальный камень даст реальный результат, остальное - выводы через ...опу.
Не ходите по граблям, хоть там и тропинка.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 28.06.2014, 12:02  
qweentet
Частый гость
 
Регистрация: 17.06.2014
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
qweentet на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

Сообщение от akegor Посмотреть сообщение
Опять выводы через протез? Только реальный камень даст реальный результат, остальное - выводы через ...опу.
Не ходите по граблям, хоть там и тропинка.
Ок, закажу реальный камень...
qweentet вне форума  
Непрочитано 28.06.2014, 19:48  
kosmos440o
Заблокирован
 
Регистрация: 23.09.2007
Сообщений: 761
Сказал спасибо: 84
Сказали Спасибо 352 раз(а) в 151 сообщении(ях)
kosmos440o на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

Может ещё прерывания занимают слишком много времени, и тогда то, у которого приоритет меньше, будет гаситься.
kosmos440o вне форума  
 

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

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

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

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


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


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