﻿;*** Krmiljenje sintetizatorja z MAX2870 za NoviZIF 9cm - S53MV 16.06.2020 ***
;ref=32MHz,kanali=3405.000MHz,3005.000MHz,3205.000MHz,3605.000MHz,3805.000MHz

;*** Uporaba priključkov PIC12F675+WDT Vss(8) Vdd(1) ***
;GP0(7) - CMOS izhod (LE MAX2870)
;GP1(6) - CMOS izhod (DATA MAX2870)
;GP2(5) - CMOS izhod (CLK MAX2870)
;GP3(4) - CMOS vhod (MUXOUT MAX2870)
;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 MAX2870
	CALL	ADC	;AD pretvornik na vhodu AN3
	CALL	FREQ	;nastavi frekvenco (W) v registru 0 MAX2870
	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 MAX2870
	CALL	ADC	;AD pretvornik na vhodu AN3
	MOVWF	30
	CALL	FREQ	;nastavi frekvenco (W) v registru 0 MAX2870
	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 MAX2870 *** (W,20-25)
INIREG	MOVLW	1	;register5=0x01400005: F01=1,LD=01,MUX3=0
	MOVWF	20
	MOVLW	40
	MOVWF	21
	MOVLW	0
	MOVWF	22
	MOVLW	5
	MOVWF	23
	CALL	SPI
	MOVLW	2	;register4=0x0288002C: BS=0x280,FB=1,DIVA=000,BDIV=0,RFBEN=0,BPWR=0,RFAEN=1,APWR=01
	MOVWF	20
	MOVLW	88
	MOVWF	21
	MOVLW	0
	MOVWF	22
	MOVLW	2C
	MOVWF	23
	CALL	SPI
	MOVLW	0	;register3=0x00000803: VCO=000000,VASSHDN=0,RETUNE=0,CDM=00,CDIV=000100000000
	MOVWF	20
	MOVLW	0
	MOVWF	21
	MOVLW	8
	MOVWF	22
	MOVLW	3
	MOVWF	23
	CALL	SPI
	MOVLW	78	;register2=0x78007842: LDS=0,SDN=11,MUX=110,DBR=0,RDIV2=0,R=0000000001,REG4DB=1,CP=1100,LDF=0,LDP=0,PDP=1,SHDN=0,TRI=0,RST=0
	MOVWF	20
	MOVLW	0
	MOVWF	21
	MOVLW	78
	MOVWF	22
	MOVLW	42
	MOVWF	23
	CALL	SPI
	MOVLW	20	;register1=0x2000FD01: CPOC=0,CPL=01,CPT=00,P=000000000001,M=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 MAX2870 *** (W,20-25)
FREQ	MOVWF	20
	DECFSZ	20,1
	GOTO	FREQ1
	MOVLW	0	;frekvenca1=3405.000MHz=0x003532C8
	MOVWF	20
	MOVLW	35
	MOVWF	21
	MOVLW	32
	MOVWF	22
	MOVLW	0C8
	MOVWF	23
	CALL	SPI
	RETURN
FREQ1	DECFSZ	20,1
	GOTO	FREQ2
	MOVLW	0	;frekvenca2=3005.000MHz=0x002EF148
	MOVWF	20
	MOVLW	2E
	MOVWF	21
	MOVLW	0F1
	MOVWF	22
	MOVLW	48
	MOVWF	23
	CALL	SPI
	RETURN
FREQ2	DECFSZ	20,1
	GOTO	FREQ3
	MOVLW	0	;frekvenca3=3205.000MHz=0x00321388
	MOVWF	20
	MOVLW	32
	MOVWF	21
	MOVLW	13
	MOVWF	22
	MOVLW	88
	MOVWF	23
	CALL	SPI
	RETURN
FREQ3	DECFSZ	20,1
	GOTO	FREQ4
	MOVLW	0	;frekvenca4=3605.000MHz=0x00385208
	MOVWF	20
	MOVLW	38
	MOVWF	21
	MOVLW	52
	MOVWF	22
	MOVLW	8
	MOVWF	23
	CALL	SPI
	RETURN
FREQ4	MOVLW	0	;frekvenca5=3805.000MHz=0x003B7148
	MOVWF	20
	MOVLW	3B
	MOVWF	21
	MOVLW	71
	MOVWF	22
	MOVLW	48
	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	;MAX2870 DATA=0 (GP1)
	BSF	5,0	;impulz LE MAX2870 (GP0)
	NOP
	BCF	5,0
	RETURN
SPI1	MOVWF	24	;pomikalni register 24
	MOVLW	8	;stevec bitov 25
	MOVWF	25
SPI2	BCF	5,1	;MAX2870 DATA=0 (GP1)
	BTFSC	24,7
	BSF	5,1	;MAX2870 DATA=1 (GP1)
	RLF	24,1	;zasukaj pomikalni register
	BSF	5,2	;impulz MAX2870 (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 ***
