Цифровые сигнальные процессоры Вопросы, связанные с применением цифровых сигнальных процессоров: программирование, отладочные средства, алгоритмы... |
11.07.2008, 12:53
|
|
Частый гость
Регистрация: 09.05.2007
Сообщений: 17
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
[quote="andybeg"]
time = 65535UL - (int)(11719/(iFreq)) ;
TCNT1H = (unsigned char)(time ›› ![Горд собой](images/smilies/icon_dovl.gif) ;
TCNT1L = (unsigned char)time;
пожалуста, подробнее
|
|
|
|
11.07.2008, 12:59
|
|
Прохожий
Регистрация: 21.06.2006
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от andybeg
|
может чего не понял, но разве нельзя бонально организовать новую частоту по таймеру? и через
time = 65535UL - (int)(11719/(iFreq)) ;
TCNT1H = (unsigned char)(time ›› ;
TCNT1L = (unsigned char)time;
отмерять нужные интервалы?
|
Вы забываете, что (11719/(iFreq) - деление с отбросом дробной части.
Пусть надо 120Гц
(11719/(120) = 97,658(3) = 97
65535 - 97 = 65438 = 0xFF8A
TCNT1H = 0xFF
TCNT1L = 0x9E
Пересчитаем назад:
iFreq = 11719/(65535UL -time) = 11719/(65535-6543 ![Горд собой](images/smilies/icon_dovl.gif) =
11719/97 = 120,81 Гц - то, что будет реально на ножке МК.
|
|
|
|
11.07.2008, 13:03
|
|
Прохожий
Регистрация: 27.10.2006
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
недавно реализовал задачу генератора частоты - нужно было гнать частоту от единиц до десятков килогерц ...
кварц 12Кгц ставлю делитель частоты чтобы было 11719, настраиваю чтобы таймер срабатывал по прерыванию и в прерывании выдаю импульсы нужной мне длины рассчитывая время прерывания по уже приведённой формуле
time = 65535UL - (int)(11719/(iFreq)) ;
TCNT1H = (unsigned char)(time);
TCNT1L = (unsigned char)time;
iFreq - требуемая частота
чес говоря до конца небыл уверен в правильности всего этого, но вроди бы корректно работает
|
|
|
|
11.07.2008, 13:07
|
|
Прохожий
Регистрация: 27.10.2006
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
2dealex77
выбор делителя частоты поменьше разве не спасёт ситуацию ... в моём случае такого достаточно
|
|
|
|
11.07.2008, 13:39
|
|
Частый гость
Регистрация: 09.05.2007
Сообщений: 17
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
опишу методы выставления частоты приведенные в этой теме.
1. мой
задаю число в компараторе которое равно как раз (Fосн/делитель)/(iFreq),где iFreq - желаемая частота.
(16*10^6/8 )/(15000)=133,(3)
реальная чатоста выходит:
(16*10^6/8 )/133 = 15037,59 != 15000
2. предложенный andybeg и dealex77
то же самое, различие в том что необходимо тратить время МК на выставление нового значения в регистр таймера (лишняя команда), кстати в МК TI приоритет по переполнению гораздо ниже, чем прерывание по компаратору, это о чем то говорит.
3. предложенния по смене резонатора
конечно хорошо просто выпаять и вставить новый, но это грозит меньшей частотой работы самого микроконтроллера, возможным расхождением других частот, увелиивается вероятность налоожения подпрограмм прерывания и т.д. (можно предложить алгоритм пайки, замены старого на новый )))))
необходимы оптимальные алгоритмы изменения частоты при выполнении кода программы таким образом, чтобы частота была как можно точнее, а код программы меньше.
|
|
|
|
11.07.2008, 16:27
|
|
Временная регистрация
Регистрация: 09.11.2007
Сообщений: 56
Сказал спасибо: 12
Сказали Спасибо 10 раз(а) в 6 сообщении(ях)
|
А что ты с этой частотой будешь делать в конце концов? Действительно, тупым делением задающей частоты процессора ты нужной частоты с нужной точностью не добъешься, если тебе без сдвига фазы нужно. Но некоторые такты можно сделать чуть короче/длиннее и тогда точность будет высокой. Но со сдвигом фазы.
|
|
|
|
13.07.2008, 07:19
|
|
Частый гость
Регистрация: 09.05.2007
Сообщений: 17
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
сдалать приемник модема и передатчик, основанный на относительнофазовой модуляции.
Алгоритм дешифрации сигнала читайте в книгах, если интересно, здесь тема о точной частоте.
сдвиг фазы так же не нужен, пробовал, куча ошибок при при еме пакета.
|
|
|
|
13.07.2008, 11:33
|
|
Гражданин KAZUS.RU
Регистрация: 13.07.2005
Сообщений: 602
Сказал спасибо: 14
Сказали Спасибо 40 раз(а) в 19 сообщении(ях)
|
Сообщение от konstsm
|
сдалать приемник модема и передатчик, основанный на относительнофазовой модуляции.
|
Так выберите частоту несущей, кратную делению на целое число от тактовой МП так, чтобы было удобно манипулировать фазой.
|
|
|
|
13.07.2008, 16:14
|
|
Частый гость
Регистрация: 09.05.2007
Сообщений: 17
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
так вопрос стоит таким образом
как сделать программно точную частоту!?
всё остальное неприемлемые советы, типа "измени мир под эту частоту".
|
|
|
|
14.07.2008, 07:29
|
|
Гражданин KAZUS.RU
Регистрация: 04.04.2007
Сообщений: 941
Сказал спасибо: 571
Сказали Спасибо 113 раз(а) в 85 сообщении(ях)
|
Да ладно ,konstsm , не спеши "менять мир" , все гораздо проще ![Обижен](images/smilies/icon_beee.gif) для AVR такое сделать просто , как два пальца обосс... ) - 1.Купи ПРАВИЛЬНЫЙ кварц - на 6 Мгц продаетсяч свободно , на 12 Мгц , на 18 Мгц - какой понравится такой и используй .
2.сами таймеры можно грузить значениями 16 битными , это делители от 1 любой до65536 , на 12 Мгц к примеру 65536 дает до 183,1054688 Гц макс медленную вых частоту на одном можно получить ,причем с точностью +/- один-два такта ОТ 12 МЕГАГЕРЦ (!!!)- потому что таймеры там аппаратные и есть при конфигурпровании возможность задать режим СТС с самозагрузкой , аппаратной тоже ,после срабатывания ,так что прога для его загрузки не нужна , так вот , берем один таймер , грузим в него значение 800 для 12 Мгц , которое будет по срабатыванию его давать на тоже аппаратно подключенном выводе выхода (в о время начальной конфигурации контроллера) частоту 15,00000 Кгц - уж это ну прямо с большим кайфом удовлетворит твоим запросам точности в +/-2 гц , частота никуда гулять не будет поскольку как сам таймер так и вывод импульсов от него аппаратный , а не через прогу, прога только вначале задает конфигурацию и прочие рабочие примочки ,а дальше в работе аппаратного таймера не участвует ,и остальная прога для управления внешними компонентами от контроллера на работу аппаратного таймера тоже не влияет , надеюсь в подробностях дальше тебе не составит трудности написать нужную прогу , хоть на асме , хоть на Си .
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:15.
|
|