I2C portbővítő kezelése
I2C portbővítő kezelése
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
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
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!
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!
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:
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
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
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
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....
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....
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
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
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:).
Ez 1 kábellel több minz az I2C:).
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
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
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)
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)
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...
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...