program UniPLL_SP5055_mit_Schaltern '**************************************************************** ' UNI-PLL mit Schaltern für Pic16F628 * ' * ' -- Version V2 24.09.2010 * ' - An Pin 15 + Anlegen dann ist TX-Betrieb, bei 0V RX-Betrieb * ' also 479.500MHz höher * ' -- Version V1a 07.02.2009 * ' - 8 Dip-Schalter für 1MHz Schrittweite von 2300 bis 2450 MHz * ' - wenn ORTA.4 = 1 dann von 1200 bis 1350 MHz * '**************************************************************** '**************************************************************** ' Ein und Ausgänge * ' I²C-Leitungen * '**************************************************************** ' Tasten ' PortB mit Dip-Schaltern ' I²C-Leitungen dim Soft_I2C_Scl as sbit at RA2_bit ' SCL an RA2 (pin 1) dim Soft_I2C_Sda as sbit at RA3_bit ' SDA an RA3 (pin 2) dim Soft_I2C_Scl_Direction as sbit at TRISA2_bit dim Soft_I2C_Sda_Direction as sbit at TRISA3_bit '**************************************************************** ' Variable * '**************************************************************** Dim Temp_alt as BYTE Dim Temp as WORD Dim PLL as WORD Dim LO_PLL as BYTE Dim HI_PLL as BYTE Dim PLL_Start as WORD Dim RX_ as WORD Dim fehler as BYTE '**************************************************************** ' Konstanten * '**************************************************************** const Start13 = 18400 ' 18400 = 2300MHz const Start23 = 9600 ' 9600 = 1200MHz const ADDR1 = %11000010 '$C2 ' immer gültige I2C-Adresse SDA5055 '**************************************************************** ' Initialisierung * '**************************************************************** sub procedure Init() CMCON = 7 ' Schaltet die PortA-Pins auf I/O TRISB = %11111111 OPTION_REG = %00000000 ' PORT B auf Pullups geschaltet Soft_I2C_Init() ' Soft I2C-Bus initialisieren Delay_ms(100) ' Pause damit sich SP resetten kann end sub '**************************************************************** ' Hauptprogramm * '**************************************************************** main: Init() while TRUE Temp = PORTB If Temp <> Temp_alt then Temp_alt = Temp Temp = 8 * Temp if porta.4 = 1 then ' Umschaltung von 1200 auf 2300 MHz PLL_Start = Start23 else PLL_Start = Start13 end if if porta.6 = 1 then ' Umschaltung von TX auf RX = + 479.5 MHz RX_=0 else RX_=3836 end if PLL = PLL_Start + Temp PLL = PLL + RX_ Hi_PLL = PLL / 8 Lo_PLL = PLL Soft_I2C_START () fehler = Soft_I2C_WRITE(ADDR1) fehler = Soft_I2C_WRITE(Hi_PLL) fehler = Soft_I2C_WRITE(Lo_PLL) fehler = Soft_I2C_WRITE($CE) ' $CE damit mehr Strom zum Pulsen vorhabden ist fehler = Soft_I2C_WRITE($90) ' so ist das Rasten im gesamten Frequenzbereich Soft_I2C_STOP ' möglich end if Delay_ms( 1) wend ' für immer end.