реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Низкочастотный синусоидальный генератор с шагом сетки 0,01 Гц, требуется помощь
smk
сообщение May 18 2007, 19:12
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



По ссылке

http://www.telesys.ru/electronics/projects.php?do=p035

или

http://www.platan.ru/shem/pdf/sin.pdf

можно найти описание интересного генератора. Давно хотел сделать нечто подобное. Да и нужен такой прибор, только со своими "закидонами".

Проблема вот в чем. Там приведен текст программы-обработчика прерыаний таймера. Я не специалист в АСМ. Частота генерации меняется путем изменения количества прерываний таймера за секунду или как это реализовано программно? Хочу повторить генератор, но ЛСД взять буквенно-цифровой, ОУ другие, ЦАП тоже посовременней...

Нужна помощь разобраться с обработчиком прерываний. В статье замечено, что все четыре ветки должны иметь одинаковое время выполнения... с этим у меня неясность. Как управлять частотой, применяя тот обработчик прерываний и ту таблицу Sin?

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


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение May 18 2007, 19:26
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(smk @ May 18 2007, 22:12) *
По ссылке
http://www.telesys.ru/electronics/projects.php?do=p035
или
http://www.platan.ru/shem/pdf/sin.pdf

можно найти описание интересного генератора. Давно хотел сделать нечто подобное. Да и нужен такой прибор, только со своими "закидонами".

(Бурча) Тоже мне, интерес... Тема моего дипломного проекта несколько десятилетий назад. Только тогда все работало не на микроконтролере, а на реверсивных счетчиках, триггерах и дешифраторах. А принцип вычисления синуса тот же - прибавляй/убавляй.
И никакого С тогда не было. biggrin.gif
Сорри за оффтоп, но CV не работаю, а объединение ASM и C - компиляторо-зависимое.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
defunct
сообщение May 18 2007, 19:36
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(smk @ May 18 2007, 21:12) *
Я вот пишу на Си в CVAVR. Мне бы подстыковать обработчик прерываний на АСМ в текст программы на Си...

Поверьте, проще будет выучить asm.

Цитата
МК предлагается Mega8.

Возможно тут будет целесообразно применить 2 МК.
Один простой - напр. Tiny2313 - для выполнения основной задачи - генерации сигнала требуемой частоты, с прошивкой написанной полностью на asm. Второй - управляющий (любой какой вам нравится) для обслуживания экранчика, клавиатуры (если будет) и т.п. с программой на C.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение May 18 2007, 19:40
Сообщение #4


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(smk @ May 18 2007, 23:12) *
По ссылке

http://www.telesys.ru/electronics/projects.php?do=p035

или

http://www.platan.ru/shem/pdf/sin.pdf

можно найти описание интересного генератора. Давно хотел сделать нечто подобное. Да и нужен такой прибор, только со своими "закидонами".

Проблема вот в чем. Там приведен текст программы-обработчика прерыаний таймера. Я не специалист в АСМ. Частота генерации меняется путем изменения количества прерываний таймера за секунду или как это реализовано программно? Хочу повторить генератор, но ЛСД взять буквенно-цифровой, ОУ другие, ЦАП тоже посовременней...

Нужна помощь разобраться с обработчиком прерываний. В статье замечено, что все четыре ветки должны иметь одинаковое время выполнения... с этим у меня неясность. Как управлять частотой, применяя тот обработчик прерываний и ту таблицу Sin?

Тогда (если нужно по-современее) и не надо извращаться - берется готовый чип DDS от AD (всякие там AD98xx, а для высоких частот - 99xx), и любым контроллером обслуживается. А программный DDS и обслуживание DAC через прерывания - это очень медленно, и верхняя граница неприлично низкая. Есть решение с куда большим быстродействием (9 тактов на итерацию), но в этом случае при смене рабочей частоты происходит прерывание генерации. Зато - с минимальными трудозатратами помещается в 2313, причем не только синус, но и пила, и треугольник, меандр (но на меандр это похоже лишь при большом оверсемплинге) и белый шум. При тактовой 20 MHz более-менее приличный синус получается до 400-500 kHz.
Go to the top of the page
 
+Quote Post
smk
сообщение May 18 2007, 20:20
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
берется готовый чип DDS от AD

очень дорого, однако...

Цитата
Поверьте, проще будет выучить asm.

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

Цитата
Только тогда все работало не на микроконтролере, а на реверсивных счетчиках, триггерах и дешифраторах.


Ну да. Наверняка и ПЗУ было с кодовой таблицей...

Ностальгия - хорошо, но помощь лучше.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
defunct
сообщение May 18 2007, 20:33
Сообщение #6


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(smk @ May 18 2007, 21:57) *
когда-нибудь выучу. обязательно.

Если начать прямо сегодня, то думаю уже в это воскресенье можно написать helloworld..
через неделю без сомнения можно более-менее плавать в асм.

Цитата
Нужна помощь разобраться с обработчиком прерываний. В статье замечено, что все четыре ветки должны иметь одинаковое время выполнения... с этим у меня неясность. Как управлять частотой, применяя тот обработчик прерываний и ту таблицу Sin?

Читать всю статью накладно, может быть конкретизируете вопрос? Какие ветки?

Может быть начать с вопроса - как сделать генератор импульсов с регулируемой частотой следования?

Отвлеченно о задаче.
Можно пойти двумя путями.
1. Постоянная частота дискретизации + формирование требуемой формы и частоты сигнала математически.
2. Постоянная (таблично заданная) форма сигнала + изменяемая частота дискретизации.

Каким путем собрались идти Вы?
Go to the top of the page
 
+Quote Post
smk
сообщение May 18 2007, 20:55
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Мне нужно:
1) генерацию синусоиды в диапазон от 1 Гц до 35 кГц (хотябы)
2) возможность автоматической генерации с запрограммированным шагом в заданном диапазоне.
3) плавное и равномерное + логарифмическое изменение частоты в заданном диапазоне за заданное время. Если еще и линейно нарастающее одновременно генерить чтоб разверткой осцилографа управлять - вааще хорошо.

ну это так, в кратце. проект тем и хорош, что я могу его в любой момент переделать для конкретной задачи измереня.

Текст обработчика прерывания приведен ниже:
Sum: in tsreg,SREG ;Save status register
add PhaseK,FreqK
;Phase(0..31)=Phase(0..31)+Freq(0..31)
adc PhaseL,FreqL
adc PhaseM,FreqM
adc PhaseN,FreqN
mov ZL,PhaseM ;ZL < Phase(16..23)
mov ZH,PhaseN ;ZH < Phase(24..31)
sbrc PhaseN,2
com ZL ;ZL=!ZL if Phase.26==1
sbrc PhaseN,2
com ZH ;ZH=!ZH if Phase.26==1
andi ZH,0x03 ;Table address is 10 bit width
ori ZH,0x04 ;Table base is 0x0400
(0x200*2)
lpm ;r0 < table[Z]
sbrc PhaseN,3
rjmp ph_ab ;jump if Phase.27==1
ph_cd: com r0 ;r0=!r0
cbi PORTD,MSB ;To minimize glitch, clear
DAC.9,
out PORTB,r0 ;and then setup DAC.1 —
DAC.8
out SREG,tsreg ;Restore status register
reti
ph_ab: out PORTB,r0 ;To minimize glitch, setup
DAC.1 — DAC.8,
sbi PORTD,MSB ;and then set DAC.9
out SREG,tsreg ;Restore status register
reti

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

вместо квадратиков должны быть минусы.

mov ZL,PhaseM ;ZL <- Phase(16..23)
mov ZH,PhaseN ;ZH <- Phase(24..31)

lpm ;r0 <- table[Z]


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
defunct
сообщение May 18 2007, 21:30
Сообщение #8


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(smk @ May 18 2007, 22:55) *
Мне нужно:
1) генерацию синусоиды в диапазон от 1 Гц до 35 кГц (хотябы)
2) возможность автоматической генерации с запрограммированным шагом в заданном диапазоне.

Шаг 0.1Гц?

Цитата
В разных четвертях периода синуса выполнение обработчи
ка прерывания происходит по различным веткам. Очень важно
при этом обеспечить равное время выполнения каждой ветки.

Попадая в обработчик прерывания там есть некое подобие:

<вход в обработчик>
switch( <Квадрант > )
{
case 0
...
case 1
...
case 2
...
case 3
...
}
<выдача результата в DAC>

так вот важно чтобы время выполнения от входа в обработчик до выдачи результата было всегда одинаковым (ни тактом больше ни тактом меньше) вне зависимости от case'a.


Цитата
Поскольку в системе используется только одно прерывание,
оказалось возможным расположить обработчик начиная с адреса
вектора.
На C это реализовать, увы, нельзя.

На Cи вы можете пойти другим путем, и получить ту же функциональность.
Надо только поменять алгоритм обработчика прерывания:

<вход в обработчик>
static nexdactval = 0;
<DAC = nextdacval>

switch( <квадрант>
{
case 0:
nextdacval = ....
case 1:
....
case 2:
....
case 3:
....
}

Где уже можно не заботиться о равной длительности case'ов
Go to the top of the page
 
+Quote Post
viael
сообщение May 18 2007, 23:05
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 200
Регистрация: 10-04-06
Из: Украина,Запорожье
Пользователь №: 15 979



Вот моя "вариация на тему". Может пригодится.
Мега8 на 20 МГц, ЦАП - R2-R, индикатор TI8148(вроде бы).
Синусоида,пила,треугольник,меандр.Дискретность 0.01Гц.
остальное содрано с телесистем.

Файлы проекта
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение


Прикрепленное изображение
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  miniDDS.rar ( 133.5 килобайт ) Кол-во скачиваний: 148
Прикрепленный файл  TI8148.pdf ( 289.84 килобайт ) Кол-во скачиваний: 135
 
Go to the top of the page
 
+Quote Post
smk
сообщение May 19 2007, 04:49
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
Вот моя "вариация на тему". Может пригодится.


А схемки не сохранилось?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
muravei
сообщение May 19 2007, 06:27
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



А кто как думает: если вместо ЦАПа(из статьи) применить ШИМ тини26 , искажения сильно "пострадают"?
Go to the top of the page
 
+Quote Post
ReAl
сообщение May 19 2007, 11:46
Сообщение #12


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(muravei @ May 19 2007, 08:27) *
А кто как думает: если вместо ЦАПа(из статьи) применить ШИМ тини26 , искажения сильно "пострадают"?

Учитывая "35кГц хотя бы" в посте выше - искажения не пострадают вообще. Они себя будут чувствовать вольготно, расти и шириться с ростом частоты.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
rx3apf
сообщение May 19 2007, 20:38
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(smk @ May 19 2007, 00:20) *
очень дорого, однако...

AD9833 (тактовая частота до 25 MHz) - <$4 (@1000 шт), баксов шесть-семь в розницу.
Это дорого ?
Go to the top of the page
 
+Quote Post
muravei
сообщение May 21 2007, 07:32
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(ReAl @ May 19 2007, 15:46) *
Учитывая "35кГц хотя бы" в посте выше - искажения не пострадают вообще. Они себя будут чувствовать вольготно, расти и шириться с ростом частоты.

Как и в обычном ДДС(в том числе и рассматриваемом) Вопрос именно про эту схему
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2025 - 03:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.02137 секунд с 7
ELECTRONIX ©2004-2016