Jump to content
freebits

Atmega16A - почему частота маленькая

Recommended Posts

Насколько я понял, без внешней частотозадающей цепи с кварцевым резонатором при установке директивы #define F_CPU 8000000UL рабочая частота микроконтроллера должна быть 8 МГц. Но на практике это не так.

Если в тело программы записать такой код 

void main(void)
{
	while(1)
	{
		PORTA ^= 0b00100000;
	}
}

То на выводе PA5 будет сигнал частотой всего 35 кГц, т.е. частота выполнения записи в порт - 70 кГц, что в 100 раз меньше заявленной. Если подключить таймер без делителя (т.е. используется базовая частота), и вставить строчку PORTA ^= 0b00100000 в тело обработчика прерывания при переполнении счетчика таймера, то частота сигнала будет вовсе 5 кГц, т.е. частота срабатывания таймера 10 кГц.

void timer0_init(void) //Инициализация таймера TIMER0
{ 
	TIMSK |= (1 << TOIE0); 
	TCCR0 = (1 << CS00) | (0 << CS01) | (0 << CS02); // частота с делителем 1
	TCNT0=254; //начальное значение таймера
}

ISR (TIMER0_OVF_vect) //обработка прерывания при переполнении счетчика таймера TIMER0 
{
	PORTA ^= 0b00100000;
	TCNT0=254; //начальное значение таймера
}

Вопрос почему рабочая частота такая низкая ? Даже если учесть что операция чтения/записи в регистр PORTA  и операция XOR занимает 10 тактов (хотя я уверен что меньше), все равно получается частота гораздо ниже - около 700 кГц. И почему переполнение счетчика таймера происходит не с базовой частотой, а с в 800 раз меньшей?

Edited by freebits

Share this post


Link to post
Share on other sites
20 минут назад, freebits сказал:

при установке директивы

Источник тактирования определяется установленными фьюзами, разве нет?

Edited by _abk_

Share this post


Link to post
Share on other sites
18 минут назад, freebits сказал:

рабочая частота микроконтроллера должна быть 8 МГц

При условии, что правильно запрограммированы Fusebits.

Share this post


Link to post
Share on other sites

Один дроссель для всей системы: многоканальные преобразователи Maxim с технологиями SIMO и nanoPower

Понижающе-повышающие трехканальные импульсные преобразователи MAX17270/71 производства Maxim Integrated за счет применяемых технологий SIMO и nanoPower позволяют организовать многоканальную систему питания для устройств с малым энергопотреблением, при этом значительно экономя место на плате.

Подробнее

7 минут назад, _abk_ сказал:

Источник тактирования определяется установленными фьюзами, нет?

 

6 минут назад, andrusha152 сказал:

При условии, что правильно запрограммированы Fusebits.

Спасибо, про это я был не в курсе. Сейчас буду изучать что это.

Share this post


Link to post
Share on other sites

И ещё,

39 минут назад, freebits сказал:

при установке директивы #define F_CPU

вы сообщаете библиотекам, которые используют частоту МК для расчётов, (и себе для них же) на какой частоте работает МК. Если в коде не используются вычисления с частотой, то и использовать F_CPU не имеет смысла. Читаем, как работает #define.

Edited by a.sosh

Share this post


Link to post
Share on other sites
                     

Отладочная плата P-NUCLEO-WB55: возможности и особенности

Отладочный набор P-NUCLEO-WB55 компании STMicroelectronics позволяет оценить возможности и облегчить начало работы с беспроводным микроконтроллером STM32WB55, чему способствует, в том числе, большая коллекция демонстрационных проектов.

Читать статью

16 минут назад, a.sosh сказал:

вы сообщаете библиотекам, которые используют частоту МК для расчётов, (и себе для них же) на какой частоте работает МК. Если в коде не используются вычисления с частотой, то и использовать F_CPU не имеет смысла. Читаем, как работает #define.

Спасибо, теперь понятно почему delay неправильно отрабатывает (дольше чем должно). Я знаю как работает #define, мне почему-то изначально втемяшилось что этой строчкой задается значение некоего конфигурационного регистра, и особо не вдавался в ее смысл.

Edited by freebits

Share this post


Link to post
Share on other sites

Про фьюзы изучил несколько статей.  В принципе все ясно, в калькуляторе поглядел какие биты мне нужно установить.  Только ни в одной статье не сказано в каком месте они задаются. Можете подсказать как это делается? В среде разработки? Если да, то где эти установки находятся в Atmel Studio? 

А все нашел - в программе для программатора МiniPro есть, попробую выставить))

Да, все вышло, спасибо больше всем за помощь! Микросхема в разы быстрее стала работать!))

Edited by freebits

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...