 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Jun 15, 2007 1:25 am Naslov sporočila: Hardwerski I2C 16F877 |
|
|
Delam eno aplikacijo kjer bo v rabi nekaj I2C čipovja. Uporabil bom 16F877 katerih pač imam še nekaj na zalogi. Z I2C vodilom sem sicer kar dosti delal a nikoli nisem uporabljal vgrajene periferije. 16F877 omgoča I2C med drugim tudi kot master, zato sem stvar hotel uporabiti v svoji aplikaciji. Trenutno imam na vodilu dva čipa SAA1064 ter PCF8583. Harwersko I2C vodilo sem sicer oživel a zadeva dela zelo nestabilno. Po kaki minuti dveh - včasih tudi več mi "hodi v err - ni potrditve o prejemu. Ker sem najprej sumil težave pri branju z PCF-ja sem ga odstranil napisal preprost števec ter podatke le pošiljal na SAA. Tudi tukaj se je zgodilo enako. Ker imam displej povezan z žicami sem sumil povezave. Zato sem napisal lastno I2C rutino. Ta dela brez problema. Kaj delam narobe? V prilogi rutina za pošiljanje na SAA.
Koda: |
#define FOSC .4000 ;oscilator 4000Khz
#define BAUD .100 ;hitrost 100khz
;inicializacija
bcf STATUS,RP0
movlw b'00101000'
movwf SSPCON ;vklop I2C pinov master mode
bsf STATUS,RP0
movlw b'10000000'
movwf SSPSTAT ;standardna hitrost
movlw (FOSC/(4*BAUD))
movwf SSPADD
movlw b'00010111' ;(C6=12mA,C5=6mA,C5=3mA,C4=test,C2=ON/OFF digit2+4,
movwf SAA_CONFIG ;C1=ON/OFF digit 1+3, C0= statično/dinamično 1-2 /1+3/2+4
bcf STATUS,RP0
Pošiljanje na vodilo:
;--------------------------------------------
;procedura poslje po I2c vodilu SAA podatke
;iz registrov:
;SAA_CONFIG -konfiguracijske nastavitve
;ENICA-prikaz na 1. displeju
;DTICA-prikaz na 2. displeju
;STICA-prikaz na 3. displeju
;TTICA-prikaz na 4. displeju
;------------------------------------------
SAA_OSVEZI
BANKSEL SSPCON2
bsf SSPCON2,SEN ;start bit
call I2C_PAVZA
movlw b'01110000'
call I2C_SEND ;posljem naslov
BANKSEL SSPCON2
btfsc SSPCON2,ACKSTAT
goto SAA_OSVEZI
movlw b'0' ;zacetna lokacija
call I2C_SEND
BANKSEL SSPCON2
btfsc SSPCON2,ACKSTAT
goto I2C_ERR
movf SAA_CONFIG,w
call I2C_SEND ;kontrolni biti SAA1064
BANKSEL SSPCON2
btfsc SSPCON2,ACKSTAT
goto I2C_ERR
movf ENICA,W ;vpis na prvo mesto
call I2C_SEND
BANKSEL SSPCON2
btfsc SSPCON2,ACKSTAT
goto I2C_ERR
movf DTICA,W ;vpis na drugo mesto
call I2C_SEND
BANKSEL SSPCON2
btfsc SSPCON2,ACKSTAT
goto I2C_ERR
movf STICA,W ;vpis na tretje mesto
call I2C_SEND
BANKSEL SSPCON2
btfsc SSPCON2,ACKSTAT
goto I2C_ERR
movf TTICA,w ;vpis na tretje mesto
call I2C_SEND
BANKSEL SSPCON2
btfsc SSPCON2,ACKSTAT
goto I2C_ERR
BANKSEL SSPCON2
bsf SSPCON2,PEN ;stop bit
call I2C_PAVZA
bcf STATUS,RP0
return ;proceduro koncam na banko0
I2C_SEND
BANKSEL SSPBUF
movwf SSPBUF
call I2C_PAVZA
return
I2C_PAVZA
BANKSEL PIR1
btfss PIR1,SSPIF
goto $-1
bcf PIR1,SSPIF
return
|
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.71 Kraj: Kranj - struževo
|
Objavljeno: Pet Jun 15, 2007 10:19 am Naslov sporočila: |
|
|
Jaz ti lahko pošljem samo rutino za AVR
Nasvet (ugibanje):
Preveri hitrosti, kapacitivnosti in pull-up upore.
Ali preveri z analizatorjem, zakaj ne dobiš ACK pulza nazaj. Če je prevelika hitrost in kapacitivnosti, lahko da hardware išče ACK pulz še preden sploh pride po žici. .. nekje imaš robne pogoje.
LP _________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Jun 15, 2007 10:35 am Naslov sporočila: |
|
|
Pullupi ter kapacitivnost ni kriva. Vse je ostalo isto pri moji klasični rutini. Uporabljeni isti pini. Zadeva deluje brez problema. Za zdaj bo ostalo kar tako. Ko bom imel več časa se bom lotil natančne analize. Ga pa vrjetno nekaj "lomim". Na sami microchipovi stani tudi nisem našel neke literature oz. primera rabe hardwerskega I2C v master modu. V končni fazi pa tudi klasične kode ni kaj dosti več. Tukaj vsaj točno vem kaj se dogaja. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
polh Član


Pridružen-a: Pet 08 Apr 2005 18:27 Prispevkov: 225 Aktiv.: 0.95 Kraj: Maribor-Ljubljana
|
Objavljeno: Pet Jun 15, 2007 11:20 am Naslov sporočila: |
|
|
Ko sem sam poskušal obuditi hardwerski I2C sem bil popolnoma neuspešen. Sploh ni želel delati. Povezoval pa sem PIC16F876 in eprom 24LC512 od Mikročipa. Kasneje sem spisal svojo rutino, ki pa je delala. Mogoče bo enostavneje, če se lotiš svojih rutin.
Lp |
|
Nazaj na vrh |
|
 |
ThePohorc Član


Pridružen-a: Sre 01 Nov 2006 13:40 Prispevkov: 41 Aktiv.: 0.18 Kraj: Maribor
|
Objavljeno: Ned Jun 17, 2007 11:57 pm Naslov sporočila: |
|
|
Silvo...
PIC je zelo čudna zadeva kar se tiče SPI in I2C-ja. Upoštevaj naslednje nasvete:
Ob vsaki vaji (iteraciji) resetiraj naslovnika (ker lahko ostane v kakem čudnem stanju).
Vedno ob vsaki iteraciji I2C-ja (ali SPI-ja) preberi SSPBUF register (drugače boš dobil register full error flag).
Kakšne so zastavice napak? Se postavi katera koli na 1?
Lp, |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pon Jun 18, 2007 12:07 am Naslov sporočila: |
|
|
ThePohorc je napisal/a: |
Silvo...
PIC je zelo čudna zadeva kar se tiče SPI in I2C-ja. Upoštevaj naslednje nasvete:
Ob vsaki vaji (iteraciji) resetiraj naslovnika (ker lahko ostane v kakem čudnem stanju).
Vedno ob vsaki iteraciji I2C-ja (ali SPI-ja) preberi SSPBUF register (drugače boš dobil register full error flag).
Kakšne so zastavice napak? Se postavi katera koli na 1?
Lp, |
Hvala za nasvete. Bom vse skupaj ob prvi priliki temeljito raziskal izvedel merjenje ter stvar opisal na forumu. Sedaj sem hardwerski I2C opustil ter napsial svoje rutine, ki mi delajo brez težav. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
mucek4 Član


Pridružen-a: Sob 18 Jun 2005 20:52 Prispevkov: 2952 Aktiv.: 12.46 Kraj: Tržič - Mesto med gorami
|
Objavljeno: Čet Sep 27, 2007 9:17 am Naslov sporočila: |
|
|
Hoj Silvo.
Si kaj raziskoval v tej smeri. Potrebujem nekaj podobnega, pa ne vem a se lotim HW sli SW I2C-ja? |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|