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

 
 
> Как программно загрузить частоту, ATmega8 в синтезатор частоты
starii
сообщение Sep 5 2006, 13:19
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 4-09-06
Пользователь №: 20 067



cranky.gif Народ, помогите!!!!!!! Как программно загрузить частоту из ATmega8 в синтезатор частоты со встроенным ГУН-ом (к примеру ADF4360-7)............Заранее всем спасибо!!!!!!!! a14.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Леонид Иванович
сообщение Sep 5 2006, 15:35
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 318
Регистрация: 21-07-06
Из: Минск
Пользователь №: 18 986



Для ADF4360 нет, зато есть для MC12202 на ассемблере:

Код
;Set up PLL:
;make PLL DRATIO and MRATIO values and load PLL IC.
;Input: Frx - RX frequency, Hz
; const Fif - RX first IF frequency, Hz
; const Fosc - PLL oscillator frequency, Hz
; const Fc   - reference frequency, Hz
;
;Frx = Fvco - Fif
;Fvco = Fc * MRATIO
;Fc = Fosc / DRATIO

SetPLL:    

;DRATIO = Fosc / Fc

.equ    DR = Fosc/Fc

    ldi    XL,DRATIO
    ldi    temp,byte1(DR)
    st    X+,temp
    ldi    temp,byte2(DR)
    st    X+,temp

;Fvco = Frx + Fif

    ldi    XL,Frx
    ld    temp,X+
    subi    temp,byte1(-Fif)
    mov    Res1,temp
    ld    temp,X+
    sbci    temp,byte2(-Fif)
    mov    Res2,temp
    ld    temp,X+
    sbci    temp,byte3(-Fif)
    mov    Res3,temp
    ld    temp,X+
    sbci    temp,byte4(-Fif)
    mov    Res4,temp

;MRATIO = Fvco / Fc

    ldxy    (Fc)
    mov    Stp1,XL
    mov    Stp2,XH
    mov    Stp3,YL
    mov    Stp4,YH
    rcall    Div32    ;Res4:3:2:1 / Stp4:3:2:1 = Res4:3:2:1
    ldi    XL,MRATIO
    st    X+,Res1
    st    X+,Res2
    st    X+,Res3

;load PLL IC:

    rcall    Wr_PLL
    ret

;Load Res4:3:2:1 from [X]:

LdRes:    ld    Res1,X+
    ld    Res2,X+
    ld    Res3,X+
    ld    Res4,X+
    ret

;Motorola MC12202 synthesizer load:
;
;Input: DRATIO =    8..16383  (2 bytes)
;       MRATIO = 1024..262143 (3 bytes)
;Out:        C = 1 if error
;
; F_r, F_p = F_osc / DRATIO
; F_vco = F_r, F_p * MRATIO
;
;DRATIO -> R, MRATIO -> P,N,A
;
;Note: since A should be less then N there are
;missing codes in 1024..4095 MRATIO range.
;Missing codes are indicated with C = 1 (and
;synthesizer is not loaded). In the same manner
;is indicated out of range for DRATIO or MRATIO.

Wr_PLL:    lds    XL,MRATIO+1
    lds    XH,MRATIO+2

;Check MRATIO for 1024..262143

    andi    XL,0xfc
    or    XL,XH
    brne    Mlk    ;error if MRATIO < 1024 (400H)
    sec        ;set error flag
    ret        ;return to the caller
    
Mlk:    andi    XH,0xfc
    breq    Mgk    ;error if MRATIO > 262143 (3FFFFH)
    sec        ;set error flag
    ret        ;return to the caller

;Check MRATIO and choose P
;Prescaler = 128 if MRATIO > 16383 (N > 127)
;Prescaler = 64  if MRATIO < 16384 (N < 128)
    
Mgk:    lds    XL,MRATIO+1
    lds    XH,MRATIO+2
    andi    XL,0xc0
    or    XL,XH
    in    temp,SREG
    bst    temp,1    ;T <- Z

;Prescaler = 128 flag T = 0, Prescaler = 64 flag T = 1
;A_counter = (MRATIO MOD 128) for Prescaler = 128
;A_counter = (MRATIO MOD 64)  for Prescaler = 64
    
    lds    temp,MRATIO+0
    andi    temp,0x7f;if P = 128 A_counter = MRATIO+0 & 0x7f
    brtc    P_128
    andi    temp,0x3f;if P = 64  A_counter = MRATIO+0 & 0x3f

P_128:    lds    XH, MRATIO+2
    lds    XL, MRATIO+1
    lds    Cnt,MRATIO+0

    brts    P_64
    ror    XH    ;if P = 128 MRATIO >> 2
    ror    XL
    ror    Cnt

P_64:    ror    XH    ;if P = 64  MRATIO >> 1
    ror    XL
    ror    Cnt

    andi    Cnt,0xe0
    mov    XH,XL
    mov    XL,Cnt    ;XH:XL = N18..N8,0,0,0,0,0
    push    XH    ;_stack = 1 (N18..N11)
    push    XL    ;_stack = 2 (N10..N8,0,0,0,0,0)

;temp = A_counter, XH:XL = N18..N8,0,0,0,0,0
;Check for A_counter < N

    ldi    Cnt,3
N_sh:    rol    XL    ;N <<
    rol    XH
    brcs    Aok    ;jump if N > A_counter (N > 255)
    dec    Cnt
    brne    N_sh    
    cp    temp,XH
    brlo    Aok    ;error if A_counter >= N
    pop    XL    ;_stack = 1
    pop    XH    ;_stack = 0
    sec        ;set error flag
    ret        ;return to the caller
    
;Shift A_counter

Aok:    clc
    ldi    XL,0
    ldi    Cnt,2
A_sh:    ror    temp
    ror    XL
    dec    Cnt
    brne    A_sh
    mov    Cnt,XL    ;temp:Cnt = A_counter >> 2

;Combine N18..N8 and A_counter

    pop    XL    ;_stack = 1 (N10..N8,0,0,0,0,0)
    or    XL,temp
    push    XL    ;_stack = 2 (N10..N8,A7..A3)
    push    Cnt    ;_stack = 3 (A2,A1,0,0,0,0,0,0)

;_stack[1]:_stack[2]:_stack[3] ready to load PROGRAMMABLE DIVIDER

    lds    XL,DRATIO+0
    lds    XH,DRATIO+1
    
;Check DRATIO for 8..16383

    andi    XL,0xf8
    or    XL,XH
    brne    Dlk    ;error if DRATIO < 8 (08H)
    pop    Cnt    ;_stack = 2
    pop    XL    ;_stack = 1
    pop    XH    ;_stack = 0
    sec        ;set error flag
    ret        ;return to the caller

Dlk:    andi    XH,0xc0
    breq    Dgk    ;error if DRATIO > 16383 (3FFFH)
    pop    Cnt    ;_stack = 2
    pop    XL    ;_stack = 1
    pop    XH    ;_stack = 0
    sec        ;set error flag
    ret        ;return to the caller
    
;Shift DRATIO and combine it with SW (T flag)

Dgk:    lds    XL,DRATIO+0
    lds    XH,DRATIO+1
    sec
    rol    XL
    rol    XH
    bld    XH,7    ;XH.7 <- T, XH:XL = SW,R14..R1,1

;XH:XL = SW,R14..R1,1 - ready to load PROGRAMMABLE REFERENCE DIVIDER

;Load PROGRAMMABLE REFERENCE DIVIDER

    mov    temp,XH
    ldi    Cnt,8    ;bit count
    rcall    Ld_PLL    ;load SW,R14..R8
    mov    temp,XL
    ldi    Cnt,8    ;bit count
    rcall    Ld_PLL    ;load R7..R1,1

    sbi    PORTD,LE
    nop
    cbi    PORTD,LE

;Load PROGRAMMABLE DIVIDER

    pop    XL    ;_stack = 2 (A2,A1,0)
    pop    XH    ;_stack = 1 (N10..N8,A7..A3)
    pop    temp    ;_stack = 0 (N18..N11)
    ldi    Cnt,8    ;bit count
    rcall    Ld_PLL    ;load N18..N11
    mov    temp,XH
    ldi    Cnt,8    ;bit count
    rcall    Ld_PLL    ;load N10..N8,A7..A3
    mov    temp,XL
    ldi    Cnt,3    ;bit count
    rcall    Ld_PLL    ;load A2,A1,0

    sbi    PORTD,LE
    nop
    cbi    PORTD,LE

    clc        ;clear error flag
    ret        ;return to the caller

;Loads data to MC12202 via serial bus
;Input: temp - data, Cnt - bit count

Ld_PLL:    rol    temp
    brcc    DATA0
    sbi    PORTD,DATA;DATA <- 1
    rjmp    DNE
DATA0:    cbi    PORTD,DATA;DATA <- 0
    nop
DNE:    sbi    PORTD,CLK;CLK  <- 1
    nop
    cbi    PORTD,CLK;CLK  <- 0
    dec    Cnt
    brne    Ld_PLL
    cbi    PORTD,DATA;DATA <- 1
    ret


--------------------
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st August 2025 - 05:17
Рейтинг@Mail.ru


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