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

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

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

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

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

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

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

 
Опции темы

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

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

Сообщение от vynt Посмотреть сообщение
И у меня 7.1sp0 (но зарегина на другое имя). Где брал уже не помню, не один год уже прошёл. Таких глюков не разу не наблюдал
А если я Вам выгружу .cof, можете у себя запустить?

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

Сообщение от qweentet Посмотреть сообщение
А если я Вам выгружу .cof, можете у себя запустить?

PS. Весь проект во вложении.
проверил, и cof и hex. частота разная

Проект под CodeVision? Плохо его знаю. Но, если это возможно отключите всю оптимизацию

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

Ха. Оказывается мне просто повезло, я не в точности повторил Вашу инициализацию. При значениях TCCRnB= 0,1,2 частота таймеров совпадает. При TCCRnB=3 - разница в 2 раза, при TCCRnB=4 уже в 4 раза, ну и далее удваивается...
Либо DS врёт, либо мы с вами где-то что-то мелким шрифтом не прочитали...
Например это "Note that in ATmega161compatibility mode, only one 16-bits Timer/Counter is available (Timer/Counter1)."
х.з. как там себе протеус устанавливает этот "compatibility mode".
Но, если загвоздка в этом, то читать нужно уже другой DS

Последний раз редактировалось vynt; 02.07.2014 в 19:21.
vynt вне форума  
Непрочитано 02.07.2014, 19:51  
qweentet
Частый гость
 
Регистрация: 17.06.2014
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
qweentet на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

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

Верно. В корпорациях документацию тоже люди пишут. Copy-Paste, Copy-Paste
И таблички 57 и 58 могли так же заполнить...
з.ы.
надо с атмеловского сайта DS свежий скачать, глянуть что там
з.з.ы.
скачал - всё то же

Последний раз редактировалось vynt; 02.07.2014 в 21:13.
vynt вне форума  
Непрочитано 02.07.2014, 21:13  
Ara41
Почётный гражданин KAZUS.RUN
 
Регистрация: 30.09.2006
Сообщений: 1,557
Сказал спасибо: 157
Сказали Спасибо 660 раз(а) в 430 сообщении(ях)
Ara41 на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

Кстати, CodeWizard интересно генерит код инициализации для таймеров 1 и 3. Лишее удалил.
Код:
/ Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 115,200 kHz
TCCR1B=(0‹‹CS12) | (1‹‹CS11) | (1‹‹CS10);

// Timer/Counter 3 initialization
// Clock value: 115,200 kHz
TCCR3B= (1‹‹CS32) | (0‹‹CS31) | (1‹‹CS30);
Ara41 вне форума  
Непрочитано 02.07.2014, 22:02  
vynt
Почётный гражданин KAZUS.RUN
 
Аватар для vynt
 
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
vynt на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

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

Сообщение от niXto Посмотреть сообщение
Во всех АВР из последнего обновления (пикоповерных) есть аппаратная инверсия портов через регистр ПИН. Читайте внимательней
Ну с пикоповерными пока работать не доводилось, потому и просил ссылку, почитать про то, чего ранее не видел.

Сообщение от vynt Посмотреть сообщение
Таки так можно сказать о любом глюке в программе
Именно! Мне повезло с моим первым начальником. Когда я в 2002 начинал работать с контроллерами, находил массу ошибок то в компиляторах, то в железе, например не так ацп работал или таймер, вот мол, сами смотрите, он не смотрел, а сразу посылал - иди ищи ошибку в программе, читай документацию. И таки смог донести до меня что 99.5% неправильной, неустойчивой, странной работы или не работы, "ошибок" в ядре контроллера, глюков компилятора - это всё в мозгах программиста. Просто потому что тысячи людей по всему миру решали задачи по использованию периферия контроллера и у них всё было нормально. Ну а с 2002 количество человеко-часов потраченных на работу с архитектурой авр вероятно исчисляется миллионами, так что процент имхо составляет уже 99.99 для старых архитектур.

Сообщение от vynt Посмотреть сообщение
А макрос как раз "^=" и делает.
Ну уж я-то это понял, сам давно разными макросами пользуюсь, подогнав под себя и теперь из проекта в проект кочуют. Но вот понял ли этот макрос топик-стартер и стал ли он в нём разбираться вообще?

Сообщение от qweentet Посмотреть сообщение
т.е. произошло прерывание, выставили 1, в следующий раз наоборот, потом множил на 2)
А операцией "^=" ты именно это и делаешь. Это операция инверсии. Был 0, случилось прерывание, 0 стал 1, снова пришло прерывание - 1 стала 0. Вот только зачем на 2 умножать? Время между сменами уровней - это период прерывания. Для получения значения частоты надо 1/Т. И никакой "микропродолжительности" ты не получишь. При инвертировании раз в прерывание у тебя всегда длительность 1 будет равна длительности 0.
Someone вне форума  
Непрочитано 03.07.2014, 10:45  
krug_vv
Вид на жительство
 
Регистрация: 09.12.2009
Адрес: Россия, Тула
Сообщений: 376
Сказал спасибо: 191
Сказали Спасибо 153 раз(а) в 98 сообщении(ях)
krug_vv на пути к лучшему
По умолчанию Re: Atmega162 Timer1 и Timer3 работаю по разному

Сообщение от Someone Посмотреть сообщение
Да ну? А ссылочку на страницу даташита можно?
Гы... Ребята, ну это ж не даташит на STM32... Неужто так лениво открыть страницы для I/O PORT (PIN).
Ну даю страницу 64 в даташите ATmega48:

Toggling the Pin Writing a logic one to PINxn toggles the value of PORTxn, independent on the value of DDRxn. Note that the SBI instruction can be used to toggle one single bit in a port.
krug_vv вне форума  
Сказали "Спасибо" krug_vv
Someone (03.07.2014)
 
Опции темы

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

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

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


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


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