| AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
Atmega162 Timer1 и Timer3 работаю по разному
29.06.2014, 22:36
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
|
Re: Atmega162 Timer1 и Timer3 работаю по разному
Попробуйте так переписать инициализацию
|
PHP код:
|
void TIM1_Init(void){
TCCR1B=0x00; //мало ли что тут уже есть...
TCCR1B|=(1‹‹CS10)|(1‹‹CS11); //Устанавливаем предделитель 64
TCCR1B|=(1‹‹WGM12);
}
|
а вот как рекомендовано в DS устанавливать TCNTn
|
PHP код:
|
void TIM16_WriteTCNTn( unsigned int i )
{
unsigned char sreg;
unsigned int i;
/* Save Global Interrupt Flag*/
sreg = SREG;
/* Disable interrupts*/
_CLI();
/* Set TCNTnto i */
TCNTn= i;
/* Restore Global Interrupt Flag*/
SREG = sreg;
}
|
Обратите внимание на сохранение/восстановление регистра SREG и запрет всех прерываний. В противном случае, TCNTn насколько я знаю, безопасно можно менять только внутри обработчика соответствующего прерывания. А вообще, я обычно так делаю (пример):
|
PHP код:
|
void timer0_init(void)// WGM: Normal
{
TCCR0 = 0x00; //stop
TCNT0 = 0xD5; //setup
OCR0 = 0x2B; //
TCCR0 = 0x04; //start+preskale=256
}
|
Далее, в отдельной функции устанавливаю маску всех используемых прерываний и разрешаю их все (sei). По ходу работы, программа больше к этим функциям не обращается.
з.ы.
по отрывочным кускам кода довольно сложно определить в чём загвостка, нужен проект целиком
з.з.ы.
кстати, пример про TCNTn целиком взят из DS, и в нём есть ошибка!  найдёте?..
Последний раз редактировалось vynt; 29.06.2014 в 22:41.
|
|
|
|
30.06.2014, 00:12
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
|
Re: Atmega162 Timer1 и Timer3 работаю по разному
Сообщение от akegor
|
|
Нет. CV генерит правильно инициализацию, за много лет проблем не было, а вот в Студии шаловливые ручонки способны на многое... Глаз да глаз за ними нужен!
|
Кстати да. Давно заметил, вачдог в студии глючит - не сбрасывается по команде, а зато сбрасывает прогу. Приходиться отключать. В протиусе всё наоборот
|
|
|
|
30.06.2014, 01:28
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
|
Re: Atmega162 Timer1 и Timer3 работаю по разному
от нечего делать проверил
Сообщение от qweentet
|
|
PORTB|=0x1‹‹1; PORTB&=~(0x1‹‹1);
|
здесь глюк. меандр не формируется.
добавьте в программу такой макрос
|
PHP код:
|
#ifndef CPL_BIT
#define CPL_BIT(y,x) ((y) ^= (1 ‹‹ (x)))
#define _CPL_BIT CPL_BIT
#define cpl_bit CPL_BIT
#endif
|
Вызывается так:
|
PHP код:
|
CPL_BIT(PORTB,0); CPL_BIT(PORTB,1);
|
и т.д. В любом месте где хотите подёргать каким либо выводом любого порта.
Последний раз редактировалось vynt; 30.06.2014 в 01:30.
|
|
|
|
30.06.2014, 14:32
|
|
|
Вид на жительство
Регистрация: 09.12.2009
Адрес: Россия, Тула
Сообщений: 376
Сказал спасибо: 191
Сказали Спасибо 153 раз(а) в 98 сообщении(ях)
|
Re: Atmega162 Timer1 и Timer3 работаю по разному
Если нужно просто по-пушпулить (по-меандрить), то есть такая фича,
что при записи 1 в PIN - он делает дрыг, т.е. 0-›1 или 1-›0
В даташите есть. Раньше не обращал внимания.
Проверял на Tiny2313 и Mega48.
Другие даташиты не курил, без надобности было.
|
|
|
|
30.06.2014, 15:51
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
|
Re: Atmega162 Timer1 и Timer3 работаю по разному
На 162 тоже действует
Последний раз редактировалось vynt; 30.06.2014 в 16:13.
|
|
|
|
02.07.2014, 11:31
|
|
|
Гражданин KAZUS.RUN
Регистрация: 16.06.2005
Сообщений: 942
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
|
Re: Atmega162 Timer1 и Timer3 работаю по разному
Сообщение от vynt
|
|
здесь глюк. меандр не формируется.
|
Меандр таки формируеся, глюк не здесь, а в мозгах программиста. На время одного такта выставляется 1, потом 0. А такт-то длится 125 наносекунд для частоты 8 МГц (кстати, что-то я не заметил на какой частоте работает камень). Так что единица держится с сотню наносекунд. Это и без проверки ясно сразу. А чтобы меандр стал заметен, и по нему можно было определить частоту таймера надо использовать операцию ^= а не городить макросы
Последний раз редактировалось Someone; 02.07.2014 в 11:36.
|
|
|
|
02.07.2014, 11:35
|
|
|
Гражданин KAZUS.RUN
Регистрация: 16.06.2005
Сообщений: 942
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
|
Re: Atmega162 Timer1 и Timer3 работаю по разному
Сообщение от krug_vv
|
|
В даташите есть.
|
Да ну? А ссылочку на страницу даташита можно?
|
|
|
|
02.07.2014, 12:00
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
|
Re: Atmega162 Timer1 и Timer3 работаю по разному
Во всех АВР из последнего обновления (пикоповерных) есть аппаратная инверсия портов через регистр ПИН. Читайте внимательней
|
|
|
|
02.07.2014, 14:06
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
|
Re: Atmega162 Timer1 и Timer3 работаю по разному
Сообщение от Someone
|
|
Меандр таки формируеся, глюк не здесь, а в мозгах программиста. На время одного такта выставляется 1, потом 0. А такт-то длится 125 наносекунд для частоты 8 МГц (кстати, что-то я не заметил на какой частоте работает камень). Так что единица держится с сотню наносекунд. Это и без проверки ясно сразу. А чтобы меандр стал заметен, и по нему можно было определить частоту таймера надо использовать операцию ^= а не городить макросы
|
Таки так можно сказать о любом глюке в программе 
А макрос как раз "^=" и делает. Судя по другим вопросам/темам автора частота 8Мгц.
А про меандр, без комментариев...
мой код
его код
|
|
|
|
02.07.2014, 14:41
|
|
|
Частый гость
Регистрация: 17.06.2014
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Atmega162 Timer1 и Timer3 работаю по разному
Вот вроде бы толковые вещи пишите, там меандры, видит, не видит... Я иду по простейшему пути, ( сначала я писал макрос, в котором пин менял уровень 1 раз за прерывание, т.е. произошло прерывание, выставили 1, в следующий раз наоборот, потом множил на 2), попробовал так ,как описано в теме выше, и Timer1 показал нужную частоту, и меандр был виден, несмотря на микро продолжительность,а вот 3-тий таймер работает отлично от первого, т.е. средство проверки,я думаю ту т не причем. Завтра приедет реальный МК, залью и погляжу результат, как получу, отпишусь...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:25.
|
|