Fórum témák
» Több friss téma |
Szia!
kicsit eltelt az idő azóta, de összeszedem a dolgot, és leírom. üdv brs
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!
Ü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ű:
SPI használata AVR-rel
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.
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!
Az "egyszerű" 74595 ből is szinte bármennyi sorbafűzhető és csak 3-4 kontrollerlábat kell hozzá felhasználni összesen .
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...
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.
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.
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
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. |
Bejelentkezés
Hirdetés |