Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
24.02.2010, 14:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,564
Сказал спасибо: 701
Сказали Спасибо 4,334 раз(а) в 1,985 сообщении(ях)
|
Re: Регулировка частоты на контроллере
На пальцах красиво. А вот как это в коде выглядит?
|
|
|
|
24.02.2010, 14:55
|
|
Вид на жительство
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
|
Re: Регулировка частоты на контроллере
если кому-то пригодится
процедура на Си установки частоты с помощью второго контроллера
частоту можно увеличить, загрубив unsigned long calib=734;
freq_data.delta=freq*10000/calib;
Код:
|
void set_freq(unsigned long freq)
{
unsigned long calib=7336;
union alpha {
unsigned char bytes[4];
unsigned long delta;
}freq_data;
freq_data.delta=freq*100000/calib;
USART_SendChar('s');
USART_SendChar(freq_data.bytes[2]);
USART_SendChar(freq_data.bytes[1]);
USART_SendChar(freq_data.bytes[0]);
} |
Последний раз редактировалось spballiance; 21.03.2010 в 14:48.
|
|
|
|
24.02.2010, 15:47
|
|
Прописка
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Ну да, это не так просто
Приём байт выглядит так, это первые 3 лупа, в программе всего 9.
Код:
|
rjmp start1 ;
a1: nop ;
nop ;
nop ;
nop ;
rjmp a3
singen: out porta,r18 ; 01
start1: add r24,r19 ;
adc r25,r20 ;
adc r26,r21 ;
adc r30,r22 ;
ld r23,z ;
add r24,r19 ;
adc r25,r20 ;
adc r26,r21 ;
out porta,r23 ; 02
adc r30,r22 ;
ld r23,z ;
add r24,r19 ;
adc r25,r20 ;
adc r26,r21 ;
adc r30,r22 ;
ld r18,z ;
out porta,r23 ; 03
sbis UCSRA,RXC
rjmp a1
cpi yl,y0
brne a2
clr time
a2: in r16,UDR
st y+,r16
nop
a3: out porta,r18 ; 04 |
Последний раз редактировалось =GM=; 24.02.2010 в 17:20.
|
|
|
|
24.02.2010, 16:28
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,564
Сказал спасибо: 701
Сказали Спасибо 4,334 раз(а) в 1,985 сообщении(ях)
|
Re: Регулировка частоты на контроллере
Пасиба =GM=, бум изучать.
|
|
|
|
01.03.2010, 17:51
|
|
Вид на жительство
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
|
Re: Регулировка частоты на контроллере
продолжу тему
с опорным генератором синуса вроде разобрались. теперь стоит задача с оконечным генератором.
требования
1) Umin=›9В Umax‹=15B
2) регулируемые (пока в ручную) Umin Umax
3) высокая нагрузочная способность до 30А
4) работа в пределах 20Гц-40КГц
|
|
|
|
01.03.2010, 23:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,564
Сказал спасибо: 701
Сказали Спасибо 4,334 раз(а) в 1,985 сообщении(ях)
|
Re: Регулировка частоты на контроллере
Уважаемый =GM=. Появилась, мб крамольная идея. В моем девайсе( https://kazus.ru/forums/showthread.php?t=16866) юзаются 2 uC, один меряет частоту (методом захвата), другой используется как DDS. Идея в совмещении этих функций в одном кристалле, без прерывания работы DDS. Как думаете, можно извернуться?
|
|
|
|
02.03.2010, 00:43
|
|
Прописка
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
DDS и Fmeter в одном флаконе
Вполне можно совместить, для частотомера надо не так уж много ресурсов - одно умножение (аппаратное вообще 30 тактов) и одно деление (это порядка 400 тактов), ну и выдача результата на индикацию.
Оценка исходит из моей собственной реализации частотомера методом захвата, который я изложил на электрониксе. Предполагаю, что вы используете тот же алгоритм.
Конечно, сказанное сильно зависит от конкретных параметров: диапазон измеряемых частот, погрешность измерения, частота выдачи выборок и т.п.
Добавлю, деление 32/32-›32 требует много регистров, здесь может быть существенное ограничение, хотя в принципе можно использовать нижние регистры.
Последний раз редактировалось =GM=; 02.03.2010 в 00:49.
|
|
|
|
02.03.2010, 02:08
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,564
Сказал спасибо: 701
Сказали Спасибо 4,334 раз(а) в 1,985 сообщении(ях)
|
Re: Регулировка частоты на контроллере
Всетаки выглядит довольно печально. Я естественно имел ввиду некоторое увеличение рабочего цикла DDS.
Напрашивается реализация цикла DDS по таймерному прерыванию, так чтобы все измерения и вычисления выполнялись в основном цикле. Но оценки верхней частоты на пальцах не удаются. Наверное для частот ›1 ‹5 MHz - нереально.
Будем считать вариант тупиковым или примером для экстремальных упражнений в кодописии. Да и лишний uC не такая уж роскошь.
|
|
|
|
02.03.2010, 14:45
|
|
Прописка
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
DDS и Fmeter в одном флаконе - вполне возможно
Нет, в своих расчётах я предполагал, что цикл для DDS останется прежним - 10 тактов или 2000 квыб/с для тактовой 20 мег. Ну и поскольку это достаточно короткий цикл, то о прерываниях придётся забыть.
Для данного цикла загруженность проца составляет 70%, на реализацию частотомера остаётся 30%, ну, с учётом накладных расходов на сохранение статус-регистра остаётся 24%.
Не поленился, поднял свою старую программу 2001 года, МК был забит под завязку, но для частотомера использовался примерно 1% ресурсов МК в части быстродействия, причём там была реализация с одним захватом на голом проце, что ограничивало измеряемые частоты до 4 МГц. Как видите, в вашем случае даже присутствует небольшой запас по быстродействию.
На практике совмещение двух таких устройств в одном МК имеет смысл только если у вас намечается немеряное производство подобных изделий, тут каждый пенс должен быть на счету. И никакой модернизации после начала выпуска.
Во всех остальных случаях такое кодирование призвано обострить игру ума и только, ну может поизумлять небольшую группу посвящённых.
Последний раз редактировалось =GM=; 02.03.2010 в 20:28.
|
|
|
|
21.03.2010, 14:12
|
|
Вид на жительство
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
|
Re: Регулировка частоты на контроллере
снова подниму тему
можно ли доработать данный генератор частоты до такого диапазона?
10мкГц-1000КГц (+-1%)
текущая характеристика
//long xtall=16000000;
//long razrad=16777216;
//char cycle=13;
//calib=xtall/razrad/cycle=0,073359563
//float calib=0.073359563;
calib=7336
freq_data.delta=freq*100000/calib;
если хотим 10Гц, то имеем 10*100000/7336=136,31 0,22%
1Гц=13,61 5%
0,1Гц=1,361 26%
1000КГц=13 631 406,76 - попадаем в наш диапазон вполне
Последний раз редактировалось spballiance; 21.03.2010 в 14:42.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:31.
|
|