Externí připojení pamětí a V/V

Zdravím,

mám za úkol navrhnout několik zapojení pro připojení externích pamětí (RAM i ROM) a vstupů a výstupů. Mám přesně dáno v jakém adresovém prostou má co být. Hledal jsem na netu nějaký pěkný návod kde by bylo všechno popsáno, ale většinou jsou to jen obecné rady. NAvíc mám několik zadání, kde musím paměti připojit pomocí Multiplexeru, dale pomoci bipolarni pameti a pomoci programovatelneho pole. S uC teprve zacinam takze tohle je pro me zatim velke sousto :slight_smile: Pokud by byl nekdo ochoten, jsem schopen napriklad jedno ze zadani pro ukazku nafotit. Diky

Tak to nafoť a někde to vylep, mrknem na to (jen předešlu - aby ti to něco dalo, tak by bylo dobrý, abys tu funkci nakonec pochopil. Baví tě elektronika?)

Tak tak, bez zadání toho moc nevymyslíme.
Připojit paměť pomocí paměti? :slight_smile: Nemá to být spíš tak, že pomocí multiplexeru připojíš k mcu všechny jmenované obvody?
Budem potřebovat vědět počet I/O procesoru, šířku datové sběrnice připojovaných obvodů a jejich řídicí signály.

Ano opravdu se ridi pomoci pameti. Datove vystupy dane pameti budou vedeny na vstupy OE a CE pameti ktere budu pripojovat :slight_smile:

Zasilam tedy dve zadani, ostatni si chci udelat sam, budu rad kdyz k tomu pripojite nejaky komentar co a jak proc, popr. poslete nejaky link kde je to nejak srozumitlne vysvetleno (klidne i v EN)

Jinak jedna se o uC AT89C51ED2 ale to uz si asi vsichni prectou :slight_smile:

Diky vsem
pameti2.jpg
pameti1.jpg

Předpokládám, že jde o školní zadání nikoliv o nějakou skutečnou realizaci, protože takhle krkolomě by to snad nikdo neřešil.

K tomu zadání pameti2.jpg. Nenašel jsem tam U5! Místo toho jsou tam 2x U?, takže předpokládám, že jeden z nich je U5. Další věc, která mě zaráží je RAM v programové paměti. Ta je určena pouze pro čtení signálem PSEN a nelze do ni zapisovat. Má snad být segment RAM na adr. 0x4000 až 0x7FFF překryvný s datovou RAM? Jestliže ano, lze zadání zjednodušit.

V nedefinovaných segmentech pamětí se mohou zrcadlit data z druhé paměti. Např. na adr. 0x0000 až 0x3FFF se v datové paměti klidně může zrcadlit EPROM. Obě paměti se tak sloučí do jediného adresového prostoru a tím se výrazně zjednoduší adresový dekodér. Čtecí signály PSEN a RD lze pak součit ANDem do jediného čtecího signálu.

Základní filozofie řízení obvodů na sběrnici spočívá v řízení pomocí 3 signálů RD (read) WR (write) a CE nebo CS (chip enabe nebo select).
Aby bylo možno z obvodu číst musí být aktivní nejen RD, ale i CE. Pro zápis musí být taktéž aktivní 2 signály současně WR a CE. Signály jsou zpravidla aktivní v nule. Neaktivní CE znamená, jakoby obvod na sběrnici nebyl. Všechny signály ignoruje a výstupy má ve vysoké impedanci. CE je řízen adresovým dekodérem, jež rozděluje adresní prostor, signály RD a WR nepoužívá a ani nemůže, protože CE musí předcháze signálům RD nebo WR. Viz datasheet MCU a pameti.

Celý adresový porstor je rozdělen na 4 16KB segmenty. Pro adresu v segmenu tedy potřebujeme nižších 14 adresových vodičů zatímco zbývající 2 A14 a A15 určují segment. Takže tyto 2 vodiče musí jít na adr. dekodér 74HCT138. Ten proádí výběr 1 ze 4 segmentů svým výstupem na Y0 až Y3. Ty pak mohou provádět výběr konkrétní pamění či portu pomocí signálu CE. RAM svou velikostí zasahuje do 2 segmentů proto budeme potřebovat 2 výběrové vodiče Y1 a Y2 z adr. dekodéru, jehož signály se sloučí ANDem v jediný vedoucí k RAM.

U vstupních a výstupních obvodů není signál CE a je nutné si jej “vyrobit” přidáním hradla OR na vstup CLK 74LS374 a dalšího OR na OE 74LS373. Vstupní obvod 74LS373 bude mít CLK trvale na 1, aby byl průchozí, zatím co 74LS374 bude mít OC trvale na 0, aby výstypy OUTx byly vždy aktivní. Hradlem OR tak získáme 2 signály: CE a RD u jenoho a u druhého U? CE a WR.

Protože nelze zapisovat do vstupu a stejně tak nelze číst z výstupu, mohou oba U? a U? mít společnou adresu a i společný CE. Horní 16KB segment je tedy zbytečné dělit ještě na 2 8KB segmenty tak jak je v zadání nakresleno.
Pak už jen stačí pospojovat všechny WR s procesorem stejně tak pospojovat i RD s (RD and PSEN). Nepoužité vstupy musí být připojeny na 0 nebo 1.

Taky louskám ten obr.2. už mám skoro vymyšleno něco obdobného, jen se snažím dodržet ty adresové prostory. Každopádně je ve schématu chyba - adresy na sběrnici od 51 jsou číslované od 9 místo od 8 a končí se 16(bit č.17) což je mimo možnosti mcu.

Technik díky za vyčerpávající odpověď. Zkusím to tedy nějak zapojit a uvidíme co na to řekne :slight_smile:

Zkusim na netu jeste najit nejake zapojeni a srovnat to

Na obr.1 je standardní zapojení RAM a ROM(EPROM), na obr.2 by pak mělo být zapojení dle zadání. Je to prasárna rukou, ale na víc mi dnes nezbyl čas :unamused:
obr 02.gif
obr 01.gif

Tak schéma zaslané pittym je správně, ještě jsem vytvořil schéma pomocí té paměti to bylo taky poměrně jednoduché, teď se mořím s multiplexerama. A mám dotaz, je možné 2 horníma adresovýma vodičema nejprve aktivovat ROM přes CE a poté vást PSEN přímo na OE?

Abych to upřesnil. A14 a 15 rozdělují prostor na 4 podprostory. A já bych chtěl pouze pomocí těchto dvou vodičů rozhodnout jestli má být ROM aktivní (prostě tyto vodiče by přes nějaké hradlo vedly na CE) s tím že vstup OE by byl aktivován pomocí PSEN výstupu. Ale nevím jestli je to možné, nebo musí být CE aktivován logickým součtem adresových vodičů a PSENu?

Je to možné. Ušetříš hradlo :slight_smile: Ten vodič, co jde do součtu s PSEN určuje právě ten nejnižší podprostor. Ten můžeš přímo dát na /CE a součtové hradlo zrušit. Obdobné řešení můžeš použít i u RAM.
Navíc to bude mít menší spotřebu když zrovna nebudeš paměti využívat.
Na druhou stranu některým obvodům trvá aktivace výstupu ze spánku o něco déle než v aktivním stavu. Potom se může stát, že obvod vyhovující v aktivním stavu nemusí při uspávání stíhat.

Diky, pak sem kdyztak hodim ukazku jak jsem to zapojil :slight_smile:

Ahoj, prosím vás když se takhle zapoují ty paměti. Jak to děláte, stačí na to takové ty poučky nebo je třeba si napsat nějakou tabulku stavů?