Вы не вошли.
я ж не говорил, что LMX.... - это филипс,
UMA1015 - филипс. должна подойти , по функциям, ессно.
а вот то что у тебя в схеме:
sd.national.com/iphrase/q?query=PLL+wit … ly+Current
и вобще не плохо бы сообщитьо своей квалификации, а то советы трудновато давать когда говоришь на разных уровнях
от себя могу предложить исходник кода на С для AD4110-4113, для AVR. если это поможет кому либо.....
Вне форума
www.chipinfo.ru/literature/radio/199902/p71_72.html
www.chipinfo.ru/literature/radio/199903/p45_46.html
www.chipinfo.ru/literature/radio/199904/p41_43.html
... Вот Олег Попов рыжий, а радио изобрел (с) мама няни Прутковской.
Вне форума
Посмотри здесь:
electronics-diy.com/
Кучка готовых передатчиков.
А здесь - синтезаторы на многие случаи жизни,есть и передатчики.
С прошивками, на телевизионной комплектухе.
Кое-что я повторял,работает и сейчас.
www.freddospage.nl
Вне форума
Flyman,
Есть маленькая схемка AT90S2313 + LM7001, если не пропал еще интерес
перекинь и мне если не сложно на мыло
Вне форума
Flyman,
Есть маленькая схемка AT90S2313 + LM7001, если не пропал еще интерес
И мне если можно перекиньте.
Буду очень благодарен если кто-то еще поделится примером исходника управления синтезатором на С. Заранее спасибо !
Вне форума
.... примером исходника управления синтезатором на С....
нет разницы - на Си, или на ассемблере...
но есть пара моментов:
- мой стиль на С вряд ли можно считать примером ;
- было это давно, и сохранилось ли, не знаю.
Пороюсь в старых болванках, - чуть позже.
ЗЫ, и еще, делалось это для NFM, будет ли работать на WFM, тоже, не знаю.
Вне форума
Вот если кому интересно, управление синтезатором MC12202 на asm для AVR:
;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.
S_LOAD: mov tempML,mratioL
mov tempMM,mratioM
mov tempMH,mratioH
;Check MRATIO for 1024..262143
mov temp,tempMM
andi temp,0xfc
or temp,tempMH
breq S_ERR ;error if MRATIO < 1024 (400H)
mov temp,tempMH
andi temp,0xfc
brne S_ERR ;error if MRATIO > 262143 (3FFFFH)
;Check MRATIO and choose P
;Prescaler = 128 if MRATIO > 16383 (N > 127)
;Prescaler = 64 if MRATIO < 16384 (N < 128)
mov temp,tempMM
andi temp,0xc0
or temp,tempMH
breq P64 ;jump if MRATIO < 16384 (4000H)
;Save Prescaler = 128 flag
P128: clt ;Prescaler = 128, flag T = 0
;Extract A_counter for Prescaler = 128 (A_counter = MRATIO MOD 128)
mov tempA,tempML
andi tempA,0x7f ;A_counter = tempML & 7FH
;Form N18..N8 as MRATIO DIV 64 and one more time DIV 64 (label SH1:)
SH2: ror tempMH ;if P = 128 R2,R1,R0 >> 2
ror tempMM
ror tempML
rjmp SH1
;Error exit point (placed here to reach by relative addressing)
S_ERR: sec ;set error flag
ret
;Save Prescaler = 64 flag
P64: set ;Prescaler = 64, flag T = 1
;Extract A_counter for Prescaler = 64 (A_counter = MRATIO MOD 64)
mov tempA,tempML
andi tempA,0x3f ;A_counter = tempML & 3FH
;Form N18..N8 as MRATIO DIV 64
SH1: ror tempMH ;if P = 64 R2,R1,R0 >> 1
ror tempMM
ror tempML
andi tempML,0xe0 ;tempMM,tempML = N18..N8,0,0,0,0,0
;tempA = A_counter, tempMM,tempML = N18..N8,0,0,0,0,0
;Check for A_counter < N
mov tempB,tempML
mov temp,tempMM
ldi tempC,3
SH5: rol tempB ;tempML <<
rol temp ;tempMM <<
brcs SH4 ;jump if N > A_counter (N > 255)
dec tempC
brne SH5
cp tempA,temp
brsh S_ERR ;error if A_counter >= N
;Shift A_counter
SH4: clc
ldi tempB,0
ldi tempC,2
SH3: ror tempA
ror tempB
dec tempC
brne SH3 ;tempA,tempB = A_counter >> 2
;Combine N18..N8 and A_counter
or tempML,tempA ;tempMM,tempML,tempB = N18..N8,A7..A1,0 (,0,0,0,0,0)
;tempMM,tempML,tempB = N18..N8,A7..A1,0 - ready to load PROGRAMMABLE DIVIDER
mov tempDL,dratioL
mov tempDH,dratioH
;Check DRATIO for 8..16383
mov temp,tempDL
andi temp,0xf8
or temp,tempDH
breq S_ERR ;error if DRATIO < 8 (08H)
mov temp,tempDH
andi temp,0xc0
brne S_ERR ;error if DRATIO > 16383 (3FFFH)
;Shift DRATIO and combine it with SW (F0 flag)
sec
rol tempDL
rol tempDH
bld tempDH,7 ;tempDH.7 <- T, tempDH,tempDL = SW,R14..R1,1
;tempDH,tempDL = SW,R14..R1,1 - ready to load PROGRAMMABLE REFERENCE DIVIDER
;Load PROGRAMMABLE REFERENCE DIVIDER
mov temp,tempDH
ldi tempC,8 ;bit count
rcall LOAD ;load SW,R14..R8
mov temp,tempDL
ldi tempC,8 ;bit count
rcall LOAD ;load R7..R1,1
sbi PD,LE
nop
cbi PD,LE
;Load PROGRAMMABLE DIVIDER
mov temp,tempMM
ldi tempC,8 ;bit count
rcall LOAD ;load N18..N11
mov temp,tempML
ldi tempC,8 ;bit count
rcall LOAD ;load N10..N8,A7..A3
mov temp,tempB
ldi tempC,3 ;bit count
rcall LOAD ;load A2,A1,0
sbi PD,LE
nop
cbi PD,LE
;Exit
clc ;clear error flag
ret
;Loads data via serial bus
;Input: temp - data, tempC - bit count
LOAD: rol temp
brcc DATA0
sbi PD,DTA ;Set DTA
rjmp DONE ;this branch creates setup time on MOSI
DATA0: cbi PD,DTA ;Clear DTA
nop ;also create setup time on MOSI
DONE: sbi PD,CLK ;set CLK
nop
cbi PD,CLK ;Clear CLK
dec tempC
brne LOAD
cbi PD,DTA ;Clear DTA
ret
Вне форума
управление синтезатором семейства ADF4xxx
две разные частоты, выбираются через подачу на ногу 0 или1
#include <mega8.h>
#include <delay.h>
// определить порты I/O для ADF4113
#define le PORTC.4
#define _data PORTC.3
#define clk PORTC.2
// определить значения для расчета КД счетчиков
#define R 1250 //КД опорного счетчика
#define Fref 25 //частота опорного генератора
unsigned char *addr_map,*addr_byte;
void config_register_AD4113(void);
void transmitt_to_ADF4113(void);
bit transmitt_bit,stop_flag1,stop_flag2;
unsigned char mask=0x80,result_AND,;
unsigned int N;
float Fout;
struct Initialization_Latch_Map
{
unsigned long control_bits_init :2;
unsigned long counter_reset :1;
unsigned long power_down_1 :1;
unsigned long MUXOUT_control :3;
unsigned long PD_polarity :1;
unsigned long CP_tree_state :1;
unsigned long fastlock_enable :1;
unsigned long fastlock_mode :1;
unsigned long timer_counter_control :4;
unsigned long current_setting_1 :3;
unsigned long current_setting_2 :3;
unsigned long power_down_2 :1;
unsigned long prescaller_value :2;
} Init @0x60;
struct Reference_Counter_Latch_Map
{
unsigned long control_bits_ref :2;
unsigned long reference_counter :14;
unsigned long anti_backlash_width :2;
unsigned long test_mode_bits :2;
unsigned long lock_detect_precision :1;
unsigned long SYSN :1;
unsigned long DLY :1;
unsigned long reserved :1;
} Ref_counter @0x70;
struct AB_Counter_Latch_Map
{
unsigned long control_bits_AB :2 ;
unsigned long A_counter :6;
unsigned long B_counter :13;
unsigned long CP_gain :1;
unsigned long reserved :2;
}AB_counter @0x80;
//-------- пересчет частоты в коэф. деления счетчиков А и Б
void recalc_Freq_to_N_counter(void)
{
N=Fout*R/Fref;
AB_counter.A_counter=0;
AB_counter.B_counter=N;
}
//------------------------------------
void transmitt_to_ADF4113(void)
{
recalc_Freq_to_N_counter();
for (addr_map=0x62;addr_map<=0x82;addr_map=addr_map+0x10)//перебрать 3х байтные карты прогр, с адреса 0х62 по 0х82
{
le=0;
for (addr_byte=addr_map;addr_byte>=addr_map-2;addr_byte--) //перебрать байты в каждой карте
{
#asm("wdr");
for (mask=0x80;mask>=1;mask=mask/2) //перебрать биты в каждом байте
{
result_AND= *addr_byte & mask;//накладываем маску на элемент массива
transmitt_bit=result_AND && mask;// определить значение бита
clk=0;
_data=transmitt_bit; // установить порт
clk=1;
};
_data=0;clk=0;
} ;
le=1;//зафиксировать карту в регистр
};
}
//
void main(void)
{
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
DDRC.3=1;
DDRC.4=1;
DDRC.2=1;
PORTD=0x00;
DDRD=0x00;
#asm("cli")
config_register_AD4113();
Init.MUXOUT_control =0b001;//LOCK-DET
// Watchdog Timer Prescaler: OSC/2048k
WDTCR=0x1F;
WDTCR=0x0F;
while (1)
{
if ((PINB.1==1)&&(stop_flag1==0)) {Fout=93.82;transmitt_to_ADF4113();stop_flag2=0;stop_flag1=1;}
if ((PINB.1==0)&&(stop_flag2==0)) {Fout=94.32;transmitt_to_ADF4113();stop_flag1=0;stop_flag2=1;}
//формирования пакета передачи
// delay_ms(1000);
#asm("wdr");
}; //while
} //main
void config_register_AD4113(void)
{
//config Init
Init.control_bits_init =0b11 ;
Init.counter_reset =0b0 ;
Init.power_down_1 =0b0 ;
Init.PD_polarity =0b1 ;
Init.CP_tree_state =0b0 ;
Init.fastlock_enable =0b0 ;
Init.fastlock_mode =0b0 ;
Init.timer_counter_control =0b1111 ;
Init.current_setting_1 =0b111 ;
Init.current_setting_2 =0b111 ;
Init.power_down_2 =0b0 ;
Init.prescaller_value =0b01 ;
//config Ref_counter-----------------------
Ref_counter.control_bits_ref =0b00 ;
Ref_counter.reference_counter = R ;
Ref_counter.anti_backlash_width =0b00 ;
Ref_counter.test_mode_bits =0b00 ;
Ref_counter.lock_detect_precision =0b0 ;
Ref_counter.SYSN =0b1 ;
Ref_counter.DLY =0b0 ;
Ref_counter.reserved =0b0 ;
//config A_B_counter------------------------
AB_counter.control_bits_AB =0b01 ;
AB_counter.CP_gain =0b0 ;
AB_counter.reserved =0b00 ;
}
Вне форума
А что это за Фм передатчики такие на том сайте?
Это то самое устройство, реклама которого каждый день падает мне на почту и позволяет в общественном транспорте слушать любимую музыку ?
Вне форума
да что у вас там? курсовые, что ли ,
Павел, отправил,
Fox ,мыла не видно и приатачить куда тоже..
ЗЫ, в почту мою что указана, редко заглядываю, так что давайте как то тут..
ЗЫ ЗЫ, и еще, исходник писался под IAR v 1.40, так что под более высокие версии его придется подправить, иначе IDE материться будет, в частности, на обработчик прерывания.
Отредактировано Vasil (27.04.2007 20:35:33)
Вне форума
[ Сгенерировано за 0.037 сек, 7 запросов выполнено - Использовано памяти: 626.1 Кбайт (Пик: 676.47 Кбайт) ]