TSA5512/5511 code for PIC16F877/84


Closed Thread
Results 1 to 4 of 4
  1. #1
    Join Date
    Aug 2007
    Posts
    26

    Default TSA5512/5511 code for PIC16F877/84

    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:

    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
    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.....

    Regards,

    Marin

  2. #2
    ep5ara's Avatar
    ep5ara Guest


    Did you find this post helpful? Yes | No

    Default admin

    PLLBASE=1600

    PLL = PLLBASE + TMP
    F1 = PLL 'cut off 1GHz
    F2 = F1/20 'give them MHz
    F3 = 50*(F1//20)

  3. #3
    Join Date
    Jun 2011
    Posts
    3


    Did you find this post helpful? Yes | No

    Default Re: TSA5512/5511 code for PIC16F877/84

    hola a todos los amigos del foro tengo un pic16f84a y un tsa5511 y los quiero trabajar en 88 a 108 mhz ó mas ayuda porfavor uso el microcode estudio plus
    estare atento mil gracias de este chileno

  4. #4
    Join Date
    Jun 2011
    Posts
    3


    Did you find this post helpful? Yes | No

    Default Re: TSA5512/5511 code for PIC16F877/84

    Name:  tsa5511.bmp
Views: 5343
Size:  226.4 KBthe connection will be fine? isis in this simulation in 7.7sp2

Similar Threads

  1. Reading in Manchester code
    By brid0030 in forum Code Examples
    Replies: 0
    Last Post: - 10th March 2009, 21:55
  2. How much code space do PBP statements use.
    By Darrel Taylor in forum Code Examples
    Replies: 5
    Last Post: - 13th February 2009, 21:31
  3. Loop with two motor and 2 sensors
    By MrRoboto in forum mel PIC BASIC
    Replies: 4
    Last Post: - 8th December 2008, 23:40
  4. Making Program Code Space your playground...
    By Melanie in forum Code Examples
    Replies: 15
    Last Post: - 19th July 2008, 08:26
  5. Re-Writing IF-THEN-AND-ENDIF code?
    By jessey in forum mel PIC BASIC Pro
    Replies: 6
    Last Post: - 18th August 2006, 17:23

Members who have read this thread : 1

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts