Založen: Apr 02, 2011 Příspěvky: 17907 Bydliště: Nový Bydžov
Zaslal: čt březen 13 2014, 10:50 Předmět: Předávání dat mezi dvěma 8 bit procesory
Potřebuju vyřešit starý zařízení s I85, který nestíhá obsluhu dodatečně namontovaný periférie. Urychlit by se to dalo že by se "nadřazená" I85 nezabývala obsluhou periférie ale jen "poslala data na port" a vlastní obsluhu periférie by provedl "podřízený" Atmel 89C51.
Mám představu, že D(0-7) I85 by šly na Port 0 A51 a adresy A(0-7) I85 by šly na adresovej dekodér portu a v součinu s /IOW by vyvolaly INT0 přerušení v A51 a ten načetl nový data.
Nezkoušel jste někdo něco podobnýho? Teoreticky to asi chodit může, ale třeba si neuvědomuju nějakej časovej problém.
Díky
Jirka
Jó,teď je to už jasný když je znám celý název.
Procesory 8080 kompatibilní důverně znám,začínal jsem na nich.
Akorát se divím,že se ještě dnes někdo zabývá takovou vykopávkou.
Podobný problém jsem už kdysi řešil pomocí dvoubánové vyrovnávací paměti,nakonec bylo zapotřebí složité logiky kterou jsem musel realizovat pomocí GAL obvodu.Veliký problém byl v přístupu do paměti,jelikož
oba procesory nebylo možno nijak synchronizovat a docházelo ke kolizím.
Dnešní mikrokontroléry jsou mnohem výkonnější, možná by šel tento problém vyřešit emulací konkrétního počítače pomocí mikrokontroléru.
Na netu jsem už pár krát narazil na program který emuluje PMD80,
Amigu nebo ZX spektrum.Amiga na jednočipu běžela údajně mnohem rychleji než původní počítač.
(jestli jsem to pochopil dobře) Jde o to, jestli nadřazený I85 nechá na výstupu ty data dostatečně dlouhou dobu, aby cílový procesor stihl přerušit a provést dva čtecí cykly.
Nebo obráceně, aby po /IOR stihl cílový procesor přerušit a zapsat nahoru včas.
Založen: Apr 02, 2011 Příspěvky: 17907 Bydliště: Nový Bydžov
Zaslal: ne březen 16 2014, 2:43 Předmět:
To Jenda_KL: Pochopil jsi to naprosto správně. Při zápisu na port v tom původním zařízení s I85 se zdekóduje z jeho adresový sběrnice a /IOW selekt pro Atmela, kterej v přerušení načte datovou sběrnici I85. Jde jen o směr do Atmela, zpět nic nejde.
Jenže, už jsem zjistil, že to takhle jednoduše nemůže jít, protože než Atmel provede přerušení a načte port, tak už je datová sběrnice I85 úplně jiná. Ale pokud se zároveň selektem nahodí klopák RDY, tak se I85 zastaví a až Atmel načte data, tak bitovým portem klopák RDY shodí a I85 pojede dál. Aspoň si to tedy muslím...
A proč to dělám? Je to CNC mašina z začátku 90 let, která se dnes dá sehnat ekvivalent kolem mega a něco na ní odešlo. A právě na něčem jiným, novějším, na co mám i ladící systém chci nahradit tu odešlou část. Předělávat celej původní řídící systém na novější procesor je nesmysl, nejsou zdrojáky a epromek tam je 48kb. To co potřebuju na tuhle náhradu se dá dobádat a vyměřit.
Jirka
Pokud tedy jde o data pro jednu cílovou IO adresu:
Poradil bych si s tou 273 jako data latch a jednou EPROM jako addr decoder, kde nejvyšší databit bude 0 pro určenou adresu
Tohle je mnohem širší problematika a pochybuju,že to bude možné vyřešit jedním adresním dekodérem a bufferem.Určitě bude potřeba data taky
číst a co když bude procesor do periferie posílat celý blok dat.
Čas mezi jednotlivými Byte může být dlouhý jenom jako jeden instrukční
(nebo sběrnicový) cyklus.To nezvládne žádna obsluha přerušení.Dále pak nemůžeme vzít
páječku a na základní desce někde k procesoru připájet hrst drátů abychom
si vyvedli potřebné signály.
Takhle se to nedělá.
Tohle bez podrobného rozboru nikdo nevyřeší, a určitě ne na fóru.
Spíš bych se pohrával s myšlenkou přetaktování procesoru...
Pokud jde jen o zvýšení rychlosti.
Založen: Dec 02, 2011 Příspěvky: 2676 Bydliště: Jaroměř
Zaslal: ne březen 16 2014, 18:20 Předmět:
MCU x51 maj multiprocesorovou komunikaci přes sériovej port (zapíná se to nějakym bitem v SCON nebo SMOD),u 8085 nevim. Možná bude potřeba rozšiřovat pomocí 8255 a ošéfovat to nějak adresováním.
Založen: Apr 02, 2011 Příspěvky: 17907 Bydliště: Nový Bydžov
Zaslal: ne březen 16 2014, 20:32 Předmět:
Tak s tím zastavením I85 pomocí RDY to chodí. Prostě jakmile I85 zapíše do svýho portu, nahodí se dobastlenej klopák wait a sběrnice I85 se zastaví a je na ní stále adresa a data. Atmel si v klidu dokončí instrukci, skočí do přerušení, udělá si těch pár instrukcí (cca10) na slíznutí adresy a dat ze sběrnice I85 a pak jedním bitem P3 schodí klopák wait a I85 jede dál. Zkoušel jsem to sice jen na jedný adrese a dvěma bity dat, ale vypadá to, že to nemá problém.
Koukal jsem do knih a takhle přes RDY se dělaly pomalý paměti nebo aproximační převodníky, prostě se zastavil procesor, dokud data nezpracovala periférie, či neskončil AD převod. Uvidíme v reálu, zda těch asi 15uS zastavení bude v tý CNC mašině nějak vadit.
Jirka
Založen: Apr 02, 2011 Příspěvky: 17907 Bydliště: Nový Bydžov
Zaslal: po březen 17 2014, 13:55 Předmět:
I85 nestíhal obsluhovat tu periférii, co teď bude řídit Atmel! Před tím musel čekat na zpracování dat v periférii a protože neměl pořádnej přerušovací systém a jelo to v čekacích smyčkách, nestíhal. U rychlýho Atmela 89C55 nebo 89S8253 je kupa přerušení a obsluha periférie se dá s přerušením napsat úplně jinak.
Jinak s tou poznámkou "2 bity za 15uS" by mě celkem zajímalo, co tím pán myslel Řekl bych, že vůbec nepochopil vo co go. Přenášel jsem celej byte ale zadrátoval na bastldesce na zkoušku pouze 2 bity. Stejně tak to "připájení hrsti drátů někam k procesoru" posledně... Ten I85 má přístupnou systémovou sběrnici pro rozšiřující desky ale to v problému není podstatný.
Jirka
na mě je 15us taky dost dlouhá doba, obzvláště když to bude zastavovat za každým zápisem na bus.
Klopák bych dal za adresní dekodér, pokud by byl vůcec potřeba.
Ten dekodér zajistí přerušení (event. zastavení) jen když je psáno na vybrané adresy, navíc to cílový procesor nemusí zjišťovat.
S AVRkem na 8MHz (125ns instr.cyklus) by byla rekace na přerušení asi takováto :
max. 2 - předchozí instrukce
2 - JMP INT
1 - IN rx,portina
1 - IN ry,portinb
1 - ORI rz,recflagbit
( event. 1 - SBI portn,DRstBit )
( 1 CBI - portn,DRstBit )
2 - RETI
to je 9-11 cyklů což je 1,1-1,3 us
Když se nebude Dčkem zastavovat tak data na busu a délka IOW musí být kratší než 750ns, když clockneš to AVRko tak klidně poloviční.
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.