Увеличение частоты синусоиды на AVR

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Insase
Родился
Сообщения: 17
Зарегистрирован: Ср мар 18, 2009 13:37:19

Увеличение частоты синусоиды на AVR

Сообщение Insase »

Всем привет. У меня такая задачка.
На Atmega 16 получил синусоиду, используя R-2R.
Теперь необходимо, например, раз в секунду увеличивать частоту сигнала на 100 Hz и так от 0 до 10KHz.
С таймерами дела у меня обстоят плохо, помогите реализовать это на CVAVR.
Реклама
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

А как синусоида получается?
Оптимизм х (Опыт + Знания) = const
Реклама
Insase
Родился
Сообщения: 17
Зарегистрирован: Ср мар 18, 2009 13:37:19

Сообщение Insase »

Есть массив wave[256]. Для каждого элемента массива записан свой байт (значение для порта). Перебором от 0 до 255 мы получаем период синусоиды.
char wave[256] = {0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae... и т.д.
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Ну так перебирайте массив быстрее! А каким образом происходит акт обращения к массиву? Если тупо в цикле, тогда поможет только перескакивание через значения. Если по таймеру, то или изменение делителя (грубо - 8, 64 и т.д.) или использование прерывания по сравнению таймера со спец регистрами А или В (плавно 0-255)
Реклама
Эиком - электронные компоненты и радиодетали
Insase
Родился
Сообщения: 17
Зарегистрирован: Ср мар 18, 2009 13:37:19

Сообщение Insase »

да надо использовать таймер, но у меня не получается разобраться с ними.
Реклама
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Ну так тогда и спрашивайте о настройке таймера, а не о выводе синуса.
Тем по таймерам навалом, спрашивайте там.
Оптимизм х (Опыт + Знания) = const
Реклама
Аватара пользователя
NiTr0
Друг Кота
Сообщения: 3051
Зарегистрирован: Пт авг 10, 2007 12:49:55
Откуда: kr.ua
Контактная информация:

Сообщение NiTr0 »

Insase писал(а):Есть массив wave[256]

:shock: Как все запущено...
Если хочется уж табличный синтез - то таблички на 64 значения хватит, ибо нефиг дублировать то, то можно высчитать элементарными арифметическими операциями, а если с интерполяцией промежуточных (что для R-2R 5% точности вполне прокатит без ухудшения параметров выходного сигнала) - и того меньше можно урезать, до 16-32 байт...
Insase
Родился
Сообщения: 17
Зарегистрирован: Ср мар 18, 2009 13:37:19

Сообщение Insase »

С таймерами разобрался, wave[256] - это просто для примера пока взял массив.

Получается такая вот штука:
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
// Place your code here
k++;
if (k>=freq){
n++;
k=0;
if (n>255) {
n = 0;
freq+=10;
}
PORTC = wave[n];
}
}

Поставив таймер на максимальную частоту получаем, что такт происходит с частотой Foc=16Mhz/2*(1+1), т.е. 4Mhz.

Берем freq=1, каждое значение выплевывается через 0,25мкс
Значит частота выплевывания точки = 4 МГц, а частота выплевывания периода синуса 4МГц/256=15625Гц
Дальше берем f=2, период уже 0,5мкс и частота выплевывания одной точки - 2 мгц.
Значит период синуса в 2 раза меньше, т.е. 7кгц.

Как менять частоту синуса линейно?
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Неверно ставите вопрос. В этой ситуации частота у Вас тоже изменяется линейно (через две точки - чем не линия?). Правильный вопрос: как обеспечить шаг (дискрет) изменения частоты в хх Гц, где хх - известное и нужное только Вам значение.
Оптимизм х (Опыт + Знания) = const
12val12
Потрогал лапой паяльник
Сообщения: 315
Зарегистрирован: Пт янв 29, 2010 19:42:27

Сообщение 12val12 »

âàì íóæíà òîëüêî ñèíóñîèäà è òîëüêî äî 15 êÃö?
ух ты.... показывает
Аватара пользователя
NiTr0
Друг Кота
Сообщения: 3051
Зарегистрирован: Пт авг 10, 2007 12:49:55
Откуда: kr.ua
Контактная информация:

Сообщение NiTr0 »

Insase писал(а):Как менять частоту синуса линейно?


При частотах от 4 МГц - только задержками в теле основного цикла программы.
Insase
Родился
Сообщения: 17
Зарегистрирован: Ср мар 18, 2009 13:37:19

Сообщение Insase »

12val12 писал(а):вам нужна только синусоида и только до 15 кГц?

синусойда, ну хотя бы до 4KHz уже.
Insase
Родился
Сообщения: 17
Зарегистрирован: Ср мар 18, 2009 13:37:19

Сообщение Insase »

В общем, решили завязать с этой идеей, и просто генерировать сигнал с помощью AD9833.
Аватара пользователя
Neekeetos
Держит паяльник хвостом
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула
Контактная информация:

Сообщение Neekeetos »

Insase писал(а):В общем, решили завязать с этой идеей, и просто генерировать сигнал с помощью AD9833.

Ну какая ирония. А что помешало сделать программный DDS раз уж частота до 4к всего? В тырнете полно примеров.
Twilo
Нашел транзистор. Понюхал.
Сообщения: 193
Зарегистрирован: Вт авг 25, 2009 22:24:39
Откуда: Черкассы
Контактная информация:

Сообщение Twilo »

наверное то, что никто готовой прошивки с исходником не предоставил
12val12
Потрогал лапой паяльник
Сообщения: 315
Зарегистрирован: Пт янв 29, 2010 19:42:27

Сообщение 12val12 »

à ïî÷åìó Øèì íå èñïîëüçîâàòü
âåäü ÷àñòîòà øèì áóäåò 16Ìãö/256= 62 500 Ãö
òðåìÿ Rc öåïî÷êàìè îíà îòôèëüòðóåòñÿ â 210 ðàç
(ïðè ìàêñèìàëíîé òðåáóåìîé 10êÃö)
ух ты.... показывает
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»