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

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

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

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

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

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

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

 
Опции темы

Atmega162 Timer1 и Timer3 работаю по разному

Непрочитано 29.06.2014, 22:36  
vynt
Почётный гражданин KAZUS.RUN
 
Аватар для vynt
 
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
vynt на пути к лучшему
По умолчанию 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.
vynt вне форума  
Непрочитано 30.06.2014, 00:12  
vynt
Почётный гражданин KAZUS.RUN
 
Аватар для vynt
 
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
vynt на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

Сообщение от akegor Посмотреть сообщение
Нет. CV генерит правильно инициализацию, за много лет проблем не было, а вот в Студии шаловливые ручонки способны на многое... Глаз да глаз за ними нужен!
Кстати да. Давно заметил, вачдог в студии глючит - не сбрасывается по команде, а зато сбрасывает прогу. Приходиться отключать. В протиусе всё наоборот
vynt вне форума  
Непрочитано 30.06.2014, 01:28  
vynt
Почётный гражданин KAZUS.RUN
 
Аватар для vynt
 
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
vynt на пути к лучшему
По умолчанию 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.
vynt вне форума  
Непрочитано 30.06.2014, 14:32  
krug_vv
Вид на жительство
 
Регистрация: 09.12.2009
Адрес: Россия, Тула
Сообщений: 376
Сказал спасибо: 191
Сказали Спасибо 153 раз(а) в 98 сообщении(ях)
krug_vv на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

Если нужно просто по-пушпулить (по-меандрить), то есть такая фича,
что при записи 1 в PIN - он делает дрыг, т.е. 0-›1 или 1-›0
В даташите есть. Раньше не обращал внимания.
Проверял на Tiny2313 и Mega48.
Другие даташиты не курил, без надобности было.
krug_vv вне форума  
Непрочитано 30.06.2014, 15:51  
vynt
Почётный гражданин KAZUS.RUN
 
Аватар для vynt
 
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
vynt на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

На 162 тоже действует

Последний раз редактировалось vynt; 30.06.2014 в 16:13.
vynt вне форума  
Непрочитано 02.07.2014, 11:31  
Someone
Гражданин KAZUS.RUN
 
Регистрация: 16.06.2005
Сообщений: 942
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
Someone на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

Сообщение от vynt Посмотреть сообщение
здесь глюк. меандр не формируется.
Меандр таки формируеся, глюк не здесь, а в мозгах программиста. На время одного такта выставляется 1, потом 0. А такт-то длится 125 наносекунд для частоты 8 МГц (кстати, что-то я не заметил на какой частоте работает камень). Так что единица держится с сотню наносекунд. Это и без проверки ясно сразу. А чтобы меандр стал заметен, и по нему можно было определить частоту таймера надо использовать операцию ^= а не городить макросы

Последний раз редактировалось Someone; 02.07.2014 в 11:36.
Someone вне форума  
Непрочитано 02.07.2014, 11:35  
Someone
Гражданин KAZUS.RUN
 
Регистрация: 16.06.2005
Сообщений: 942
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
Someone на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

Сообщение от krug_vv Посмотреть сообщение
В даташите есть.
Да ну? А ссылочку на страницу даташита можно?
Someone вне форума  
Непрочитано 02.07.2014, 12:00  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

Во всех АВР из последнего обновления (пикоповерных) есть аппаратная инверсия портов через регистр ПИН. Читайте внимательней
niXto вне форума  
Непрочитано 02.07.2014, 14:06  
vynt
Почётный гражданин KAZUS.RUN
 
Аватар для vynt
 
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
vynt на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

Сообщение от Someone Посмотреть сообщение
Меандр таки формируеся, глюк не здесь, а в мозгах программиста. На время одного такта выставляется 1, потом 0. А такт-то длится 125 наносекунд для частоты 8 МГц (кстати, что-то я не заметил на какой частоте работает камень). Так что единица держится с сотню наносекунд. Это и без проверки ясно сразу. А чтобы меандр стал заметен, и по нему можно было определить частоту таймера надо использовать операцию ^= а не городить макросы
Таки так можно сказать о любом глюке в программе
А макрос как раз "^=" и делает. Судя по другим вопросам/темам автора частота 8Мгц.
А про меандр, без комментариев...
мой код
его код
vynt вне форума  
Непрочитано 02.07.2014, 14:41  
qweentet
Частый гость
 
Регистрация: 17.06.2014
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
qweentet на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

Вот вроде бы толковые вещи пишите, там меандры, видит, не видит... Я иду по простейшему пути, ( сначала я писал макрос, в котором пин менял уровень 1 раз за прерывание, т.е. произошло прерывание, выставили 1, в следующий раз наоборот, потом множил на 2), попробовал так ,как описано в теме выше, и Timer1 показал нужную частоту, и меандр был виден, несмотря на микро продолжительность,а вот 3-тий таймер работает отлично от первого, т.е. средство проверки,я думаю ту т не причем. Завтра приедет реальный МК, залью и погляжу результат, как получу, отпишусь...
qweentet вне форума  
 
Опции темы

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

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

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


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.