I want to start post about code for PIC uP (16F877) which would send data via I2C bus for programming TSA5511/5512 PLL IC, and frequency reading on LCD, and it will be suitable for 87 - 108MHz range, or even more, but that's lower part of problem. ;-)
So far now we have code which "Savnik" gave us....and is for same TSA PLL, but on range 1200 - 1600MHz and it has frequency step of 125KHz (0,125MHz), so here's the code:
Code:'Fmin =1200 MHz, F max= 1650 MHz ' ** DECLARATION OF THE VARIABLES b1 var BYTE b2 var BYTE b3 var BYTE b5 var BYTE F1 var WORD F2 var WORD F3 var WORD ADDR1 VAR BYTE TMP VAR WORD TMP_LO VAR TMP.LOWBYTE TMP_HI VAR TMP.HIGHBYTE PLLBASE VAR WORD PLL VAR WORD LO VAR PLL.LOWBYTE HI VAR PLL.HIGHBYTE PAS VAR BYTE '1=125kHz, 2=250kHz, 4=500kHz, 8=1MHz '*** INITIAL DATA *** ADDR1=$C2 'adress I2C of SDA5055 (ADDR1=$C0 , adress I2C of TSA5511) PLLBASE=9600 'beginning with 1200 MHz : 1200 / 0,125 = 9600 PAS = 1 'pas of 0.125 MHZ by defect PAUSE 100 LCDOUT $FE, 1 ' Clear LCD screen LCDOUT " PLL FM 88-108" ' post text during 1 second LCDOUT $FE,$C0 LCDOUT " NIKOS" PAUSE 1000 EEPROM 0,[$90,$01] 'initial data TMP = 400 ($190) corresponds to F = 1250 MHz 'The starting point is 1200 MHz given by PLLBASE. One adds a shift of 125kHz * TMP 'TMP is on 16 bits, therefore 65535 possible frequencies. ' '*** READING OF THE DECALAGE TMP *** READ 0,TMP_LO 'reads the 8 bits of weak weight READ 1,TMP_HI 'reads the 8 bits of strong weight ' *** BEGINNING OF THE PROGRAM*** MAIN: PLL = PLLBASE + TMP I2CWRITE SDA,SCL,ADDR1,[HI,LO,$8E] 'Sending of the data to the module GOSUB CALCUL 'calculate the frequency for posting GOSUB AFFICHAGE 'post the frequency PAUSE 500 '*** PRINCIPAL LOOP *** BOUCLE: BUTTON UP,1,10,2,b1,1,MONTE 'supervise the button UP BUTTON DOWN,1,10,2,b2,1,DESCEND 'supervise the button DOWN BUTTON MEMO,1,255,0,b5,1,STORE 'supervise the button MEMO BUTTON CH_PAS,1,255,0,b3,1, CHOIX 'supervise the button PAS PAUSE 100 'pauses of 0.1s GOTO BOUCLE MONTE: '** INCREASE THE FREQUENCY OF 1 PAS (STEP) TMP = TMP + PAS IF TMP > 3600 THEN TMP = 0 'Fmax = 1600 MHz GOTO MAIN DESCEND: '** DECREASE THE FREQUENCY OF 1 PAS (STEP) IF TMP IF TMP = 0 THEN TOP TMP = TMP - PAS GOTO MAIN TOP: TMP=3600 GOTO MAIN RAZ_TMP: TMP = 0 GOTO MAIN CHOIX: '** CHOICE OF THE PAS (STEP) IF PAS = 8 THEN SAUTE PAS = PAS*2 GOSUB AFFICHE_PAS GOSUB AFFICHAGE 'post the frequency GOTO BOUCLE SAUTE: PAS = 1 GOSUB AFFICHE_PAS GOTO BOUCLE CALCUL: ' ** CALCULATION OF THE FREQUENCY F1= PLL-800 'cut off 1GHz F2=F1/8 'give them MHz F3=125*(F1//8) 'give them kHz RETURN AFFICHAGE: LCDOUT $FE, 1 'Clear LCD screen LCDOUT #1 'post the 1 of Giga LCDOUT #F2 'post the other digits LCDOUT "." 'post the comma LCDOUT #F3 'post the Khz LCDOUT " MHz "
So, this code which changed by "Jerson" and myself...is suitable to work on 87 - 108MHz....but problem is it has step of 125KHz (0,125MHZ) and we need to get frequency step of 100KHz, or even 50KHz..
To do that we must change TSA PLL XTAL to 3,2MHz and get 50KHz step, refer to datasheet, or by mine calculation maybee 6,4MHz XTAL will do good for 100KHz step??
Also mine question here is, does PIC XTAL effect on TSA XTAL??
So here's changed code for 87 - 108MHz with 0,125MHz steps:
So I searching for anyone's help to change this to get steps of 100KHz (0,1MHz) and may it work in wider range, not only in 87 - 108MHz.....Code:DEFINE LCD_DREG PORTD DEFINE LCD_DBIT 4 DEFINE LCD_RSREG PORTD DEFINE LCD_RSBIT 1 DEFINE LCD_EREG PORTD DEFINE LCD_EBIT 0 DEFINE LCD_BITS 4 DEFINE LCD_LINES 2 DEFINE LCD_COMMANDUS 2000 DEFINE LCD_DATAUS 50 DEFINE I2C_SCLOUT 1 'Set serial clock to bipolar instead of open-collector ' definition I2C communication SCL var PORTB.1 ' SCL on RB1 SDA var PORTB.0 ' SDA on RB0 'press: MEMO var PORTB.3 ' UP var PORTB.4 ' press for FREQ UP RB.4 DOWN var PORTB.5 ' press for FREQ DOWN RB.5 INPUT UP 'Up et Down sont des entrées INPUT DOWN INPUT MEMO 'Fmin =88 MHz, F max= 108 MHz ' ** DECLARATION OF THE VARIABLES b1 var BYTE b2 var BYTE b3 var BYTE b5 var BYTE F1 var WORD F2 var WORD F3 var WORD ADDR1 VAR BYTE TMP VAR WORD TMP_LO VAR TMP.LOWBYTE TMP_HI VAR TMP.HIGHBYTE PLLBASE VAR WORD PLL VAR WORD LO VAR PLL.LOWBYTE HI VAR PLL.HIGHBYTE PAS VAR BYTE '1=125kHz, 2=250kHz, 4=500kHz, 8=1MHz '*** INITIAL DATA *** ADDR1=$C2 'adress I2C of SDA5055 (ADDR1=$C0 , adress I2C of TSA5511) PLLBASE=696 'beginning with 87 MHz : 87 / 0,125 = 696 PAS = 1 'step of 0.125 MHZ by default ????? PAUSE 100 LCDOUT $FE, 1 ' Clear LCD screen LCDOUT " PLL FM 88-108" ' post text during 1 second LCDOUT $FE,$C0 LCDOUT " BT-20" PAUSE 1000 EEPROM 0,[$90,$01] 'initial data TMP = PLLBASE corresponds to F = 88 MHz 'The starting point is 88 MHz given by PLLBASE. One adds a shift of 125kHz * TMP 'TMP is on 16 bits, therefore 65535 possible frequencies. ' '*** READING OF THE DECALAGE TMP *** READ 0,TMP_LO 'reads the 8 bits of weak weight READ 1,TMP_HI 'reads the 8 bits of strong weight ' *** BEGINNING OF THE PROGRAM*** MAIN: PLL = PLLBASE + TMP I2CWRITE SDA,SCL,ADDR1,[HI,LO,$8E] 'Sending of the data to the module GOSUB CALCUL 'calculate the frequency for posting GOSUB AFFICHAGE 'post the frequency PAUSE 500 '*** press routine *** BOUCLE: BUTTON UP,0,10,2,b1,1,MONTE 'supervise the button UP BUTTON DOWN,0,10,2,b2,1,DESCEND 'supervise the button DOWN BUTTON MEMO,0,255,0,b5,1,STORE 'supervise the button MEMO ' only step size of 125KHz is handled ' BUTTON CH_PAS,1,255,0,b3,1, CHOIX 'supervise the button PAS PAUSE 100 'pauses of 0.1s GOTO BOUCLE MONTE: '** INCREASE THE FREQUENCY OF 1 PAS (STEP) TMP = TMP + PAS IF TMP > 168 THEN TMP = 0 'Fmax = 108 MHz ---> (Fmax - Fmin) / 0,125 -> (108-87)/0,125 = 168 GOTO MAIN DESCEND: '** DECREASE THE FREQUENCY OF 1 PAS (STEP) IF TMP = 0 THEN TOP TMP = TMP - PAS GOTO MAIN TOP: TMP=168 ' max reading in Tmp GOTO MAIN GOSUB AFFICHAGE 'post the frequency GOTO BOUCLE GOTO BOUCLE CALCUL: ' ** CALCULATION OF THE FREQUENCY F1 = PLL 'cut off 1GHz F2 = F1/8 'give them MHz F3 = 125*(F1//8) RETURN AFFICHAGE: LCDOUT $FE, 1 'Clear LCD screen LCDOUT #F2 'post the other digits LCDOUT "." 'post the comma LCDOUT #F3 'post the Khz LCDOUT " MHz " STORE: WRITE 0, TMP_LO WRITE 1, TMP_HI GOTO BOUCLE
Regards,
Marin




Bookmarks