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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> ATmega8 + lmx2326, управляющее слово
pavel-pervomaysk
сообщение Feb 20 2009, 08:53
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



Нужно для себя сделать универсальный синтезатор 100 MHz - 2 GHz , почитал доку на 2326 полоса 0,1 МГц- 2,8ГГц . Надеюсь хватит с запасом по верхней частоте .

Возникла проблема с пересчетом для данного pll lmx2326 . Глянул ДШ на нее но не совсем понятно

К примеру есть формула пересчета

fvco = [(P x cool.gif + A] x fosc/R // частота ГУНа считается по формуле

B: Preset divide ratio of binary 13-bit programmable counter (3 to 8191) \\ что выставляется здесь

A: Preset divide ratio of binary 5-bit swallow counter (0 £ A £ 31; A £ B for LMX2326) \\ что выставляется здесь

fosc: Частота опорного генератора к примеру 10 МГц

R: Preset divide ratio of binary 14-bit programmable reference counter (3 to 16383) предделитель утановки частоты

P: Preset modulus of dual modulus prescaler // LMX2326; P = 32


Частота гуна = [(32x8191)+31] x 10000000/3 = 262 143 x 3333333.3 = 873 810 000 Это получается унас частота ГУНа , но почему то линнейного пересчета вкурить не могу . sad.gif .

Буду рад пинку в нужную сторону
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 20 2009, 09:40
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Павлик @ Feb 20 2009, 11:53) *
Буду рад пинку в нужную сторону

Я бы находил приближение fvco/fosc с помощью цепных дробей. Формулы, правда, не помню. Поищите.


Как только Вы нашли целые числитель и знаменатель дроби, удовлетворяющей требуемой погрешности, решайте дальше соотношение для числителя и наслаждайтесь гигагерцами smile.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 20 2009, 11:09
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Выбираете шаг перестройки. Это будет Fref. Рассчитываете R: R = Fosc / Fref.

Находите коэф. деления N нужной вам частоты: N = Fvco / Fref.

5 младших бит получившегося числа будет А. Следующие 13 будут B.

P = 2^5 = 32, те самые 5 бит A. Все число N = P * B + A


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
=GM=
сообщение Feb 20 2009, 12:29
Сообщение #4


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Павлик @ Feb 20 2009, 08:53) *
Частота гуна = [(32x8191)+31] x 10000000/3 = 262 143 x 3333333.3 = 873 810 000 Это получается унас частота ГУНа , но почему то линейного пересчета вкурить не могу. Буду рад пинку в нужную сторону

Ну, получите. Частота гуна у вас 873 810 000 000 или вгрубе 873 ГГц.

Стоит частоту сравнения выбрать поменьше, скажем fREF/10000=10 кГц, тогда при А=0, В=6250, Р=32 fГУН=2 000 000 кГц


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
pavel-pervomaysk
сообщение Feb 20 2009, 16:25
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



>>Выбираете шаг перестройки. Это будет Fref. Рассчитываете R: R = Fosc / Fref.

К примеру у меня опорник ( Fosc) будет 10,240 МГц (как делают многие), шаг сетки (Fref) 5 кГц считаем
10240 / 5 = 2048 DEC -> 0x800 hex
R = 0x800

>>Находите коэф. деления N нужной вам частоты: N = Fvco / Fref.

Нужно получить частоту ГУНа (Fvco) 100 МГц 100000 / 5 = 20000 dec -> 0x4E20 hex

>>5 младших бит получившегося числа будет А. Следующие 13 будут B.

0x4E20 = 0b 0100 1110 001 0 0000
B A
A = 0 0000
B = 010 0111 0001 = 625 dec = 0x271

>>P = 2^5 = 32, те самые 5 бит A. Все число N = P * B + A

P = 32
N = 32 * 625 + 0 = 20000 dec = 0x4E20

С этим понятно , теперь идем к выводу информации в LMX2316/26

R = 0x800 его мы заносим в 14-BIT PROGRAMMABLE REFERENCE DIVIDER RATIO (R COUNTER)

Посылка первый 21 бит

биты 1 2 - контрольные биты = 0 , биты 1 2 3 4 5 6 7 8 9 10 11 12 13 14 = R COUNTER = в данном случае 0х800 ,

биты 15 16 17 18 должны быть 0 в нормальном режиме ,

бит 19 MSB не понятно 0 или 1 писать в него .

Затем посылка следующих 21 бит


биты 1 2 - контрольные биты = 0 , биты 1 2 3 4 5 = А и тоже = 0 , биты 6 7 8 9 10 11 12 13 14 15 16 17 18 = числу В = 0 0010 0111 0001 (добавляем 2 нуля в старшие разряды )

бит 19 MSB не понятно 0 или 1 писать в него .


В принципе вот такой расчет вывел из предложения выше , спасибо за подсказку , теперь надо проверить это на железе , и остается вопрос правильно ли все я понял и MSB не понятно 0 или 1 писать в него ? .

CODE
out_lmx:

mov r29, r19
rcall out_byte
mov r29, r20
rcall out_byte
mov r29, r21
rcall out_byte
nop
nop
nop
sbi PORTB,CE
sbi PORTB,CE
nop
nop
cbi PORTB,CE
cbi PORTB,CE
nop
nop
ret




out_byte:
ldi r28, 8
otb:
clc
rol r29
brcc dat_0
sbi PORTB,DAT
rjmp pulse

dat_0:
cbi PORTB,DAT
pulse:
nop
nop
sbi PORTB,CLOCK
nop
nop
cbi PORTB,CLOCK
nop
nop
dec r28
brne otb
ret


Вот так вот получилось в плане вывода .

Сообщение отредактировал Павлик - Feb 20 2009, 16:37
Go to the top of the page
 
+Quote Post
=GM=
сообщение Feb 20 2009, 17:44
Сообщение #6


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Павлик @ Feb 20 2009, 16:25) *
Вот так вот получилось в плане вывода

Учтите, выводить нужно 21 бит, а не 24 как у вас, а СЕ=0 должно стоять перед началом вывода бит. Ну и команда CLC в принципе не нужна.

Перед началом работы не забудьте проинициализировать все необходимые биты.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 20 2009, 18:58
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(=GM= @ Feb 20 2009, 19:44) *
Учтите, выводить нужно 21 бит, а не 24 как у вас, а СЕ=0 должно стоять перед началом вывода бит.
Не обязательно. Защелкнутся последние 21 бит. Запись происходит по фронту CE, где будет срез - абсолютно не важно(картина 1.4). Я гружу LMX2332 обоими способами.

Цитата(Павлик @ Feb 20 2009, 18:25) *
бит 19 MSB не понятно 0 или 1 писать в него .
Раздел 1.3.2. Если я правильно его понял - зависит от того, по каким критериям вы хотите оценивать факт захвата.
Цитата(Павлик @ Feb 20 2009, 18:25) *
бит 19 MSB не понятно 0 или 1 писать в него .
А это зависит от вашей реализации захвата: будете использовать быстрый захват - записываете 1, ждете захвата, записываете 0. Не будете - записываете 0 сразу. Раздел 1.3.4.
И не забудьте прописать регистр F.
P.S. Я работал с LMX2332 и PMB2306. По вашему LMX2326 могу подсказать только то, что можно прочесть в даташите.

Да, и выводить можно сразу три байта в одном цикле:
CODE
LoadSynth:
LDI R20,19
LoadCycle:
off(SYNTH_CLK)

SBRC R18,3 ; if(Value & (1L << 18)
on(SYNTH_DATA)
SBRS R18,3 ; else
off(SYNTH_DATA)

on(SYNTH_CLK)
LSL R16
ROL R17 ; Value <<= 1;
ROL R18
DEC R20
BRNE LoadCycle

on(SYNTH_LOAD)
off(SYNTH_LOAD)
RET


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
pavel-pervomaysk
сообщение Feb 20 2009, 19:29
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



Понял насчет количества бит , спасибо .
Сейчас поиграюсь с lmx2316 . 2326 увы нет пока , еще не приехали , о результатах отпишусь .
Go to the top of the page
 
+Quote Post
=GM=
сообщение Feb 20 2009, 23:40
Сообщение #9


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Сергей Борщ @ Feb 20 2009, 18:58) *
Не обязательно. Защелкнутся последние 21 бит. Запись происходит по фронту CE, где будет срез - абсолютно не важно(картина 1.4)

Скорее всего можно выдвигать 24 бита, хотя я вот недавно столкнулся с цапом с последовательным вводом, где перезапись идёт либо по приходу 16 бит, либо по фронту LE.

Вы-то сами почему в своей программе выдвигаете 19 бит, а не 21? Считаете, что всё равно запишется куда надо (:-)?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
pavel-pervomaysk
сообщение Feb 21 2009, 06:53
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



Да все должно работать , смотрел схему и пробовал в действии от любительской р-станции 144 / 430 МГц там LMX2316 подключена на шину индикатора 1602 и еще 24С04 линия SDA там висит управление строба отдельно и все работает . Так что все свазанно верно .
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 21 2009, 08:55
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(=GM= @ Feb 21 2009, 01:40) *
Вы-то сами почему в своей программе выдвигаете 19 бит, а не 21? Считаете, что всё равно запишется куда надо (:-)?
Потому что в даташите указан размер регистров 19 бит.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
pavel-pervomaysk
сообщение Feb 21 2009, 18:50
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



Для LMX2306 получилось так , приедет образец 2326 , разберусь уже и с ним .

Частота опорного генератора 10000 кГц

расчитываем число для установки состояния ( R counter )


а) 10000 / 2,5 = 4000 -> 0x0FA0

Сдвигаем число в лево 2 раза для вывода в LMX2306

0x0FA0 = << 2 = 0x3E80

выводим первое значение

б) выходная частота ГУНа должна быть 20000 кГц

шаг сетки 2500 гц / 2,5 кГц

20000 / 2,5 = 8000 переводим его в хекс -> 0x1F40

Сдвигаем число в лево 2 раза для вывода в LMX2306

0x1F40 = << 2 = 0x7D00

выводим второе значение

в) инит LMX2306

устанавливаем контрольный бит С2 и контрольный бит поляризации F6

получается число 0х0082

выводим третье значение и все на этом посылка закончена


Спасибо всем , Сергей Борщ a14.gif

Тема решена .
Go to the top of the page
 
+Quote Post
pavel-pervomaysk
сообщение Mar 28 2009, 15:09
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



Вернусь опять к своей теме , возник очень интерестный для меня вопрос.

Написал перекодировку частоты для вывода на ЖКИ , работает без проблем на микросхемах lmx2316 , а вот lmx2326 ни в какую не хочет работать sad.gif , привожу схему включения ниже.

Подаю по 3 байта в 3 захода.

0x00, 0x40, 0x08 control bits 00

Частота ГУНа 400 МГц , Сетка 2,5кГц

0x09, 0xC4, 0x01 control bits 01

выбираем поляризацию настройки ГУНа битом 6 ( сдвинуто на 2 )

0x00, 0x00, 0x82 control bits 10

Вот в ступоре или микросхема дохлая попалась , или во мне проблема. Смущает еще то , что 2316 работает без проблем , а в даташите все что я перевел , особых отличий кроме диапазона частоты я не увидел.

Еще прикрепляю скан вывода данных из проца.


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


Сообщение отредактировал Павлик - Mar 28 2009, 15:24
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Mar 28 2009, 15:29
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Вот тут есть пример работы (с исходниками) - http://www.thegleam.com/ke5fx/synth.html

Или здесь - http://forum.cqham.ru/viewtopic.php?p=2741...d9c50120#274192
В аттачменте к тому сообщению файл lmx2306.c - работающий. Для lmx2316 и других - другое значение для учета прескалера пропишите в программе.

Ну и вообще - шаг 5 кГц на трех гигагерцах частоте пр частоте сравнения 5 кГц? А качество кого-нибудь интересует? Скорость перестройки? В статье John Miles описывается довольно распространенный сейчас принцип - с объяснениями зачем и почему так стоит делать.

Вот еще - работающий у меня проект прескалера к частотомеру - там используется LMX2306 + ATMega8
Канал rf программируется на деление в 24 раза и его выход подключается к многофункциональному выводу микросхемы.

Сообщение отредактировал Genadi Zawidowski - Mar 28 2009, 15:32
Go to the top of the page
 
+Quote Post
pavel-pervomaysk
сообщение Mar 28 2009, 15:37
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



Все это хорошо , но 2306 и 2316 и у меня прекрасно работают , меня интересует именно почему 2326 не работает , и где именно про прескаллер пишут не нашел в даташите , или 5 бит первых это и есть прескаллер ?
В Си я не силен , пишу на асме , с примеров мало чего понял .
Go to the top of the page
 
+Quote Post

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

 


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


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