Tak jsem se asi před 4 měsíci rozhodl pro stavbu vlastního satfinderu,jelikož kvalitní profi stroje jsou drahé a já zase tolik sat antén nevěším,aby se mi to rychle zaplatilo.Zároveň jsem se chtěl vyhnout ručkovému měřidlu ,kde člověk “neví” na které družici je.Požadavkem byl LCD display se zobrazením frekvence,SNR,BER a lock.Po úporném shánění dokumentace k syntéze ve voliči BSBE1-702B jsem sae nakonec uchýlil k BSBE1-702A s TSA5059,STV0299B a LNBP21.Použil jsem za 700kč celý blok z DM7025 se kterým komunikuje PIC16F877A a PIC16F876A po i2c 400khz a 100khz.Software je momentálně ještě stále v beta verzi a ladění drobností.Zatím mám 4 fixně nastavené družice-Astra3,Astra1,Hotbird a Intelsat 1W.U každé družice jsou zatím 4 kmitočty…Uvnitř je 12V aku,nebo lze fungovat na zdroj.K designové dokonalosti to má daleko,je na tom ještě dost co zlepšit,ale tlačil mě čas,abych to už mohl používat.Zatím to beru jako vývojový vzorek,bez potisku ap.
zveřejníš k tomu něco???
Není to tajné,takže určitě.Zdrojový kód není problém,schéma musím nakreslit v nějakém programu,mám to jen na papíře.Kdyžtak dej mail.
Dávám sem jako první zdrojové kódy pro PIC16F877A a PIC16F876A zdarma,protože na tom snad může ještě někdo něco vylepšit,když bude chtít a tak to má aspoň nějaký smysl.Schéma dám snad do dvou dnů,jak jej dokreslím.
i2c.asm (60 KB)
A pro 876a
i2c876.asm (17.2 KB)
Koukám a zjištuji, že máš s I2C asi stejnej problém jako já. Když odejde něco na I2C,nebo nějak zkolabuje I2C, tak se program uBTFSCuje.
A tohle to asi určitě nevyřeší.
NECINNOST_I2C BSF STATUS,RP0
BCF STATUS,RP1 ; banka 1
ST BTFSC SSPCON2,SEN ; testuj zda není na sběrnici posílán START
GOTO ST
OPST BTFSC SSPCON2,RSEN ; testuj zda není na sběrnici posílán opakovací START
GOTO OPST
STOP BTFSC SSPCON2,PEN ; testuj zda není na sbšrnici posílán STOP
GOTO STOP
PRIJ BTFSC SSPCON2,RCEN ; testuj zda není povolen na sběrnici příjem
GOTO PRIJ
AC BTFSC SSPCON2,ACKEN ; testuj zda není odesílán ACK
GOTO AC
ZNCT BTFSC SSPSTAT,2 ; testuj zda neprobíhá zápis nebo čtení
GOTO ZNCT
BCF STATUS,RP0 ; banka 0
RETURN
A tady máš něco, aby jsi nemusel rychlost I2C počítat, tohle to spočítá samo
[code]; base frequency
XTAL_FREQ EQU 20000000 ; OSC freq in Hz
; used for I2C calculations
#define I2CClock D’400000’ ; define I2C bite rate
#define I2C_ClockValue (((XTAL_FREQ/I2CClock)/4) -1) ;
;**************************************************************************
;I2C init
;**************************************************************************
Init_I2C
; setup MSSP adress register
MOVLW SSPADD ; get adress for synch serial port status reg
MOVWF FSR ; setup fsr
MOVLW I2C_ClockValue ; setup clock rate
MOVWF INDF ; and store it
; setup MSSP status reg
MOVLW SSPSTAT ; get adress for synch serial port status reg
MOVWF FSR ; setup fsr
MOVLW (1<<SMP) ; enable slowrate control
MOVWF INDF ; and store it
; setup MSSP control reg
MOVLW SSPCON ; get adress for synch serial port control reg
MOVWF FSR ; setup fsr
MOVLW ((1<<SSPEN)|(0<<CKP)|(1<<SSPM3)); enable syncronous port, enable clock ,
; I2C master mode clock = OSC/(4*(SSPADD)+1)
MOVWF INDF ; and set it
; ; enable MSSP interrupt
; MOVLW PIE1 ; get adress for periphial irq’s
; MOVWF FSR ; setup fsr
; BSF INDF,SSPIE ; enable MSSP irq
; BSF INTCON,PEIE ; and periphial irq must also be enabled (if not already )
RETURN
[/code]
Máš pravdu v tom,že tu není pořešena kolize na I2C.Ale není problém tam doplnit kousek kódu,který při jakémkoliv problému či scházející odpovědi zasignalizuje CHYBU I2C a buď to spraví reset nebo příp.výměna nějakého švábu.Jinak jsem s tím ale zatím problém neměl.
Jak budu mít chvíli času,můžu to ještě vylepšit o tyto extrémní případy.
Pokud máš na sběrnici I2C jedno zařízení, není většinou problém, ale pokud máš 2 a víc, a jedna z nich se “zasekne”, tak se blbě zjištuje, které to je, pokud nemáš možnost to nebo ono I2C zařízení vypnout.