I2C problem

Diskusija o MSP, ARM / LPC, PLC kontrolerima.

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
planinskicovjek
Pocetnik na forumu
Pocetnik na forumu
Posts: 28
Joined: 08-07-2010, 09:43
Location: Hrvatska, Zagreb

I2C problem

Post by planinskicovjek »

Pozdrav!

Rdami svoj matoralni rad audio procesor (već sam pisao o njemu) u kojem pomoću uC AT89S8252 , preko I2C veze komuniciram sa audio procesorom TEA6330T i ekvalizatorom TEA6360.

problem je u tome što audio procesor i EQ imaju po više funkcija, pa traže da im se preko i2c veze da informacija u koji dio čipa želimo "ući". u datasheetu piše redosljed slanja podataka na čip:
1. start
2. slave adresa (adresa čipa)
3. acknowlege
3. subadresa (adresa dijela čipa u koji "ulazimo")
4. data (varijabla koju šaljemo)
5. stop
što znači taj "acknowlege"? što trebam napisati u programu što se tiče toga?
-programiram u BASCOM-u

probao sam sa:
Slanje:
I2cstart
I2cwbyte Adr
P2.2 = 1
Waitms 10
If P2.2 = 0 Then
I2cwbyte Subadr
I2cwbyte Var
I2cstop
Waitms 10
Else
Cls
Lcd "acknowledge---"
End If
Return

-P2.2 je SDA pin

što je krivo? molim pomoć. rad treba biti gotov za 2 dana :?
unaprijed zahvaljujem!
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: I2C problem

Post by Kukinjos »

Ovo piše u datasheet-u:
A = acknowledge, generated by the slave

Pogledaj malo I2C protokol: http://www.best-microcontroller-project ... orial.html

Dakle, nako što pošalješ start, zatim - slave addresu, podigneš liniju SCL (clock) na H i čekaš kad će TEAxxx spustit SDA (data) na L (acknowledge) i onda spustiš SCL na L, i tek tada nastavljaš slanje sub adrese. Dakle moraš poslat još jedan clock impuls kako bi sekvenca bila u redu. Ne možeš to napravit s Waitms 10, tj. možeš, ovim redoslijedom:

Code: Select all

SCL = 1
Waitms 10
SCL = 0
Ili bolje:

Code: Select all

SCL = 1
Bitwait SDA = Reset
SCL = 0
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
planinskicovjek
Pocetnik na forumu
Pocetnik na forumu
Posts: 28
Joined: 08-07-2010, 09:43
Location: Hrvatska, Zagreb

Re: I2C problem

Post by planinskicovjek »

hvala ti na brzom odogovoru!

probao sam ovo sa BITWAITom, ali slave mi ne šalje acknowledge.
na tom dijelu program se zaustavi i stoji u nedogled jer čeka da mu ovaj spusti SDA na 0.
problem u programu sigurno nije jer kada ja "ručno" spustim SDA na 0 (preko 18kohma), program se normalno nastavlja.

isto vrijedi za oba čipa. ni jedan ne šalje povratnu informaciju
planinskicovjek
Pocetnik na forumu
Pocetnik na forumu
Posts: 28
Joined: 08-07-2010, 09:43
Location: Hrvatska, Zagreb

Re: I2C problem

Post by planinskicovjek »

sad malo proucavam BASCOMove sampleove:
u sampleu za i2c vezu pise ovaj primjer za neki eeprom:

I2cstart 'start condition
I2cwbyte Addressw 'slave address
I2cwbyte Adres 'asdress of EEPROM
I2cwbyte Value 'value to write
I2cstop 'stop condition
Waitms 10 'wait for 10 milliseconds

ovo je datasheet tog eeproma: http://www.atmel.com/Images/doc0180.pdf
na 11. stranici je nacrtan graf pisanja u taj eeprom na kojem je nacrtano da nakon svakog bajta postoji acknowledge. dolazim do zakljucka da je acknowlege bit, ocito, sadržan u naredbi i2cwbyte.
probao sam sa programom koji je "bez acknowledgea".

Slanje:
I2cstart
I2cwbyte Adr 'slave adresa
I2cwbyte Subadr 'subadresa dijela čipa u koji šaljem byte
I2cwbyte Var 'byte koji šaljem (varijabla)
I2cstop
Waitms 10
Return

mozda cak i radi! :P jer dok sve pojacam do kraja, cuju se neka pistanja i u pozadni glazba, vjerojatno hvata neke smetnje (to jos moram sredit).
provjerit ću još vrijednosti varijabla koje šaljem, možda su one krive.
Post Reply