'Programme en PicBasic pour programmer les tuner sat I2C à base de TSA5512 'avec affichage de la fréquence sur un LCD en mode 4-bit. ' ** PIC16F84 ** 'Fmin =1000 MHz, F max= 1750 MHz 'Sélection du pas 125, 250, 500, 1000 kHz 'Mémorisation de la fréquence par bouton poussoir 'Fréquence Intermédiaire 479.5 MHz OL supradyne 'Deux fréquences mémorisées sélectionnées par pin 2 du PIC 'Affichage du zéro entre 1000 et 1100 MHz ' *** Copyright - F6CSX - novembre 2002 *** ' LCD PIC ' ------ -------- ' DB4 PortB.4 ' DB5 PortB.5 ' DB6 PortB.6 ' DB7 PortB.7 ' RS PortB.1 ' E PortB.3 ' RW PortB.2 ' Vdd 5 volts ' Vss Ground ' Vo potentiometre de 10K ' ' ** DÉCLARATION DE LA CONFIGURATION HARD DEFINE LCD_DREG PORTB 'Selection du port B DEFINE LCD_DBIT 4 'Selection de RB4 à RB7 DEFINE LCD_RSREG PORTB 'RS sur port B DEFINE LCD_RSBIT 1 'RS sur RB1 DEFINE LCD_EREG PORTB DEFINE LCD_EBIT 3 'E sur RB3 DEFINE LCD_BITS 4 'Mode 4 bits DEFINE LCD_LINES 1 '1 ligne DEFINE I2C_SCLOUT 1 ' ** DÉFINITION DES ENTREES - SORTIES ' Sorties I2C SCL var PORTB.1 ' SCL sur RB1 (pin 7) SDA var PORTB.0 ' SDA sur RB0 (pin 6) 'Boutons MEMO var PORTA.2 ' Bouton de mémorisation sur RA2 (pin 1) UP var PORTA.0 'augmente la fréquence (sur RA0) DOWN var PORTA.1 'diminue la fréquence (sur RA1) CH_PAS var PORTA.4 'Change le pas du synthé (sur RA4) SEL var PORTA.3 'Choix VFO A ou B INPUT UP 'Up et Down sont des entrées INPUT DOWN INPUT MEMO INPUT CH_PAS INPUT SEL ' ** DÉCLARATION DES VARIABLES b1 var BYTE b2 var BYTE b3 var BYTE b5 var BYTE b6 var BYTE b7 var BYTE F1 var WORD F2 var WORD F3 var WORD W1 var BYTE W2 var WORD ADDR1 VAR BYTE 'adresse I2C TMP VAR WORD TMP_LO VAR TMP.LOWBYTE TMP_HI VAR TMP.HIGHBYTE PLLBASE VAR WORD PLL VAR WORD RXPLL VAR WORD LO VAR RXPLL.LOWBYTE HI VAR RXPLL.HIGHBYTE PAS VAR BYTE '1=125kHz, 2=250kHz, 4=500kHz, 8=1MHz '*** DONNEES INITIALES *** ADDR1=%11000010 'adresse I2C du TDA5512 PLLBASE=8000 'début à 1000 MHz : 1000 / 0,125 = 8000 PAS = 1 ' pas de 125 kHz par défaut PAUSE 100 LOW PORTB.2 'Met RB2 = R/W à 0 (inutile sur nouvelle platine) LCDOUT $FE, 1 ' Clear LCD screen LCDOUT "RX 1.2GHz v3.0" ' affiche numéro de version pendant 1 seconde W1 = 0 PAUSE 1000 EEPROM 0,[$D0,$07,$F0,$08] 'données initiales TMP = 2000 ($7D0) correspond à F = 1250 MHz ' TMP = 2288 ($8F0) correspond à F= 1286 MHz ' Le point de départ est 1000 MHz donné par PLLBASE. On rajoute un décalage de 125kHz * TMP 'TMP est sur 16 bits, donc 65535 fréquences possibles. ' '*** LECTURE DU DECALAGE TMP *** LECTURE: READ W1,TMP_LO 'lit les 8 bits de poids faible READ W1+1,TMP_HI 'lit les 8 bits de poids fort ' *** DÉBUT DU PROGRAMME *** MAIN: PLL = PLLBASE + TMP RXPLL=PLL +3836 'on aditionne la valeur de la FI 479.500 MHZ I2CWRITE SDA,SCL,ADDR1,[HI,LO,$8E,$00] 'Envoi des données au module GOSUB CALCUL 'calcule la fréquence pour l'affichage GOSUB AFFICHAGE 'affiche la fréquence PAUSE 500 '*** BOUCLE PRINCIPALE *** BOUCLE: BUTTON SEL,0,255,0,b6,1,VFO_A 'surveille le bouton SEL: 0=VFO A BUTTON SEL,1,255,0,b7,1,VFO_B ' 1= VFO B BUTTON UP,0,10,2,b1,1,MONTE 'surveille le bouton UP BUTTON DOWN,0,10,2,b2,1,DESCEND 'surveille le bouton DOWN BUTTON MEMO,0,255,0,b5,1,STORE 'surveille le bouton MEMO BUTTON CH_PAS,0,255,0,b3,1, CHOIX 'surveille le bouton PAS PAUSE 100 'pause de 0.1s GOTO BOUCLE VFO_A: '*** CHANGE VFO *** W1=0 W2="A" GOTO LECTURE VFO_B: W1=2 W2="B" GOTO LECTURE MONTE: '** AUGMENTE LA FRÉQUENCE DE 1 PAS ** TMP = TMP + PAS IF TMP > 6000 THEN TMP = 0 'Fmax = 1750 MHz, retour à Fmin GOTO MAIN DESCEND: '** DIMINUE LA FREQUENCE DE 1 PAS ** IF TMP