Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Цифровые сигнальные процессоры Вопросы, связанные с применением цифровых сигнальных процессоров: программирование, отладочные средства, алгоритмы...

 
Опции темы
Непрочитано 10.07.2008, 16:05  
konstsm
Частый гость
 
Регистрация: 09.05.2007
Сообщений: 17
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
konstsm на пути к лучшему
По умолчанию программная точная частота с МК

Посоветуйте, пожалуйста, алгоритмы выставления точной частоты на ногу МК с минимальным кодом программы.
допустим, 16 МГц резонатор,
надо 15 кГц
таймерами можно выставить только конкретное значение чуть больше или меньше 15кГц, что не удовлетворяет условиям поставленной задачи =15кГц (+/- 2Гц).

мой алгоритм.
в циклически повторяемом прерывании выставляю частоту выхода на прерывание по 5 раз 15039 и 14932 и один раз 15154 в среднем получается 15000,81.
что в принципе устраивает, НО необходимы оптимальные алгоритмы, возможно такие что позволяют не баловаться с частотами в таком диапазоне или каким либо образом уменьшающие код программы в разы.
Реклама:
konstsm вне форума  
Непрочитано 10.07.2008, 16:53  
mike7815
Прописка
 
Регистрация: 16.03.2005
Сообщений: 244
Сказал спасибо: 78
Сказали Спасибо 85 раз(а) в 55 сообщении(ях)
mike7815 на пути к лучшему
По умолчанию

Неполучится требуемая точность ни какой программой- 16 Мгц -63,5 нс, 15кГц - 66,7мкс (+/- 2Гц)-267ppm= 17.8нс. Если сильно хочется- можно так- внешняя логика + тамер МК. -На каком МК делаем?
Я немного еще подумал... Да согласен- алгоритм Ваш работать будет, но - прерывание будет происходить с погрешностью в добрый десяток тактов- работа со стеком- если конечно Си и программа что-то делает еще помимо генерации 15кГц. .
mike7815 вне форума  
Сказали "Спасибо" mike7815
majorka65 (29.01.2016)
Непрочитано 11.07.2008, 05:28  
konstsm
Частый гость
 
Регистрация: 09.05.2007
Сообщений: 17
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
konstsm на пути к лучшему
По умолчанию

данная операция выполняется не постоянно,
всего 3600 раз это примерно 250мс.
поэтому сильно убежать по моему алгоритму не должно.
приоритет прерывания высокий, стараюсь сделать наивысшим, т.е. никакая зараза не помешает
МК AT90USB1287.
внешняя логика никак не прокатит, а вдруг надо будет не выводить на ногу, а считывать с ноги состояние с такой вот частотой.
konstsm вне форума  
Непрочитано 11.07.2008, 08:20  
smg123
Гражданин KAZUS.RU
 
Регистрация: 13.07.2005
Сообщений: 602
Сказал спасибо: 14
Сказали Спасибо 40 раз(а) в 19 сообщении(ях)
smg123 на пути к лучшему
По умолчанию Re: программная точная частота с МК

Сообщение от konstsm
по 5 раз 15039 и 14932 и один раз 15154 в среднем получается 15000,81
Средняя температура в больнице за сутки = 36,6
Может сделать внешний задающий генератор и немного его подстроить? 1600500000:1067=15,000 кГц.
smg123 вне форума  
Непрочитано 11.07.2008, 08:42  
kmw
Частый гость
 
Регистрация: 30.09.2004
Сообщений: 39
Сказал спасибо: 2
Сказали Спасибо 1 раз в 1 сообщении
kmw на пути к лучшему
По умолчанию Re: программная точная частота с МК

Сообщение от konstsm
Посоветуйте, пожалуйста, алгоритмы выставления точной частоты на ногу МК с минимальным кодом программы.
допустим, 16 МГц резонатор,
надо 15 кГц
таймерами можно выставить только конкретное значение чуть больше или меньше 15кГц, что не удовлетворяет условиям поставленной задачи =15кГц (+/- 2Гц).

мой алгоритм.
в циклически повторяемом прерывании выставляю частоту выхода на прерывание по 5 раз 15039 и 14932 и один раз 15154 в среднем получается 15000,81.
что в принципе устраивает, НО необходимы оптимальные алгоритмы, возможно такие что позволяют не баловаться с частотами в таком диапазоне или каким либо образом уменьшающие код программы в разы.
Кварц для МК берем 14.7456 МГц, их везде полно. Настраиваем таймер на 983. Получается 14745600/983=15000.6104. Если это плохо, то можно конденсаторами скорректировать частоту кварца, снизив ее до 15000 * 983 = 14745000 Гц., т.е. надо уменьшить на 600 Гц.
kmw вне форума  
Непрочитано 11.07.2008, 10:43  
dealex77
Прохожий
 
Регистрация: 21.06.2006
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
dealex77 на пути к лучшему
По умолчанию Re: программная точная частота с МК

Сообщение от konstsm
Посоветуйте, пожалуйста, алгоритмы выставления точной частоты на ногу МК с минимальным кодом программы.
Посмотрите в сторону программного DDS.
Реализовывал подобную штуку на ATTiny2313. Выходная частота 0-100 000 кГц. Нужен был шаг 1 Гц, но данный метод позволяет использовать и значительно меньший шаг (вплоть до 0,05Гц).

Код, как и требуется, минимальный. Итак...
Функция main():

void main(void){
InitChip();
#asm
.EQU PORTB=0x18

;Watchdog settings
ldi R30,0x18 ;WDE=1 WDCE=1
wdr
out WDTCR,R30
ldi R30,0x03 + 0x08 ;Interval code + WDE=1
wdr
out WDTCR,R30

;Clear PHACC
clr R18
clr R19
clr R20
;Set initial DELTA (0 Hz)
ldi R21,0x00 ;low byte
ldi R22,0x00
ldi R23,0x00 ;high byte
sei

;Main loop - 8 system clocks
Start:
add R18,R21
adc R19,R22
adc R20,R23
out PORTB,R20
wdr
nop
rjmp Start
#endasm
}

Все...
Код требуемой частоты заносится в DELTA (R21-R23)
Данный код рассчитывается по формуле:
DELTA = (2^24 * 8 *Fout )/Fsys,
где Fout - требуемая частота Fsys-частота кварца

Для Fsys=11,0592МГц формула примет вид:
DELTA = (2^13 * Fout)/675) = (Fout‹‹13)/675

Выходной сигнал (прямоугольные импульсы требуемой частоты) будут на ножке РВ7.

Дерзайте
dealex77 вне форума  
Непрочитано 11.07.2008, 12:04  
kmw
Частый гость
 
Регистрация: 30.09.2004
Сообщений: 39
Сказал спасибо: 2
Сказали Спасибо 1 раз в 1 сообщении
kmw на пути к лучшему
По умолчанию Re: программная точная частота с МК

[quote="dealex77"]
Сообщение от konstsm

Выходной сигнал (прямоугольные импульсы требуемой частоты) будут на ножке РВ7.

Дерзайте
Но при этом способе:
1) точность частоты плохая (а надо 15000+-2 Гц);
2) период частоты "гуляет";
3) МК кроме получения частоты должен еще что-то делать, очевидно. А здесь он занят только формированием частоты!
kmw вне форума  
Непрочитано 11.07.2008, 12:20  
konstsm
Частый гость
 
Регистрация: 09.05.2007
Сообщений: 17
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
konstsm на пути к лучшему
По умолчанию

kmw, полностью согласен.

менять резонатор крайне нежелательно, нужны алгоритмы оптимального кода.
(к примеру такие как инкремент до определенной частоты, далее сброс и всё по новой.)
konstsm вне форума  
Непрочитано 11.07.2008, 12:37  
dealex77
Прохожий
 
Регистрация: 21.06.2006
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
dealex77 на пути к лучшему
По умолчанию Re: программная точная частота с МК

Сообщение от kmw
Но при этом способе:
1) точность частоты плохая (а надо 15000+-2 Гц);
2) период частоты "гуляет";
3) МК кроме получения частоты должен еще что-то делать, очевидно. А здесь он занят только формированием частоты!
1) Не правда! Практика показывает следующее: 100000+-0,1Гц
2) С чего это ему гулять??? Аргументируйте?
3) У меня сделано следующим образом. Есть основной МК, а есть МК-генератор. Приведенный кусок кода - как раз для МК-генератора. Проме main есть еще обработчик прерывания от посл. порта, в котором 3 байта кода частоты принимается и выкладываются в регистры DELTA. А на основном МК уже реализована вся остальная необходимая функциональность (работа с ЖКИ, памятью, клаиатурой и т.п.)

Предвидя возгласы типа "Лишний МК=лишние расходы":
Думаю, что 2-3 бакса (МК+кварц) за достаточно высокоточный DDS не такая уж и большая цена...
dealex77 вне форума  
Непрочитано 11.07.2008, 12:47  
andybeg
Прохожий
 
Регистрация: 27.10.2006
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
andybeg на пути к лучшему
По умолчанию

может чего не понял, но разве нельзя бонально организовать новую частоту по таймеру? и через
time = 65535UL - (int)(11719/(iFreq)) ;
TCNT1H = (unsigned char)(time ›› ;
TCNT1L = (unsigned char)time;
отмерять нужные интервалы?
andybeg вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программная оболочка AvrOsp|| mollex Микроконтроллеры, АЦП, память и т.д 4 21.12.2009 15:33
Программная регулировка громкости LSergM Аудиотехника 10 11.07.2009 00:16
Частота в PIC контролерах bobdenis Микроконтроллеры, АЦП, память и т.д 3 29.01.2007 13:03
[Решено] частота радара(ГАИ) sergey Делимся опытом 6 26.08.2005 13:39
Тактовая частота в PIC16F84 Jerry86 Микроконтроллеры, АЦП, память и т.д 5 02.02.2005 21:34


Часовой пояс GMT +4, время: 09:38.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot