Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
21.02.2010, 02:02
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: Регулировка частоты на контроллере
Сообщение от spballiance
|
еще раз говорю, с приращением все понятно, я теперь разбираюсь с вычислением этого приращения. вот тут и появляется умножение.
его алгоритм не заканчивается приращением фазы.
|
Никто не вычисляет приращение фазы в ассемблерном прерывании на лету. Так что проблема непонятна. Считайте его на С где угодно, в С с умножением нет никаких проблем
|
|
|
|
21.02.2010, 13:30
|
|
Вид на жительство
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
|
Re: Регулировка частоты на контроллере
все равно не понимаю эту формулу
;Freq = Fval x Calib / 16777216
;Nominal Calib = 180143985
;for Ttimer = 4.000 uS
|
|
|
|
21.02.2010, 17:13
|
|
Вид на жительство
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
|
Re: Регулировка частоты на контроллере
|
|
|
|
21.02.2010, 17:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: Регулировка частоты на контроллере
Сообщение от spballiance
|
тут прозрачнее описано и понятно
|
Ну и отлично. Но учтите - там DDS грузит процессор на 100%, и делать еще что либо не получится.
|
|
|
|
21.02.2010, 17:48
|
|
Вид на жительство
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
|
Re: Регулировка частоты на контроллере
Сообщение от kison
|
там DDS грузит процессор на 100%, и делать еще что либо не получится.
|
да черт с ним, я свяжу 2 контроллера по usart и все, ну а синус через фильтры прогоню, растяну и смещу как мне надо
и та методика на 20кгц дает погрешность 0,02Гц так что терпимо
я с телесистем так и не понял как рассчитывать приращение фаз ![Улыбка](images/smilies/icon_smile.gif)
Но все равно этот алгоритм мне не подходит для решения "все-в-одном", обработчик АЦП будет сильно влиять на генерацию частоты
Последний раз редактировалось spballiance; 21.02.2010 в 17:52.
|
|
|
|
21.02.2010, 17:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: Регулировка частоты на контроллере
Сообщение от spballiance
|
Но все равно этот алгоритм мне не подходит для решения "все-в-одном", обработчик АЦП будет сильно влиять на генерацию частоты
|
Естественно. Поэтому я и предлагал вынести задачу генерации в отдельный кристалл. Лишняя t2313 вряд ли сильно удорожит проект. Там должно быть всего одно прерывание от таймера, так что если все сделать в одном кристалле, то АЦП придется обрабатывать поллингом в основном цикле. Вы прикиньте, может и в один поместится. Для этого надо всего лишь написать две процедуры - обработчик DDS на асме и поллинг АЦП на С.
|
|
|
|
21.02.2010, 18:00
|
|
Вид на жительство
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
|
Re: Регулировка частоты на контроллере
Сообщение от kison
|
Вы прикиньте, может и в один поместится. Для этого надо всего лишь написать две процедуры - обработчик DDS на асме и поллинг АЦП на С.
|
да нет, у меня слишком ветвистая программа получится. у меня в основном контроллере уже 60% занято, а еще фурье не вбивал
кстати про USART. слишком принципиально будет, если на меге будет 16 Мгц кристал? вроде как при "нерекомендованных" значениях кварца набегает какая-то погрешность по частоте на линиях приема-передачи?
Последний раз редактировалось spballiance; 21.02.2010 в 18:12.
|
|
|
|
21.02.2010, 19:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: Регулировка частоты на контроллере
Сообщение от spballiance
|
про USART. слишком принципиально будет, если на меге будет 16 Мгц кристал? вроде как при "нерекомендованных" значениях кварца набегает какая-то погрешность по частоте на линиях приема-передачи?
|
А какие там РЕКОМЕНДОВАННЫЕ КВАРЦЫ? это те что в
даташите в табличках?...
это же просто для примера расчитаны наиболее распространённые.
Берём формулы из ШИТа и расчитываем по применяемому кварцу значения регистров. А затем считаем занчение скорости и отклонение. Если в пределах 1-2% то работает.
|
|
|
|
21.02.2010, 19:40
|
|
Вид на жительство
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
|
Re: Регулировка частоты на контроллере
Сообщение от picavr
|
Если в пределах 1-2% то работает.
|
"рекомендованные" 0,0% ![Улыбка](images/smilies/icon_smile.gif)
то есть если у меня там и там будет 16МГц, то на ошибку можно наплевать вообще?
сижу допиливаю алгоритм под себя ![Улыбка](images/smilies/icon_smile.gif) вырезаю ненужное, добавляю нужное, в том числе и sleep в тот момент, когда генерить не надо, хотя проблема потребления меня не волнует
|
|
|
|
21.02.2010, 19:44
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,564
Сказал спасибо: 701
Сказали Спасибо 4,334 раз(а) в 1,985 сообщении(ях)
|
Re: Регулировка частоты на контроллере
Ну или так на PORTB.7:
'////////////////////////////////////////////////////////////////////
'/// DDS Function generator 0.1 Hz - 1250 kHz, resolution 0.1 Hz ///
'////////////////////////////////////////////////////////////////////
$regfile = "m48def.dat"
Const Fosc = 7380000
$crystal = Fosc ' adjust for used crystal
$baud = 115200
$hwstack = 32
$swstack = 32
$framesize = 32
Declare Sub Gensquare()
Declare Sub Calcload()
Dim Mload_r As Iram Long At 12 Overlay
Dim Phase As Iram Long At 26 Overlay
Dim Freq As Long
Dim Mloads As Single
Dim Mload As Long
Const Wide = 2 ^ 32
Const L = 7
Const Frmul =(wide / Fosc) * L
Ddrb = &HFF
Ddrd = &B10010010
Freq = 2002
Call Calcload
Call Gensquare()
Sub Calcload()
Mloads = Freq * Frmul
'Mloads = Mloads / 10
Mload = Mloads
End Sub
Sub Gensquare()
Phase = 0
Mload_r = Mload
Sqrs:
add r26,r12 ; 1
Adc r27,r13 ; 1
Adc r28,r14 ; 1
Adc r29,r15 ; 1
!out PORTB,r29 ; 1
rjmp Sqrs ; 2 = 7
End Sub
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:23.
|
|