sin, mega8535, AD7524 и WinAVR. Как реализовать синусоиду?

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Арнаутов Юрий
Родился
Сообщения: 14
Зарегистрирован: Чт мар 19, 2009 19:35:49
Откуда: Алчевск

sin, mega8535, AD7524 и WinAVR. Как реализовать синусоиду?

Сообщение Арнаутов Юрий »

Здраствуйте! Вот собрал себе генератор на mega8535 и AD7524. Помогите пожалуйста в написании программы на С++, для генерации синуса от нескольких Гц до нескольких МГц. Схема рабочая, проверено, написал для нее код чтобы генерировать пилообразный сигнал.

Заранее спасибо!
Вложения
AD7524.GIF
(15.2 КБ) 777 скачиваний
Все гениальное - просто!!!!!!!!!
Реклама
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

а вот пилообразный, это вы имеете просто треугольный или как в строчной развертке?
можете дать сайт, где все об этой схеме написано?
Не умеешь - не берись, но не взявшись не научишься...
Реклама
Арнаутов Юрий
Родился
Сообщения: 14
Зарегистрирован: Чт мар 19, 2009 19:35:49
Откуда: Алчевск

Сообщение Арнаутов Юрий »

Stalker46 писал(а):а вот пилообразный, это вы имеете просто треугольный или как в строчной развертке?
можете дать сайт, где все об этой схеме написано?


Об этой схеме ни наодном сайте вы не найдете описание на данный момент. поскольку я её сам придумал)))))))

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

По схеме если что то надо, то спрашивайте у меня, я отвечу. А если вы владеете языком Си, подскажите мне:)
Все гениальное - просто!!!!!!!!!
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

я Учу Си))) так что на данный момент не помогу...
Не умеешь - не берись, но не взявшись не научишься...
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
saschai
Говорящий с текстолитом
Сообщения: 1596
Зарегистрирован: Вс дек 14, 2008 20:36:47
Откуда: SPb

Сообщение saschai »

Не знаю, может туплю, а чем это не устраивает http://radiokot.ru/circuit/digital/measure/20/ ?
На предмет расширения диапозона можно к автору постучаться.... :))
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

до нескольких мегагерц - это вы немножко завысили требования... если писать исключительно на ассемблере - можно выжать под сотню килогерц синус... на чистом С или С++ даже это будет сложновато...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Арнаутов Юрий
Родился
Сообщения: 14
Зарегистрирован: Чт мар 19, 2009 19:35:49
Откуда: Алчевск

Сообщение Арнаутов Юрий »

saschai писал(а):Не знаю, может туплю, а чем это не устраивает http://radiokot.ru/circuit/digital/measure/20/ ?
На предмет расширения диапозона можно к автору постучаться.... :))


Эта схему устраивает если необходим генератор просто как генератор., а мне надо просто реализовать его с бОльшими функциями на базе тех компонентов что имеются в наличии у меня, это часть моей дипломной работы.
Все гениальное - просто!!!!!!!!!
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Не всё простое гениально...
Если выдавать отсчеты синусоиды на ЦАП с помощью м/к, то частотная шкала будет неудобной - при 16МГц тактовой, двухбайтном делителе этой тактовой и тридцатидвух отсчетах на период синусоиды, распределение частот на шкале будет примерно таким:
Изображение
То есть, самая высокая - 62'500Гц, следующая - 31'250Гц, и так далее...
Арнаутов Юрий
Родился
Сообщения: 14
Зарегистрирован: Чт мар 19, 2009 19:35:49
Откуда: Алчевск

Сообщение Арнаутов Юрий »

ARV писал(а):до нескольких мегагерц - это вы немножко завысили требования... если писать исключительно на ассемблере - можно выжать под сотню килогерц синус... на чистом С или С++ даже это будет сложновато...


Хотелось бы как можно больше выжать.

А почему не получится "до нескольких мегагерц", можно чуть поподробней? Чем С так ограничивает? Я просто не так давно этим стал заниматся и интересно)
Все гениальное - просто!!!!!!!!!
Арнаутов Юрий
Родился
Сообщения: 14
Зарегистрирован: Чт мар 19, 2009 19:35:49
Откуда: Алчевск

Сообщение Арнаутов Юрий »

Yellow Tiger писал(а):...частотная шкала будет неудобной - при 16МГц тактовой, двухбайтном делителе этой тактовой и тридцатидвух отсчетах на период синусоиды...

То есть, самая высокая - 62'500Гц, следующая - 31'250Гц, и так далее...


Вы хотите сказать что "при 16МГц тактовой" нельзя сделать плавной регулировки частоты на частотном диапазоне? А если взять другой кварц? Или дело не только в нем?
Все гениальное - просто!!!!!!!!!
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Арнаутов Юрий писал(а):А почему не получится "до нескольких мегагерц", ... Чем С так ограничивает?
Это не Си ограничивает - это возможности кристалла ограничены.
Арнаутов Юрий писал(а):Вы хотите сказать что "при 16МГц тактовой" нельзя сделать плавной регулировки частоты на частотном диапазоне?
Напиши хотя бы приблизительно тот участок программы, которым собираешься выводить эту синусоиду на ЦАП, даже без окружения - только сам цикл, и подумай - как ты будешь менять скорость вывода отсчетов на выход м/к, сам всё и увидишь.
Арнаутов Юрий писал(а):А если взять другой кварц?
А больше 16МГц этот м/к не позволяет. Да и другие м/к того же класса не намного лучше - 20МГц. Они для другого сделаны, их задача - работать сложно и гибко (то есть - по программе), а не быстро.

Твое решение для этой задачи не годится. Совсем - так как оно из другой оперы.
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

>>А почему не получится "до нескольких мегагерц", можно чуть поподробней?

Прикинь, на каждую инструкцию 1-3 такта ситстемной синхронизации:
загрузить значение синуса из таблицы;
передать значение в порт;
инкрементировать адрес индекса;
перейти по метке.
Сколько машинных циклов, во столько раз и надо делить тактовую частоту. И это макс. что получится.
Pe3ucTop
Прорезались зубы
Сообщения: 231
Зарегистрирован: Пт ноя 16, 2007 13:52:44
Откуда: Рига, Латвия

Сообщение Pe3ucTop »

Тема конечно интересная..
А теперь углубимся в процесс ЦАП-а - у нас есть бинарное значение на входе - на выходе уровень :) про частоту ничего.. при переходе с одного значения на другое ЦАП соответственное меняет значение как и всё в мире не мгновенно, а затрачивая на это время. В итоге на выходе мы получаем что-то..
Теперь к вашей задаче - надо получить сигнал определённои формы!
Любая форма описывается чем:
В математике - формулои, а в информатике - определённым числом точек.. :)
Так вот из этого вопросы:
- сколько же точек у вас сеичас на пилу..
- сколько точек хотите на Синусоиду??
Понятное дело чем больше точек тем меньше максимальная частота..
И конечноже - чем больше расчетов на каждуу точу - тем максимальная частота ещё уменьшается, а сигнал - тем более ступенчатый (Это случай когда у вас не хранятся заготовленные - расчитаные точки в памяти).
Теперь о синусоиде - расчет её грамоздок и требует математику с плавающей точкои, легче брать заготовленные константы. и скажу сразу для удобства расчет идёт от 0 до 90 градусов.. а остальное преобразование - или негатив или спад.. и т.д.
А если нужна формула расчета синуса (относительно точно) http://en.wikipedia.org/wiki/Sine#Sine (есть ссылак на русский - там есть формула расчета через ряды)
...
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Pe3ucTop писал(а):А если нужна формула расчета синуса ...
Ну вот нафига в этой задаче - расчет синуса?! :))) Эта таблица один раз рассчитывается и потом выдается на выход в разных темпах... :)))

Pe3ucTop писал(а): ...там есть формула расчета через ряды...
Ильф и Петров писал(а):Остапа несло...
Арнаутов Юрий
Родился
Сообщения: 14
Зарегистрирован: Чт мар 19, 2009 19:35:49
Откуда: Алчевск

Сообщение Арнаутов Юрий »

Pe3ucTop писал(а):Тема конечно интересная..
...

Для многих вероятно не очень, но для меня в данный момент очень актуальная)

Для пилы я брал 255 точек на подъем и 255 на спад, поскольку она выводилась не с очень большой частотой, то этого кол-ва точек много небыло.

Сколько я хочу точек в синус?... Есть идея формировать их столько, чтобы на низких частотах сигнал был более точный, а с повышением, их количество уменьшать.

Насчет заготовления констант на синус, я думал, но меня это не сильно привлекает... это по свойму ограничивает. Есть задумка просчитать синус, получить нужное количество точек и занести их в массив, а после этого выводить на ЦАП. Если частота сильно большая, просчитать меньшее количество точек, чтобы МК успел их вывести и получить нужную частоту. Скорость в ущерб качеству:)

За формулу для синуса спасибо. Я с математикой дружу. если расчитываь на бумаге, а если тоже самое на С, то это для меня как подводный камень.

В языке С есть такие функции как asin(x) и sinh(x), но что то не получается с ними работать. Может кто сталкивался и у него получалось?
Все гениальное - просто!!!!!!!!!
Арнаутов Юрий
Родился
Сообщения: 14
Зарегистрирован: Чт мар 19, 2009 19:35:49
Откуда: Алчевск

Сообщение Арнаутов Юрий »

Yellow Tiger писал(а):
Pe3ucTop писал(а):А если нужна формула расчета синуса ...
Ну вот нафига в этой задаче - расчет синуса?! :))) Эта таблица один раз рассчитывается и потом выдается на выход в разных темпах... :)))


Почему же? Я думаю расчет синуса то что нужно! Ведь можно использовать меньшее количество значений, чем есть в таблице, которую вы хотите один раз расчитать, тем самым увеличить частоту сигнала, конечно при этом пострадает его качество, и он будет сильно дискретным.
Все гениальное - просто!!!!!!!!!
_PM_
Нашел транзистор. Понюхал.
Сообщения: 161
Зарегистрирован: Ср апр 22, 2009 11:07:00

Сообщение _PM_ »

Может поставить тудыть паралельную рамку, на адресную шинку которой синтезатор частоты. А на выход цап r2r. Контролером же заполнять рамку и управлять синтезатором. Хоть гигагерцы, если такую память найдете. Я б посоветовал срам от старых материнок (кеш для пня).

Если уж настолько актуально. А МК это не для этого. Это для другого (с) мой
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Арнаутов Юрий писал(а):Почему же? Я думаю расчет синуса то что нужно! Ведь можно использовать меньшее количество значений, чем есть в таблице, которую вы хотите один раз расчитать, тем самым увеличить частоту сигнала, конечно при этом пострадает его качество, и он будет сильно дискретным.

Не нужен здесь расчет синуса, и вообще смысл делать из меги генератор, тем более сигналов различной формы. Даже если брать один синус, то тоже не нужен расчет. Для того чтобы получить сигнал с большей частотой нужно "проредить" таблицу синуса (т. е. скакать чез 2, 3 и более отсчтетов), естественно это будет в ущерб качеству. Теперь о максимальной частоте, если теоретически предположить, что максимальная скорость выдачи отсчета микроконтроллером будет составлять 6 циклов (для меги можно читать тактов генератора), и на период синуса нужно будет вывести хотя бы 12 отчетов, то максимальная частота генерируемого сигнала будет 20МГц/(6*12) = 277 кГц. Но чтобы так сделать придется постараться. При этом ничем другим контроллер заниматься просто не сможет, и о С тоже можно забыть.
Арнаутов Юрий
Родился
Сообщения: 14
Зарегистрирован: Чт мар 19, 2009 19:35:49
Откуда: Алчевск

Сообщение Арнаутов Юрий »

smac писал(а):Не нужен здесь расчет синуса, и вообще смысл делать из меги генератор, тем более сигналов различной формы...


Спасибо, я понял ваше мнение. Я повторюсь, это часть моей дипломной работы. А в целом там кроме генератора еще чет есть) Ну и в конце концов надо же студенту что то делать на диплом, вот и решил сворганить такую нехитрую штуку :roll:
Все гениальное - просто!!!!!!!!!
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Арнаутов Юрий писал(а):Я думаю расчет синуса то что нужно! Ведь можно использовать меньшее количество значений, чем есть в таблице, ...
Рассуждения верные... но - по отношению к какой-то другой ситуации.

С одной стороны, никто не мешает брать значения из заранее рассчитанной таблицы не подряд, а через 1, через 2, через 3, уменьшая дискретность, а если частоты выдачи некратны, то подготовить разные таблицы синуса.

С другой стороны, даже если процессор будет молотить только на выдачу синуса наружу, максимум, чего удастся добиться от него - 60 килогерц, и это не при 255 отсчетах на период, а всего-лишь при 32-ух! Если же его заставить еще и синусы на ходу рассчитывать - то даже звукового диапазона не получится. Да и глупо это - N раз в секунду повторять одни и те же вычисления, вычисления с заведомо константным результатом.

Так-что - синус должен быть табличным и только!

PS А, кстати, мысль, что этот "перестраиваемый" генератор между двумя "соседними" частотами будет молча проскакивать половину своего диапазона - показалась несущественной?
Закрыто

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