'furanje SL1935 (Digi SAT-TV tuner sint) na I2C bus preko lpt porta 'd0 (pin 2) = scl d1 (pin 3) = sda s transistorskima inverterjema 'error (pin 15) = vhod 'preizkusena verzija by s57uuu aug 2004 DIM bb(4) cddd% = &HFF: cddg% = &HFD: cgdd% = &HFE: cgdg% = &HC OUT &H378, cgdg% 'bus idle adr = 1 '0=gnd,1=open,2=30k na + (0.4-0.6V),3=+ cp = 0 '0..3 charge pump current 155,330,690,1450uA bp = 0 '0..1 base band path buf = 0 '0..1 Buffered crystal reference output enable tm = 0 '0..7 Test mode select 0=normal operation rr = 1 '0..31 reference divider !!po tabeli!! 1= /4 (1MHz 4MHz xtal) vco = 0 '0..1 VCO select 0=1400-2200 1=950-1500 p0 = 0 '0..1 izhod noga 34 bb%(0) = 192 + 2 * adr 'adr+write bb%(1) = &H3 'N=1000 (1GHz za 1MHz ref) bb%(2) = &HE8 bb%(3) = 128 + cp * 32 + rr bb%(4) = tm * 32 + vco * 16 + bp * 8 + buf * 2 + p0 xtal = 4000000! fref = xtal \ 4 zac: CLS PRINT : PRINT : PRINT : PRINT PRINT "MENU:": PRINT PRINT "1 - nastavljanje frekvence" PRINT "4 - testiranje dinamike zanke (skakanje med dvema f)" PRINT "5 - konec" menu: INPUT men% SELECT CASE men% CASE 1: GOTO zanka1 CASE 4: GOTO zanka4 CASE 5: SYSTEM CASE ELSE: GOTO menu END SELECT 'zanka1: nastavljanje frekvence z glavnim delilcem zanka1: INPUT "daj frekvenco v MHz! (0=konec)"; f IF f = 0 THEN GOTO zac n% = f * 1000000! / fref bb%(1) = n% \ 256 bb%(2) = n% MOD 256 'PRINT bb%(1), bb%(2) IF f < 1400 THEN 'izbira VCOja bb%(4) = bb%(4) OR 16 ELSE bb%(4) = bb%(4) AND 239 END IF GOSUB prog3302 SLEEP 1 GOSUB beri1935 GOTO zanka1 zanka4: INPUT "daj f1 in f2 (0,0=konec)"; f1, f2 zan4: IF f1 = 0 THEN GOTO zac n% = f1 * 1000000! / fref bb%(1) = n% \ 256 bb%(2) = n% MOD 256 GOSUB prog3302 FOR caki = 1 TO 10000: NEXT caki IF f2 = 0 THEN GOTO zac n% = f2 * 1000000! / fref bb%(1) = n% \ 256 bb%(2) = n% MOD 256 GOSUB prog3302 FOR caki = 1 TO 10000: NEXT caki IF INKEY$ = "" THEN GOTO zan4 GOTO zanka4 '----------------------------------------- prog3302: OUT &H378, cgdd%: GOSUB delay 'start OUT &H378, cddd%: GOSUB delay FOR i% = 0 TO 4 byt% = bb%(i%) bitw% = 128 FOR j% = 7 TO 0 STEP -1 IF byt% >= bitw% THEN 'bit = 1 byt% = byt% - bitw% OUT &H378, cddg%: GOSUB delay OUT &H378, cgdg%: GOSUB delay OUT &H378, cddg%: GOSUB delay ELSE 'bit = 0 OUT &H378, cddd%: GOSUB delay OUT &H378, cgdd%: GOSUB delay OUT &H378, cddd%: GOSUB delay END IF bitw% = bitw% \ 2 NEXT j% OUT &H378, cddg%: GOSUB delay 'ACK OUT &H378, cgdg%: GOSUB delay ack(i%) = (INP(&H379) AND 8) / 8 OUT &H378, cddg%: GOSUB delay NEXT i% OUT &H378, cgdd%: GOSUB delay OUT &H378, cgdg%: GOSUB delay 'idle 'FOR i% = 0 TO 4: PRINT "ACK("; i%; ")="; ack(i%): NEXT i% FOR i% = 0 TO 4: IF ack(i%) = 1 THEN PRINT "Prog3302 no ACK"; i% NEXT i% RETURN beri1935: OUT &H378, cgdd%: GOSUB delay 'start OUT &H378, cddd%: GOSUB delay byt% = 192 + 2 * adr + 1 'address + read bitw% = 128 FOR j% = 7 TO 0 STEP -1 IF byt% >= bitw% THEN 'bit = 1 byt% = byt% - bitw% OUT &H378, cddg%: GOSUB delay OUT &H378, cgdg%: GOSUB delay OUT &H378, cddg%: GOSUB delay ELSE 'bit = 0 OUT &H378, cddd%: GOSUB delay OUT &H378, cgdd%: GOSUB delay OUT &H378, cddd%: GOSUB delay END IF bitw% = bitw% \ 2 NEXT j% OUT &H378, cddg%: GOSUB delay 'ACK OUT &H378, cgdg%: GOSUB delay ackn = (INP(&H379) AND 8) / 8 OUT &H378, cddg%: GOSUB delay IF ackn = 1 THEN PRINT "Beri1935-1: no ACK!!" stat% = 0 FOR j% = 7 TO 0 STEP -1 OUT &H378, cddg%: GOSUB delay OUT &H378, cgdg%: GOSUB delay stat% = stat% + ((INP(&H379) AND 8) / 8) * 2 ^ j% OUT &H378, cddg%: GOSUB delay NEXT j% OUT &H378, cddg%: GOSUB delay 'ACK OUT &H378, cgdg%: GOSUB delay ackn = (INP(&H379) AND 8) / 8 OUT &H378, cddg%: GOSUB delay 'IF ackn = 1 THEN PRINT "Beri1935-2: no ACK!!" OUT &H378, cddd%: GOSUB delay OUT &H378, cgdd%: GOSUB delay OUT &H378, cgdg%: GOSUB delay 'idle PRINT "Status: "; IF (stat% AND 128) = 128 THEN PRINT "POR=1 "; ELSE PRINT "POR=0 "; '!!!!! IF (stat% AND 64) = 64 THEN PRINT "LOCK=1" ELSE PRINT "LOCK=0" '!!!!! RETURN 'Beri1935 delay: FOR mi = 1 TO 10: NEXT RETURN