'Programme en PicBasic pour programmer le tuner Philips SF1216 'avec affichage de la fréquence sur un LCD en mode 4-bit. 'Fmin =1200 MHz, F max= 1300 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 'PIC 16F628 oscillateur interne ' *** version 2.0 *** 'Ajout led pll locked sur pin 16 ' version 2.1 'initialisation des variable boutons ' version 2.2 ' gestion de P0, envoi d'un octet supplémentaire ' *** Copyright - F6CSX - juillet/octobre 2009 *** ' cablage LCD ' ' 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 CMCON=7 ' mets le 16F628 en mode digital sur le PORT A 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 2 '2 lignes ' ** DÉFINITION DES ENTREES - SORTIES ' Sorties I2C & led PLL locked SCL var PORTB.1 ' SCL sur RB1 (pin 7) SDA var PORTB.0 ' SDA sur RB0 (pin 6) led var PORTA.7 'la LED est tirée au +5V via 330 ohms '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 BP var PORTB.2 'choix de la bande passante 27/32 MHz INPUT UP INPUT DOWN INPUT MEMO INPUT CH_PAS INPUT SEL INPUT BP OUTPUT led ' ** DÉCLARATION DES VARIABLES b1 var BYTE b2 var BYTE b3 var BYTE b5 var BYTE b6 var BYTE b7 var BYTE b8 var BYTE b9 var BYTE F1 var WORD F2 var WORD F3 var WORD W1 var BYTE 'pointeur d'adresse EEPROM W2 var WORD 'variable d'affichage A ou B pour le VFO W3 var WORD ' valeur de la bande passante ADDR1 VAR BYTE 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 P0 VAR BYTE ' 1= 27 MHz 0=32MHz status_PLL var BYTE 'la LED s'allume quand la PLL est verrouillée '*** DONNEES INITIALES *** SCL=1 SDA=1 ADDR1=$C2 'adresse I2C du SDA5055 PLLBASE=8000 'début à 1000 MHz : 1000 / 0,125 = 8000 PAS = 1 ' pas de 0.125 MHZ par défaut ' *** Initialisation *** led=1 B1=0 b2=0 B3=0 b5=0 B6=0 b7=0 B8=0 b9=0 PAUSE 100 LCDOUT $FE, 1 ' Clear LCD screen LCDOUT " SF1216 v2.2" ' affiche numéro de version pendant 1 seconde LCDOUT $FE, $C0 LCDOUT " by F6CSX" IF SEL=0 THEN W1= 0 W2="A" ENDIF IF SEL=1 THEN W1= 2 W2="B" ENDIF IF BP=0 THEN P0=$00 W3= 32 ENDIF IF BP=1 THEN P0=$01 W3= 27 ENDIF PAUSE 1000 EEPROM 0,[$80,$07,$E0,$08] 'données initiales: TMP = 1920 ($0780) correspond à F = 1240 MHz 'TMP = 2272 ($8E0) correspond à F= 1284 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 Pause 50 I2CWRITE SDA,SCL,ADDR1,[HI,LO,$8E,P0] 'Envoi des données au module Pause 50 GOSUB CALCUL 'calcule la fréquence pour l'affichage GOSUB AFFICHAGE 'affiche la fréquence I2CREAD SDA,SCL,ADDR1,[status_pll] IF status_PLL.6 = 1 THEN led=0 'on allume la LED ELSE LED=1 'la LED reste éteinte ENDIF 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 BUTTON BP,0,255,0,b8,1,BANDE_PASS 'surveille le bouton BP: 0=32 MHz BUTTON BP,1,255,0,b9,1,BANDE_PASS ' 1= 27 MHz 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 > 2400 THEN TMP = 1600 'Fmax = 1300 MHz GOTO MAIN DESCEND: '** DIMINUE LA FREQUENCE DE 1 PAS IF TMP