Fórum témák

» Több friss téma
Fórum » Portbővítő - hogy is van ez?
Lapozás: OK   2 / 2
(#) brazdas válasza zsotya hozzászólására (») Máj 20, 2010 /
 
Szia!
kicsit eltelt az idő azóta, de összeszedem a dolgot, és leírom.
üdv
brs
(#) zsotya válasza brazdas hozzászólására (») Jún 2, 2010 /
 
Szia!

Sikerült megtalálni?

Köszi
Zsotya
(#) asm hozzászólása Dec 21, 2015 /
 
Sziasztok!

Lenne egy egyszerű kérdésem - feltenni egyszerű, a megválaszolása, sőt, a technikai megvalósítása viszont sajnálatos módon annál bonyolultabb. Remélem mégis van itt 1-2 tapasztalt tag, aki meg tudná válaszolni a problémámat.

Amit meg szeretnék valósítani, az spec. jelenleg a következő:
Kisebb típusú AVR-el szeretnék több relét vezérelni. Emellett 1-2 egyéb digitális be-/kimenetet is használok, így sajnos a digitális portjaim elfogytak.
Olyasmire gondoltam, lehet-e olyat csinálni, hogy egyetlen - választott - digitális porton leadott, időben elkülönülő, változó digitális jeleket több vonalra osztok le, logikailag időben függetlenül....
....bár tudom, leírva ez egy kicsit zavaros, de a legtöbb, amit tudtam tenni, hogy nagyjából lerajzoltam, hogy mit akarok: 2 to 8 Line Demultiplexer
Nagyjából leírva: Egy órajel (A) 8 periódusa alatt/felosztásában egy másik digitális vonalon (B) leadott 8 bitet szeretnék 8 fizikailag különálló digitális vonalon (Q1-Q8) kihúzni úgy, hogy az előző periódusokban leadott magas TTL szintek a következő periódusokban is megmaradjanak, nyilvánvalóan, azon számú vonalokon, amely számú periódusokban az adatvonalon magas jelszint le lett adva.

Nagyjából valami olyasmit akarnék - szerintem -, amit 7-szegmenses kijelzőknél 74HC595 chippel valósítottak meg, hobbi-mikrokontrollerek számára : ott 3 vonalon lehetett 4 vagy 8 db 7szegmenses modult vezérelni - itt persze mivel 7szegmensesből is egymás mellett több darab volt, körbe-körbe kellett újraküldeni a számjegyeknek megfelelő bitsorozatot, viszont ha ez nem történt meg, a shiftregiszterek által mindig volt kb. 8 bitnyi memória körbekeringetve 1 hétszegmenses számára.
Mindenesetre a lényeg, hogy itt is 3 digitális vonalból csináltak több digitális vonalat felosztással.

TINA áramkörszimulátorban próbálgattam volna ezt a 74HC595 chipet, viszont azt se vágtam, hogy melyik jelölésű bemenetre mit kéne rákötni - természetesen nem minden úgy volt, mint a netes referenciákban.

Utoljára FlipFlop-okból próbáltam nekilátni összerakni valami memóriát az elképzeléseknek megfelelően (szintén TINÁban), de egyenlőre az se járt sok sikerrel.


Szóval valaki tudna valamicskét segíteni a dologban? Hol és mifelé kéne elkezdjek keresgélni?
Egyenlőre nem célom a költséghatékony megoldás, ellenben ha már van erre a problémára félkész megoldás kivitelezve valami chip formájában, annak örülnék.

Előre is köszönöm!
(#) Sick-Bastard válasza asm hozzászólására (») Dec 21, 2015 /
 
Üdv!

Mennyire pici az AVR?
Elsőre a többség azt javasolná, hogy válassz egy nagyobb AVR-t.

A 74HC595 kimenetnek(soros -> párhuzamos átalakítás), a 74HC597 pedig bemenetnek(párhuzamos -> soros) jók.
Ha tinyAVR-t használsz, 8 lábasat, akkor ezek helyett az MCP23S17-et javaslom. Az SPI interface-el (SCK, MISO, MOSI) + 1 lábbal, ebből az ICből 8db-ot is rá tudsz kötni. (Ha ez is kevés lenne, akkor + egy 74HC595-el összesen !64db! ilyen köthető rá.)
Az MCP23S17 előnye, hogy ki- és bemenetként is használható.

74HC595 bekötése:
(AVR) SCK - SH_CP (pin 11)
(AVR) MISO(SDI) - Q7' (pin 9) nem feltétlen kell
(AVR) MOSI(SDO) - DS (pin 14)
(AVR) szabadon választott láb(chip select/chip enable) - ST_CP (pin 12) és OE (pin 13) összekötve
MR legyen egy ellenállással VCC-re kötve.

Az SPI parancsa meg nagyon egyszerű:
  1. SPDR = data; // data az elküldendő 8 bites adat
  2. while(!(SPSR & (1<<SPIF)));
  3. SPI_PORT |= 74HC595_CS_pin; _delay_us(10); SPI_PORT &= ~74HC595_CS_pin;


SPI használata AVR-rel
(#) Peter65 válasza Sick-Bastard hozzászólására (») Dec 21, 2015 /
 
Egy kis pontosítás:
A 13-as lábat (Output Enable) nem célszerű állítani, mert akkor nagy impedanciás állapotba kerülnek a kimenetek. Szerintem jobb, ha fixen a földre van kötve, és akkor mindig a korrekt állapotot adják ki.
A 12-es láb egy trigger bemenet, ami a sorosan betöltött adatokat a kimeneti tárolókba írja. Ezt valóban célszerű egy külön kimenetre rákötni. Ha már biztosan befejeződött az SPI-n az adat kiküldése, akkor kell egy impulzust kiküldeni ezen a kimeneten, és akkor jelennek meg az új kimeneti értékek a 74HC595 kimeneti lábain.
A 9-es lábon valóban vissza lehet olvasni a kimenetre kiküldött előző bájtot, de szerintem fölösleges. Inkább arra kell, ha több 74HC595-t sorba fel akarunk fűzni. A 9-es lábat kell a következő IC 14-es lábára kötni. Elvileg akárhányat fel lehet fűzni. Minél többet fűzünk fel, annyival több bájtot kell kiküldenünk az SPI-n, és így egyre lassabb lesz a kimenetek írása.
(#) marcellus96 hozzászólása Dec 9, 2023 /
 
Sziasztok!

Olyan portbővítő IC-re lenne szükségem, amiből egy buszra legalább 10 darab felfűzhető (tehát 4 cím lába van). 8 bites I/O bőven megfelel.

Tud valaki javasolni ehhez valamilyen típust?
Előre is köszönöm!
(#) kaqkk válasza marcellus96 hozzászólására (») Dec 9, 2023 /
 
Az "egyszerű" 74595 ből is szinte bármennyi sorbafűzhető és csak 3-4 kontrollerlábat kell hozzá felhasználni összesen .
(#) Bakman válasza marcellus96 hozzászólására (») Dec 9, 2023 /
 
Ha csak kimenet kell, kaqkk válasza. Ha bemenet is, akkor választasz egy szimpatikus kontrollert és kb. annyit fűzől fel egy vonalra, amennyit akarsz.

Pl. UART-on kommunikálnak egymás között, egy mester, sok szolga...
(#) asch válasza Bakman hozzászólására (») Dec 9, 2023 /
 
Inputra is van shift regiszter, és ha már elhasználta az ember az SPI lábakat erre, akkor érdemes a digitális inputot is ezzel megoldani. Az SPI (shift regiszter) előnye még, hogy a master processzorra semmiféle időzítési kritériumot nem ad, nem kell azzal számolni, hogy mikor jönnek interruptok és milyen hosszan, még akkor sem, ha a shiftelést bit-banggel oldjuk meg. Ha pedig SPI perifériával oldjuk meg, akkor elképesztő sebességre képes.
(#) Bakman válasza asch hozzászólására (») Dec 9, 2023 /
 
Egy problémára lehet 1000 megoldást találni. Csak megfelelő mennyiségű szabad láb kell, pl. SPI esetén 3+n (MOSI, MISO, CLK + CS).

Ismerni kell a szükséges irányokat, sebességigényt, alkalmazott kontrollert (pl. milyen és hány perifériája van) stb. Ezek nélkül csak puffogtatunk a levegőbe.
(#) asch válasza Bakman hozzászólására (») Dec 9, 2023 /
 
Nem kell plusz n: CS csak akkor kell, ha mást is teszel a vonalra. De ha van egy rakás shift regisztered, annak mindnek elég egy közös CS. Viszont kell egy "latch", amire beolvas, illetve kirak adatot a shift regiszter. Tehát kb 4 pin kell viszont ennyiből akármennyi ki és bemenetet fel lehet fűzni, akár több százat is.
A hozzászólás módosítva: Dec 9, 2023
(#) Hp41C válasza marcellus96 hozzászólására (») Dec 12, 2023 /
 
Az I2C szabvány címkiosztásában a felső 4 bit az egység típusát kódolja: pl. 0xA a memória kódja. A legalsó bit az Írás/Olvasás kiválasztására szolgál. Így csak 3 cím vonal marad.

De Te egy másik kontrollerekkel (I2C slave egységként programozva), akár 128 egységet is kezelhetsz. Nem kell szabványosnak lenne a címkiosztásban.
Következő: »»   2 / 2
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem