Stránka 1 z 1

Zahadicka u Z80

Napsal: 15 pro 2011, 00:43
od Celeron
U jedny stary masinky s Z80 jsem potreboval do portu zapisovat a nebo cist 256 bytovy bloky dat. Na portu je prednastavitelny citac, (2x 74ls193 v kaskade) ktery adresuje 256 bytovou pamet a pri kazdym signalu /RD ci /WR se nactou ci zapisou data a zaroven se zvysi stav citace o 1 pro pristi cteni nebo zapis. Napsal jsem programek v asm a pouzil na to po predchozim nastaveni HL a BC instrukci OTIR pro zapis a INIR pro cteni. Pri zapisu do portu bylo vse naprosto v poradku, ale se ctenim byly podivny problemy. Pokazdy se nacetlo neco jinyho. Jako kdyby citac obcas nezvysil stav na vystupu. Chvili jsem nad tim badal, neco promeril ale na nic jsem neprisel. Tak jsem kvuli moznosti krokovani prenosu pres port instrukci INIR rozepsal na:
CYKL: IN A,(C)
LD (HL),A
INC HL
DJNZ CYKL
a nestacil jsem se divit!! Chodi to naprosto bez problemu. Mohl by mi prosim nekdo ze Sharpistu ci jinych Zetkaru prozradit, v cem asi muze byt problem? Nejaky casovani? Ta Z80 chodi na 2 MHz, pamet v portu je 50nS a pristup do ni odpovida casovym prubehum v datasheetu.
Jirka

Napsal: 15 pro 2011, 06:34
od procesor
Aká je tam pamäť?
Aký takt poháňa Z80?
edit: Ktoré bity adresujú IO dekodér? (A0..A7/A8_A18)
IN A,(n)
IN r,(C)
INIR
všetky trochu inak fungujú.

Napsal: 15 pro 2011, 10:15
od PvvS
Od koho je ten procesor ? Neni tam nahodou U880B ?

Napsal: 15 pro 2011, 11:24
od Celeron
PvvS píše:Od koho je ten procesor ? Neni tam nahodou U880B ?

Je, ale na druhy procesorovy desce je Mostek Z80 a s ni to dela stejny pri kusy.
Jirka

Napsal: 15 pro 2011, 11:53
od Celeron
to Procesor:
Z80 je na 2MHz. Porty se adresuji A0-A7 a dekoduji v GAL16V8. Pamet je staticka Alliance AS6C4008 55nS (512kb*8). Ty dve kaskadni 74LS193 ovladaji v Alliance A0-A7. Jeji A8-A18 jsou adresovany z dalsich dvou portu, kde se adresa zapisuje do 74ls373. Jak jsem jiz psal, komunikuje se po blocich 256 byte. Nejdrive se prednastavi na obou citacich 00h a na 74ls373 se posle stredni a nejvyssi byte adresy pro Alliance. No a pak se pomoci INIR ci OTIR nacte ci zapise 256 byte blok. Zapis pres OTIR chodi, cteni pres INIR blbne ale pokud se instrukce INIR rozepise pres DJNZ cykl, tak to chodi taky. Otestovano nekolikrat za sebou zapisem s naslednou verifikaci nahodilych vzorku dat. HW je pro zapis a cteni uplne stejny, jedinny rozdil je, ze pri INIR se aktivuje OE a pri zapisu WE pro Alliance.
Tyhle blokovy prenosy pouzivam radu let , treba i 4 instrukce INIR za sebou na nacteni bloku 1024 byte a nikdy me to takovyhle kravoviny nedelalo.
Zahadou mi je, proc chodi OTIR a ne INIR a proc po rozepsani na cyklus pomoci IN A,(C) je to v poradku. Jestli mi das email poslu ti vykres v PDF.
Jirka

Napsal: 16 pro 2011, 00:29
od Celeron
Tak jsem zjistil, ze problem je v prilis dlouhy dratarine jednotlivych signalu na bastl desce. Vydratovani dat, adres a rizeni pro tech 6 Ramek je dlouhy pres 40 cm jak draty obchazi jednotlivy brouky. V realu se da finalni plosak navrhnout na celkovou dylku propoji Ramek asi 15-20 cm. Ze je v tom problem jsem zjistil, ze po pripojeni logickyho analyzatoru s 20 cm sondama to prestalo makat uplne. A po odpojeni to zase jelo. Jsou tam asi moc vysoky impedance a mozna i preslechy ve svazcich toho dratovani. Jak je videt, ne nadarmo se na stejne dlouhy pripojeni disku a disket davaji zakoncovaci odpory. Zitra je tam zkusim pridat mezi data a Vcc neco kolem 4k7 a uvidime.
Edit: osazeni odporu vyresilo problem. Vse chodi jak ma.
Jirka