﻿;*** Krmiljenje sintetizatorja z ADF4351 za NoviZIF 13cm - S53MV 16.06.2020 ***
;ref=32MHz,kanali=2360.000MHz,2312.000MHz,2340.000MHz,2400.000MHz,2440.000MHz

;*** Uporaba priključkov PIC12F675+WDT Vss(8) Vdd(1) ***
;GP0(7) - CMOS izhod (LE ADF4351)
;GP1(6) - CMOS izhod (DATA ADF4351)
;GP2(5) - CMOS izhod (CLK ADF4351)
;GP3(4) - CMOS vhod (MUXOUT ADF4351)
;GP4(3) - analogni vhod AN3 (izbira frekvence z upori)
;GP5(2) - CMOS izhod (TEST)
;20,21,22,23,24,25 - splosno racunanje
;30 - stari kanal (0FF neveljaven)
;33 - migaj TEST
;35 - zastavica WDT
;38,39 - casovnik KUZA

;*** Izbira procesorja in zacetek programa ***
	LIST	P=12F675
	ORG	0

;*** Zacetek ob RESETu *** (W,20-25,30,35,38,39,85,9F)
	MOVLW	0	;brisi vse izhode GPIO
	MOVWF	5
	BSF	3,5	;RP0=1 nastavim banko 1 za dostop do nastavitev
	MOVLW	18	;TRISIO(85) vhoda GP4,3, izhodi GP5,2,1,0
	MOVWF	5
	MOVLW	68	;ANSEL(9F)=01101000 Fosc/64=110, analogni vhod AN3=1000
	MOVWF	1F
	BCF	3,5	;RP0=0 vrnem banko 0
	MOVLW	0D	;ADCON0(1F) ADFM=0,VCFG=0,CHS=11,GO/DONE=0,ADON=1 vklop AD in izbira vhoda
	MOVWF	1F
	MOVLW	0FF	;neveljaven kanal (30)
	MOVWF	30
	MOVLW	0FF	;postavi zastavico WDT (35)
	MOVWF	35
	CLRF	38	;zacetna stevca (38,39) perioda 0F=15 minut
	MOVLW	0F
	MOVWF	39
	CALL	INIREG	;nastavi registre 5,4,3,2,1 ADF4351
	CALL	ADC	;AD pretvornik na vhodu AN3
	CALL	FREQ	;nastavi frekvenco (W) v registru 0 ADF4351
	GOTO	ZANKA

;*** Kuza obnavlja nastavitve *** (W,35,38,39)
KUZA	DECFSZ	38,1	;stevec kuza (38) (priblizno minuta)
	RETURN
	DECFSZ	39,1	;stevec kuza (39) (stevilo minut)
	RETURN
	CLRF	35	;brisi zastavico WDT (35)
	RETURN

;*** Glavna zanka programa *** (+33)
ZANKA	BTFSC	35,7	;brisi hardverski WDT?
	CLRWDT
	CALL	KUZA	;kuza obnavlja nastavitve
	CALL	KASNI	;zakasnitev 65536 NOP
	CALL	UNLOCK	;preveri uklenitev zanke
	CALL	ADC	;AD pretvornik na vhodu AN3
	SUBWF	30,0	;spremenjen kanal?
	BTFSC	3,2
	GOTO	ZANKA
	CALL	INIREG	;nastavi registre 5,4,3,2,1 ADF4351
	CALL	ADC	;AD pretvornik na vhodu AN3
	MOVWF	30
	CALL	FREQ	;nastavi frekvenco (W) v registru 0 ADF4351
	INCF	33,1	;migaj izhod GP5=TEST
	BCF	5,5
	BTFSC	33,0
	BSF	5,5
	GOTO	ZANKA

;*** Preveri uklenitev zanke *** (W,30)
UNLOCK	BTFSC	5,3
	RETURN
	MOVLW	0FF	;neveljaven kanal (30)
	MOVWF	30
	RETURN

;*** AD pretvornik na vhodu AN3 *** (W,20)
ADC	MOVLW	0F	;ADCON0(1F) ADFM=0,VCFG=0,CHS=11,GO/DONE=1,ADON=1
	MOVWF	1F
ADC1	BTFSC	1F,1	;konec pretvorbe GO/DONE=?
	GOTO	ADC1
	MOVF	1E,0	;ADRESH(1E)
	MOVWF	20
	RRF	20,1	;izlusci gornje 3 bite (20)
	RRF	20,1
	RRF	20,1
	RRF	20,1
	RRF	20,1
	MOVLW	7
	XORWF	20,1
	ANDWF	20,1
	INCF	20,1	;pretvori v kanal 1-5 (W)
	RRF	20,1
	INCF	20,1
	ANDWF	20,0
	RETURN

;*** Nastavi registre 5,4,3,2,1 ADF4351 *** (W,20-25)
INIREG	MOVLW	0	;register5=0x00580005: LD=01
	MOVWF	20
	MOVLW	58
	MOVWF	21
	MOVLW	0
	MOVWF	22
	MOVLW	5
	MOVWF	23
	CALL	SPI
	MOVLW	0	;register4=0x008FE424: FB=1,RFD=000,BSCD=254=0xFE,VPD=0,MTLD=1,AOS=0,AOE=0,AOP=00,ROE=1,OP=00
	MOVWF	20
	MOVLW	8F
	MOVWF	21
	MOVLW	0E4
	MOVWF	22
	MOVLW	24
	MOVWF	23
	CALL	SPI	
	MOVLW	0	;register3=0x00800003: BSCM=1,ABP=0,CC=0,CSR=0,CDM=00,CDV=000000000000
	MOVWF	20
	MOVLW	80
	MOVWF	21
	MOVLW	0
	MOVWF	22
	MOVLW	3
	MOVWF	23
	CALL	SPI	
	MOVLW	78	;register2=0x78006642: NM=11,MUXOUT=110,RD=0,RDIV2=0,R=0000000001,DB=1,CPCS=0011,LDF=0,LDP=0,PDP=1,PD=0,CPTS=0,CR=0
	MOVWF	20
	MOVLW	0
	MOVWF	21
	MOVLW	66
	MOVWF	22
	MOVLW	42
	MOVWF	23
	CALL	SPI	
	MOVLW	0	;register1=0x0000FD01: PA=0,PR=0,PV=000000000001,MOD=4000=0xFA0=111110100000
	MOVWF	20
	MOVLW	0
	MOVWF	21
	MOVLW	0FD
	MOVWF	22
	MOVLW	1
	MOVWF	23
	CALL	SPI
	RETURN

;*** Nastavi frekvenco kanala 0-4 (W) v registru 0 ADF4351 *** (W,20-25)
FREQ	MOVWF	20
	DECFSZ	20,1
	GOTO	FREQ1
	MOVLW	0	;frekvenca1=2360.000MHz=0x0024DDC0
	MOVWF	20
	MOVLW	24
	MOVWF	21
	MOVLW	0DD
	MOVWF	22
	MOVLW	0C0
	MOVWF	23
	CALL	SPI
	RETURN
FREQ1	DECFSZ	20,1
	GOTO	FREQ2
	MOVLW	0	;frekvenca2=2312.000MHz=0x00241F40
	MOVWF	20
	MOVLW	24
	MOVWF	21
	MOVLW	1F
	MOVWF	22
	MOVLW	40
	MOVWF	23
	CALL	SPI
	RETURN
FREQ2	DECFSZ	20,1
	GOTO	FREQ3
	MOVLW	0	;frekvenca3=2340.000MHz=0x00248FA0
	MOVWF	20
	MOVLW	24
	MOVWF	21
	MOVLW	8F
	MOVWF	22
	MOVLW	0A0
	MOVWF	23
	CALL	SPI
	RETURN
FREQ3	DECFSZ	20,1
	GOTO	FREQ4
	MOVLW	0	;frekvenca4=2400.000MHz=0x00258000
	MOVWF	20
	MOVLW	25
	MOVWF	21
	MOVLW	80
	MOVWF	22
	MOVLW	0
	MOVWF	23
	CALL	SPI
	RETURN
FREQ4	MOVLW	0	;frekvenca5=2440.000MHz=0x00261F40
	MOVWF	20
	MOVLW	26
	MOVWF	21
	MOVLW	1F
	MOVWF	22
	MOVLW	40
	MOVWF	23
	CALL	SPI
	RETURN

;*** Zakasnitev 65536 NOP *** (W,20,21)
KASNI	MOVLW	0
	MOVWF	20
	MOVWF	21
KASNI1	NOP
	DECFSZ	20,1
	GOTO	KASNI1
	DECFSZ	21,1
	GOTO	KASNI1
	RETURN

;*** Oddaja 32 bitov iz 20,21,22,23 na SPI *** (W,24,25)
SPI	MOVF	20,0	;prvih 8 bitov
	CALL	SPI1
	MOVF	21,0	;drugih 8 bitov
	CALL	SPI1
	MOVF	22,0	;tretjih 8 bitov
	CALL	SPI1
	MOVF	23,0	;zadnjih 8 bitov
	CALL	SPI1
	BCF	5,1	;ADF4351 DATA=0 (GP1)
	BSF	5,0	;impulz LE ADF4351 (GP0)
	NOP
	BCF	5,0
	RETURN
SPI1	MOVWF	24	;pomikalni register 24
	MOVLW	8	;stevec bitov 25
	MOVWF	25
SPI2	BCF	5,1	;ADF4351 DATA=0 (GP1)
	BTFSC	24,7
	BSF	5,1	;ADF4351 DATA=1 (GP1)
	RLF	24,1	;zasukaj pomikalni register
	BSF	5,2	;impulz CLK ADF4351 (GP2)
	NOP
	BCF	5,2
	DECFSZ	25,1
	GOTO	SPI2
	RETURN

;*** Nastavi konfiguracijo PICa 12F675 *** (BOR,PWRTEN,WDT)
	ORG	2007	;naslov konfiguracijske besede
	DW	21CC	;BG1BG0=10,000,/CPD=1,/CP=1,BODEN=1,MCLRE=0,/PWRTEN=0,WDTE=1,OSC=100

	END
;*** Konec programa ***
