sin, mega8535, AD7524 и WinAVR. Как реализовать синусоиду?
-
Арнаутов Юрий
- Родился
- Сообщения: 14
- Зарегистрирован: Чт мар 19, 2009 19:35:49
- Откуда: Алчевск
sin, mega8535, AD7524 и WinAVR. Как реализовать синусоиду?
Здраствуйте! Вот собрал себе генератор на mega8535 и AD7524. Помогите пожалуйста в написании программы на С++, для генерации синуса от нескольких Гц до нескольких МГц. Схема рабочая, проверено, написал для нее код чтобы генерировать пилообразный сигнал.
Заранее спасибо!
Заранее спасибо!
- Вложения
-
- AD7524.GIF
- (15.2 КБ) 777 скачиваний
Все гениальное - просто!!!!!!!!!
- Реклама
-
Арнаутов Юрий
- Родился
- Сообщения: 14
- Зарегистрирован: Чт мар 19, 2009 19:35:49
- Откуда: Алчевск
Stalker46 писал(а):а вот пилообразный, это вы имеете просто треугольный или как в строчной развертке?
можете дать сайт, где все об этой схеме написано?
Об этой схеме ни наодном сайте вы не найдете описание на данный момент. поскольку я её сам придумал)))))))
Пилообразный, это треугольный. Сначала сигнал нарастает в течении определенного промежутка времени, а потом в течении такого же промежутка времени спадает.
По схеме если что то надо, то спрашивайте у меня, я отвечу. А если вы владеете языком Си, подскажите мне:)
Все гениальное - просто!!!!!!!!!
- saschai
- Говорящий с текстолитом
- Сообщения: 1596
- Зарегистрирован: Вс дек 14, 2008 20:36:47
- Откуда: SPb
Не знаю, может туплю, а чем это не устраивает http://radiokot.ru/circuit/digital/measure/20/ ?
На предмет расширения диапозона можно к автору постучаться....
На предмет расширения диапозона можно к автору постучаться....
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
до нескольких мегагерц - это вы немножко завысили требования... если писать исключительно на ассемблере - можно выжать под сотню килогерц синус... на чистом С или С++ даже это будет сложновато...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
Арнаутов Юрий
- Родился
- Сообщения: 14
- Зарегистрирован: Чт мар 19, 2009 19:35:49
- Откуда: Алчевск
saschai писал(а):Не знаю, может туплю, а чем это не устраивает http://radiokot.ru/circuit/digital/measure/20/ ?
На предмет расширения диапозона можно к автору постучаться....
Эта схему устраивает если необходим генератор просто как генератор., а мне надо просто реализовать его с бОльшими функциями на базе тех компонентов что имеются в наличии у меня, это часть моей дипломной работы.
Все гениальное - просто!!!!!!!!!
- Yellow Tiger
- Сверлит текстолит когтями
- Сообщения: 1148
- Зарегистрирован: Вт июл 08, 2008 12:24:17
Не всё простое гениально...
Если выдавать отсчеты синусоиды на ЦАП с помощью м/к, то частотная шкала будет неудобной - при 16МГц тактовой, двухбайтном делителе этой тактовой и тридцатидвух отсчетах на период синусоиды, распределение частот на шкале будет примерно таким:
То есть, самая высокая - 62'500Гц, следующая - 31'250Гц, и так далее...
Если выдавать отсчеты синусоиды на ЦАП с помощью м/к, то частотная шкала будет неудобной - при 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
Это не Си ограничивает - это возможности кристалла ограничены.Арнаутов Юрий писал(а):А почему не получится "до нескольких мегагерц", ... Чем С так ограничивает?
Напиши хотя бы приблизительно тот участок программы, которым собираешься выводить эту синусоиду на ЦАП, даже без окружения - только сам цикл, и подумай - как ты будешь менять скорость вывода отсчетов на выход м/к, сам всё и увидишь.Арнаутов Юрий писал(а):Вы хотите сказать что "при 16МГц тактовой" нельзя сделать плавной регулировки частоты на частотном диапазоне?
А больше 16МГц этот м/к не позволяет. Да и другие м/к того же класса не намного лучше - 20МГц. Они для другого сделаны, их задача - работать сложно и гибко (то есть - по программе), а не быстро.Арнаутов Юрий писал(а):А если взять другой кварц?
Твое решение для этой задачи не годится. Совсем - так как оно из другой оперы.
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
>>А почему не получится "до нескольких мегагерц", можно чуть поподробней?
Прикинь, на каждую инструкцию 1-3 такта ситстемной синхронизации:
загрузить значение синуса из таблицы;
передать значение в порт;
инкрементировать адрес индекса;
перейти по метке.
Сколько машинных циклов, во столько раз и надо делить тактовую частоту. И это макс. что получится.
Прикинь, на каждую инструкцию 1-3 такта ситстемной синхронизации:
загрузить значение синуса из таблицы;
передать значение в порт;
инкрементировать адрес индекса;
перейти по метке.
Сколько машинных циклов, во столько раз и надо делить тактовую частоту. И это макс. что получится.
-
Pe3ucTop
- Прорезались зубы
- Сообщения: 231
- Зарегистрирован: Пт ноя 16, 2007 13:52:44
- Откуда: Рига, Латвия
Тема конечно интересная..
А теперь углубимся в процесс ЦАП-а - у нас есть бинарное значение на входе - на выходе уровень
про частоту ничего.. при переходе с одного значения на другое ЦАП соответственное меняет значение как и всё в мире не мгновенно, а затрачивая на это время. В итоге на выходе мы получаем что-то..
Теперь к вашей задаче - надо получить сигнал определённои формы!
Любая форма описывается чем:
В математике - формулои, а в информатике - определённым числом точек..
Так вот из этого вопросы:
- сколько же точек у вас сеичас на пилу..
- сколько точек хотите на Синусоиду??
Понятное дело чем больше точек тем меньше максимальная частота..
И конечноже - чем больше расчетов на каждуу точу - тем максимальная частота ещё уменьшается, а сигнал - тем более ступенчатый (Это случай когда у вас не хранятся заготовленные - расчитаные точки в памяти).
Теперь о синусоиде - расчет её грамоздок и требует математику с плавающей точкои, легче брать заготовленные константы. и скажу сразу для удобства расчет идёт от 0 до 90 градусов.. а остальное преобразование - или негатив или спад.. и т.д.
А если нужна формула расчета синуса (относительно точно) http://en.wikipedia.org/wiki/Sine#Sine (есть ссылак на русский - там есть формула расчета через ряды)
...
А теперь углубимся в процесс ЦАП-а - у нас есть бинарное значение на входе - на выходе уровень
Теперь к вашей задаче - надо получить сигнал определённои формы!
Любая форма описывается чем:
В математике - формулои, а в информатике - определённым числом точек..
Так вот из этого вопросы:
- сколько же точек у вас сеичас на пилу..
- сколько точек хотите на Синусоиду??
Понятное дело чем больше точек тем меньше максимальная частота..
И конечноже - чем больше расчетов на каждуу точу - тем максимальная частота ещё уменьшается, а сигнал - тем более ступенчатый (Это случай когда у вас не хранятся заготовленные - расчитаные точки в памяти).
Теперь о синусоиде - расчет её грамоздок и требует математику с плавающей точкои, легче брать заготовленные константы. и скажу сразу для удобства расчет идёт от 0 до 90 градусов.. а остальное преобразование - или негатив или спад.. и т.д.
А если нужна формула расчета синуса (относительно точно) http://en.wikipedia.org/wiki/Sine#Sine (есть ссылак на русский - там есть формула расчета через ряды)
...
- Yellow Tiger
- Сверлит текстолит когтями
- Сообщения: 1148
- Зарегистрирован: Вт июл 08, 2008 12:24:17
-
Арнаутов Юрий
- Родился
- Сообщения: 14
- Зарегистрирован: Чт мар 19, 2009 19:35:49
- Откуда: Алчевск
Pe3ucTop писал(а):Тема конечно интересная..
...
Для многих вероятно не очень, но для меня в данный момент очень актуальная)
Для пилы я брал 255 точек на подъем и 255 на спад, поскольку она выводилась не с очень большой частотой, то этого кол-ва точек много небыло.
Сколько я хочу точек в синус?... Есть идея формировать их столько, чтобы на низких частотах сигнал был более точный, а с повышением, их количество уменьшать.
Насчет заготовления констант на синус, я думал, но меня это не сильно привлекает... это по свойму ограничивает. Есть задумка просчитать синус, получить нужное количество точек и занести их в массив, а после этого выводить на ЦАП. Если частота сильно большая, просчитать меньшее количество точек, чтобы МК успел их вывести и получить нужную частоту. Скорость в ущерб качеству:)
За формулу для синуса спасибо. Я с математикой дружу. если расчитываь на бумаге, а если тоже самое на С, то это для меня как подводный камень.
В языке С есть такие функции как asin(x) и sinh(x), но что то не получается с ними работать. Может кто сталкивался и у него получалось?
Все гениальное - просто!!!!!!!!!
-
Арнаутов Юрий
- Родился
- Сообщения: 14
- Зарегистрирован: Чт мар 19, 2009 19:35:49
- Откуда: Алчевск
Yellow Tiger писал(а):Ну вот нафига в этой задаче - расчет синуса?!Pe3ucTop писал(а):А если нужна формула расчета синуса ...Эта таблица один раз рассчитывается и потом выдается на выход в разных темпах...
Почему же? Я думаю расчет синуса то что нужно! Ведь можно использовать меньшее количество значений, чем есть в таблице, которую вы хотите один раз расчитать, тем самым увеличить частоту сигнала, конечно при этом пострадает его качество, и он будет сильно дискретным.
Все гениальное - просто!!!!!!!!!
Может поставить тудыть паралельную рамку, на адресную шинку которой синтезатор частоты. А на выход цап r2r. Контролером же заполнять рамку и управлять синтезатором. Хоть гигагерцы, если такую память найдете. Я б посоветовал срам от старых материнок (кеш для пня).
Если уж настолько актуально. А МК это не для этого. Это для другого (с) мой
Если уж настолько актуально. А МК это не для этого. Это для другого (с) мой
Арнаутов Юрий писал(а):Почему же? Я думаю расчет синуса то что нужно! Ведь можно использовать меньшее количество значений, чем есть в таблице, которую вы хотите один раз расчитать, тем самым увеличить частоту сигнала, конечно при этом пострадает его качество, и он будет сильно дискретным.
Не нужен здесь расчет синуса, и вообще смысл делать из меги генератор, тем более сигналов различной формы. Даже если брать один синус, то тоже не нужен расчет. Для того чтобы получить сигнал с большей частотой нужно "проредить" таблицу синуса (т. е. скакать чез 2, 3 и более отсчтетов), естественно это будет в ущерб качеству. Теперь о максимальной частоте, если теоретически предположить, что максимальная скорость выдачи отсчета микроконтроллером будет составлять 6 циклов (для меги можно читать тактов генератора), и на период синуса нужно будет вывести хотя бы 12 отчетов, то максимальная частота генерируемого сигнала будет 20МГц/(6*12) = 277 кГц. Но чтобы так сделать придется постараться. При этом ничем другим контроллер заниматься просто не сможет, и о С тоже можно забыть.
-
Арнаутов Юрий
- Родился
- Сообщения: 14
- Зарегистрирован: Чт мар 19, 2009 19:35:49
- Откуда: Алчевск
smac писал(а):Не нужен здесь расчет синуса, и вообще смысл делать из меги генератор, тем более сигналов различной формы...
Спасибо, я понял ваше мнение. Я повторюсь, это часть моей дипломной работы. А в целом там кроме генератора еще чет есть) Ну и в конце концов надо же студенту что то делать на диплом, вот и решил сворганить такую нехитрую штуку
Все гениальное - просто!!!!!!!!!
- Yellow Tiger
- Сверлит текстолит когтями
- Сообщения: 1148
- Зарегистрирован: Вт июл 08, 2008 12:24:17
Рассуждения верные... но - по отношению к какой-то другой ситуации.Арнаутов Юрий писал(а):Я думаю расчет синуса то что нужно! Ведь можно использовать меньшее количество значений, чем есть в таблице, ...
С одной стороны, никто не мешает брать значения из заранее рассчитанной таблицы не подряд, а через 1, через 2, через 3, уменьшая дискретность, а если частоты выдачи некратны, то подготовить разные таблицы синуса.
С другой стороны, даже если процессор будет молотить только на выдачу синуса наружу, максимум, чего удастся добиться от него - 60 килогерц, и это не при 255 отсчетах на период, а всего-лишь при 32-ух! Если же его заставить еще и синусы на ходу рассчитывать - то даже звукового диапазона не получится. Да и глупо это - N раз в секунду повторять одни и те же вычисления, вычисления с заведомо константным результатом.
Так-что - синус должен быть табличным и только!
PS А, кстати, мысль, что этот "перестраиваемый" генератор между двумя "соседними" частотами будет молча проскакивать половину своего диапазона - показалась несущественной?


