I2C portbővítő kezelése

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

I2C portbővítő kezelése

Hozzászólás Szerző: Robert »

Futó téma volt Az I2C kezelése portbővítő segítségével.

Zanzásítva:
Portbővítésre a PCF8575, MCP23008, MCP23017, PCF8573 jött elő (8 ill 16 bitesek). A File cserebere szekcióban pár minta van fenn.
http://avr.tavir.hu/modules.php?name=Upload


Az I2C-n át LCD kezelés nőtte ki magát.


Az I2C holmikró, szbányosításról - egyes gyártókról:

Az I2C az _szabány_. Különben a Philips-é.
Az AVR-eken pont a megnevezés miatt TWI-nek hívják...

Amúgydarab-darab alapon nálam eléggé vegyes I2C-s chipek fordulnak elő.
LM75/76, TC75, TCN75A, 24LC16...512 (St, MC, Mot, Phi), 5c372A (Ricoh)....

Egyedül a Ricoh-l volt gondom. Nem bírja a forrasztást eléggé....

Az I2C-s eszközök esetén lehetőleg a 400kHz-s buszsebesség fölé ne menj... Én a I2Cdelay=10 paraméterrel mindent életre bírtam lehelni, mégha a I2Cdelay=5 esetén (elvileg ez a szabványos) hanyattestek. Igaz a busz ~0,5-0,7 méteres volt...


Port távolság:
10 mérter, ~1k5 lezáróellenállásokkal.

Az I2C Slave külső LIBként létezik az AVRhez. Ez lehet tisztán SW alapú (minden órajel INT-et generál), illetve a belső TWI modul SLAVE módú használata.
A LIB a BASCOMnak nem része, külön megvásárolható (~3eFt).



Előzmény topic: LCD vezérlése (csak ott OffTopic...)
http://avr.tavir.hu/modules.php?name=Fo ... c&start=75


Utolsó hozzászólás, átemelve (herc1234 tollából):

elviekben akkor ha jól értem egy parancsot kell küldeni az iocon
regiszternek
én per pill. a mcp23016 ot nézem (sajnos más nincs a szimulátorban)
abban Ah Access to IOCON0
Bh Access to IOCON1
tehát regiszter írása,portérték írása volna a megoldás?
teszem azt
I2cinit
I2cstart
I2cwbyte I2c_write 'teszem azt
2cwbyte &H0A 'ez volna maga a regiszter címe
I2cwbyte port0-7 'itt meg a portok billegtetése?
I2cstop
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

A DIP tokot felhasználhatod MCP23017-hez (DIP tokként lazán bekötöd...).


Inicializálás:
- Chip bankkezelés beállítása (2*8bites vagy 1x16-os?)
- Adott (A v. B) irányának beállítása (be/kimenet)

(- felhúzóellenállás, invertálás bekapcsolása
- INT engedélyezése)
--->ha ezek kellenek...

A mintában a 23017-eséből szépen az init leleshető. A port kimenet, B port bemenet (ha jól emlékszem)
A bemenet megbolondítva:
- Invertálva a bemeneti láb
- felhúzóellenállás bekapcsolva (megúszom a külső ellenállást)


Vigyázz! A MCP23S016/23S008/23S017 SPI-I2C hibrid módban megy. Nagyon macerás kezelni! nem is rakhatók ezek I2C-re, csak SPI-re!
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

akkor talán nem is találok i/o bővítőt 16 portal i2ct?
pca9532 16os led driver hez mit szólsz?
datasheetje jól néz ki de mi a fenéért nem lehet ilyeneket itthon kapni?
vajon a philips félvezetőknek van itthon disztributora?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

De.

16 bites az 2*8 byte-s:)
DE: I2C busz csak byte módon kezelhető!
Azaz ha pl a MCP23017 van a buszon és 16-os outputként definiáltad, akkor a kiírás:

Kód: Egész kijelölése

dim adat as word

i2cStart
i2cwrite eszközcím
i2cwrite regisztercím
i2cwrite low(adat) 'alsó byte
i2cwrite high(adat) 'felső byte
i2cstop
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

hát eredetileg én is valami ilyesmire gondoltam
ill arra hogy egy nyolcasra csinálok egy 4x4 es led mátrixot
mindenféle teljesítmény vezérlés nélkül (sajnos a hely ahova a nyák lesz a nullával egyenlő smd be még talán elfér egy io bővítő)
de aztán a kimenő teljesítmény ill.felvétel arányára gondolva elvetettem ezt az ötletet (a szimulátor is igy csinált ha pl 1xre akartam bekapcsolni 4 lednél többet elfogy a delej és nem villágít 4 nél több holott nekem legalább 8 kéne: kétszinű led 8 darab, fényjáték ahol lehetne esetleg mind a 8 bekapcsolva 1xre)
ez a fentebb említett philips gyártmányú 16 led driver i2c baromi jól hangzik
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

A 4*4-es mátrixot nem fogod tudni multiplexben kihajtani.
Az I2C busz sebessége miatt...

100k-s a busz. 1 utasítás/byte kb. 10 órajel alatt megy át (ack/nack jel).
1 utasítás: címzés, regisztterírás, tényadatírás*2

100k /8 bit=12,5k (1 byte frekvenciája)
12,5k / 4 = 3,125 k (utasításkészlet frekvencia)
3,125/4 = ~0,75 kHz (ennyi a sor/oszlopváltási frekvencia)

Hát, meredek....
750 Hz-l rakod ki a LED-ekre a sor/oszlopfrekiként a jeleket. Ill ennek a fele, mert át kell állítani, hogy ami kimenet volt az bemenet legyen...

~350 Hz


DE: ez is feleződik, mert ki kell oltani a sort és oszlopot, hogy a váltásnál ne legyen a szomszédos sor/oszlop kigyújtva.

~150 Hznél járunk....

Emellett sokat nem foga a kontroller csinálni......

Inkább egy 8-as portlábat a kontrolleren áldozzál be....
Gyorsabb....
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

multiplexre nem is gondoltam ezért
beszéltem egy alk. kereskedővel pcf8575-öt texas instből hoznak
az meg 16 io
a mikrovezérlő semmiképp nem fér el a nyákon ahol a ledek lesznek
meg az adatkábel sem volna jó megoldás (nekem még csak csak
de ha a prototipusból kisszéria lesz esetleg akkor aki megvenné szúrná a szemét a vaskos kábel)(a flipperőrültek igényes emberek)
az iszonyú órajeligényt ill.pazarlást néztem én is már
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Hülye ötlet: Muszály I2Cvel megoldani? Mi lenne ha - minthogy úgyis csak 1 ilyen eszköz van a kontrollerre kötve, hogy a slave oldalt is kontrollerrel oldod meg? és persze SPI busszal, így a címzéseket megúszod. A bascomban ott van a SPI master és Slave megvalósítás, készen...

Ez 1 kábellel több minz az I2C:).
Avatar
TyuTyu
DrótVégénSzéndarab
Hozzászólások: 40
Csatlakozott: 2005. június 5. vasárnap, 6:00

Hozzászólás Szerző: TyuTyu »

TyuTyu belevau:

az saa1064 miert is nem jo neked ?

TyuTyu
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

2 ilyen eszköz van a kontrolleren jobb és bal oldal ezért nem lesz a kontroller a közelben hanem középen
az saa1064 pofás dolog nem vetettem el teljesen
egyenlőre informálódom alakítgatom a magamban a rajzot
aztán ami jónak néz ki arra az irányba indulok tovább ...
elviekben lehet 1xre két slave is? mondjuk pl külön külön lábakon...
ott még akár a megjelenítési adatokat is el tudnám osztani meg esetleg nem is kéne tudnia a masternek mit csinál a slave elég ha a slave tudja mit kezd az átküldött adattal........

nem is egy hülye ötlet..
le lehet azt a masteren programozni hogy legyen két spi portja?
vagy ez nagyon bonyolult?
ujra át is olvasom az idevágó részt
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

SPInél van a MOSI,MISO, SCK. Ezek az adatcsere vonalai. És vana CS (ChipSelect). Ezzel a lábbal választod ki (minden SPI eszközhöz külön 1-1 tartozik), hogy melyiket szólítod meg...
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

igen közben megnéztem a bascom helpet
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

:P Nem hátrány....
A könyvből ez a soros rész még hiányzik.....

Ha lesz vmi megoldás, írdd majd meg. De a Flipperekben ez hol lesz majd? Mit fog tudni?:)
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

na még egy jó kérdés lehet talán már kérdeztem
a config spi parancsal meg lehet adni melyik port melyik láb
akkor ez elviekben átkonfigurálható?
pl
atmega8 ahol a PC 0-6 ig van PD és PB pedig 0-7 ig
viszont az SPI lábak a PB-n vannak a TQFP tokozás esetén
jó volna átkonfigurálni a PC re mivel akkor PD PB -t könnyebb volna címezni összesen 2 byte-al lehetne leirni a ledvillogást
de gondolom a hardwarekiépítés miatt ez nem lehetséges
vagy esetleg valahogy a PB6 PB7 -et declarálni a PC -hez?
a helpben azt irja hogy akkor software emul van de lehet a hardware spi-t használni sőt a 2313 nál nincs hardware spi de vajon nem fogja nagyon ez le a controllert?
amugy különben a chip enabled megszakítást generál?
agy azt külön kell beállítani?
(ég már a pofám hogy ennyit kérdezek de félek hogy hülyén halok meg)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

SPI lehet SW alapú - ez tetszőleges lábon lehet (kivéve a HW-s lábak).
HW alapú - ekkor a kötött MOSI,MISO,SCK lábak adottak.

M8 TQFP illetve DIP esetén ugyanúgy vannak, első ránézésre...
DE: A HW belül kötött, és - ha nem akarod az életedet nagyon megkeseríteni - akkor alapban a HW lábakra tervezel...
Válasz küldése