Proiectarea, Realizarea Si Testarea Unui Sistem de Dezvoltare cu Microprocesor Z80

Cuprins

1. Introducere. ……………………………………………………………………….. 3.

1.1. Scopul proiectului. Utilitatea unui sistem de dezvoltare cu microprocesor.

De ce Z80 ?

1.2. Schema bloc a sistemului.

2. Proiectarea sistemului. Descrierea blocurilor func]ionale. ……….. 7.

2.1. Microprocesorul Z80. Selec]ia memoriei [i a dispozitivelor periferice.

2.2. Blocul generator de tact [i ob]inerea frecven]elor pentru interfa]a serial\.

2.3. Blocul num\r\tor – temporizator programabil [i controler de `ntreruperi.

2.4. Interfa]a serial\ – RS 232.

2.5. Porturile paralele.

2.6. Interfa]a I2C realizat\ hardware.

2.7. Conectorul pentru LCD compatibil Seiko.

2.8. Blocul de comutare a aliment\rii bancului – RAM1 pe baterie.

2.9. Posibilit\]i de extensie a sistemului. Transformarea lui `n calculator.

3. Realizarea [i testarea sistemului. ……………………………………………. 51.

3.1. Proiectarea [i realizarea cablajului.

3.2. Tehnici de testare a sistemelor cu microprocesor.

3.3. Testarea [i punerea la punct a sistemului de dezvoltare.

4. Program de transfer pe port paralel cu PC-ul. ………………… 61.

5. Concluzii. ……………………………………………………………………….. 72.

Bibliografie…………………………..78

Prezentare power point

Anexe

=== l ===

Cuprins

1. Introducere. ……………………………………………………………………….. 3.

1.1. Scopul proiectului. Utilitatea unui sistem de dezvoltare cu microprocesor.

De ce Z80 ?

1.2. Schema bloc a sistemului.

2. Proiectarea sistemului. Descrierea blocurilor func]ionale. ……….. 7.

2.1. Microprocesorul Z80. Selec]ia memoriei [i a dispozitivelor periferice.

2.2. Blocul generator de tact [i ob]inerea frecven]elor pentru interfa]a serial\.

2.3. Blocul num\r\tor – temporizator programabil [i controler de `ntreruperi.

2.4. Interfa]a serial\ – RS 232.

2.5. Porturile paralele.

2.6. Interfa]a I2C realizat\ hardware.

2.7. Conectorul pentru LCD compatibil Seiko.

2.8. Blocul de comutare a aliment\rii bancului – RAM1 pe baterie.

2.9. Posibilit\]i de extensie a sistemului. Transformarea lui `n calculator.

3. Realizarea [i testarea sistemului. ……………………………………………. 51.

3.1. Proiectarea [i realizarea cablajului.

3.2. Tehnici de testare a sistemelor cu microprocesor.

3.3. Testarea [i punerea la punct a sistemului de dezvoltare.

4. Program de transfer pe port paralel cu PC-ul. ………………… 61.

5. Concluzii. ……………………………………………………………………….. 72.

Capitolul 1.

Introducere.

1.1. Scopul proiectului. Utilitatea unui sistem de dezvoltare cu microprocesor. De ce Z80 ?

Scopul principal al proiectului este demonstrarea anumitor cuno[tin]e, metode, tehnici [i abilit\]i specifice, necesare `n proiectarea [i realizarea sistemelor cu microprocesor, aplicate `n cazul particular al microprocesorului Z80, dar cu valen]e suficient de generale. Orientarea proiectului este `n general c\tre hardware, urm\rind detalii de proiectare, dar `ntr-o permanent\ corela]ie cu posibilit\]ile eventuale de utilizare [i cu resursele software disponibile, deoarece la realizarea oric\rui sistem programabil aceste aspecte sunt inseparabile.

~n al doilea r=nd, am avut `n vedere proiectarea unui sistem de dezvoltare (nucleu de dezvoltare hardware / software) c=t mai universal, prev\zut cu resursele necesare pentru a putea fi folosit `ntr-o gam\ c=t mai larg\ de aplica]ii, de la testarea unor echipamente electronice sau hardware, la dezvoltarea [i punerea la punct de programe pentru microsisteme dedicate, la aplica]ii concrete de tip control automat `n timp real (calculator de proces) [i p=n\ la extinderea [i transformarea sa `n microcalculator (prin ad\ugarea unui modul video [i a unei interfe]e de disc, `n acest caz sistemul av=nd rol de “plac\ de baz\”), f\r\ a insista totu[i pe un exemplu concret de utilizare, care ar fi f\cut obiectul altui proiect.

Nu neap\rat `n ultimul r=nd, proiectul are [i un anumit rol didactic, put=nd fi folosit pentru exemplificarea [i `n]elegerea problemelor generale de proiectare a unui sistem de calcul cu microprocesor.

Un sistem de dezvoltare este un nucleu de calcul care posed\ bogate resurse hardware [i software, realizat `n jurul unui microprocesor sau microcontroller, fiind util proiectan]ilor `n realizarea de sisteme dedicate pentru o anumit\ aplica]ie. Microsistemele specializate vor avea, de regul\, o amploare mai restr=ns\ dec=t sistemul de dezvoltare. Utilitatea unui astfel de sistem universal rezult\ din caracteristicile specifice proiect\rii aplica]iilor cu microprocesoare sau microcontrollere.

~n primul r=nd, acesta constituie baza de plecare `n familiarizarea cu tehnicile de programare specifice unui anumit tip de microprocesor (microcontroller), av=nd un rol esen]ial `n etapa de “training” a proiectan]ilor, datorit\ `n special resurselor extinse disponibile `n sistem (memorie RAM de dimensiune suficient\ pentru `nc\rcarea programelor de pe un calculator gazd\, monitoare software pentru vizualizarea [i modificarea anumitor resurse, cu posibilit\]i suplimentare de asamblare / dezasamblare local\ a unor por]iuni mici de cod [i simulare prin trasare pas-cu-pas a programelor).

Sistemul de dezvoltare va fi de mare folos [i `n proiectarea hardware prin faptul c\ el pune la dispozi]ie nucleul gata realizat (acela[i `n toate microsistemele dedicate, indiferent de aplica]ie), p=n\ la nivelul interfe]elor tipizate. Proiectantul hardware va realiza, deci, modulul specializat pe care-l va conecta la sistemul de dezvoltare, av=nd astfel posibilitatea de a-l experimenta [i pune la punct, chiar dac\ nu are de la `nceput `ntreg sistemul realizat.

~n faza de simulare a programelor, sistemul de dezvoltare reprezint\ instrumentul ideal, deoarece execut\ `n timp real [i f\r\ nici o interpretare setul de instruc]iuni al microprocesorului. ~n acest fel simularea este complet\, pentru c\ se poate testa nu numai corectitudinea semantic\ a programelor, ci [i timpul de execu]ie al programelor de aplica]ie `n diferitele situa]ii reale ce apar `n exploatare. Validarea corectitudinii `ntregului proiect se va face cu ajutorul sistemului de dezvoltare la care s-a cuplat hardware-ul specializat, rul=nd programele care implementeaz\ aplica]ia dat\, `ndeplinind astfel [i ultima faz\ care apare `n proiectarea unei structuri cu microprocesor.

Chiar dac\ nu mai este de mare actualitate, am ales un sistem cu microprocesor `n locul unui sistem cu microcontroller datorit\ `n primul r=nd complexit\]ii sale [i a diverselor aspecte tehnice pe care le atinge un astfel de proiect. Proiectarea unui sistem de dezvoltare cu microcontroller (de exemplu, cu I8051) atinge prea pu]ine aspecte de proiectare hardware, deoarece majoritatea resurselor sunt disponibile deja pe cip `ntr-o versiune minimal\, fiind necesar\ doar extinderea lor. Un alt motiv ar fi acela c\ deja am proiectat [i realizat personal un sistem de dezvoltare cu microcontrollerul I80C32, `n cadrul disciplinei “Proiectarea cu microprocesoare II”.

Atunci, de ce tocmai cu Z80 ? Exist\ trei motive principale. ~n primul r=nd, proiectarea unui sistem de calcul `n jurul unui microprocesor mai avansat, de exemplu I8086, ar fi fost prea complicat\, necesit=nd prezen]a multor circuite auxiliare [i a unei cantit\]i mari de memorie pentru a beneficia de avantajele unui astfel de microprocesor, iar realizarea sa practic\ nu se justific\, un sistem cu I8086 imit=nd aproape `n `ntregime structura unei pl\ci de baz\ a unui calculator IBM-PC. Tot `n acest sens, a[ aminti c\ acest microprocesor este mai pu]in bun pentru aplica]ii de control, av=nd un set de instruc]iuni orientat mai mult spre realizarea unor sisteme mari de calcul.

~n al doilea r=nd, am `ncercat s\ scot astfel `n eviden]\ faptul c\ microprocesorul Z80 nu este chiar at=t de “dep\[it”, fiind `nc\ solu]ia optim\ `n cazul unor sisteme de tip calculator de proces industrial pentru aplica]ii complexe de conducere automat\, `n care abordarea distribuit\ folosind mai multe microcontrollere conectate `n re]ea este ineficient\, datorit\ cre[terii exagerate a complexit\]ii comunica]iilor (programele de comunica]ie cap\t\ o pondere mai mare chiar dec=t aplica]ia propriu-zis\) [i a costului ansamblului.

Ultimul motiv este o oarecare experien]\ de tip “hobby” `n lucrul cu microcalculatoarele “TIM-S”, “COBRA” [i “HC-91”, bazate pe un astfel de microprocesor, la care am realizat o serie de modific\ri [i extensii hardware pentru ad\ugarea unor module adi]ionale (extinderea memoriei RAM, interfa]\ paralel\, interfa]\ serial\, interfa]\ analogic\, programator EPROM-uri), precum [i o serie de subrutine (modific\ri `n memoria ROM sau `n sistemul de operare CP/M) [i programe de sistem (pentru gestiunea fi[ierelor de pe dischet\ [i transfer de date cu PC-ul).

1.2. Schema bloc a sistemului:

Capitolul 2.

Proiectarea sistemului. Descrierea blocurilor func]ionale.

2.1. Microprocesorul Z80. Selec]ia memoriei [i a dispozitivelor periferice.

Microprocesorul Z80 (alias Z8400) este o unitate central\ de procesare pe un singur cip, organizat\ `n jurul unei magistrale interne de date cu l\]imea de 8 bi]i [i constituie nucleul unei familii de circuite integrate LSI performante, care permit realizarea unui sistem de calcul folosind un num\r redus de componente. Produs\ ini]ial de firma “Zilog” `n tehnologie NMOS, familia de circuite Z80 se mai g\se[te `nc\ `n fabrica]ie la diverse firme sub forma unor versiuni `mbun\t\]ite at=t tehnologic (CHMOS – Z84C00, frecven]e de tact mai mari – p=n\ la 33 MHz) c=t [i constructiv (unitate central\ cu oscilator [i memorie pe aceea[i capsul\ compatibil\ la pini – Z84C50, periferice integrate pe un singur cip – Z80KIO, inclusiv `n versiune cu tot cu unitatea central\ – Z84C15, dezvolt\ri arhitecturale compatibile ca set de instruc]iuni – Z80180, unele chiar de mare actualitate [i putere de calcul – eZ80).

Structura intern\ a circuitului Z80-CPU (fig. 2.1.1.) [20.] are ca elemente principale unitatea aritmetico-logic\ – ALU cu registrele temporare asociate (TEMP [i ACU), blocul de registre generale [i secven]iatorul de control, care con]ine `n plus registrele hardware (I # registrul de pagin\ pentru tabela de `ntreruperi [i R # contorul de re=mprosp\tare a memoriilor dinamice) [i bistabilii de configurare / validare a sistemului de `ntreruperi mascabile (IM2-IM1, respectiv IFF1 [i IFF2).

Caracteristic\ microprocesorului Z80 este posibilitatea de comutare prin instruc]iuni a acumulatorului de lucru (A) `mpreun\ cu registrul indicatorilor de condi]ii (F) cu perechea de rezerv\ – AF’ (EX AF,AF’) [i a celor 2 bancuri formate din perechile de registre BC, DE, HL, un singur banc fiind activ la un moment dat (EXX). Microprocesorul execut\ [i opera]ii aritmetice pe 16 bi]i (cu dou\ treceri prin ALU), folosind drept acumulator registrul dublu HL, sau registrele index IX [i IY, care permit `n plus [i adresarea indexat\ a unor tabele `n memorie. “Acumulatorul” de 16 bi]i – HL poate fi [i el schimbat cu registrul DE prin comanda unui multiplexor cu instruc]iunea EX DE,HL.

Este interesant de amintit c\ registrele index “de 16 bi]i” (teoretic, acestea se pot folosi numai pe 16 bi]i) IX [i IY, pot fi folosite [i pe 8 bi]i utiliz=nd a[a-numitele “instruc]iuni ascunse” (nedeclarate de firm\), prin redirectarea instruc]iunilor care folosesc regi[trii H [i L `n mod separat, cu ajutorul prefixelor pentru IX (DDh) [i IY (FDh), f\r\ a folosi un asamblor special cu suport pentru instruc]iuni ascunse [1.].

Dimensiunea spa]iului de memorie direct adresabil este de 64Ko, contorul program – PC [i indicatorul de stiv\ – SP fiind pe 16 bi]i, iar spa]iul de intrare/ie[ire se poate adresa direct pe 8 bi]i (prin acumulator), sau indirect pe 16 bi]i, cu perechea BC.

Num\rul mare de registre interne a permis utilizarea mai pu]in conven]ional\ `n unele aplica]ii a microprocesorului Z80, f\r\ meorie RAM, numai cu EPROM.

Fig. 2.1.1.

Din punct de vedere hardware, prin utilizarea unui num\r redus de componente auxiliare se poate realiza un sistem puternic, cu complexitatea `ntre sistemele cu microcontroller [i sistemele de tip calculator [3.]. Microprocesorul Z80 nu necesit\ controller de magistrale, latch-uri pentru demultiplexare sau amplificatoare de magistrale, permi]=nd `n plus conectarea u[oar\ a memoriilor dinamice (f\r\ acces dublu pentru re=mprosp\tare). Prin folosirea circuitelor periferice specifice familiei, care con]in fiecare module interne pentru controlul sistemului de `ntreruperi cu propagare serie a priorit\]ilor, se poate evita [i folosirea unui controller de `ntreruperi dedicat (lan]ul de comunica]ie serial\ pentru propagarea priorit\]ilor `ntre circuite creeaz\ un controller virtual de `ntreruperi distribuit).

Din punct de vedere software, microprocesorul are un set puternic de instruc]iuni [1.], cu orientare general\, at=t spre aplica]ii de control automat (posibilitate de setare / resetare / testare a bi]ilor, schimbare rapid\ de context prin comutarea registrelor, bucle [i salturi relative, instruc]iuni de apelare / revenire condi]ionat\ din subrutine) c=t [i spre realizarea de microcalculatoare [5.] (diversitatea modurilor de adresare [i l\]imea de band\ mare a setului de instruc]iuni pe memoria extern\ conduce la lucrul comod cu variabile [i structuri de date de mari dimensiuni, indicatorul de stiv\ pe 16 bi]i permite programarea algoritmilor recursivi, instruc]iunile complexe de transfer [i c\utare pe blocuri permit lucrul f\r\ DMA).

Ar mai fi de amintit aici [i cele 3 variante de lucru cu `ntreruperi, care acoper\ at=t moduri simple, utile `n aplica]iile de control c=t [i modul specific vectorizat (cu adresare dublu indirect\ [i posibilitate de plasare a tabelei de `ntreruperi `n orice zon\ de adrese), mai performant chiar dec=t la I8086.

Toate aceste caracteristici hardware [i software amintite situeaz\ microprocesorul Z80 undeva `ntre microcontrollere [i microprocesoarele mai performante, av=nd putere de calcul mai mare dec=t microcontrollerul I8051 [i o flexibilitate mai bun\ dec=t a microprocesorului I8086. Se poate spune c\ Z80 `nglobeaz\ principalele avantaje din ambele tipuri de circuite, put=ndu-le `nlocui cu succes `ntr-o gam\ larg\ de aplica]ii. Din aceste motive, Z80 nu poate fi considerat chiar complet “dep\[it”.

Primul modul din schema sistemului proiectat se refer\ la conectarea microprocesorului `n circuit (fig. 2.1.2.), cu semnalele sale specifice [2.].

Fig. 2.1.2.

Intr\rile de `ntrerupere nemascabil\ – /NMI [i cererea de cedare a magistralelor – /BUSRQ nu sunt folosite `n sistem, fiind invalidate prin rezistoare “pull-up” la Vcc [i scoase la conectorul de extensie pentru eventuale utiliz\ri ulterioare. De altfel, conectorul de extensie con]ine toate semnalele microprocesorului, fiind un conector de tip magistral\. Rezistoare cu acelea[i valori (4.7K – valoare optim\) se g\sesc [i pe liniile /INT (cerere de `ntrerupere mascabil\) [i /WAIT (semnal de prelungire a ciclilor), dar av=nd un rol diferit, acela de a realiza func]ii “AND cablat” cu rol de SAU pentru semnale active LOW, `mpreun\ cu ie[irile cu drena `n gol corespunz\toare de la circuitele periferice (cererile de `ntreruperi, respectiv semnalele de a[teptare de la cele dou\ canale seriale).

~n schem\ se remarc\ [i prezen]a unui circuit clasic de resetare a sistemului la conectarea tensiunii de alimentare (D1, R10, C3) – care produce `nt=rzierea necesar\ prin `nc\rcarea condensatorului, cu posibilitate de resetare de la buton. Dioda D1 are rolul de a desc\rca rapid condensatorul la c\derea tensiunii de alimentare.

O particularitate mai interesant\ este conectarea unui indicator cu LED pe linia /HALT a microprocesorului. Am montat acest circuit cu rolul de a indica o posibil\ eroare `n sistem (dup\ un test nereu[it de memorie la ini]ializare, se opre[te microprocesorul prin instruc]iunea HALT), dar el poate fi folosit [i `n alte scopuri (de exemplu, `n cazul unui sistem de operare `n timp real se poate urm\ri `nc\rcarea procesorului cu `ntreruperi, programul principal fiiind instruc]iunea HALT). Deoarece linia /HALT de la Z80 este activ\ LOW, a fost necesar\ conectarea unui tranzistor PNP (BC 178, de uz general) care s\ se satureze la activarea `n “0” logic a semnalului. Am conectat dioda LED `n emitor pentru a decala deschiderea tranzistorului `n jos, spre valori mai mici a tensiunii pe baz\ [8.]:

.

F\r\ acest artificiu de schem\, dac\ dioda ar fi fost conectat\ `n colector, tranzistorul s-ar fi deschis imediat ce poten]ialul pe linia /HALT ar fi sc\zut sub valoarea:

.

Dac\ se utilizeaz\ `n sistem un procesor Z80 `n tehnologie NMOS, valorile HIGH ale semnalelor pe pini nu dep\[esc 3.6V, deci LED-ul ar fi fost aprins permanent …

~n continuare, urmeaz\ o scurt\ prezentare a celor mai semnificativi cicli-ma[in\ cu diagrame de timp [16.] a c\ror cunoa[tere este esen]ial\ `n proiectarea schemelor de selec]ie pentru circuitele de memorie [i periferice, descriere important\ mai ales pentru c\ am folosit anumite artificii [i particularit\]i specifice microprocesorului Z80.

Cel mai important ciclu-ma[in\ este ciclul “fetch”, `n care se face extragerea [i interpretarea instruc]iunilor din memorie (fig. 2.1.3.). Acest ciclu este semnalat `n cazul microprocesorului Z80 de activarea semnalului specific ”Machine cycle one” (/M1), urmat la jum\tate de tact de cererea de acces la memorie (/MREQ) [i de semnalul /RD care valideaz\ citirea. Prezen]a semnalului /M1 este util\ mai ales pentru posibilitatea de rulare pas-cu-pas a programelor, cu oprire hardware dup\ fiecare instruc]iune prin stoparea ceasului (fa]\ de alte microprocesoare, Z80 este static pe stare, adic\ nu-[i modific\ starea intern\ la oprirea ceasului pe o perioad\ de timp nedefinit\), dar poate fi folosit [i `n alte scopuri (de exemplu, la separarea memoriei program de memoria de date plus stiv\, atunci c=nd memoria program este “read only”). Linia /MREQ se folose[te `mpreun\ cu linii de adres\ la selec]ia cipurilor de memorie (/CE), iar semnalul /RD se conecteaz\ la pinul de validare a ie[irii pe magistrala de date (/OE), at=t pentru circuitele de memorie ROM c=t [i pentru memoria RAM.

Fig. 2.1.3.

~n timpul decodific\rii instruc]iunii, deoarece magistralele microprocesorului `[i pot schimba con]inutul (instruc]iunea fiind deja extras\ din memorie), pe magistrala de adrese poate ap\rea acum con]inutul perechii de registre interne I-R, adic\ registrul-pagin\ de `ntreruperi – I (pe partea HIGH) [i contorul intern de re=mprosp\tare a memoriilor dinamice – R (pe partea LOW), care este incrementat `n fiecare ciclu “fetch”. Acest fapt asigur\ o utilizare extrem de eficient\ a magistralei de adrese, prin lipsa unor “timpi mor]i” de inactivitate [1.]. Momentul schimb\rii informa]iei de pe magistral\ este semnalat prin activarea liniei /REFSH care semnaleaz\ prezen]a adresei de re=mprosp\tare. Acest semnal poate fi utilizat la schimbarea regimului de lucru al memoriei (preg\tirea RAM-urilor dinamice pentru “refresh”), dar nu poate fi strob efectiv pentru adresa de re=mprosp\tare, deoarece magistrala nu este `nc\ stabil\ `n momentul apari]iei sale. Din acest motiv, microprocesorul mai activeaz\ `nc\ o dat\ `n ciclul “fetch” linia /MREQ, la jum\tate de tact de la schimbarea adresei pe magistral\. De abia apari]ia frontului negativ pe /MREQ atunci c=nd /REFSH este deja pe “0” logic poate `nc\rca sigur adresa de “refresh” `n memoria dinamic\.

S-ar putea pune `ntrebarea de ce am insistat pe aceast\ descriere dac\ la proiectarea sistemului nu am folosit memorii dinamice (`n prezent fiind disponibile memorii statice de capacit\]i suficiente) ?! Am folosit totu[i aceste particularit\]i ale microprocesorului Z80, la paginarea memoriei EPROM cu bancul de memorie RAM0, printr-un artificiu mai pu]in obi[nuit.

Deoarece contorul de re=mprosp\tare lucreaz\ modulo 128, folosind numai 7 bi]i din registrul R, bitul 8 nu este afectat de mecanismul de incrementare automat\, fiind disponibil pentru programator. Acest bit poate fi pus pe “0” sau pe “1” prin instruc]iunile de transfer `ntre registrul R [i acumulator, apari]ia sa pe magistrala de adrese put=nd fi memorat\ [i folosit\ ca un bit de port, provenit direct dintr-unul din regi[trii interni ai microprocesorului.

Avantajul esen]ial al acestui mod de expandare, pe l=ng\ evitarea pierderii unui bit dintr-un port I/O, se bazeaz\ pe o caracteristic\ a ciclului “fetch”, [i anume aceea c\ re=mprosp\tarea memoriei dinamice are loc `ntotdeauna dup\ extragerea codului instruc]iunii curente. Din acest motiv, dac\ bitul a fost pozi]ionat imediat `naintea unei instruc]iuni de salt codificat\ pe un singur octet, schimbarea configura]iei memoriei se va face dup\ extragerea instruc]iunii, microprocesorul “[tiind” deja din configura]ia anterioar\ unde va continua cu programul `n noua configura]ie. Rezultatul este practic posibiliattea de salt [i apel `ntre bancuri (pagini) de memorie expandate, care sunt mapate pe aceea[i zon\ de adrese [13.].

De exemplu, pentru salt necondi]ionat `ntre bancuri, se poate folosi secven]a urm\toare:

LD HL, adres\ ; `nc\rcare adres\ de salt

LD A, R ; citire bit 7 din R

XOR 80H ; complementare bit 7 `n acumulator

LD R, A ; modificare bit 7 cu apari]ie pe magistral\ dup\ “fetch”-ul urm\tor

JP (HL) ; salt la adresa din HL, dup\ comutare

De asemenea, se poate realiza [i apelul unor subrutine la adresele fixe de “restart” p#00H, 08H, 10H, 18H, 20H, 28H, 30H, 38H, dintr-un banc `n cel\lalt, prin folosirea instruc]iunii “RST p”. Singura observa]ie care trebuie f\cut\ `n acest caz este aceea c\ adresa de revenire va fi salvat\ `n stiv\ `n bancul nou, dup\ comutare, dac\ stiva este alocat\ pe zona de adrese care se pagineaz\. Din acest motiv, adresa de revenire trebuie preluat\ cu registrul HL din stiv\ `nainte de comutarea `napoi, subrutinele apelate `n bancul cel\lalt trebuind s\ se termine `n loc de RET, cu secven]a:

POP HL ; se preia adresa de `ntoarcere din stiv\, din bancul apelat

LD A, R ; se preg\te[te comutarea

XOR 80H ; `napoi, pentru `ntoarcerea

LD R, A ; din subrutin\

JP (HL) ; `ntoarcere `n bancul apelant

~n cazul concret al sistemului proiectat, deoarece am paginat bancul RAM0 pe EPROM (`n zona de adrese a primilor 32Ko), acest tip de apel este util mai ales `n situa]ia c=nd RAM0 nu se utilizeaz\ pentru a face “shadow” la memoria EPROM prin copiere, deci con]inutul celor dou\ memorii este diferit [i se dore[te, de exemplu, apelul unor rutine BIOS din EPROM, aflate la adresele fixate amintite. Memoria EPROM fiind “read only”, stiva va trebui alocat\ `n bancul RAM1, care nu este expandat, revenirea din subrutine put=ndu-se realiza prin:

LD A, R ; se preg\te[te comutarea

XOR 80H ; `napoi, pentru `ntoarcerea

LD R, A ; din subrutin\

RET ; `ntoarcere cu comutare [i extragere din stiva comun\

Din acela[i motiv, dac\ programul se ruleaz\ `n zona superioar\ (adresele `ntre 32Ko [i 64Ko), paginarea [i apelul rutinelor se poate face `n mod obi[nuit, f\r\ nici una din metodele [i precau]iile amintite (pierz=ndu-se [i avantajul pagin\rii prin R fa]\ de paginarea clasic\ printr-un bit de port). Existen]a bancului comun celor dou\ configura]ii aduce totu[i avantajul posibilit\]ii de transfer `ntre EPROM [i RAM0, prin intermediul RAM1, asigur=nd astfel o flexibilitate mai mare sistemului.

Men]ionez ca ideea de utilizare a bitului 8 din registrul R am preluat-o din microcalculatorul “COBRA” [13.], dar acolo era utilizat\ la schimbarea complet\ [i `ntr-un singur sens a configura]iei memoriei (chiar cu anumite erori hardware!), pe c=nd `n sistemul prezentat este utilizat\ la realizarea memoriei RAM – “shadow” pentru EPROM, cu posibilitate de salt [i apel direct `ntre cele dou\, `n ambele sensuri. Am mai folosit aceast\ metod\ de extindere a spa]iului de adrese pentru microprocesorul Z80 la dublarea memoriei RAM (de la 64Ko la 128Ko) la un microcalculator “HC-91”, unde comutarea memoriei era complet\, pe tot spa]iul de adresare, posibilitatea de salt `ntre bancuri fiind esen]ial\.

~n figura 2.1.4. se poate urm\ri conectarea circuitelor de memorie `n sistem, iar figura 2.1.5. prezint\ harta memoriei `n spa]iul de adrese al microprocesorului:

Fig. 2.1.4.

Memoria EPROM este un circuit 27C256 cu capacitatea de 32Ko × 8bit (realizat `n tehnologie CHMOS rapid\, cu consum redus), ocup=nd prima jum\tate a spa]iului de adrese-memorie, iar pentru bancurile RAM0 [i RAM1 am utilizat memorii RAM statice 61C256 cu aceea[i capacitate (de tipul memoriilor “cache” pe pl\cile cu 80486). Utilizarea unor memorii dinamice mai vechi nu ar fi adus nici un avantaj sistemului, acestea complic=nd inutil schema de accesare [i fiind extrem de sensibile la perturba]iile din medii industriale.

Fig. 2.1.5.

Magistralele tuturor circuitelor de memorie sunt conectate direct la magistralele procesorului, av=nd un “fan-in” extrem de redus, datorit\ tehnologiei moderne. Validarea ie[irilor pe magistrala de date se realizeaz\ cu /RD, iar validarea scrierii `n RAM-uri, cu /WR. Linia A15 care `mparte spa]iul de adrese al microprocesorului `n dou\ jum\t\]i se conecteaz\ separat, la blocul de decodificare pentru selec]ia memoriilor. La memoria EPROM, pinul pe care se aplic\ tensiunea de programare (Vpp) este conectat la Vcc, iar memora RAM1 are alimentarea separat\, pe linia Vdd care provine din blocul de comutare pe baterie, pentru posibilitatea de p\strare a informa]iei dup\ deconectarea tensiunii Vcc.

Figura 2.1.6. prezint\ modul de realizare a selec]iei memoriilor, inclusiv pentru paginarea EPROM-ului, dup\ o schem\ original\, `n care rolul pricipal este de]inut de cele dou\ sec]iuni ale decodorului MSI (cu integrare pe scar\ medie) – HCT 139, tot de tip CHMOS rapid [15.]. Din prima sec]iune se ob]ine semnalul de acces la memorie la ie[irea Y2A (numai atunci c=nd /REFSH este “1” [i /MREQ este “0”, pentru evitarea select\rii duble a memoriilor `n ciclul “fetch” care ar fi fost deranjant\ pentru timpii de acces, chiar dac\ la re=mprosp\tare nu se genereaz\ /RD sau /WR), precum [i semnalul de strob negativ al adresei de “refresh” la ie[irea Y0A (c=nd /REFSH este deja “0” [i /MREQ trece [i el pe “0”).

Acest mod de predecodificare elegant conduce la reducerea hazardului at=t la selec]ia pentru “fetch”, c=t [i la strobarea bitului 7 al registrului R pentru expandare. Tocmai aici, schema logic\ a microcalculatorului “COBRA” l\sa de dorit, strob-ul fiind ob]inut prin `nt=rzierea frontului negativ pe /REFSH, f\r\ condi]ionarea suplimentar\ cu /MREQ, ceea ce ducea uneori la porniri eronate (adresa de refresh A7 nu era perfect stabil\). Bitul 7 din registrul R este memorat `ntr-un bistabil “D” – LS 74 pe frontul pozitiv ob]inut prin inversarea strob-ului negativ de la ie[irea Y0A.

Cea de-a doua sec]iune HCT 139 decodific\ toate combina]iile dintre linia de adres\ A15 [i ie[irea Q a bistabilului, validate prin semnalul de acces la memorie (ie[irea Y2A), dup\ cum se poate vedea [i din tabelul urm\tor:

Se observ\ c\ datorit\ decodific\rii complete, se ob]in dou\ semnale de selec]ie pentru RAM1 (/CSRAM1_0 [i /CSRAM1_1), care trebuie unificate ulterior printr-un nivel de SAU `ntr-unul singur (/CSRAM1), deoarece bancul RAM1 este comun ambelor configura]ii de paginare. Pentru a fi posibil\ o eventual\ extindere `n exterior a memoriei sistemului (prin paginare clasic\ pe porturi), am prev\zut un semnal de invalidare a bancului RAM1 din exterior, provenit de la conectorul de extensie. Cele dou\ por]i NAND din schem\ realizeaz\ at=t unificarea semnalelor de la decodor (active LOW) pentru selec]ia bancului, c=t [i invalidarea acestei selec]ii c=nd semnalul exterior /RAMD # ”RAM1 Disable” este for]at pe “0” logic. Deoarece timpul de propagare prin cele dou\ sec]iuni cascadate ale decodorului este destul de mare, aici am montat un circuit ALS 00, care comut\ mai rapid dec=t por]ile LS sau HCT, pentru a nu mai introduce `nt=rzieri suplimentare [9.].

La resetarea sistemului, bistabilul este for]at pe “0” prin intrarea asincron\ de [tergere, sistemul pornind astfel `ntotdeauna pe EPROM. Imediat dup\ primul “fetch”, bistabilul va fi `nc\rcat tot cu valoarea “0”, deoarece registrul R este [ters [i el la resetarea microprocesorului.

Men]ionez c\ toate por]ile [i bistabilele r\mase disponibile pe capsule le-am folosit complet `n cadrul altor blocuri func]ionale ale sistemului, unde erau absolut necesare (nu exist\ utiliz\ri “de umplutur\”).

Fig. 2.1.6.

~ntr-un sistem cu microprocesor Z80, lucrul cu dispozitivele periferice se face printr-un ciclu-ma[in\ de intrare/ie[ire, marcat de activarea semnalului /IORQ care se folose[te `mpreun\ cu linii de adres\ la selec]ia dispozitivelor I/O, `nso]it de /RD sau /WR care specific\ direc]ia transferului pe magistral\ (fig. 2.1.7.). Microprocesorul acord\ un timp suplimentar fa]\ de ciclii “fetch” [i de acces la memorie pentru stabilizarea adresei, activ=nd semnalul /IORQ la o perioad\ de tact dup\ depunerea adreselor pe magistral\. Pentru a permite dispozitivului periferic s\ se selecteze `n timp util, Z80 insereaz\ `n mod automat [i o perioad\ de tact de a[teptare (Tw), care prelunge[te ciclul de acces.

Fig. 2.1.7.

Am prezentat [i aceast\ diagram\ de timp [16.] deoarece este necesar\ pentru explicarea modului de conectare a controllerului I2C `n sistem (vezi &2.6.).

Este interesant de subliniat c\ prezen]a celor dou\ semnale distincte /MREQ [i /IORQ `n locul unuia singur ( la I8086 [10.]) permite selectarea comod\ [i elegant\ a circuitelor din spa]iul de adrese-memorie [i a celor din spa]iul de adrese-intrare/ie[ire, prin validarea separat\ a acestora, numai `n momentul transferului.

~n ciclul de `ntrerupere mascabil\ procesorul accept\ `ntreruperea semnalat\ pe linia /INT printr-un “fetch” de preluare a vectorului de `ntrerupere, activ=nd /M1 [i /IORQ `n locul lui /MREQ de la ciclul “fetch” propriu-zis. De aceast\ dat\ `ns\, nu se activeaz\ semnalul /RD, citirea vectorului fiind strobat\ prin /IORQ, care apare cu 2.5 st\ri T decalat fa]\ de /M1, inser=ndu-se automat 2 st\ri de WAIT, Tw. Se acord\ astfel timp suplimentar pentru propagarea [i stabilizarea priorit\]ilor prin maxim 4 circuite periferice conectate `n lan]ul de priorit\]i serie specific familiei Z80. Ca [i `n “fetch”-ul propriu-zis, ciclul se termin\ cu 2 tac]i de re=mprosp\tare a memoriilor dinamice, cu activarea /REFSH [i /MREQ [2.].

Problema care se pune la selec]ia circuitelor periferire este asigurarea compatibilit\]ii `ntre circuitele din familia Z80 care lucreaz\ cu magistrala `ntr-un mod mai particular [i circuitele din alte familii, deoarece circuitul de interfa]\ I2C [i magistrala pentru LCD lucreaz\ `n modul de magistral\ Intel 82xx (mai universal\). De asemenea, sistemul este `n a[a fel g=ndit [i proiectat, `nc=t s\ permit\ extinderea `n exterior cu circuite periferice din familia I82xx [6.].

Majoritatea circuitelor de tip periferic-integrat au cel pu]in una din intr\rile /RD sau /WR, dar nu toate au [i intrarea /IORQ. La circuitele din familia Z80 apare numai /RD, acestea gener=nd /WR-ul intern, iar intrarea /IORQ este prezent\, fiind folosit\ [i la recunoa[terea ciclului de achitare-`ntrerupere (c=nd apare `nso]it de activarea lui /M1, dar f\r\ /RD sau /WR). De asemenea, aceste circuite `[i reini]ializeaz\ logica serial\ de priorit\]i prin detectarea extragerii instruc]iunii RETI de c\tre procesor, folosind apar]ia lui /M1 `nso]it de /RD, cu /IORQ inactiv.

Circuitele din familia 82xx, au ambele intr\ri /RD [i /WR, dar nu au /IORQ. Deoarece aceste circuite nu plaseaz\ pe magistrala de date un vector de `ntrerupere, s-ar p\rea c\ la selec]ia cipului ar trebui decodificat\ [i absen]a activ\rii lui /M1, pentru a evita o eventual\ selectare parazit\. Totu[i, acest lucru nu este necesar, deoarece `n lipsa unuia din semnalele /RD [i /WR, circuitele Intel, `[i p\streaz\ starea de impedan]\ ridicat\ `n ciuda unui eventual semnal de selec]ie favorabil, iar `n ciclul de achitare-`ntrerupere /RD sau /WR nu se activeaz\. De fapt, la microprocesoarele Intel (I8080 [4.], I8086 [3.]) semnalele /RD [i /WR ale circuitelor periferice se leag\ la liniile /IORD, respectiv /IOWR, care se activeaz\ numai `n cazul ciclilor de intrare-ie[ire. O prim\ posibilitate de adaptare la magistrala lui Z80 a acestor circuite ar fi refacerea acestor semnale, prin condi]ionarea /RD [i /WR cu /IORQ (folosind c=te o poart\ “OR”, semnalele fiind active pe “0” logic): ;

.

Totu[i, aceast\ metod\ necesit\ por]i suplimentare [i nu permite utilizarea unui singur decodificator pentru toate perifericele din sistem, motiv pentru care am apelat la a doua variant\: condi]ionarea cu /IORQ a semnalelor /CS [i legarea direct\ a intr\rilor /RD [i /WR la liniile corespunz\toare ale procesorului. Metoda nu compromite buna func]ionare a circuitelor periferice din familia Z80, prezen]a lui /IORQ ca intrare direct\ `n aceste circuite fiind de fapt o condi]ionare redundant\. La opera]iile normale de I/O semnalul era oricum activ, iar `n ciclul de recunoa[tere a `ntreruperii [i la reini]ializarea logicii de priorit\]i, circuitul nu trebuie s\ fie selectat. Folosind aceast\ condi]ionare, am reu[it s\ utilizez un singur decodificator cu validare de tip HCT 138 [15.], pentru generarea tuturor “chip select”-urilor pentru circuitele de I/O din sistem [i chiar a 3 /CS-uri adi]ionale, disponibile la conectorul de extensie (fig. 2.1.6.).

Decodificatorul este validat de combina]ia de semnale (A6#0, /IORQ#0, A7#1) pe intr\rile de validare (/E1, /E2, E3), pentru decodificare folosindu-se bi]ii de adres\ (A5A4A3) conecta]i `n aceast\ ordine la intr\rile (CBA). ~n acest fel, am reu[it decodificarea complet\ a 5 bi]i de adres\, ultimii 3 bi]i mai pu]in semnificativi r\m=n=nd disponibili pentru selectarea a 8 porturi posibile dintr-un circuit periferic, valoare mai mult dec=t suficient\ pentru conectarea unor periferice complexe, cum ar fi chiar un “hard-disk” cu controller IDE (care are nevoie de 3 bi]i de adres\ [i dou\ semnale de “chip select”).

Din acest motiv, circuitele care au numai 2 sau 4 porturi vor ocupa de fapt tot 8 porturi, prin repetarea porturilor `n ordine, pe `ntreaga zon\ de adrese definit\ prin /CS-ul respectiv (datorit\ faptului c\ astfel de circuite prezint\ mai pu]ini bi]i de selec]ie intern\, din cei 3 bi]i disponibili r\m=n=nd c=]iva indiferen]i). Maparea adreselor de port `n spa]iul de I/O considerat numai pe 8 bi]i (microprocesorul Z80 permite [i adresarea dispozitivelor de intrare-ie[ire pe 16 bi]i), dedus\ din modul de alocare al ie[irilor decodificatorului pe semnalele de selec]ie, este cea din tabelul urm\tor:

2.2. Blocul generator de tact [i ob]inerea frecven]elor pentru interfa]a serial\.

Generatorul de tact are rolul de a furniza semnalul de ceas (CLK) c\tre microprocesor [i circuitele periferice care necesit\ prezen]a acestui semnal pentru secven]ierea unor opera]ii interne [i pentru sincronizarea transferurilor pe magistrale. De asemenea, blocul produce [i un semnal primar (BAUD), care, prin diviz\ri suplimentare programabile, permite formarea ulterioar\ a frecven]elor de transmisie [i recep]ie pe interfa]a serial\ RS-232.

Microprocesorul Z80B [i circuitele sale periferice func]ioneaz\ la o frecven]\ maxim\ de tact cu valoarea de 6.17 MHz [17.], fapt care permite utilizarea convenabil\ a unei frecven]e pentru ceasul sistemului de 6.144 MHz, ob]inut\ prin divizarea cu 2 a semnalului de la un oscilator cu quartz pe 12.288 MHz. Aceast\ frecven]\, descompus\ `n factori primi, con]ine majoritatea termenilor necesari pentru formarea ratelor uzuale de transmisie pe interfa]a serial\ [3.]:

.

Din tabelul prezentat anterior, se observ\ c\ ratele de transfer: 14400, 28800, 57600, 115200 bauds, nu se pot ob]ine din acest quartz, deoarece ar necesita prezen]a unui termen 3 suplimentar `n descompunere.

Pentru ob]inerea diviz\rilor programabile am utilizat c=te un canal num\r\tor din circuitul periferic Z80B-CTC, pentru fiecare din cele dou\ canale seriale. Aceste canale pe 8 bi]i pot func]iona `n mod temporizator, cu predivizor (1/16 sau 1/256 din ceasul sistemului), sau `n mod num\r\tor, f\r\ predivizor. Deoarece, pentru sincronizarea de bit `n modul de transmisie asincron, interfe]ele seriale necesit\ o frecven]\ de 16 ori mai mare dec=t rata de transmisie a datelor, cea mai mare frecven]\ disponibil\ pentru serial\ este:

,

de unde rezult\ c\ cea mai mare rat\ serial\ ce se poate ob]ine folosind canalul `n modul temporizator este de:

,

rat\ ce se ob]ine prin `nc\rcarea canalului cu constanta 5.

Aceast\ rat\ este prea mic\, din considerente de versatilitate a sistemului, deci utilizarea canalelor in modul temporizator cu predivizare nu este avantajoas\. Dac\ acestea se folosesc `n modul num\r\tor, impulsurile primite pe intr\rile de num\rare trebuie s\ aib\ perioada de cel pu]in 2 ori mai mare dec=t a ceasului sistemului, deci este necesar un predivizor extern. Predivizorul, `mpreun\ cu canalul num\r\tor programabil, trebuie sa elimine tremeni de forma , astfel `nc=t s\ fie posibil\ ob]inerea a c=t mai multe rate de baud uzuale.

Pentru ob]inerea unei rate de transfer c=t mai mari, predivizorul extern trebuie s\ elimine numai constanta 5 din descompunerea `n factori a ceasului de 6.144 MHz, divizarea suplimentar\ prin puteri ale lui 2 r\m=n=nd `n sarcina canalului, la op]iunea programatorului. Deoarece un termen 5 trebuie oricum eliminat, indiferent de rata de baud (dup\ cum se observ\ din tabelul anterior), iar eliminarea oric\rui termen – putere a lui 2 din descompunere reduce rata maxim\, utilizarea unui predivizor extern cu 5 reprezint\ solu]ia optim\.

Fig. 2.2.1.

~n figura 2.2.1. este prezentat\ schema blocului generator, care produce semnalele CLK [i BAUD. Oscilatorul este de tip serie, fiind realizat cu inversoare LS-TTL care lucreaz\ `n regim de amplificator (prin polarizarea de tip reac]ie negativ\ `n curent continuu cu rezisten]ele R1, respectiv R2, `n zona activ\ a caracteristicii de tranfer), dup\ o schem\ clasic\ [9.]. Rezistoarele nu sunt critice, valoarea de fiind optim\ pentru inversoarele din seria LS, iar condensatorul C2, de cuplaj `ntre amplificatoare, are o valoare suficient de mare pentru a se comporta ca un scurtcircuit la frecven]a de lucru.

Montajul de tip serie are c=teva avantaje. Quartz-ul lucreaz\ exact pe frecven]a de rezonan]\ serie, care corespunde frecven]ei de rezonan]\ mecanic\ a cristalului (marcat\ `n clar), independent\ de capacit\]ile parazite externe cristalului, spre deosebire de frecven]a paralel\ ce depinde de rezonan]a electric\ a circuitului echivalent. Alt avantaj al schemei cu rezonator serie este stabilitatea mai bun\ datorat\ unui factor de reac]ie pozitiv\ mai puternic (2 inversoare) [i a defazajului mai precis (), realizat numai cu componentele active, f\r\ condensatoare suplimenare, ca `n cazul oscilatorului de tip paralel. De asemenea, factorul de transmisie pe bucla de reac]ie, mult supraunitar, permite o u[oar\ “dreptunghiularizare” a semnalului `nc\ de la ie[irea oscilatorului, care nu mai lucreaz\ sinusoidal.

Singura observa]ie ce trebuie amintit\ este prezen]a condensatorului “de pornire” – C1. Am observat, `n urma unor teste, c\ lipsa acestui condensator nu asigur\ o amorsare sigur\ a oscilatorului la conectarea tensiunii de alimentare. Explica]ia rezid\ `n simetria schemei, care poate ajunge la un echilibru `n curent continuu `n lipsa unui semnal de excita]ie ini]ial (eventual cu mici oscila]ii `n jurul unei valori de curent continuu aflat\ `ntre nivelele de “0” [i “1” logic, cu perioada dat\ de timpul de propagare, atunci c=nd caracteristica inversoarelor este foarte abrupt\ sau prezint\ histerezis). Condensatorul C1 asigur\ amorsarea prin pornirea de la tensiune zero a intr\rii oscilatorului, care nu mai poate ajunge astfel la echilibru `n curent continuu. Valoarea sa este suficient de mic\, astfel `nc=t `nc\rcarea [i desc\rcarea sa sunt mult mai scurte dec=t semiperioada semnalului dreptunghiular generat de oscilator.

Din motivele prezentate, pentru generarea semnalului primar pentru interfa]a serial\, am utilizat un circuit LS 90 care con]ine patru bistabile JK “master-slave”, interconectate astfel `nc=t s\ realizeze un divizor cu 2 [i un divizor cu 5, cu intr\ri comune de resetare (neutilizate `n schem\) [14.]. Num\r\torul – divizor cu 2 prime[te semnal direct de la oscilator, intrarea sa de ceas neav=nd o `nc\rcare prea mare (1,5 sarcini LS-TTL), la ie[irea lui ob]in=ndu-se frecven]a de ceas a sistemului, fCLK#6.144 MHz. Acest semnal este apoi trecut printr-un inversor suplimentar, pentru m\rirea “fan-out”-ului, prev\zut la ie[ire [i cu un rezistor de tip “pull-up” la Vcc, de valoare relativ mic\, pentru formarea nivelului de “1” logic necesar circuitelor MOS din familia microprocesorului Z80 [2.] (acest rezistor are [i rolul de `mbun\t\]ire a frontului pozitiv, care este mai pu]in abrupt dec=t cel negativ `n cazul circuitelor de tip TTL).

Num\r\torul modulo 5 preia semnalul direct de la ie[irea divizorului cu 2, pentru a nu `nc\rca suplimentar linia de tact (inversarea fa]\ de semnalul CLK neav=nd importan]\) [i furnizeaz\ la ie[irile Qc [i Qd semnale cu perioada de 5 ori mai mare, dar cu factori de umplere diferi]i: 2/5, respectiv 1/5. Pentru generarea frecven]elor de BAUD, am preferat semnalul cu un factor de umplere mai mare, deoarece acesta trebuie aplicat `n continuare circuitului num\r\tor programabil [i este mai pu]in critic `n privin]a constr=ngerilor de timp dec=t cel cu factorul de umplere 1/5.

2.3. Blocul num\r\tor – temporizator programabil [i controler de `ntreruperi.

Acest bloc are rolul de a asigura sistemului o referin]\ de timp real (`ntrerupere la un interval programabil bine determinat), posibilitatea m\sur\rii precise (prin hardware) a unor intervale de timp, posibilit\]i de num\rare a unor evenimente externe (utile mai ales `n cazul unor aplica]ii de control automat), generarea ratelor programabile de transmisie – recep]ie pentru interfa]a serial\, precum [i adaptarea / arbitrarea cererilor de `ntrerupere de la circuite care nu fac parte din familia Z80 [6.] (de exemplu controllerul I2C – PCF 8584, sau alte circuite externe sistemului). Pentru aceste circuite, se asigur\ alocarea pozi]iei (fixe) `n lan]ul de priorit\]i [i generarea vectorului de `ntrerupere `n modul vectorizat avansat, specific microprocesorului Z80 (modul 2).

Blocul este, de fapt, un circuit temporizator – num\r\tor Z80B-CTC, conectat `n schem\ astfel `nc=t s\ poat\ fi utilizat `ntr-un mod c=t mai universal posibil.

Fig. 2.3.1.

Pe scurt, acest circuit [2.] are patru canale de tip “timer/counter” care func]ioneaz\ prin decrementare pe 8 bi]i, cu posibilitate de prescalare `n modul temporizator (predivizare cu 16 sau cu 256 a ceasului sistemului) [i cu re=nc\rcare automat\ `n num\r\torul – decrementor a constantei de timp (`nscris\ [i p\strat\ `ntr-un registru auxliar), la ini]ializare [i la fiecare trecere prin zero. Structura bloc pentru un canal este cea din figura 2.3.1.

~n modul temporizator se folose[te ceasul sistemului (CLK), cu prescalare [i cu declan[are automat\ sau extern\ (prin intrarea TRG), iar `n modul num\r\tor, canalul num\r\ fronturile active de la intrarea extern\ de num\rare (CK). Valoarea r\mas\ `n num\r\tor poate fi citit\ `n orice moment de c\tre unitatea central\, f\r\ a perturba func]ionarea canalului, iar la trecerea prin zero apare un impuls pozitiv pe ie[irea ZC/TO (at=t `n modul temporizator – TO, c=t [i `n modul num\r\tor – ZC) [i se face o cerere de `ntrerupere c\tre unitatea central\, dac\ `ntreruperile canalului au fost validate. Circuitul modific\ automat, pentru fiecare canal, vectorul de `ntrerupere (`nscris ini]ial numai `n canalul zero) [i asigur\ o arbitrare fix\ a priorit\]ilor (`n func]ie de num\rul de ordine al canalului, cu canalul 0 – cel mai prioritar).

Un avantaj important al circuitului, pe l=ng\ structura sa mai simpl\ [i modul mai comod de operare fa]\ de alte circuite cu func]ii asem\n\toare din alte familii (de exemplu circuitul I8253 [6.]), este posibilitatea program\rii frontului activ utilizat pentru declan[area m\sur\rii timpului sau la num\rarea evenimentelor. De asemenea, Z80-CTC are 4 canale, fa]\ de numai 3 ale circuitului I8253, iar l\]imea de 8 bi]i asigur\ o granularitate a timpului suficient\ pentru aplica]iile curente. Dac\ este necesar\ o granularitate mai fin\, canalele se pot conecta `n cascad\.

Circuitul poate fi folosit [i drept controller de `ntreruperi pentru circuite care nu sunt compatibile cu modul de lucru vectorizat al familiei Z80, utiliz=nd unul sau mai multe canale pentru conversia semnalului de `ntrerupere, celelalte canale put=nd p\stra rolurile de m\surare a timpului sau de contoare de evenimente. Acest lucru este posibil prin programarea canalului respectiv `n modul num\r\tor, `nc\rcat cu constanta de timp 01h, datorit\ logicii interne de gestionare a `ntreruperilor precum [i posibilit\]ii alegerii frontului activ al intr\rii de num\rare (care devine `n acest caz intrare de tip sau ). Canalul ales mai poate fi `nc\ folosit ca temporizator cu declan[are intern\, atunci c=nd nu se folose[te `ntreruperea de la perifericul conectat la acesta.

Dezavantajul unei astfel de structuri const\ `n faptul c\ priorit\]ile sunt fixe [i nu pot fi modificate prin program, dar acesta este dezavantajul `ntregului sistem de `ntreruperi `n modul specific microprocesorului Z80, unde priorit\]ile sunt fixate de pozi]ia fizic\ a circuitelor `n lan]ul de `ntreruperi, prioritate cablat\ prin semnalele IEI, IEO.

Am folosit aceat\ posibilitate la proiectarea sistemului, pentru integrarea controllerului I2C `n sistemul de `ntreruperi al microprocesorului Z80, folosind canalul 3, care nu are, oricum, ie[ire de num\rare ZC/TO [i este cel mai pu]in prioritar. ~n lipsa acestui artificiu, schema logicii de gestionare a `ntreruperii de la controllerul I2C s-ar fi complicat semnificativ, chiar dac\ circuitul PCF 8584 poate genera un vector de `ntrerupere memorat intern [18.]. ~n cazul altor circuite (de exemplu cele din familia I82xx) care pot fi ad\ugate `n exterior sistemului, folosirea circuitului CTC devine obligatorie.

Principalul dezavantaj al circuitului Z80-CTC este faptul c\ decrementarea num\r\torului pentru fiecare canal are loc `n mod sincron cu ceasul sistemului, CLK (circuitul I8253 nu are acest dezavantaj). Din acest motiv, Z80-CTC nu poate fi folosit ca generator programabil de rate seriale folosind un semnal de la un oscilator cu quartz separat, diferit de cel al sistemului, fiind necesar\ folosirea uniu cristal particular pentru tactul microprocesorului, care s\ fie [i intrare de num\rare pentru divizorul programabil.

Conectarea circuitului `n sistem este prezentat\ `n figura 2.3.2. Se remarc\ conectarea direct\ la magistrala microprocesorului, cu semnalele specifice, folosind pentru selectarea circuitului un semnal /CSCTC, generat la decodificatorul de mapare I/O, precum [i selectarea canalelor cu bi]ii cel mai pu]in semnificativi de adres\. Circuitul este conectat `n lan]ul de `ntreruperi `n pozi]ia cea mai prioritar\, semnalul IEI de validare a `ntrerupeilor sale fiind conectat printr-un rezistor la Vcc [i scos `n exterior, la conectorul de extensie al sistemului, `n vederea unei eventuale conect\ri externe a unui circuit mai prioritar. Canalul 0 devine cel mai prioritar periferic din sistem, urmat de celelalte canale [i abia apoi de circuitul de interfa]\ serial\, care va primi semnalul de validare a `ntreruperilor de la ie[irea IEO. Aceast\ mapare este necesar\ deoarece `ntreruperile de la referin]a de timp real sunt prioritare fa]\ de oricare alt\ surs\ de `ntrerupere.

Fig. 2.3.2.

Semnalele canalului 0 sunt complet disponibile la conectorul cu 15 pini C3F-DB15, denumit “TIMING”, canalele 1 [i 2 sunt conectate `n cascad\, fiind folosite pentru generarea ratelor pentru cele 2 canale de interfa]are serial\, iar canalul 3 redirecteaz\ `ntreruperea de la interfa]a I2C. Semnalele TO1 [i TO2 sunt conectate [i la intr\rile de ceas ale celor dou\ canale de comunica]ie din interfa]a serial\. S-ar p\rea c\ aceast\ conectare cablat\ `n cascad\ limiteaz\ posibilit\]ile de utilizare a circuitului, mai ales limitarea ratei maxime a canalului serial care prime[te semnalul de la cel de-al doilea canal TO2, care ar trebui s\ fie totdeauna mai mic\ sau cel mult egal\ cu viteza primului canal, ce are ceasul de shiftare de la TO1, dar aceste rate vor fi divizate suplimentar, eventual prin factori diferi]i, `n canalele seriale.

Semnalul BAUD aplicat la intrarea de num\rare a canalului 1, prin felul `n care a fost ob]inut (vezi &2.2.), `ndepline[te at=t constr=ngerea legat\ de m\rimea perioadei (care trebuie s\ fie mai mare dec=t dublui perioadei de tact sistem), c=t [i constr=ngerea legat\ de l\]imea impulsului (care trebuie s\ fie cel pu]in o perioad\ de tact sistem) [17.].

Referin]a de timp real poate fi realizat\ folosind canalul 0, dar cascadarea cablat\ d\ posibilitatea utiliz\rii celor dou\ canale (1 [i 2) sau numai a ultimului ca o a doua referin]\ de timp real, cu o frecven]\ de `ntrerupere foarte sc\zut\, dat\ de divizarea ceasului sistem sau a semnalului BAUD prin dou\ canale succesive. Mai men]ionez c\ cel de-al doilea sau ambele canale pot fi `nc\ utilizate independent, ca temporizatoare, `n perioadele c=nd nu se folose[te interfa]a serial\ (`n modul temporizator cu declan[are intern\ nu conteaz\ intr\rile CK/TRG). De asemenea, semnalele de sf=r[it – num\rare sunt scoase la conectorul C3F-DB15, `mpreun\ cu semnalul BAUD, pentru eventuale utiliz\ri ca surse de impulsuri programabile, mai ales `n situa]a c=nd nu se folosesc ambele canale seriale.

2.4. Interfa]a serial\ – RS 232.

Pentru a putea controla sistemul de dezvoltare cu ajutorul unui calculator (pe care se pun la punct programele), pentru `nc\rcarea unor programe `n memoria RAM sau pentru comunica]iile cu alte sisteme `n aplica]ii de tip control automat, este necesar\ prezen]a unei interfe]e seriale. Cel mai r\sp=ndit standard pentru transfer serie a datelor este standardul asincron RS 232, care permite conectarea la porturile COMx ale unui calculator personal compatibil IBM-PC.

Cu ajutorul unui program monitor `nscris `n memoria EPROM a microsistemului [i a unui program de tip terminal care ruleaz\ pe calculatorul PC, prin leg\tura serie se pot `nc\rca [i salva programele pentru sistem (`n format INTEL–HEX sau direct `n format binar), iar prin afi[are `n regim de tip consol\ se poate vizualiza [i modifica con]inutul regi[trilor microprocesorului sau al memoriei, se pot citi sau `nscrie porturile de intrare-ie[ire, se pot depana programe prin “trasare” pas-cu-pas, iar dac\ monitorul permite, se pot asambla [i dezasambla programe `n cod mnemonic direct pe microsistem (“on-the-fly”).

~n cazul aplica]iilor de tip control automat, prin leg\tura serial\ se poate comanda [i controla de la distan]\ (de c\tre un operator uman) func]ionarea echipamentelor industriale conduse cu ajutorul nucleului de dezvoltare cu Z80, se pot prelua datele achizi]ionate de sistem de la senzori [i traductoare, sau se pot conecta mai multe sisteme de conducere `n re]ea (realizate cu microprocesoare sau cu microcontrollere). ~n acest ultim caz, este necesar\ posibilitatea de conectare pe aceea[i magistral\ serial\ a mai multor echipamente care au facilit\]i de recunoa[tere automat\ a adresei (prin hardware).

Interfa]a serial\ a sistemului de dezvoltare este realizat\ `n jurul unui circuit de interfa]\ de tip Z80-SIO/0 [i are 2 canale de comunica]ie “full duplex”, care pot fi folosite at=t `n mod asicron RS 232, dar [i `n mod sincron, cu posibilitate de conectare `n re]ea [i recunoa[tere automat\ a adresei. Circuitul este de fapt un controller serial “inteligent”, foarte performant [i cu posibilit\]i multiple de operare [2.]. Cele dou\ canale prezint\, pe l=ng\ semnalele de transmisie/recep]ie serie [i semnale pentru comanda [i verificarea st\rii modemului, conform standardului RS 232, dar care pot fi folosite [i ca ie[iri sau intr\ri de uz general, beneficiind de posibilitatea de `ntrerupere la schimbarea st\rii intr\rilor (“interrupt-on-change”, facilitate foarte util\, asem\n\toare porturilor microcontrollerului PIC 16F84 [11.], care permite ca modificarea st\rii unui traductor s\ fie sesizat\ de sistem direct printr-o `ntrerupere [i nu prin testare software a intr\rii – “pooling”, nefiind necesar nici hardware suplimentar).

Pentru realizarea transferului de date, st\ri [i comenzi cu unitatea central\, Z80-SIO poate folosi testarea software (“pooling”), `ntreruperile, sau tehnica transferului pe blocuri de octe]i. Circuitul apare `n spa]iul I/O prin patru porturi distincte, c=te un port de date [i unul de comenzi/stare pentru fiecare canal, resursele interne fiind accesibile prin adresare indirect\ (se transmite mai `nt=i adresa registrului [i apoi se transfer\ datele), pentru a nu `nc\rca spa]iul I/O cu adrese de registre interne [i pinii cu semnale de selec]ie.

Tehnica test\rii software este util\ numai pentru programul monitor, presupun=nd verificarea permanent\ sau periodic\ prin program a parametrilor ce caracterizeaz\ transferul, citind registrele de stare. Acest mod de lucru nu poate fi util `n cazul unui sistem de operare `n timp real, pentru control industrial, care este condus de evenimente [i folose[te `ntreruperi (este de tip “interrupt – driven”).

Lucrul cu `ntreruperile este facilitat de prezen]a unui controller de `ntreruperi intern, care gestioneaz\ `ntreruperile din 8 surse, c=te patru pentru fiecare canal (“buffer” de transmisie gol, schimbare stare intrare auxiliar\, caracter recep]ionat disponibil, condi]ie special\ de recep]ie), put=nd “puncta” direct opt rutine de tratare prin modificarea vectorului de `ntrerupere ini]ial, `n func]ie de surs\ (lucr=nd `n modul 2, vectorizat).

Interesant\ este [i posibilitatea transferului pe blocuri de octe]i, folosind instruc]iunile cu repetare specifice procesorului Z80 (OTIR, OTDR, INIR, INDR) [2.]. Acest mod de operare necesit\ sincronizarea hardware a opera]iilor de intrare/ie[ire pentru a nu se pierde informa]iile atunci c=nd perifericul nu este preg\tit sau nu are datele disponibile la viteza de lucru a microprocesorului. Pentru aceasta, cele dou\ canale dispun de dou\ linii care pot fi programate ca ie[iri de tip /WAIT cu drena `n gol, pentru a putea fi conectate `ntr-o configura]ie SAU-cablat (semnalele sunt active LOW) pe intrarea similar\ a microprocesorului.

De asemenea, modul de transfer pe blocuri se mai poate folosi [i la programarea circuitului, prin completarea unei tabele cu adresa [i con]inutul fiec\rui registru de comand\, care este apoi transmis\ printr-o singur\ instruc]iune OTIR, `n acest caz nefiind necesar\ sincronizarea (resursele interne sunt disponibile la viteza de lucru a unit\]ii centrale).

Circuitul Z80-SIO/0 are o singur\ intrare pentru ceasul de recep]ie / transmisie serial\ pe canalul B, av=nd `n schimb prezente toate semnalele pentru modem, spre deosebire de celelalte versiuni Z80-SIO/1 [i Z80-SIO/2, care au intr\ri de ceas separate, dar le lipse[te c=te unul din pinii de comand\/stare pe canalul B (din limitare la 40 pini pe capsul\) [2.]. Am considerat mai util\ prezen]a complet\ a acestor semnale, deoarece lucrul cu rate seriale diferite la transmisie [i recep]ie este mai rar `nt=lnit `n practic\ [i era, oricum, imposibil datorit\ existen]ei a numai dou\ surse de ceas programabil pentru BAUD, c=te una pentru fiecare canal (ceasul de recep]ie este conectat `mpreun\ cu cel de transmisie [i pentru canalul A, chiar dac\ semnalele erau distincte).

Schema blocului de interfa]\ serial\ se poate urm\ri `n figurile 2.4.1. [i 2.4.2.

Fig. 2.4.1.

Se remarc\ din figura 2.4.1. conectarea la magistralele specifice microprocesorului Z80 `n spa]iul de I/O, folosind pentru selec]ia porturilor din circuit bi]ii cel mai pu]in semnificativi de adres\ (A0 – pentru selec]ie canal A#0/B#1 [i A1 – pentru selec]ie Date#0/Comenzi-st\ri#1) care, `mpreun\ cu semnalul de selectare a circuitului primit de la decodificatorul de adrese I/O (/CSSIO), asigur\ maparea porturilor la adrese succesive.

Controllerul serial este al doilea circuit `n lan]ul de priorit\]i pentru `ntreruperi mascabile, primind semnalul de validare IEI de la Z80-CTC, [i asigur=nd validarea `ntreruperilor pentru circuitul de interfa]\ paralel\ Z80-PIO, prin IEO. Aceast\ conectare relativ prioritar\ este necesar\ pentru evitarea pierderii caracterelor la recep]ie, situa]ie care poate ap\rea mai ales `n cazul ratelor mari de transfer folosind `ntreruperi, chiar dac\ circuitul are c=te un buffer FIFO de 4 nivele at=t pentru date c=t [i pentru erori.

~n modul asincron, SIO `[i formeaz\ perioadele de bit prin divizarea suplimentar\ cu 16, 32 sau 64 a semnalelor TO1, respectiv TO2 primite de la CTC, divizare ce poate fi diferit\ pentru fiecare canal `n parte. Acest fapt asigur\ ob]inerea ratelor mai mari pe canalul B fa]\ de canalul A, `n anumite limite, chiar dac\ ceasul TO2 are totdeauna o frecven]\ mai mic\ dec=t TO1 (vezi &2.3.). ~n modurile sicrone, rata de bit este egal\ cu frecven]a semnalelor de ceas, acestea nefiind divizate suplimentar.

Fig. 2.4.2.

Pentru conversia nivelului de tensiune necesar\ standardului RS 232 am utilizat (fig. 2.4.2.) dou\ circuite MAX 232 (ICL 232 [21.]), care permit alimentarea numai de la sursa Vcc#5V, gener=nd intern tensiunile de alimentare a transmi]\toarelor de linie (^10V [i -10V) printr-o rederesare cu multiplicare de tensiune [i inversare de polaritate a semnalului de la un oscilator RC intern (fig. 2.4.3.).

Condensatoarele C4 [i C5, respectiv C8 [i C9 din schem\ sunt necesare dublorului de tensiune intern [i inversorului de polaritate din fiecare circuit (condensatoare – pomp\ de sarcin\), dar condensatoarele C6 [i C7 (condensatoare – rezervor de sarcin\, pe care se ob]in tensiunile finale – negativ\ fa]\ de mas\, respectiv pozitiv\ fa]\ de Vcc) le-am conectat `n comun ambelor circuite, asigur=nd astfel pe l=ng\ economia de componente pe cablaj [i o filtrare mai bun\ a tensiunii redresate, cu sc\derea impedan]ei sursei de alimentare, fapt care duce la cre[terea capabilit\]ii `n curent a inversoarelor de transmisie pe linie. Fig. 2.4.3.

Alte caracteristici notabile ale circuitelor sunt protec]ia la scurtcircuit a inversoarelor de transmisie pe linie [i plaja larg\ de tensiuni la intrarea `n inversoarele de recep]ie (±30V), care prezint\ [i histerezis pentru cre[terea imunit\]ii la zgomotele de pe liniile seriale [21.].

Semnalele de comand\/stare ale canalului A sunt conectate `n totalitate (prin intermediul convertoarelor de nivel – fig. 2.4.2.) la conectorul C4M-DB9, pentru a putea fi utilizate la conectarea unui modem sau la comunica]ia serial\ cu alt echipament de calcul folosind protocol hardware pentru controlul fluxului de date (RTS/CTS # ”Request To Send/Clear To Send” sau DTR/DSR # ”Data Terminal Ready/Data Set Ready”) [6.].

Linia DCDA # ”Data Carrier Detect” (pinul nr. 1 de la conectorul SERIAL-A) se conecteaz\ de obicei `mpreun\ cu DSRA # ”Data Set Ready” (c=nd se detecteaz\ purt\toarea modemul este automat preg\tit pentru comunica]ie), iar linia RIA # ”Ring Indicator” a r\mas nefolosit\ (`n lipsa unui receptor de linie suplimentar prin intermediul c\ruia se putea conecta la intrarea/ie[irea de sincronizare SYNA, care poate fi utilizat\ drept intrare de uz general `n modul asincron).

Canalul B are scoase la conectorul SERIAL-B numai liniile de transmisie/recep]ie serial\ TXDB [i RXDB, pinii corespunz\tori semnalelor de protocol fiind conecta]i direct `ntre ei, pentru situa]ia c=nd echipamentul necesit\ obligatoriu validarea transmisiei [i recep]iei prin protocol hardware [i aceast\ conectare nu este deja f\cut\ `n interiorul mufei corespunz\toare cablului de leg\tur\ (RTSB este conectat cu CTSB, iar DSRB `mpreun\ cu DCDB sunt legate la DTRB, astfel `nc=t are loc auto-validarea transmisiei [i recep]iei). ~n mod normal, pentru leg\tura cu alte echipamente de tip microsistem (cu microprocesor sau cu microcontroller) se folosesc numai 3 linii: TXD, RXD [i GND, iar pentru controlul fluxului de date se utilizeaz\ un protocol soft – XON/XOFF, beneficiind `n mod esen]ial de existen]a canalului “full-duplex” [6.].

Liniile sunt astfel `mp\r]ite `ntre cele dou\ circuite convertoare de nivel astfel `nc=t func]ionarea canalului A s\ necesite prezen]a obligatorie numai a unui singur circuit MAX 232 ([i anume U14), asigur=nd, pe l=ng\ TXDA/RXDA, chiar [i semnalele esen]iale pentru controlul hardware al fluxului de date (RTS/CTS). Am realizat aceast\ `mp\r]ire pentru o eventual\ scoatere din soclu a circuitului U15 [i `nlocuirea lui cu un soclu “[trapat” ce permite trecerea semnalelor `n mod direct, f\r\ conversie de nivel, pentru utilizarea canalului B `n modul sincron.

Liniile de control-modem ale canalului B `mpreun\ cu liniile de sincronizare pentru ambele canale sunt scoase la conectorul “TIMING” (fig. 2.3.2.), pentru utilizare general\, separat sau `mpreun\ cu semnalele blocului temporizator/num\r\tor. Pentru a evita generarea unor `ntreruperi externe / de stare parazite atunci c=nd una din linii r\m=ne nefolosit\, am montat rezisten]e de “pull-up” la Vcc pe toate aceste linii care sunt intr\ri. De men]ionat c\ utilizarea acestor linii este facilitat\ [i de existen]a pe intr\ri a histerezisului intern din circuitul SIO.

De asemenea, dac\ este necesar\ completarea canalelor seriale cu toate semnalele pentru modem, se poate conecta `n mod solidar mecanic o plac\ auxiliar\ cu convertoare de nivel, conectoarele SERIAL-A, SERIAL-B [i TIMING fiind montate pe aceea[i latur\ a pl\cii de cablaj imprimat a nucleului de dezvoltare (anexa 2.).

2.5. Porturile paralele.

Utilitatea unui microsistem, fie el cu microrocesor sau cu microcontroller, const\ `n primul r=nd `n capacitatea de a asigura controlul unui num\r mare de dispozitive (pentru diverse comenzi sau ac]ion\ri electrice) prin luarea unor decizii `n urma proces\rii datelor ob]inute de la un num\r mare de senzori [i traductoare, sau de la alte echipamente de calcul. Din acest motiv, existen]a unor porturi de intrare/ie[ire de tip paralel, dar `n care bi]ii pot fi prelucra]i distinct, este esen]ial\.

Exist\ o serie divers\ de metode [i circuite integrate pe o scar\ mai larg\ sau mai restr=ns\ cu ajutorul c\rora se poate realiza acest deziderat pentru un microprocesor [3.] (`n cazul unui microcontroller, se pune doar problema unei eventuale extinderi a resurselor deja disponibile “on-chip”). ~n cazul microprocesorului Z80, r\m=n dou\ posibilit\]i mai avantajoase: montarea unui circuit periferic de tip I8255, sau a unui circuit specific familiei microprocesorului, adic\ Z80-PIO.

Circuitul I8255 dispune de 3 porturi paralele de 8 bi]i, care pot fi folosite [i la transfer paralel de date cu protocol hardware, dar prezint\ 3 inconveniente majore: `n primul r=nd bi]ii unui port nu pot fi utiliza]i `n mod distinct ca intr\ri sau ie[iri, trebuind “grupa]i” `n seturi de 4 (numai pe portul C) sau chiar de 8 bi]i (pe celelalte porturi A [i B), fiecare grup fiind la un moment dat numai intrare sau ie[ire.

Al doilea inconvenient apare numai `n cazul sistemelor cu microprocesor Z80 [i const\ `n necesitatea mont\rii unui controller de `ntreruperi distinct (`n cazul altor microprocesoare, cum ar fi, de exemplu, I8086, acest lucru era oricum absolut necesar [10.]), sau renun]area la lucrul cu `ntreruperi de la porturile paralele. Cea de-a treia problem\ a circuitului I8255 este resetarea tuturor bi]ilor care sunt ie[iri ori de c=te ori se schimb\ modul de lucru numai pe unul din porturi, neput=ndu-se schimba sensul unor linii pe timpul c=t se folosesc ie[iri pentru controlul sau configurarea unui echipament [20.].

Circuitul Z80-PIO elimin\ toate aceste dezavantaje, motiv pentru care am realizat interfa]a paralel\ a sistemului mont=nd acest circuit, chiar dac\ nu dispune dec=t de 2 porturi.

Consider c\ o scurt\ prezentare a posibilit\]ilor circuitului [2.] este necesar\, at=t pentru justificarea flexibilit\]ii sistemului proiectat, c=t [i din punctul de vedere al unui eventual utilizator care folose[te sistemul `ntr-o aplica]ie. De asemenea, cu acest\ ocazie doresc s\ sugerez [i c=teva posibile utiliz\ri originale pentru semnalele de protocol (“handshake”) ale circuitului.

Porturile circuitului Z80-PIO pot fi programate s\ lucreze `n patru moduri distincte: “modul 0” # ie[ire pe octet, “modul 1” # intrare pe octet, “modul 2” # magistral\ de transfer bidirec]ional\ de 8 bi]i (numai pentru portul A) [i “modul 3” # intrare/ie[ire pe bit. Exist\ posibilitatea controlului hardware a transferului, folosind c=te dou\ semnale separate pentru fiecare port: ie[irea READY (ARDY, respectiv BRDY), activ\ HIGH [i intrarea /STROBE (/ASTB, respectiv /BSTB), activ\ LOW, pentru confirmare (cu rol de /ACK, dar pu]in diferit).

~n modul ie[ire octet, RDY devine “1” c=nd s-au `nscris datele, iar frontul pozitiv al /STB semnaleaz\ printr-o `ntrerupere c\ dispozitivul conectat la port a citit datele, dezactiv=nd totodat\ [i semnalul RDY p=n\ la o nou\ `nscriere a unui octet de c\tre unitatea central\. Pe durata c=t semnalul /STB corespunz\tor portului este `n “1” logic, semnalul RDY repet\ de fapt, cu un decalaj de o perioad\ de tact sistem, semnalul de scriere /WR generat la o scriere I/O din partea procesorului.

~n modul intrare pe 8 bi]i, /STB permite dispozitivului conectat la port s\ e[antioneze datele `n “latch”-ul de intrare al portului prin frontul pozitiv, cu generarea unei `ntreruperi c\tre unitatea central\ [i dezactivarea hardware a semnalului RDY, care devine din nou “1” abia dup\ ce microprocesorul a citit datele din port. Dac\ semnalul /STB era “0” logic pe perioada transferului, semnalul RDY repet\ cu un decalaj de un tact semnalul de citire /RD primit de la procesor.

Pentru conectarea paralel\ a dou\ sisteme cu microprocesoare Z80, dac\ fiecare din cele dou\ sisteme con]ine c=te un circuit PIO, exist\ o posibilitate interesant\ care rezult\ din caracteristicile acestor semnale de protocol. Se poate conecta un port PIO programat ca ie[ire dintr-un sistem – cu un port PIO programat ca intrare din cel\lalt sistem, cu legarea `ncruci[at\ a liniilor de protocol ( RDY(1) la /STB(2), respectiv /STB(1) la RDY(2) ). Nu este necesar\ inversarea nivelului activ al semnalelor RDY corespunz\toare porturilor celor dou\ circuite, deoarece conteaz\ numai frontul lor pozitiv `n strobarea datelor. ~ntr-o astfel de situa]ie, transferul de date `ntre cele dou\ sisteme se face paralel, prin protocol hardware de mare vitez\ (folosind numai `ntreruperi).

~n modul bidirec]ional, numai portul A poate fi transformat `ntr-o magistral\ de date exterioar\, folosind pentru comanda ie[irii liniile de protocol ale portului A, iar pentru intrare semnalele de protocol ale portului B (fig. 2.5.1). Modul de lucru `n intrare sau `n ie[ire este asem\n\tor cu modurile anterioare, cu deosebirea c\ datele sunt plasate pe magistrala portului A numai pe durata c=t /ASTB este activ, frontul pozitiv al acestui semnal put=nd fi folosit pentru memorarea datelor `n dispozitivul conectat la port (/ASTB lucreaz\ de fapt ca un semnal /RD, de citire din memorie sau din I/O provenit de la un procesor, iar /BSTB are rolul complementar, de semnal /WR, provenit tot de la o unitate central\ extern\ sistemului).

Am men]ionat aceste detalii de func]ionare deoarece PIO poate fi astfel intercalat direct ca o interfa]\ paralel\ `ntre dou\ sisteme (cu microprocesoare sau cu microcontrollere), conect=nd portul A la magistrala de date a celuilalt sistem. ~ntr-o astfel de conectare, celelalte dou\ semnale, ARDY [i BRDY, devin semnale de disponibilitate a perifericului sau memoriei `n sistemul care nu con]ine circuitul (de tip READY sau /WAIT), sau pot fi conectate la intr\ri de `ntrerupere de tipul INTn, active HIGH, pentru a asigura un transfer de mare vitez\ `ntre sisteme, controlat complet hardware prin `ntreruperi.

Fig. 2.5.1.

~n modul 3, oricare bit din port poate fi linie de intrare sau de ie[ire, cu posibilitatea de citire a bi]ilor care sunt ie[iri [i a program\rii unei logici cablate pe bi]ii de intrare care s\ valideze o condi]ie de `ntrerupere. Men]ionez c\ lucrul `n acest mod este foarte asem\n\tor porturilor microcontrollerului PIC 16F84, exist=nd un registru prin `nscrierea c\ruia se stabile[te direc]ia pinului din port [11.], dar posibilitatea program\rii nivelului activ [i al tipului logicii (AND sau OR) care trebuie s\ o `ndeplineasc\ configura]ia de bi]i pentru a genera `ntrerupere este mai avansat\ la PIO.

Schema conect\rii circuitului de interfa]\ paralel\ `n sistem este cea din figura 2.5.2.

Fig. 2.5.2.

Dup\ cum se observ\ din schem\, circuitul este conectat la magistrala sistemului `ntr-un mod analog cu celelalte circuite periferice prezentate anterior, fiind ultimul circuit de pe plac\ `n lan]ul de `ntreruperi serial – distribuit specific familiei de componente Z80. Semnalul IEO de la PIO l-am scos afar\, la un conector pentru extensia sistemului (sub denumirea SYSIEO). Exist\ `ns\ o particularitate de conectare specific\ circuitului [i anume logica suplimentar\ necesar\ pentru introducerea semnalului de resetare, /RESET.

Datorit\ limit\rii la 40 de pini pentru capsula clasic\ (PDIP # ”Plastic Dual Inline Package”), semnalul de resetare a circuitului a fost omis, aceast\ func]ie ob]in=ndu-se prin activarea singular\ a semnalului /M1, ne=nso]it de /IORQ sau de /RD, aceast\ combina]ie fiind invalid\ `n ciclurile microprocesorului Z80 (vezi &2.1.). Pentru ca aceast\ activare s\ se produc\ odat\ cu resetarea general\ a sistemului, am montat cele dou\ por]i NAND care func]ioneaz\ de fapt ca o singur\ poart\ OR pentru semnale active LOW (am montat 2 NAND-uri `n loc de un singur AND din considerente de minimizare [i utilizare complet\ a capsulelor de circuite integrate folosite, `n capsula LS 00 mai g\sindu-se `nc\ dou\ por]i NAND, care erau necesare `n alt\ parte).

Liniile porturilor, `mpreun\ cu semnalele de protocol [i dou\ trasee de alimentare sunt scoase la conectorul “PARALLEL” de tip DB25-M al sistemului, pinii fiind aloca]i, de aceast\ dat\, conform unui “standard” propriu, deoarece am mai realizat anterior c=teva montaje (programatoare de EPROM-uri, interfe]e paralele pentru microcalculatoare cu Z80, module paralele pentru comenzi) [i cabluri paralele de interconectare, care respect\ toate acest asa-zis “standard”, interfa]a paralel\ cu PIO neput=nd fi “constr=ns\”, oricum, standardului paralel LPT de la PC-uri (semnalele de protocol sunt diferite, iar porturile au un grad mai mare de flexibilitate).

De asemenea, ordinea pinilor `n conector simplific\ interconectarea circuitului PIO cu mufa paralel\ pe cablajul imprimat, av=nd totodat\ [i o semnifica]ie mnemotehnic\. Tipul conectorului (“male”), asigur\ imposibilitatea conect\rii inversate a cablului nesimetric atunci c=nd se face leg\tura paralel\ cu un calculator PC, care are conector de tip “female”. (vezi &4.).

Pentru ca cele dou\ linii de confirmare a transferului (/ASTB, /BSTB) s\ nu genereze `ntreruperi necontrolate, am montat rezistoare de “pull-up” spre Vcc, de valoare relativ mare, astfel `nc=t s\ poat\ fi for]ate LOW prin ie[iri MOS-LSI, cu “fan-out” slab. Acest lucru implic\ totu[i aten]ie la imposibilitatea citirii unui port programat s\ func]ioneze `n mod intrare f\r\ “[traparea” la mas\ a liniei /STB corespunz\toare. Pentru intr\ri simple, f\r\ protocol, se recomand\, oricum, folosirea modului 3 de lucru al circuitului PIO-Z80.

2.6. Interfa]a I2C realizat\ hardware.

Interfe]ele prezentate p=n\ acum erau oarecum clasice, ]in=nd seama [i de faptul c\ sunt realizate `n jurul unor circuite din familia procesorului Z80. Aceste circuite se `ntt=lnesc destul de frecvent [i `n schema altor sisteme de dezvoltare, chiar dac\ nu `n exact aceea[i conectare. Pentru a spori gradul de versatilitate [i de actualitate al sistemului, asigurarea unei interfe]e pentru “bus”-ul serial standardizat – I2C, ar fi deosebit de util\, deoarece `n prezent exist\ un num\r mare de dispozitive periferice care se pot conecta astfel, iar leg\tura cu [i `ntre acestea se poate face folosind numai dou\ linii (SCL # ”Serial CLock” [i SDA # ”Serial DAta”) [11.].

Ca exemple de circuite ce se pot conecta pe magistrala serial\ I2C, pot fi amintite:

memorii seriale de tip EEPROM (cu [tergere electric\) de diferite dimensiuni: (24C00 ÷ 24C512) – 5V, (24LC00 ÷ 24 LC512) – (2.5V÷6V);

ceas de timp real cu calendar [i eventual cu memorie RAM adi]ional\ (PCF 8563, PCF 8573, PCF 8583 – RAM, PCF 8593);

circuite pentru expandarea porturilor paralele (PCF 8574 – 8 bi]i, PCF 8575 – 16 bi]i);

driver pentru display-uri numerice cu LED-uri care asigur\ at=t amplificarea `n curent (programabil\) c=t [i explorarea digi]ilor (SAA 1064);

senzori [i traductoare pentru m\rimi electrice [i neelectrice cu convertoare analog-numerice [i interfa]\ serial\ `nglobate;

diferite circuite analogice cu comand\ numeric\ prin interfa]\ I2C (amplificatoare, corectoare, “tuner”-e) utilizate `n aplica]ii de audiofrecven]\ sau radio-tv;

Interfa]a I2C poate fi realizat\ prin software, folosind 2 bi]i ai unui port paralel, dar acest mod de realizare are dezavantajul c\ solicit\ aten]ia permanent\ a procesorului (la generarea ceasului serial, la serializarea, deserializarea [i transferul bi]ilor dintr-un octet, la transmiterea [i recunoa[terea adreselor), lucr=nd [i f\r\ `ntreruperi. Se observ\ c\ `nc\rcarea procesorului `n acest\ situa]ie ar fi destul de mare, iar sistemul n-ar mai `ndeplini condi]ia de sistem de dezvoltatre pentru control `n timp real (calculator de proces). De aceea, orice degrevare a unit\]ii centrale de una din sarcinile amintite este bine venit\.

De altfel, la majoritatea microcontrollerelor actuale care au interfa]\ I2C, aceasta are o parte mai mic\ sau mai mare realizat\ prin hardware. Pentru sistemul proiectat, care se vrea un “calculator de control” mai puternic, implementarea complet\ prin hardware a interfe]ei I2C devine aproape o necesitate.

Din aceste motive, am proiectat interfa]a I2C prin hardware, cu ajutorul unui controller PCF 8584 [18.]. Acest circuit serve[te drept interfa]\ `ntre magistralele paralele de 8 bi]i ale celor mai comune microprocesoare [i microcontrollere (I8080, M6800, MCS-51) [i “bus”-ul serial I2C, put=nd fi adaptat [i la magistralele altor microprocesoare (Z80, I8086, M68000), utiliz=nd o serie de circuite suplimentare. Controllerul implementeaz\ hardware toate func]iile necesare intrefe]ei, put=nd lucra at=t ca “slave” c=t [i ca “master” pe bus, permi]=nd sistemelor cu magistrale paralele s\ comunice bidirec]ional cu “bus”-ul I2C, direct pe 8 bi]i, folosind un protocol de tip “pooling”, sau bazat pe `ntreruperi.

Ca facilit\]i interesante pentru magistrala I2C, pot fi amintite posibilitatea de lucru `n sisteme multi-master, posibilitatea de monitorizare a traficului pe bus [i modul de lucru la distan]\ (“long-distance”) care folose[te pentru comunica]ie 4 fire, fa]\ de cele dou\ fire utilizate `n mod standard (liniile de ceas [i de date nu mai sunt bidirec]ionale, exist=nd c=te o intrare [i ie[ire pentru fiecare). ~n acest mod se pot monta convenabil translatoare de linie pentru comunica]ia la distan]\ `ntre dou\ sau mai multe sisteme paralele prin magistrala I2C.

De asemenea, circuitul poate furniza ceas serial programabil prin c=teva trepte de divizare, iar intr\rile de pe liniile seriale sunt trecute prin filtre digitale pentru eliminarea perturba]iilor, at=t `n modul clasic c=t [i `n modul pentru distan]\ lung\.

Dup\ cum am amintit, circuitul nu este direct compatibil cu microprocesorul Z80, fiind necesare o serie de adapt\ri. ~n primul r=nd, trebuie selectat modul de lucru compatibil Intel, pentru magistral\ de tip 8080, pentru ca apoi s\ se poat\ folosi adapt\rile “clasice” ale circuitelor periferice din familia I82xx la microprocesorul Z80. ~n acest sens, PCF 8584 permite adaptarea automat\ la unul din cele dou\ tipuri de magistrale mai des `nt=lnite (I8080 sau M6800), prin detectarea primei secven]e de semnale “/CS – /WR” ce apare dup\ resetare (fig. 2.6.1.) [18.].

Acest concept se folose[te de faptul c\ semnalul de scriere este comun ambelor tipuri de magistrale. Dac\ se detecteaz\ o tranzi]ie HIGH #> LOW pe controlul de scriere /WR c=t timp semnalul /CS este inactiv (HIGH), atunci se selecteaz\ modul de lucru M6800. ~n caz contrar, circuitul r\m=ne `n modul I80xx, care este modul de lucru implicit, dup\ resetare. A[adar, dup\ cum se observ\ din diagramele de timp, pentru a p\stra modul de lucru I8080, primul front negativ al semnalului /WR care apare la scrierea unor date `n circuit trebuie s\ “prind\” circuitul deja selectat anterior (/CS # ”0” logic). Dup\ prima scriere, modul de lucru este blocat intern, p=n\ la o nou\ resetare, iar semnalele care difer\ `ntre cele dou\ tipuri de magistrale sunt setate corespunz\tor, circuitul lucr=nd normal.

Fig. 2.6.1.

Problema care apare la sistemele ce utilizeaz\ microprocesorul Z80, este aceea c\ semnalele /WR [i /IORQ apar aproape simultan `n ciclul de scriere I/O (vezi &2.1. / fig. 2.1.7.), semnalul /IORQ `mpreun\ cu adresele de port corespunz\toare fiind apoi folosite la generarea /CS pentru PCF 8584. Din acest motiv, `nt=rzierea care apare la propagarea prin decodorul de adrese I/O, conduce la apari]ia frontului negativ pe semnalul de scriere `naintea select\rii circuitului, trec=nd controllerul I2C `n modul de magistral\ Motorola. De asemnea, micile varia]ii `n momentele de apari]ie ale celor dou\ semnale de la microprocesor, varia]ii care pot ap\rea datorit\ lungimii diferite a traseelor pe cablaj sau a `nc\rc\rii diferite a liniilor, pot duce la apari]ia unui hazard nedorit `n selectarea modului de lucru.

Pentru a elimina acest hazard [i pentru a permite setarea sigur\ a modului de lucru pe magistrale, am folosit un circuit de `nt=rziere sincron a semnalului de scriere provenit de la microprocesor, o `nt=rziere asincron\ cu ajutorul unui circuit RC fiind nesigur\. Schema blocului de interfa]\ I2C se g\se[te `n figura 2.6.2.

Fig. 2.6.2.

Din studiul datelor de catalog pentru microprocesorului Z80B [17.], se observ\ c\ frontul negativ pe /IORQ, front care declan[eaz\ decodificarea selec]iei perifericelor (adresele fiind deja stabile), apare `n perioada de tact T2, cu o `nt=rziere de maxim 65ns fa]\ de sf=r[itul frontului pozitiv al tactului T2, `nt=rzierea fa]\ de acela[i front a semnalului de scriere /WR fiind de maximum 60ns. Deci /WR apare chiar cu 5ns `nainea lui /IORQ, fiind cu at=t mai mult necesar\ `nt=rzierea pentru semnalul de scriere `n controllerul I2C, /WRPCF.

Pentru realizarea acestei `nt=rzieri, am sincronizat semnalul /WR cu frontul pozitiv al ceasului – sistem, cu ajutorul unui bistabil de tip “D” cu tranzi]ie pe front pozitiv (LS 74). La frecven]a de 6.144 MHz frontul pozitiv urm\tor apare la aproximativ 163ns dup\ frontul pozitiv al lui T2, rezult=nd pentru /WRPCF o laten]\ de: 163ns – 60ns # 103 ns plus timpul de propagare prin bistabil, timp suficient pentru orice decodificator de adrese s\ genereze semnalul de selec]ie /CSPCF `nainte (`n cazul decod\rii cu LS 138 dup\ schema folosit\ `n sistem timpul de propagare este de maxim 33ns, la care se adaug\ cele 5ns `nt=rziere datorate lui /IORQ, rezult=nd un timp total de `nt=rziere de aproximativ: 103ns – 33ns – 5 ns # 65 ns, mult mai mare dec=t minimul de 20ns specificat `n foaia de catalog pentru circuitul PCF 8584).

De asemenea, beneficiind din plin de perioada suplimentar\ Tw introdus\ `n mod automat de microprocesorul Z80 `n ciclul de intrare/ie[ire, `nt=rzierea semnalului de scriere nu este nici prea mare, astfel `nc=t scrierea datelor s\ fie realizat\ cu succes, `n timp util (l\]imea palierului LOW al semnalului de scriere la Z80B este de aproximativ 580ns, rezult=nd un timp de scriere `n controllerul I2C de 580ns – 103 ns # 477ns dac\ semnalul de scriere `n controller s-ar dezactiva odat\ cu semnalul /WR de la procesor, timp care este mult mai mare dec=t minimul de catalog cu valoarea 230ns).

Problema care mai r\m=ne este eliminarea acestei `nt=rzieri la tranzi]ia LOW #> HIGH a semnalului /WR la terminarea ciclului de scriere `n PCF, pentru a nu perturba e[antionarea datelor `n controller, care are loc odat\ cu frontul pozitiv al semnalului de scriere. ~n acest sens, foaia de catalog [18.] precizeaz\ c\ dezactivarea lui /WRPCF trebuie s\ se fac\ `nainte de /CSPCF cu cel pu]in 0ns, adic\ semnalele se pot dezactiva simultan, dar nu `n ordine invers\. Pentru evitarea repet\rii sincroniz\rii cu frontul pozitiv al tactului urm\tor la dezactivarea semnalului de scriere, am for]at `n “1” logic ie[irea bistabilului printr-una din intr\rile sale asicrone ([i anume intrarea /PRESET – activ\ pe “0” logic) odat\ cu frontul pozitiv al semnalului /IORQ, folosind un inversor LS 04.

Bistabilul este for]at astfel `n “1” logic pe toat\ durat\ c=t /IORQ r\m=ne inactiv, schimbarea st\rii bistabilului fiind permis\ din nou numai dup\ reactivarea lui /IORQ. Bistabilul care realizeaz\ aceast\ sincronizare are o comutare sigur\, de la comutarea pe LOW a semnalului /IORQ p=n\ la urm\torul front pozitiv al tactului timpii de “set-up”, de men]inere [i de propagare la comutare asincron\ fiind suficien]i.

Dup\ setarea modului de lucru cu magistral\ de tip I8080, compatibilizarea acesteia cu magistralele microprocesorului Z80 se realizeaz\ `n modul clasic folosit la conectarea circuitelor din familia I82xx, prin introducerea `n decodificatorul de adrese I/O a semnalului suplimentar /IORQ, dup\ cum am amintit `n paragraful &2.1.

Alt\ problem\ care apare la conectarea controllerului I2C este integrarea sa `n sistemul de `ntreruperi al microprocesorului Z80. ~n acest sens, trebuie remarcat c\ utilizarea posibilit\]ii de depunere pe magistral\ a unui vector de `ntrerupere propriu (p\strat `ntr-un registru intern special) `n ciclul de achitare a `ntreruperii, dup\ primirea semnalului /IACK pe zero logic, nu rezolv\ problema, deoarece trebuie realizat\ at=t arbitrarea priorit\]ilor (cu invalidare atunci c=nd un periferic mai prioritar se afl\ `n cursul achit\rii), c=t [i generarea semnalului /IACK din decodarea combina]iei de semnale /M1 # ”0” [i /IORQ # ”0” care apare numai la achitarea unei `ntreruperi mascabile ce a fost semnalat\ anterior c\tre unitatea central\ prin activarea liniei /INT.

~ntr-o variant\ anterioar\ a schemei sistemului de dezvoltare, am realizat conectarea `n lan]ul de `ntreruperi `n acest fel, folosind semnalele IEI [i IEO care permit propagarea serie a priorit\]ilor `ntre circuitele periferice din familia Z80 [i o logic\ adi]ional\ cu por]i pentru blocarea cererii de `ntrerupere proprii controllerului, invalidarea circuitelor mai pu]in prioritare, [i generarea semnalului /IACK.

Dup\ ce am `ncercat alocarea optim\ a por]ilor per capsul\, am constatat c\ aceast\ rezolvare nu este avantajoas\ deoarece m\rea semnificativ num\rul de circuite integrate [i de interconexiuni `ntre acestea pe cablaj, `nc\lc=nd totodat\ [i principiul dup\ care am proiectat sistemul: “Minimum necesar de circuite integrate, `n special minimum de circuite cu integrare pe scar\ redus\ (SSI) [i utilizarea complet\ a por]ilor sau bistabililor din capsulele acestora”.

De aceea, am renun]at relativ repede la acea variant\, realiz=nd intercalarea `n sistemul de `ntreruperi prin intermediul canalului 3 al circuitului CTC, conect=nd cererea /INT la intrarea CK/TRG3 a acestuia (vezi &2.3.). Aceast\ abordare nu este numai mult mai economic\, ci [i mult mai flexibil\, deoarece atunci c=nd nu se lucreaz\ cu interfa]a I2C prin `ntreruperi canalul respectiv al circuitului “timer-counter” poate fi utilizat `n alte scopuri (ceea ce nu se putea spune despre logica cu por]i …).

Intrarea /IACK de confirmare a accept\rii cererii de `ntrerupere trebuie inactivat\ (am montat un rezistor la Vcc), pentru a nu plasa pe magistral\ vectorul de `ntrerupere intern, ci vectorul circuitului CTC, care lucreaz\ drept controller de `ntreruperi. Revenirea ie[irii /INT `n starea inactiv\ (HIGH) se va face `n acest caz prin software.

Conectorul pentru magistrala I2C este de tipul 2 sec]iuni X 4 pini, av=nd scoase [i liniile de alimentare pe fiecare sec]iune, intercalate `ntre semnalele utile pentru reducerea diafoniei (o conectare standard, frecvent `nt=lnit\). Pe prima sec]iune sunt conectate semnalele clasice SCL [i SDA, iar pe cealalt\ sec]iune mai sunt scoase `nc\ dou\ fire, /INT [i /IACK, toate aceste patru semnale fiind intr\ri sau ie[iri de tipul cu dren\ `n gol, av=nd montate rezistoare externe la Vcc, care “trag” liniile de intrare intr-o stare bine definit\ [i refac nivelul “1” logic al ie[irilor “open drain”.

Am scos la muf\ aceste semnale `n scopul de a putea lucra cu controllerul [i `n modul “long-distance”, mod `n care nu se pot folosi `ntreruperi, semnalele modific=ndu-[i semnifica]iile `n felul urm\tor [18.]:

Se observ\ c\ rezistoarele necesare liniilor /INT [i /IACK pentru lucrul cu `ntreruperi devin acum rezistoare de “pull-up” absolut necesare pentru magistrala I2C.

De asemenea, dac\ se lucreaz\ `n modul standard, dar f\r\ `ntreruperi, prezen]a la unul din pinii conectorului C7M a intr\rii de declan[are/num\rare CK/TRG3 este foarte util\, ea put=nd servi drept linie de `ntrerupere pentru circuite I2C care au aceast\ facilitate (cerere de `ntrerupere separat\ de cea prin magistrala I2C) sau poate fi utilizat\ `n alte scopuri (de exemplu, pentru conectarea comod\ a unui senzor `n infraro[u).

2.7. Conectorul pentru LCD compatibil Seiko.

Pentru afi[area unor date, parametri, sau comenzi de lucru `n mod autonom, f\r\ necesitatea conect\rii la un calculator-gazd\ prin interfa]a serial\ sau paralel\, am dotat sistemul cu posibilitatea mont\rii printr-un conector special a unui dispozitiv modern de afi[are cu cristale lichide (LCD # ”Liquid Crystal Display module”), de tipul alfanumeric (matrici de puncte), cu controller inlclus de re=mprosp\tare a “display”-ului din memoria local\, neav=nd astfel nevoie de baleierea ecranului pe coloane realizat\ prin program (cu folosirea `ntreruperilor periodice de la un ceas de “refresh”).

Cele mai r\sp=ndite afi[aje de acest fel sunt bazate pe controllerul HD 44780 dup\ un standard compatibil Seiko [11.]. Un astfel de dispozitiv este v\zut din exterior ca un periferic paralel, cu dou\ tipuri de registre de 8 bi]i: registrul de instruc]iuni/stare [i registrul de date, selec]ia `ntre ele realiz=ndu-se folosind semnalul RS # ”Register Select”.

Prin scrierea `n registrul de instruc]iuni se transmit comenzile necesare pentru controlul afi[ajului (cum ar fi [tergerea ecranului, pozi]ionarea cursorului, stabilirea adresei de `nceput pentru transferul datelor), iar prin citirea registrului de stare se poate afla disponibilitatea controllerului de a primi noi instruc]iuni (se cite[te indicatorul BF # “Busy Flag” care este zero dac\ controllerul nu este ocupat cu execu]ia unei opera]ii interne) [i contorul de adres\ curent\ pentru transferul de date.

Registrul de date stocheaz\ temporar toate datele transferate `n sau din memoria-ecran (DDRAM # ”Display Data RAM) sau memoria generatorului de caractere (CGRAM # ”Character Generator RAM”).

Citirea / scrierea informa]iilor este controlat\ de semnalul de selec]ie E # ”Enable”, activ HIGH, direc]ia transferului fiind stabilit\ prin semnalul . Transferul cu unitatea central\ se poate face pe 8 bi]i, printr-un singur puls de activare pe linia E, sau folosind dou\ cicluri de magistral\ succesive pe c=te 4 bi]i marcate prin dou\ stroburi de selectare, `n func]ie de modul programat imediat dup\ ini]ializare. ~n figura 2.7.1. se pot urm\ri diagramele de timp `n cazul lucrului pe 8 bi]i.

Interfa]a standard Seiko mai con]ine dou\ linii de alimentare [i un pin notat VLC la care se aplic\ o tensiune pozitiv\ `ntre GND [i VCC#5V, pentru reglajul contrastului afi[ajului (aceast\ linie este de fapt borna de alimentare cu polaritate negativ\ pentru afi[ajul propriu-zis cu cristale lichide) [11.].

Fig. 2.7.1.

Exist\ dou\ moduri principale de conectare a afi[orului LCD `ntr-un sistem cu microprocesor sau microcontroller. Prima metod\ folose[te conectarea pe porturile paralele [i este mult folosit\ mai ales `n cazul microcontrollerelor f\r\ acces extern la magistrale. Totu[i, metoda este ineficient\, deoarece pe l=ng\ consumul de bi]i din porturi, mai necesit\ generarea prin program a semnalelor de selec]ie a registrelor, de control al sensului transferului, precum [i formarea software a semnalului de activare – E (dup\ plasarea pe bi]ii de port corespunz\tori semnalelor RS [i a valorilor dorite, se d\ mai `nt=i un front pozitiv pe linia E, se transfer\ datele, apoi se d\ un frontul negativ pe aceea[i linie).

Aceast\ metod\ este destul de des folosit\ [i `n cazul conect\rii altor periferice dec=t LCD-uri, chiar [i la sisteme cu microcontroller cu acces extern la magistrale sau cu microprocesor, conduc=nd la sc\derea semnificativ\ a vitezei (`n cazul LCD acest lucru nu deranjeaz\, dispozitivul fiind lent), dar mai ales complic=nd inutil partea software de servire a perifericului.

Cea de-a doua metod\, mult mai eficient\, const\ `n conectarea controllerului LCD direct la magistralele microprocesorului, semnalul E gener=ndu-se `n mod automat prin selec]ia dispozitivului ca periferic (sau ca memorie – `n cazul map\rii pe memorie), celelalte dou\ semnale provenind direct de la procesor (se poate conecta at=t RS c=t [i la pinii de adres\ – `n acest caz citirea se face pe un port [i scrierea pe altul, sau se conecteaz\ numai RS la un pin de adres\, folosind pentru controlul linia /WR a microprocesorului).

Am adoptat a doua variant\ de interfa]are, prev\z=nd sistemul de dezvoltare cu un conector special pentru afi[or LCD care permite accesul acestuia direct la magistrala de date, pe to]i cei 8 bi]i. Dup\ cum se observ\ [i din schem\ (fig. 2.7.2.), selec]ia registrului de lucru (instruc]iuni/stare sau date) se face prin bitul A0 al magistralei de adrese, `n timp ce direc]ia transferului este controlat\ cu linia /WR a lui Z80 (nu at=t pentru economisirea de porturi, c=t pentru evitarea conflictului care ar fi putut s\ apar\ la tentativa de scriere pe portul de citire, dac\ sensul de transfer era controlat cu A1), pulsul de selectare (E) provenind de la decodorul de adrese pentru periferice (reamintesc c\ acest decodificator este validat [i prin semnalul /IORQ), din inversarea liniei /CSLCD. Fig. 2.7.2.

Din motive de simplitate, am renun]at la posibilitatea de reglare a contrastului pe pinul VLC cu un divizor rezistiv poten]iometric (care ar fi avut, de altfel, [i o fiabilitate destul de slab\), prin legarea la mas\ a liniei, deoarece nivelul optim al acestei tensiuni este, `n medie, mai apropiat de mas\ dec=t de Vcc la majoritatea afi[ajelor. Precizez c\ `n acest mod se asigur\ [i un pin suplimentar de mas\, util `n cazul c=nd mufa respectiv\ se folose[te `n alte scopuri. De altfel, poten]iometrul respectiv se poate `nlocui cu un divizor rezistiv fix montat pe cablul de leg\tur\ sau direct pe modulul LCD, dac\ este absolut necesar.

2.8. Blocul de comutare a aliment\rii bancului – RAM1 pe baterie.

Deoarece sistemul se folose[te la dezvoltarea unor aplica]ii, este util\ posibilitatea de a p\stra `n memoria RAM o serie de date (parametri [i comenzi de configurare a sistemului, variabile de lucru, tabele de `ntreruperi) sau chiar programe (variante de rutine `n lucru, subrutine de tratare a `ntreruperilor) [i dup\ deconectarea tensiunii principale de alimentare.

~n acest sens, dac\ se prevede `n exterior (nu am introdus un astfel de circuit `n schem\) [i un comparator rapid care s\ sesizeze c\derea tensiunii de alimentare anun]=nd microprocesorul printr-o `ntrerupere nemascabil\ (pe linia /NMI) c\ trebuie s\-[i salveze registrele [i starea intern\ `n memoria RAM astfel alimentat\, programele de aplica]ii complexe vor putea fi reluate dup\ realimentarea [i reini]ializarea sistemului exact din acela[i punct `n care au fost `ntrerupte, prin re=nc\rcarea st\rii [i a registrelor din RAM-ul nonvolatil.

Pentru asigurarea aliment\rii de la sursa principal\ `n condi]iile `n care aceasta este prezent\ [i comutarea rapid\ pe o surs\ de rezerv\ (baterie) `n regim de avarie, schema trebuie dotat\ cu un circuit suplimentar de comutare a aliment\rii unui banc de memorie SRAM din sistem `ntre cele dou\ surse de tensiune (aici se observ\ [i avantajul utiliz\rii unor memorii statice `n loc de memorii dinamice care ar fi trebuit re=mprosp\tate).

Deoarece primul banc de memorie – RAM0, este “expandat” cu memoria EPROM (vezi &2.1.), am preferat ca bancul cel\lalt – RAM1, s\ fie alimentat cu protec]ie. Protejarea acestui banc este mai util\ [i datorit\ faptului c\ este mapat `n jum\tatea superioar\ a spa]iului de memorie al microprocesorului, unde se p\streaz\ mai convenabil rutine de sistem (BIOS), variabile sau tabele de `ntreruperi, zona inferioar\ r\m=n=nd pentru programe de lucru.

Un astfel de circuit de comutare a aliment\rii transform\ de fapt acest banc de memorie SRAM obi[nuit\ `ntr-un banc special de memorie nevolatil\ cite[te-scrie – NVRAM (disponibil ca modul integrat, dar la un cost mult mai mare), care asigur\ sistemului [i o oarecare autonomie, prin p\strarea programelor cu posibilitatea de execu]ie a lor la pornirea sistemului, chiar `n lipsa calculatorului pe care au fost puse la punct [i de pe care au fost `nc\rcate acestea.

Montarea unor simple diode pentru separarea surselor de alimentare `ntre ele nu rezolv\ problema, deoarece c\derea de tensiune pe diode `n regimul de conduc]ie direct\ este destul de mare (>0.7V la curen]i mari), afect=nd `n primul r=nd tensiunea de la baterie, care are oricum o valoare mai mic\ dec=t 5V. Din acest motiv am recurs la montajul din figura 2.8.1. care folose[te drept comutatoare dou\ tranzistoare PNP (Q4 [i Q5), c\derea de tensiune pe jonc]iunea emitor-colector a unui tranzistor la satura]ie fiind mult mai mic\, aproape neglijabil\.

Tranzistoarele Q4 [i Q5 sunt comandate de ie[irile pe colector ale unui etaj de amplificare diferen]ial [8.] cu cuplaj `n emitor prin rezisten]a comun\ R15, etaj realizat cu tranzistoarele NPN Q2 [i Q3. Rezistorul R15 are o astfel de valoare `nc=t curentul prin emitor s\ fie mic (<1mA), pentru a nu consuma inutil din baterie, dar suficient pentru saturarea tranzistoarelor – serie pe aliment\ri . La cele dou\ intr\ri ale etajului diferen]ial sunt conectate aliment\rile pentru SRAM, trecute prin diodele D2 [i D3 care compenseaz\ c\derea de tensiune pe jonc]iunea emitor-baz\ a tranzistoarelor Q4, respectiv Q5, aduc=nd poten]ialul bazei tranzistoarelor din etajul diferen]ial la valoarea celui din colector, pentru asigurarea unei polariz\ri corecte a lor pe jonc]iunile colector-baz\.

Fig. 2.8.1.

Schema are c=teva propriet\]i interesante, datorate etajului diferen]ial, care lucreaz\ ca un comparator de tensiune, asem\n\tor intr\rilor unui amplificator opera]ional. Dac\ tensiunile de alimentare aplicate pe intr\ri ar fi perfect egale [i tranzistoarele – identice, curen]ii absorbi]i din cele dou\ surse ar fi egali. Cu c=t diferen]a dintre valorile tensiunilor celor dou\ surse este mai mare, cu at=t montajul se dezechilibreaz\, absorbind mai mult curent de la sursa cu tensiunea mai mare [i mai pu]in de la cealalt\, astfel `nc=t suma celor doi curen]i s\ fie o constant\.

Pentru diferen]e foarte mici ale tensiunilor de alimentare, etajul diferen]ial lucreaz\ `n regiunea liniar\ a caracteristicii de transfer [8.]: , unde Vt este tensiunea termic\ . Pe m\sur\ ce diferen]a cre[te, punctul de func]ionare se deplaseaz\ pe caracteristica de transfer, ajung=nd repede `n zona de satura]ie (pentru ), c=nd curentul trece printr-un singur tranzistor care satureaz\ [i tranzistorul regulator serie din colectorul s\u, conect=nd practic numai o singur\ surs\ la alimentarea memoriei.

Deoarece tensiunea Vt este foarte mic\, schema se dezechilibreaz\ repede, lucr=nd practic ca un comutator. Totu[i, datorit\ acestui mod de func]ionare mai rezult\ un eventual avantaj: montajul nu posed\ o caracteristic\ de transfer abrupt\, de tip comparator propriu-zis (care ar produce supraoscila]ii la comutare), trecerea de pe o surs\ pe alta fiind “lin\”, pe m\sura c\derii aliment\rii sc\z=nd treptat [i curentul absorbit. ~n mod normal, tensiunea de pe bateria de siguran]\ este ceva mai mic\ dec=t Vcc, asigur=ndu-se atfel un consum aproape nul de curent din baterie `n prezen]a sursei principale de alimentare.

Condensatoarele C10 [i C20 sunt chiar condensatoarele pentru decuplarea aliment\rii memoriei SRAM (unul electrolitic de capacitate mare [i unul nepolarizat, f\r\ efect inductiv). Ele asigur\ [i un filtraj suplimentar al comut\rii surselor. Pentru Q2 [i Q3 am folosit tranzistoare de uz general de tip BC 108 (Ic#100mA/Vceo#20V), de joas\ frecven]\ (varia]ia aliment\rii are loc lent) [i mic\ tensiune (alimentarea memoriei nu dep\[e[te 5V), iar pentru Q4 [i Q5 tranzistoare asem\n\toare, dar de putere mai mare [i de tip PNP: BC 328 (Ic#800mA/Vceo#25v) [14.]. Desigur, se pot folosi [i alte tranzistoare, cu caracteristici mai avantajoase.

2.9. Posibilit\]i de extensie a sistemului. Transformarea lui `n calculator.

Principalul efort `n proiectarea sistemului de dezvoltare cu microprocesor l-am f\cut `n direc]ia asigur\rii unei flexibilit\]i c=t mai mari `n utilizarea resurselor disponibile “on board” [i a unor posibilit\]i c=t mai mari de extindere prin montarea unor module adi]ionale folosind conectorii disponibili pe plac\.

Pe porturile paralele ale sistemului se poate conecta `n exterior o tastatur\ de tip matriceal pentru introducerea unor parametri de lucru sau comenzi f\r\ a folosi comunica]ia cu un calculator – gazd\ prin interfa]a serial\. La citirea matricii de taste se poate folosi o metod\ clasic\ de baleiaj prin `ntreruperi de la unul din “timer”-e, beneficiind la identificarea tastei ap\sate [i de bidirec]ionalitatea liniilor de port (se poate folosi un algoritm mai rapid de identificare, cu interschimbarea liniilor [i coloanelor [4.]).

Pentru un num\r mic de taste sau semnale de la anumi]i senzori, ace[tia nu se vor mai aranja `ntr-o structur\ matriceal\, conect=ndu-se direct pe port, pentru a se putea folosi `ntreruperile generate direct la apari]ia unei combina]ii valide a liniior de intrare nemascate la un moment dat.

De asemenea, se pot conecta periferice pentru comenzi analogice sau achizi]ii de date, prin intermediul unor convertoare numeric-analogice sau analog-numerice care pot folosi [i posibilit\]ile de lucru cu semnale de protocol ale circiutului PIO [3.].

De exemplu, se poate conecta un convertor analog-numeric pe mai mult de 8 bi]i folosind ambele porturi ale circuitului `n modul intrare, strobate simultan la terminarea conversiei (semnalele /ASTB [i /BSTB vor fi conectate `mpreun\ [i comandate de ie[irea ENDCONV care trece pe “1” logic la terminarea ciclului de conversie gener=nd frontul pozitiv de strobare). Impulsul de `ncepere a conversiei (STARTCONV) va fi format din semnalul RDY al portului care va fi citit ultimul de microprocesor, folosind un formator de puls cu circuit RC [i por]i, sau un monostabil (realizat, de exemplu cu un circuit [9.]).

Semnalul de `nceput al primei conversii va fi dat de ini]ializarea semnalului RDY corespunz\tor, pritr-o citire fals\ a portului, dup\ care sistemul va lucra independent, prin protocol hardware cu `ntreruperi. Se poate folosi o singur\ rutin\ de `ntrerupere care va salva `n memorie datele citite de pe ambele porturi, cu incrementarea unui pointer local, declan[=nd prin citire [i `nceputul unei noi conversii.

Se observ\ `n aceste situa]ii avantajul utiliz\rii unui port paralel cu protocol hardware, lucru imposibil `n cazul unui microcontroller integrat care nu folose[te circuite auxiliare. Se simplific\ astfel semnificativ programul de lucru, cu cre[terea substan]ial\ a vitezei pentru orice aplica]ie care foloseste porturile paralele.

Totu[i, metoda principal\ de extindere a sistemului const\ `n utilizarea conectorului de extensie pentru ad\ugarea unor circuite sau module suplimentare (fig. 2.9.1.). Acest conector este de tip magistral\, av=nd disponibile toate semnalele procesorului plus c=teva semnale din sistem necesare pentru a oferi c=t mai multe posibilit\]i de extindere.

La conectarea semnalelor pe pinii conectorului, am respectat pe c=t posibil standardul folosit la microcalculatorul “TIM-S” [12.], care mi s-a p\rut mai complet dec=t varianta folosit\ la microcalculatoarele “SPECTRUM” originale [5.]. Semnalele microprocesorului (magistrala de date, adrese [i comenzi) respect\ complet acest standard, iar semnalele suplimentare sunt ad\ugate `n locul pinilor specifici microcalculatorului “TIM-S” cu func]ii asem\n\toare, `n limita posibilit\]ilor (sistemul difer\ substan]ial de acest microcalculator).

Am scos `n plus fa]\ de magistrale, intrarea [i ie[irea canalului 0 al circuitului “timer” (TRG0, TO0), intrarea [i ie[irea `n lan]ul de priorit\]i serie pentru `ntreruperi `n care sunt montate circuitele din sistem (SYSIEI, SYSIEO), cele 2 ie[iri de protocol folosite ca semnale de uz general din canalul serial B (/RTSB, /DTRB), invalidarea RAM-ului intern superior (/RAMD) [i 3 semnale de selectare a dispozitivelor periferice (/CS4, /CS5, /CS6).

Datorit\ prezen]ei acestor semnale, se pot conecta u[or `n exteriorul sistemului circuite periferice integrate suplimentare, at=t din din familia microprocesorului Z80 (aten]ie: lan]ul de `ntreruperi serie suport\ `nc\ un singur circuit f\r\ introducerea unor st\ri de WAIT suplimentare ! ), c=t [i din familia I82xx, beneficiind [i de condi]ionarea cu /IORQ a semnalelor de selec]ie disponibile (/CS4, /CS5, /CS6). Pentru circuitele din familia Intel, se poate folosi [i TRG0 ca intrare de `ntreruperi (eventual extins\).

Utiliz=nd ie[irea TO0 se pot genera `n exterior semnale de ceas cu frecven]a programabil\, iar ie[irile de uz general /RTSB [i /DTRB, se pot folosi la paginarea unor bancuri suplimentare de memorie prin invalidarea RAM1 cu /RAMD, f\r\ maparea unor porturi suplimentare. Fig. 2.9.1.

Sistemul poate fi transformat `n microcalculator, prin ad\ugarea `n exterior a unui controller video [i a unei interfe]e de dischet\ [i/sau “hard-disk”, acestea fiind singurele resurse care lipsesc.

Prin conectarea unui secven]iator video compatibil ca mod de afi[are cu microcalculatoarele de tip “SPECTRUM” [5.] se poate realiza compatibilizarea `n acest sens a sistemului, iar o interfa]\ de disc permite instalarea sistemului de operare “CP/M”. Montarea unui hard disk cu controller integrat de tip IDE este facilitat\ [i de prezen]a semnalelor de selec]ie, c=te unul pentru fiecare 8 porturi (am studiat standardul IDE [i am observat c\ necesit\ dou\ semnale de “chip select” [i 3 pini de adres\, HDD-IDE fiind v\zut `n exterior ca un set de 16 porturi intrare-ie[ire).

Capitolul 3.

Realizarea [i testarea sistemului.

3.1. Proiectarea [i realizarea cablajului.

Pentru proiectarea cablajului, am folosit din pachetul de programe “OrCAD 9.0” utilitarele “OrCAD Capture” – pentru desenarea schemei [i asocierea “footprint”-urilor componentelor [i “OrCAD Layout” – pentru plasarea pieselor pe cablaj [i “routarea” traseelor de leg\tur\ [19.].

~n afar\ de modulele prezentate, `n schema sistemului (vezi &anexa 1.) am mai introdus un LED pentru indicarea prezen]ei tensiunii de alimentare [i `nc\ 9 condensatoare nepolarizate (cu capacitatea de ) [i 7 condensatoare polarizate (cu capacitatea de ) pentru decuplarea liniilor de alimentare, pe care le-am plasat pe cablaj `n imediata apropiere a circuitelor. ~n total, cu tot cu cele dou\ condensatoare separate de decuplare a aliment\rii pentru RAM1, `n sistem am montat (10^8) condensatoare de decuplare la un total de 16 circuite integrate (`n medie, revine c=te un condensator multistrat nepolarizat [i unul electrolitic polarizat la fiecare dou\ circuite).

Pentru placa de cablaj imprimat dublu stratificat, am ales o dimensiune de 200mm × 160 mm, `n scopul de a dispune de o rezerv\ suficient\ de spa]iu pentru o realizare c=t mai “aerisit\” a montajului (loc suficient pentru trasee, trecerile de pe o parte pe alta [i pentru lipirea mufelor [i soclurilor circuitelor).

Plasarea componentelor pe plac\ `n mediul “OrCAD Layout” (vezi &anexa 2.) am realizat-o manual, urm\rind `n special o distribu]ie c=t mai uniform\, cu optimizarea intreconexiunilor dintre componente (componentele `ntre care exist\ mai multe interconexiuni s\ fie plasate `n vecin\tate [i `ntr-o pozi]ie care s\ minimizeze num\rul traseelor care se intersecteaz\).

Pentru rutarea automat\ a cablajului `n “Layout” (o rutare manual\ fiind imposibil\ datorit\ complexit\]ii schemei), am folosit parametrii de configurare din tabelul urm\tor, asocia]i cu o l\]ime de 0.35 mm pentru traseele normale, [i de 0.7 mm pentru traseele de alimentare, cu treceri de diametrul 1.397 mm. Valorile cu mai multe zecimale sunt necesare `n mare parte datorit\ distan]ei de 0.01 inch # 0.254 mm `ntre pinii unui circuit cu capsul\ DIP normal\ [19.].

La rutare am avut grij\ ca distan]a pe cablaj dintre pinii de alimentare ai circuitelor [i condensatoarele de decuplare s\ fie c=t mai scurt\, iar lipirea terminalelor la conectori s\ poat\ fi realizat\ (pe c=t posibil) pe o singur\ parte.

Dup\ ce am ajuns la o variant\ convenabil\ din aceste puncte de vedere (cu un num\r redus, de numai 200 de “vias” – treceri de pe o parte pe cealalt\), am `ncercat c=teva variante de cablaj prin fotocopiere cu “spray fotoresist”, folosind expunerea la o lamp\ cu vapori de mercur (care emite `n zona spectral\ – ultraviolet) prin folii transparente cu modelul cablajului (“m\[ti”).

Aceste variante fiind, `ns\, nesatisf\c\toare `n cazul de fa]\, am realizat cablajul manual, prin desenarea traseelor de leg\tur\ `ntre g\uri (date `n prealabil, dup\ “m\[tile” de pe folii) cu ajutorul unei seringi cu ac fin (umput\ cu lac de unghii) [i corodare ulterioar\ `n solu]ie de clorur\ feric\ tehnic\ – 30%. Desigur, aceast\ metod\ convine numai pentru prototip …

Circuitul imprimat de pe suprafa]a superioar\ (fa]a cu piese) este prezentat `n anexa 3., iar circuitul de pe partea inferioar\ se g\se[te `n anexa 4. Pentru fixarea circuitelor am folosit “socluri cu g\uri”, care au o anduran]\ mai mare `n timp [i pot fi lipite pe ambele suprafe]e ale cablajului.

3.2. Tehnici de testare a sistemelor cu microprocesor.

Via]a oric\rui echipament electronic depinde `n primul r=nd de fiabilitatea lui, iar `n al doilea r=nd de u[urin]a cu care erorile de func]ionare pot fi detectate [i remediate. Acest ultim deziderat nu poate fi atins dac\ `n faza de elaborare a proiectului, aspectului de “service”-abilitate nu i s-a acordat aten]ia cuvenit\.

Prezen]a unui microprocesor `ntr-un echipament poate complica activitatea de testare, diagnosticare [i depanare, put=nd solicita `n ultim\ instan]\ utilizarea unor aparate de test complexe, cum ar fi analizorul de st\ri logice, analizorul de semn\turi sau testorul specializat pentru acel produs. Testarea sistemelor cu microprocesor se deosebe[te esen]ial de diagnoza unor sisteme digitale clasice, prezent=nd dificult\]i serioase cauzate de o serie de particularit\]i specifice [7.]:

(1.) – Circuitele folosite au o complexitate elevat\ [i o neregularitate de structur\. Circuitele integrate LSI [i VLSI folosite `ntr-un sistem cu microprocesor con]in zeci [i sute de mii de elemente logice pe un singur cip [i, cu excep]ia memoriilor, reprezint\ circuite digitale av=nd o structur\ neregulat\, cu foarte multe c\i de transmitere a informa]iei.

(2.) – Accesul la nodurile testate este `ntr-o mare m\sur\ limitat. Procesele de prelucrare a datelor `n microprocesor sunt inaccesibile din exterior [i practic, utilizatorul nu poate observa cauzele [i consecin]ele directe ale defectelor. Aplicarea ac]iunilor la intr\rile unui circuit din componen]a microcalculatorului pentru testarea algoritmului s\u de func]ionare este posibil\ numai cu ajutorul soft-ului, ceea ce impune elaborarea unui program complicat [i o analiz\ detaliat\ a r\spunsurilor c\p\tate.

(3.) – Majoritatea sistemelor cu microprocesor sunt racordate cu ajutorul magistralelor. Existen]a magistralelor care sunt folosite `n comun de toate unit\]ile sistemului complic\ algoritmii de diagnosticare, `ntruc=t defectul unei unit\]i poate bloca sau masca func]ionarea celorlalte unit\]i racordate la magistral\. Una [i aceea[i unitate poate fi emi]\tor [i receptor, iar pinii respectivi `n diferite momente de timp pot fi pini de intrare sau de ie[ire, sau se pot afla `n starea inactiv\ de impedan]\ ridicat\.

(4.) – Clasa defectelor posibile este enorm\. Modelul defectelor permanente ale circuitelor integrate SSI [i MSI nu reflect\ toate defectele posibile ale circuitelor LSI [i VLSI. Gradul elevat de integrare a componentelor `n aceste circuite conduce la apari]ia unor defecte noi, cu manifestare aleatoare datorate interac]iunii elementelor vecine pe cip, cum ar fi sensibilitatea microprocesoarelor la anumite secven]e de instruc]iuni [i la frecven]a semnalului de tact, sensibilitatea memoriilor RAM la tensiunea de alimentare [i la perturba]ii electromagnetice exterioare. Clasa defectelor este completat\ [i de defectele pl\cii de cablaj imprimat: cuplajul capacitiv `ntre conductoare, inductivitatea sau rezistivitatea excesiv\ a unor linii, scurtcircuite sau `ntreruperi de trasee, etc.

(5.) – Testarea trebuie f\cut\ `n timp real. ~n cazul echipamentelor cu microprocesor, testarea trebuie efectuat\ la o frecven]\ prestabilit\ de performan]ele microprocesorului, ceea ce impune performan]e deosebite mijloacelor de diagnosticare. Foarte multe defecte ale microprocesoarelor [i ale memoriilor pot fi detectate numai la o frecven]\ `nalt\ de func]ionare, apropiat\ de limita tehnologic\ garantat\. Necesitatea test\rii `n timp real este cauzat\ [i de faptul c\ programele de test sunt foarte lungi [i cer un timp `ndelungat de execu]ie.

(6) – Verificarea circuitelor integrate LSI [i VLSI este, de regul\, incomplet\. Fiabilitatea func]ion\rii unui sistem cu microprocesor este mai mare `n cazul c=nd componentele lui au trecut `n prealabil un control, care, evident, ar trebui s\ asigure detectarea [i rebutarea circuitelor integrate defecte. Totu[i, o testare complet\ la produc\tor este, practic, imposibil\ datorit\ complexit\]ii obiectelor de diagnosticare, necesit=nd un timp foarte `ndelungat. De aceea, `ntreprinderile produc\toare de VLSI-uri folosesc secven]e de testare cu o lungime mult mai scurt\ (de ordinul a mii de perioade ale frecven]ei de tact) [i 1-5% din circuitele defecte sunt declarate `n ordine [i expediate utilizatorului, care urmeaz\ s\ foloseasc\ secven]e de testare de 10-20 de ori mai lungi, dar [i acestea se pot dovedi insuficiente `n unele situa]ii critice.

(7.) – ~n sistemele cu microprocesor softul [i hardul alc\tuiesc un tot unitar. Unit\]ile de control ale microprocesoarelor pot fi microprogramate, sistemul poate avea o serie de module hard realizate cu memorii PROM sau arii logice programabile (PLA, FPGA), `ntreaga configurare a circuitelor programabile [i a unor module hard specifice este controlat\ de rutine BIOS `nscrise `n memoria EPROM a sistemului, ceea ce conduce la imposibilitatea de a indica exact unde este hardul [i unde este softul, complic=nd suplimentar procesul de testare.

Totodat\, `ns\, microprocesoarele posed\ [i o serie de particularit\]i care simplific\ procesul de depistare a defectelor din sistem, cum ar fi forma canonic\ standardizat\ a semnalelor [i capacitatea de autodiagnosticare. Deoarece informa]ia binar\ se prezint\ `ntr-un mod standard pentru tot sistemul [i datorit\ nucleului hardware relativ standardizat, procesul de analiz\ se simplific\, reduc=ndu-se la determinarea st\rilor logice `n anumite puncte sau linii ale magistralelor, iar m\surarea [i analiza parametrilor suplimentari (amplitudinea semnalului, durata semnalului, timpii de `nt=rziere, etc.) se efectueaz\ numai atunci c=nd defectele func]ionale au fost depistate [i este necesar\ localizarea lor la nivel de componente electronice.

Capacitatea microprocesoarelor de a efectua autoteste se manifest\ prin faptul c\ imediat ce au `nceput s\ func]ioneze generatorul de tact [i unitatea de control apare posibilitatea de a lansa `n execu]ie programe de testare, generarea ac]iunilor [i analiza r\spunsurilor put=nd fi efectuat\ cu ajutorul procesorului din sistem, sub controlul unor programe stocate `n memoria ROM. Astfel de programe permit detectarea [i uneori chiar localizarea defectelor de p\strare [i prelucrare a datelor `n microprocesor, a defectelor de configurare sau selec]ie a perifericelor [i memoriei, a anduran]ei `n timp a memoriilor EPROM, [i `n special a defectelor din cipurile de memorie RAM.

Principalele mijloacele specifice de diagnosticare a echipamentelor cu microprocesor sunt urm\toarele [7.]: analizorul logic [i analizorul de semn\tur\, emulatorul `n circuit [i generatorul de cuvinte.

Analizoarele logice [i analizoarele de semn\tur\ reprezint\ mijloace de `nregistrare, prelucrare [i indicare a reac]iilor de r\spuns ale obiectului diagnosticat la ac]iunile stimulatoare de intrare, provenite fie de la surse interioare (`n cazul diagnostic\rii elementelor lui), fie de la surse externe (`n cazul diagnostic\rii obiectului `n ansamblu). Analizorul logic se utilizeaz\ `n principal `n etapa de elaborare a hard-ului sistemului pe baz\ de microprocesor, iar analizorul de semn\tur\ este mai indicat pentru `ntre]inere [i depanare dec=t pentru faza de elaborare a sistemului, deoarece necesit\ o list\ de “semn\turi” etalon, colectate anterior. Spre deosebire de analizorul logic, care realizeaz\ pentru informa]ia curent\ o extensie sub forma unui traseu, analizorul de semn\tur\ realizeaz\ o compresie sub forma unui singur cuv=nt, denumit “semn\tur\”.

Ideea analizorului logic a ap\rut din imposibilitatea proiectantului de a analiza prin intermediul unei vizualiz\ri semnalele [i fluxurile de date la func]ionarea `n timp real a unui sistem pe baz\ de microprocesor. Solu]ia const\ `n “captarea” unui anumit traseu al fluxului de date, respectiv a succesiunii `n timp a unor semnale, memorarea [i apoi vizualizarea lor sub o form\ c=t mai sugestiv\, cu ajutorul “analizorului de st\ri logice – software”, respectiv “analizorului logic de timp – hardware”, care sunt cele dou\ func]ii principale ale unui analizor logic (analiza `n domeniul date [i analiza `n domeniul timp).

Pentru analiza `n domeniul timp, func]ionarea analizorului este asicron\, e[antionarea f\c=ndu-se de c\tre un tact produs `n interiorul analizorului, care nu este sincronizat cu tactul sistemului [i are o frecven]\ de cel pu]in 5 ori mai mare dec=t acesta. ~n domeniul date, func]ionarea este sincron\, tactul folosit de analizor fiind preluat din sistemul testat, pentru a capta numai acele st\ri ce reprezint\ date valide.

Fig. 3.2.1.

Cel mai informativ mod de reprezentare a informa]iei colectate `n memoria analizorului logic este regimul de reprezentare grafic\, care permite vizualizarea succesiunilor de date cu volumul de zeci de kilobi]i [7.]. Cel mai elocvent exemplu de reprezentare grafic\ este “harta memoriei” (fig. 3.2.1.).

~n acest sens, pentru diagnosticarea sistemului cu microprocesor se folose[te un program – test. Dup\ declan[area rul\rii lui, este necesar `n primul r=nd s\ ne convingem c\ efectueaz\ corect adresarea [i nu r\m=ne din cauza unui defect `n alt\ zon\ de memorie, `ndeplinind un program inexistent sau stop=ndu-se `n ea. Pentru a determina acest tip de comportare a sistemului, este suficient\ urm\rirea st\rilor liniilor magistralei de adrese, interes=nd doar tranzi]iile de la o adres\ la alta, nu [i transferul de informa]ie pe magistrala de date a sistemului testat.

Cu alte cuvinte, se reprezint\ pe ecranul analizorului logic graful tranzi]iilor programului de test dat de la o adres\ la alta, prin asocierea unor puncte luminoase cuvintelor de adres\ de p=n\ la 16 bi]i. C=nd sistemul testat folose[te oricare adres\, aceasta apare `n punctul respectiv al ecranului, deosebindu-se printr-o luminozitate mai mare de celelalte. Efectu=nd baleierea `ntre aceste puncte, ob]inem un grafic numit harta memoriei, pe care se poate urm\ri decurgerea proceselor pe magistrala de adrese.

Aparatul destinat perceperii fluxurilor complicate de date binare `ntr-un anumit punct al obiectului diagnostic\rii prin formarea unui cod ce caracterizeaz\ procesele din nodurile precedente nodului dat, este analizorul de semn\tur\. Scopul principal al analizei de semn\tur\ este transformarea succesiunilor `ntinse de date binare din punctele de control ale sistemului pe baz\ de microprocesor `ntr-un num\r binar unic, denumit semn\tur\, prin folosirea unor tehnici de compresie asem\n\toare metodelor de depistare a erorilor la transmiterea datelor prin canalele de comunica]ie (la schimbarea doar a unui singur bit al succesiunii de date prin nodul considerat, se schimb\ [i semn\tura).

Excitarea succesiunilor de date `n nodurile de control ale sistemului este provocat\, de regul\, de execu]ia unui test special. Semn\turile ridicate de la sistemul testat se verific\ de la ie[iri spre intr\ri, prin compara]ie cu semn\turile corecte ridicate de la sistemul `n stare corect\ de func]ionare, indicate pe schem\ (`ntr-un mod analog cu oscilogramele din sistemele analogice).

Lu=nd `n considera]ie c\ hard-ul [i soft-ul unui sistem pe baz\ de microprocesor sunt incluse `ntr-o bucl\ unic\ de reac]ie, pentru ca sistemul s\ se fac\ accesibil test\rii prin analiza de semn\tur\ trebuie asigurat\ posibilitatea de `ntrerupere a acestei bucle. ~ntreruperea buclei de reac]ie `n sistemele cu microprocesor monocip se efectueaz\ prin decuplarea mecanic\ sau electronic\ a magistralei de date a sistemului de la pinii microprocesorului. Pentru aceasta, de multe ori magistrala de date a microprocesorului este separat\ prin rezisten]e de restul magistralei sistemului, put=ndu-se for]a din exterior pe valoarea dorit\ (de exemplu, la microcalculatorul “TIM-S” [12.]).

Unul din cele mai simple teste folosite pentru a activiza sistemul `n scopul analizei de semn\tur\ (dar util [i `n cazul analizei prin alte mijloace, de exemplu cu osciloscopul) este regimul de rulare liber\. Pentru asigurarea acestui regim la sistemele care nu au fost prev\zute special pentru separarea magistralei de date, se scoate microprocesorul din soclul s\u montat pe cablajul imprimat, `ntre acesta [i soclu introduc=ndu-se o teac\ special\. De la aceast\ teac\ se aplic\ pe intr\rile magistralei de date codul instruc]iunii NOP # “No OPeration” (00H – `n cazul microprocesoarelor I8080, I8085, Z80, sau 90H – pentru I8088, I8086, X86), concomitent `ntrerup=ndu-se [i magistrala de date a sistemului. Restul conexiunilor se p\streaz\.

Dup\ readucerea la starea ini]ial\ (prin resetare) microporocesorul realizeaz\ accesarea memoriei pentru “fetch”, primind codul instruc]iunii simulate – NOP. ~n continuare, increment=nd contorul de adrese, acesta adreseaz\ urm\toarea loca]ie a memoriei – program, primind aceea[i instruc]iune vid\. Astfel, pe magistrala de adrese apare periodic toat\ gama de valori posibile pentru procesorul dat, put=ndu-se verifica func]ionarea corect\ a decodificatoarelor de adres\ [i a memoriilor RAM [i ROM din sistem.

Emularea este un proces `n cadrul c\ruia un sistem (de regul\ mai puternic, cu mai multe resurse disponibile), denumit emulator, este utilizat pentru imitarea (simularea) func]ion\rii sistemului cu microprocesor supus diagnostic\rii. Emularea poate fi de mai multe tipuri [7.]: “`n fundal” (care permite doar ob]inerea modelului logic al sistemului de elaborat prin crearea unui mediu software virtual, f\r\ a reflecta `n detalii comportarea `n timp real a semnalelor intr\rilor [i ie[irilor), emulare “`n prim plan” (blocurile deja elaborate ale sistemului de emulat sunt realizate `n hard [i func]ioneaz\ `n timp real, iar blocurile neelaborate se simuleaz\ cu ajutorul soft-ului sistemului emulator), sau “emulare `n circuit” (dirijarea transparent\ prin hard a func]ion\rii sistemului din mediul de lucru al emulatorului, prin substituirea microprocesorului emulat f\r\ a modifica parametrii electronici din circuit [i f\r\ constr=ngeri `n folosirea oric\ror instruc]iuni, spa]ii de memorie, `ntreruperi sau altor func]ii normale ale acestuia).

Generatorul de cuvinte este un aparat predestinat producerii [i aplic\rii de stimuli la intr\rile sistemului `n curs de verificare. ~ntruc=t `n sistemele pe baz\ de microprocesor schimbul de informa]ie se efectueaz\ prin coduri logice cu un num\r determinat de bi]i – cuvinte, aparatul a fost denumit generator de cuvinte. El poate fi utilizat at=t pentru diagnosticare, c=t [i pentru emularea unit\]ilor inexistente `n cazul proiect\rii unui sistem nou sau moderniz\rii celui vechi.

~n afar\ de mijloacele specializate, la diagnosticarea echipamentelor cu microprocesor `[i g\sesc aplicare [i mijloacele tradi]ionale utilizate `n controlul [i depanarea echipamentelor electronicii analogice. De exemplu, multimetrul numeric se utilizeaz\ pentru controlul tensiunii de alimentare, m\surarea curen]ilor consuma]i de anumite blocuri func]ionale ale sistemului, iar frecven]metrul – pentru controlul frecven]ei semnalului de ceas [i m\surarea frecven]elor de pe liniile magistralelor microprocesorului.

Un loc aparte `n mul]imea mijloacelor tradi]ionale de diagnosticare `l ocup\ osciloscopul. ~n cuplaj cu aparatele specializate (de exemplu, cu analizorul logic), el permite deseori depistarea unor defecte a c\ror sesizare prin alte mijloace ar fi fost foarte dificil\. ~n ultimul timp a ap\rut tendin]a de a extinde posibilit\]ile osciloscopului p=n\ la transformarea lui `ntr-un analizor logic de mare vitez\, cu mai multe canale (osciloscoape digitale cu memorare sau module adi]ionale de tip comutator electronic ata[ate pentru vizualizarea semnalelor digitale pe mai multe canale).

Pe l=ng\ mijloacele universale tradi]ionale mai exist\ [i o serie de dispozitive simple, manuale, ce se utilizeaz\ de mult timp pentru diagnosticarea echipamentelor [i sistemelor digitale discrete [7.]. Din ele fac parte sonda logic\ analizoare (care indic\ starea logic\ [i prezen]a impulsurilor `ntr-un singur punct al circuitului), sonda logic\ stimulatoare (“pulsatorul”, care transfer\ nodul verificat dintr-o stare logic\ `n alta [i `l `ntoarce `n starea ini]ial\ prin “injec]ia” unor impulsuri scurte de curent, f\r\ deconectarea intr\rii nodului verificat de la ie[irea nodului precedent), sonda de curent f\r\ contact (care permite depistarea, urm\rirea [i m\surarea curentului variabil `n timp `ntr-un conductor prin induc]ie electromagnetic\, f\r\ contactul electric cu el). Fiind utilizate frecvent `n practica diagnostic\rii datorit\ accesibilit\]ii lor, aceste mijloace devin `n unele cazuri mai preferabile chiar dec=t mijloacele specializate.

3.3. Testarea [i punerea la punct a sistemului de dezvoltare.

~n cazul sistemului cu Z80 considerat, `n prima parte a punerii la punct am verificat riguros ambele fe]e de circuit imprimat ale pl\cii prin control vizual [i compara]ie cu desenul original, c=t [i prin m\surarea cu ohmmetrul a rezisten]ei traseelor mai sub]iri. Cu aceast\ ocazie nu au fost depistate erori (controlul vizual a mai fost realizat `naintea corod\rii pl\cii realizate manual, ocazie cu care am depistat unele trasee lips\ [i altele incomplete, pe care le-am remediat).

Dup\ implantarea componentelor lipite direct pe plac\ (conectorii, rezistoarele, condensatoarele, diodele [i tranzistorii) [i a soclurilor pentru circuitele integrate, am efectuat noi controale vizuale ale lipiturilor cu remedierea pe loc a erorilor g\site, am verificat cu ohmmetrul coresponden]a [i absen]a scurtcircuitelor pe magistralele microprocesorului la toate soclurile circuitelor periferice [i memoriilor [i am trecut la partea a doua, a punerii sub tensiune.

~n prima faz\ a punerii sub tensiune, am verificat mai `nt=i prezen]a [i polaritatea corect\ a tensiunii de alimentare pe soclurile circuitelor integrate, apoi am montat `n socluri numai circuitele LS 04 [i LS 90, care constituie generatorul de ceas al sistemului. Prin urm\rirea semnalelor pe ecranul unui osciloscop, am verificat startarea corect\ [i frecven]a oscilatorului, func]ionarea corect\ a divizoarelor cu 2 [i cu 5, prezen]a semnalului de BAUD, precum [i amplitudinea [i forma semnalului de tact CLK.

~n continuare, am introdus `n socluri [i cele dou\ cicuite MAX 232 [i am verificat generarea corect\ a tensiunilor de ± 10V pentru conversia RS 232, acumulate pe condensatoarele C6 [i C7 comune celor dou\ circuite, starea ie[irilor, apoi am “[trapat” ie[irile la intr\ri [i am verificat dac\ tensiunile mari nu p\trund p=n\ la intr\rile circuitului SIO, fiind corect convertite TTL. La sf=r[itul acestei faze, am verificat [i comutarea corect\ a aliment\rii RAM1, folosind o a doua surs\ de alimentare variabil\ pe post de “baterie”.

~n faza a doua a punerii sub tensiune, am montat `n soclu microprocesorul Z80B (NMOS, 6.17 Mhz) [i am conectat pe unul din soclurile circuitelor LSI un set de 8 rezistoare de 1K `ntre pinii magistralei de date [i mas\. Am verificat astfel resetarea corect\ a microprocesorului (at=t la conectarea tensiunii de alimentare, c=t [i la ac]ionarea butonului corespunz\tor), lipsa aprinderii permanente a LED-ului de pe /HALT, [i apoi regimul de rulare liber\ prin execu]ia de NOP-uri, cu prezen]a semnalelor corespunz\toare /M1, /MREQ, /RD [i /REFSH pe ecranul osciloscopului.

~n faza a treia, am conectat `n socluri toate circuitele r\mase, inclusiv memoriile RAM [i o memorie EPROM cu codul instruc]iunii HALT `n prima loca]ie. Dup\ resetarea microprocesorului de la buton, LED-ul de pe /HALT nu s-a aprins, ceea ce indica o func]ionare defectuoas\ a logicii de selec]ie a EPROM-ului. Totu[i, c=nd am introdus `n soclu EPROM-ul cu programul monitor, sistemul p\rea s\ func]ioneze corect.

Explica]ia am g\sit-o m\sur=nd ie[irea Q a bistabilului de paginare a memoriei RAM0 cu EPROM-ul, care `ndica “1” logic c=t timp era ap\sat butonul de “RESET”, trec=nd apoi imediat pe “0”logic dup\ eliberarea lui. Practic, primul “fetch” al microprocesorului se f\cea din memoria RAM0, trec=nd pe EPROM la instruc]iunea urm\toare, datorit\ `nc\rc\rii valorii “0” din bitul 7 al registrului R (registrul se `ncarc\ cu valoarea 00H la resetarea microprocesorului). A[adar, prima instruc]iune din EPROM era s\rit\, `n locul ei extr\g=ndu-se un “op-cod” aleator, dup\ cum era `nc\rcat\ prima loca]ie din RAM0 la conectarea aliment\rii.

Am verificat mai `nt=i schema desenat\ `n OrCAD, unde am descoperit c\ era conectat semnalul de /RESET pe pinul /PRESET al bistabilului, `n loc de pinul /CLEAR. Cablajul realizat (din anexele 3. [i 4.) prezint\ aceast\ eroare, pe care am remediat-o ulterior, prin modificarea traseelor imprimate (`ntr-un mod c=t mai pu]in evident …).

Pentru instalarea unui program monitor `n memoria EPROM, am plecat de la sursa “NZMON” a unui monitor Z80 cu afi[aj de tip consol\ prin intrefa]\ serial\ RS-232 / SIO, pe care am modificat-o pentru a fi compatibil\ cu resursele hardware ale sistemului proiectat. Principalele modific\ri le-am f\cut `n zona secven]ei de ini]ializare a circuitelor periferice, `n special a canalului CTC-1 [i a canalului A din circuitul SIO, pentru configurarea comunica]iei seriale la o rat\ de 19200 BAUD, 8 bi]i de date, f\r\ paritate [i 1 bit de stop. Alte modific\ri sunt realizate `n secven]a de “shadow” pentru paginarea specific\ din sistem [i la afi[\rile unor mesaje.

~n final, am testat configurarea [i func]ionarea corect\ a tuturor circuitelor periferice din sistem, cu ajutorul programului monitor. Nu am mai descoperit alte erori.

Capitolul 4.

Program de transfer pe port paralel cu PC-ul.

Principalul avantaj al unui sistem de dezvoltare const\ `n posibilitatea de a `nc\rca programe `n memoria sa RAM de pe un calculator dotat cu resursele suficiente necesare dezvolt\rii aplica]iilor software, pentru a le rula [i testa astfel func]ionalitatea. Programul monitor pe care l-am instalat `n memoria EPROM avea deja o comand\ care permite `nc\rcarea fi[ierelor de pe un calculator personal PC prin interfa]a serial\, `n format INTEL-HEX (codificare cu caractere ASCII `n hexazecimal a numerelor binare), dar pentru o versatilitate mai bun\ este necesar\ posibilitatea de a `nc\rca `n memoria sistemului fi[iere `n format binar.

Transferul binar al datelor pe un canal serial presupune `ns\, utilizarea unui protocol destul de sofisticat, cum ar fi protocolul de re]ea XMODEM-CRC, cu generare/verificare de polinoame cu redundan]\ ciclic\, confirmare [i retransmitere `n caz de eroare a pachetelor de date. Cu toate c\ circuitul SIO simplific\ substan]ial implementarea unui astfel de protocol de nivel “data link control” `n modul sincron [2.], calculatorul PC nu are porturi seriale sincrone. Implementarea unui astfel de protocol pentru modul serial asincron `n limbaj de asamblare pe sistemul cu Z80 este o sarcin\ destul de dificil\.

Pe de alt\ parte, un transfer paralel pe 8 bi]i la distan]\ scurt\ cu linii de “handshake” suplimentare are o vitez\ mult mai mare [i nu necesit\ implementarea unor protocoale software complicate. Folosirea semnalelor speciale de protocol hardware cu `ntreruperi `n aceast\ situa]ie ar permite realizarea unei comunica]ii de vitez\ foarte mare, cu un program deosebit de simplu, care ar func]iona [i `n mediu “multitasking” pentru aplica]ii `n timp real. Totu[i, utilizarea `ntreruperilor nu se justific\ aici deoarece, `n majoritatea cazurilor c=nd se `ncarc\ un program, sistemul nu mai execut\ alte sarcini, fiind mai avantajoas\ folosirea unui program de transfer cu comanda prin soft a liniilor de protocol.

Un asemenea program de transfer are [i avantajul de a putea fi portat pe un sistem Z80 cu o structur\ hardware mai simpl\, f\r\ interfa]\ serial\, circuit “timer” formator de rate, sau chiar f\r\ `ntreuperi multiple (de exemplu un sistem cu: Z80-CPU, Z80-PIO, EPROM, RAM [i un singur generator de `ntrerupere unic\ cu , profit=nd [i de modul 1 de lucru cu `ntreruperi al microprocesorului, cu salt fix prin RST 38H [1.]).

Din aceste motive am realizat un cablu special de interconectare a circuitului PIO din sistem cu portul paralel LPT al unui calculator PC pentru transfer de date binare sub controlul a dou\ programe care ruleaz\ pe cele dou\ sisteme de calcul.

Fig. 4.1.

Cablul de interconectare (fig. 4.1.) permite transferul simultan a 8 bi]i de date de pe orice calculator PC pe sistemul cu Z80 (“download”), pentru transferul invers (“upload”) fiind necesar un calculator PC cu port paralel bidirec]ional [i dou\ programe asem\n\toare. ~n figur\ am reprezentat schema logic\ de conectare a porturilor; `n partea st=ng\ sunt porturile A [i B ale circuitului PIO, iar `n partea dreapt\ sunt cele 3 porturi corespunz\toare dintr-un calculator PC: portul de date (ie[ire sau bidirec]ional, dup\ caz), portul de stare (intrare) [i portul de control (bidirec]ional) [10.]. Am `ncercuit bi]ii din porturile PC-ului ale c\ror linii sunt inversate prin hardware. Bi]ii ha[ura]i sunt nefolosi]i (`n cazul circuitului PIO) sau nu sunt disponibili la conector (fiind rezerva]i sau utiliza]i la configur\ri interne – `n cazul PC-ului).

Liniile portului PIO-A sunt conectate `n `ntregime la portul de date LPT, iar portul paralel PIO-B este configurat ca intrare pe jum\tatea inferioar\ [i ca ie[ire pe jum\tatea superioar\, liniile sale fiind conectate la porturile de stare [i control. Am g=ndit acest mod de leg\tur\ `n ideea de a utiliza liniile B0/B7 pentru protocolul software cu confirmare la “download” iar liniile B1/B6 pentru protocolul software cu confirmare la “upload”.

Conectarea liniei C3 la intrarea S3 ofer\ posibilitatea de verificare a prezen]ei cablului la conector, precum [i posibilitatea de utilizare a bitului B3 at=t `n intrare c=t [i `n ie[ire (liniile B2/B3 pot fi utilizate la cererea [i confirmarea de inversare a sensului de transfer).

Am conectat [i liniile de protocol hardware prin `ntreruperi, pentru a da posibilitatea utiliz\rii [i acestui mod de transfer. Ie[irile ARDY [i BRDY sunt conectate la intr\rile r\mase disponibile din portul de stare, iar liniile /ASTB [i /BSTB sunt comandate cu liniile C1, respectiv C0, fiind conectate `n paralel cu bi]ii B1, respectiv B0, care r\m=n nefolosi]i `n cazul transferului prin `ntreruperi.

Totodat\, acest\ conectare permite autogenerarea “strob”-urilor prin program, pentru testarea local\ a rutinelor de `ntrerupere atunci c=nd PC-ul nu este conectat (se inverseaz\ sensul liniilor B1, B0). Men]ionez c\ acela[i cablu l-am folosit [i la transferul fi[ierelor `ntre un calculator HC-91 cu disc [i PC, fiind g=ndit [i `n acest sens.

Programele de transfer folosesc un algoritm de protocol software cu confirmare complet\ (fig. 4.2.), pentru a asigura un transfer sigur de informa]ie, chiar dac\ vitezele celor dou\ sisteme sunt diferite (viteza de execu]ie a programului pe PC poate varia `n limite largi dac\ se execut\ `n medii “multitasking”). Protocolul decurge `n felul urm\tor:

sistemul cu Z80 activeaz\ linia /REQ (ie[irea B7) semnal=nd o cerere de date c\tre PC, apoi a[teapt\ trecerea pe zero a liniei de confirmare /ACK (intrarea B0);

calculatorul PC detecteaz\ trecerea pe zero a liniei /REQ (intrarea BUSY trece pe “1”, fiind inversat\ hardware), plaseaz\ octetul pe portul de date [i activeaz\ linia de confirmare /ACK (ie[irea /STROBE este pus\ pe “1”, fiind inversat\ hardware), a[tept=nd `n continuare dezactivarea liniei /REQ;

sistemul prime[te confirmarea /ACK (intrarea B0 pe “0” logic), cite[te datele pe portul PIO-A, apoi dezactiveaz\ cererea /REQ, prin trecerea ie[irii B7 pe “1” logic, a[tept=nd confirmarea `ncet\rii cererii de transfer prin trecerea pe “1” a intr\rii /ACK;

calculatorul PC detecteaz\ cererea de terminare a transferului prin dezactivarea intr\rii /REQ [i timite confirmarea primirii prin dezactivarea ie[irii /ACK;

Fig. 4.2.

Cele dou\ sisteme ruleaz\ mai `nt=i o rutin\ “INITDEVICE”, pentru verificarea prezen]ei corespondentului la cap\tul cel\lalt al cablului. Aceast\ rutin\ simuleaz\ un ciclu complet de transfer prin activarea liniilor corespunz\toare `n acela[i mod, dar cu a[teptare limitat\ `n timp a confirm\rii primirii tranzi]iei semnalelor (“time-out”). Rolul principal al acestei rutine este de a evita blocarea programelor atunci c=nd cablul nu este conectat sau corespondentul nu este preg\tit.

De asemenea, ea mai are [i func]ia de a nu permite `nceperea transferului dac\ semnalele de confirmare sunt g\site deja active, a[tept=nd nu o anumit\ valoare a semnalului pe liniile de confirmare, ci un r\spuns dinamic la modific\rile generate pe liniile de cerere. Acest lucru permite ca cele dou\ sisteme comunicante s\ se a[tepte reciproc un anumit timp (30 de secunde), indiferent pe care a fost pornit prima dat\ programul de comunica]ie.

Calculatorul PC transmite mai `nt=i adresa pe 2 octe]i unde se va `nc\rca programul `n memoria sistemului, iar apoi transmite [i lungimea datelor, `n num\r (codificat tot pe 16 bi]i) de sectoare – buffer (pachete de date cu lungimea de 128 octe]i), calculat automat la deschiderea fi[ierului de transmis de pe disc. Se permite astfel transferarea unor fi[ere mai mari dec=t 64Ko (16 bi]i), de exemplu pe discul calculatorului HC-91 (am folosit aceste primitive [i la realizarea unor programe de transfer `n acest scop).

Adresa [i lungimea datelor transferate sunt transmise de dou\ ori consecutiv de c\tre PC [i verificate de c\tre sistem la `nceputul transferului, pentru evitarea `nc\rc\rii eronate (adresa gre[it\) sau bloc\rii transferului (lungimea gre[it\), printr-o eventual\ pierdere a primului octet transmis.

Programul executat pe sistemul de dezvoltare mai are [i o func]ie suplimentar\ de semnalare a st\rii `n care se g\se[te transferul, prin realizarea unor “efecte” pe bitul /DTRB, care pot fi ascultate cu ajutorul unui mic difuzor piezoceramic sau urm\rite cu osciloscopul. ~n perioada de a[teptare a stabilirii leg\turii subrutina “INIDEV” creeaz\ c=te un impuls la fiecare decrementare a contorului de a[teptare, iar `n timpul transferului propriu-zis subrutina “PIORD” activeaz\ linia /DTRB la `nceputul unui bloc de date de 128 de octe]i [i o dezactiveaz\ dup\ ce acesta a fost transferat.

Dac\ a expirat timpul de a[teptare, subrutina “INIDEV” iese cu “flag”-ul Z (zero) setat [i las\ linia /DTRB activat\, pentru o eventual\ depistare a “time-out”-ului (altfel, iese cu Z # “0” [i inactiveaz\ /DTRB). Subrutina “PIORD” este [i optimizat\ pentru ob]inerea unei viteze c=t mai mari de transfer a blocurilor de date (prin utilizarea instruc]iunii INI [i a registrului secundar AF’).

Programul, prezentat `n continuare, este semnificativ ca exemplu de utilizare a setului de instruc]iuni [i posibilit\]ilor microprocesorului Z80 [i modului 3 al circuitului PIO (la citirea portului de protocol se cite[te [i starea ie[irilor, nemaifiind necesar\ memorarea lor `ntr-un “octet – martor”).

ADAT EQU 90H ; adresa portului de date PIO-A;

BDAT EQU 91H ; adresa portului de date PIO-B;

ACOM EQU 92H ; adresa portului de comenzi PIO-A;

BCOM EQU 93H ; adresa portului de comenzi PIO-B;

DTRB EQU 8BH ; adresa portului de control/stare SIO-B;

PIODLD: CALL INIPIO ; ini]ializeaz\ circuitul PIO pentru transfer;

LD DE,10000

CALL INIDEV ; “time-out” dup\ 30 de secunde;

RET Z

LD B,4

LD HL,ADR

CALL PIORD ; `ncarc\ variabilele de 16 bi]i ADR [i LEN;

LD HL,(ADR)

LD DE,(LEN)

EXX ; p\streaz\ adresa [i lungimea `n regi[trii secundari;

LD B,4

LD HL,ADR

CALL PIORD ; mai `ncarc\ o dat\ 4 loca]ii la adrese consecutive;

EXX ; readuce vechile valori `n lucru;

LD BC,(ADR)

OR A ; [terge “Carry” pentru sc\dere;

SBC HL,BC

ADD HL,BC ; compara]ie pe 16 bi]i f\r\ modificarea registrelor;

JR NZ,LDERR ; iese dac\ adresele nu coincid;

EX DE,HL ; acum compar\ lungimile;

LD BC,(LEN)

OR A

SBC HL,BC ; nu se mai reface registrul HL;

JR NZ,LDERR ; iese dac\ lungimile nu coincid;

EX DE,HL ; acum HL con]ine adresa [i BC lungimea;

LDBLK: PUSH BC

LD B,128 ; `ncarc\ 128 de octe]i la adrese succesive;

CALL PIORD ; folosind HL ca pointer [i iese cu HL^128;

POP BC

DEC BC ; decrementeaz\ num\rul de blocuri (lungimea);

LD A,B ; compar\ BC cu zero;

OR C

JR NZ,LDBLK ; continu\ dac\ contorul nu a ajuns la zero;

LDERR: CALL RESPIO ; aduce circuitul PIO `n starea ini]ial\;

RET

; rutina INIDEV valideaz\ transferul a[tept=nd un timp: DE × 3 ms;

; conectarea partenerului de comunica]ie;

INIDEV: IN A,(BDAT)

XOR 80H

OUT (BDAT),A ; complementeaz\ bitul B7, activ=nd linia /REQ;

LD H,D ; p\streaz\ contorul de timp [i `n HL;

LD L,E

DVSTB0: CALL EFCTON ; activeaz\ linia /DTRB;

DEC DE

LD A,D

OR E

RET Z ; iese dac\ a expirat num\rul de itera]ii;

CALL EFCTOF ; produce efecte sonore pe /DTRB;

LD BC,150

CALL TEMP ; a[teapt\ 3 milisecunde activarea /ACK;

IN A,(BDAT)

BIT 0,A

JR NZ,DVSTB0 ; bucleaz\ dac\ linia B0 nu a trecut pe zero;

XOR 80H

OUT (BDAT),A ; dezactiveaz\ /REQ;

DVSTB1: CALL EFCTON

DEC HL ; decrementeaz\ contorul de itera]ii ini]ial;

LD A,H

OR L

RET Z ; “time-out” cu Z#1 [i /DTRB activ;

CALL EFCTOF

LD BC,150

CALL TEMP

IN A,(BDAT)

BIT 0,A

JR Z,DVSTB1 ; bucleaz\ p=n\ /ACK este inactivat;

RET

; rutina PIORD `ncarc\ `n memorie un num\r de octe]i dat `n BC, folosind ca pointer

; registrul HL, care este returnat modificat, indic=nd adresa urm\toare ultimei loca]ii;

PIORD: LD DE,8001H ; m\[tile pentru bi]ii B7 [i B0 `n D [i E;

LD C,ADAT ; portul de date pentru intrare indirect\ cu INI;

CALL EFCTON

DI ; dezactiveaz\ `ntreruperile la transferul blocului;

LDRDY: EX AF,AF’

IN A,(BDAT)

XOR D

OUT (BDAT),A ; activeaz\ B0 prin complementare;

EX AF,AF’ ; [i p\streaz\ imaginea ie[irilor `n AF’;

RDSTB0: IN A,(BDAT)

AND E

JR NZ,RDSTB0 ; a[teapt\ p=n\ B0 devine zero;

INI ; port(C)#>(HL), INC HL, DEC B, Z#1 dac\ B#0;

EX AF,AF’ ; aduce imaginea portului PIO-B [i p\streaz\ Z;

XOR D

OUT (BDAT),A ; dezactiveaz\ cererea prin complementare;

RDSTB1: IN A,(BDAT)

AND E

JR Z,RDSTB1 ; a[teapt\ p=n\ linia /ACK trece [i ea pe “1”;

EX AF,AF’ ; aduce “flag”-ul Z corespunz\tor testului: B#0 ?;

JR NZ,LDRDY

CALL EFCTOF

EI ; activeaz\ `ntreruperile aici pt. a nu `nc\rca stiva;

RET ; Z80 valideaz\ EI dup\ RET;

INIPIO: DI

LD A,0CFH ; PIO-A `n modul 3;

OUT (ACOM),A

LD A,0FFH ; toate liniile portului PIO-A sunt intr\ri;

OUT (ACOM),A

LD A,0CFH ; PIO-B `n modul 3;

OUT (BCOM),A

LD A,0FH ; B7-B4 sunt ie[iri [i B3-B0 intr\ri;

OUT (BCOM),A

LD A,0F0H

OUT (BDAT),A ; ie[irile sunt ini]ial inactive (`n “1” logic);

EI

RET

RESPIO: DI

LD A,0CFH

OUT (ACOM),A ; PIO-A `n modul 3;

LD A,0FFH

OUT (ACOM),A ; toate liniile portului sunt intr\ri;;

LD A,0CFH

OUT (BCOM),A ; PIO-B `n modul 3;

LD A,0FFH

OUT (BCOM),A ; toate liniile PIO-B sunt intr\ri;

EI

RET

EFCTON: LD A,05H

OUT (DTRB),A ; seteaz\ mai `nt=i registrul WR5 care ]ine DTR;

LD A,0E0H

OUT (DTRB),A ; bit7#DTR#1, bit1#RTS#0, nu stric\ transmisia;

RET

EFCTOF: LD A,05H

OUT (DTRB),A ; selecteaz\ registrul de control WR5 din SIO-B;

LD A,60H

OUT (DTRB),A ; modific\ `napoi DTR#0, restul bi]ilor – nu;

RET

TEMP: DI ; `nt=rziere 122T × BC ori;

EX (SP),IX ; interschimb\ de 2 ori v=rful stivei cu registrul IX;

EX (SP),IX ; 2 × 23T, pentru pierderea timpului …;

EX (SP),IY ; acum pierde timpul cu IY;

EX (SP),IY ; 2 × 23T, f\r\ alt efect nedorit …;

DEC BC

LD A,B

OR C

JR NZ,TEMP ; repet\ 122T p=n\ c=nd BC a ajuns la zero;

EI

RET

; variabilele `n care se `ncarc\ la `nceput adresa [i lungimea;

; trebuie s\ fie `n RAM, la adrese succesive;

ADR: DEFW 8000H ; aici se memoreaz\ adresa de “download”;

LEN: DEFW 0000H ; imediat dup\ se ]ine lungimea ini]ial\;

Programul care ruleaz\ pe PC permite citirea unui fi[ier binar de pe disc [i transferul s\u la adresa dorit\ din memoria microsistemului cu Z80. Buclele de protocol software au fost realizate mai `nt=i `n “C”, dar execu]ia lor era deosebit de lent\ (mai lent\ dec=t execu]ia programului `n asamblare de pe sistemul de dezvoltare), asa c\ le-am rescris `n limbaj de asamblare X86. “Listing”-ul comentat al programului este prezentat `n continuare:

#include <stdio.h>

#include <conio.h>

#include <io.h>

#include <dos.h>

#include <stdlib.h>

#include <fcntl.h>

#define LPT 0X0378 // adresa unde sunt mapate cele 3 porturi succesive;

void initdevice(void)

{

asm MOV CX,30000 ; se fac 30000 de bucl\ri pentru fiecare nivel /REQ;

asm PUSH CX ; p\streaz\ contorul de itera]ii CX;

strob1: asm DEC CX

asm JCXZ timeout ; iese dac\ contorul decrementat a ajuns la zero;

asm PUSH CX

delay(1); // `nt=rziere 1 ms f\r\ a afecta CX;

asm POP CX

asm MOV DX,LPT+1

asm IN AL,DX ; cite[te portul de stare;

asm AND AL,0X80

asm JZ strob1 ; a[teapt\ `n bucl\ activarea (/REQ#0)#>(S7#1);

asm POP CX ; reface contorul pt. a doua bucl\ de a[teptare;

asm MOV DX,LPT+2

asm IN AL,DX ; cite[te portul de control;

asm XOR AL,0X01

asm OUT DX,AL ; activeaz\ confirmarea (C0#1)#>(/ACK#0);

asm PUSH CX

strob0: asm DEC CX

asm JCXZ timeout

asm PUSH CX

delay(1);

asm POP CX

asm MOV DX,LPT+1

asm IN AL,DX ; cite[te portul de stare;

asm AND AL,0x80

asm JNZ strob0 ; [i a[teapt\ `n bucla contorizat\ p=n\ S7#0;

asm POP CX ; descarc\ stiva;

asm MOV DX,LPT+2

asm IN AL,DX ; cite[te portul de control;

asm XOR AL,0X01

asm OUT DX,AL ; [i dezactiveaz\ linia /ACK prin complementare;

asm RET ; `nt=rziere 1 ms f\r\ a afecta CX;

timeout: asm POP CX ; descarc\ stiva;

printf("\nTIME OUT: device not responding!\n");

exit(0);

}

void send(unsigned char data)

{

asm MOV DX,LPT+1

ready1: asm IN AL,DX ; cite[te portul de stare;

asm AND AL,0X80

asm JZ ready1 ; [i bucleaz\ p=n\ la apari]ia unei cerei /REQ;

asm MOV DX,LPT

asm MOV AL,data

asm OUT DX,AL ; plaseaz\ octetul “data” pe portul de date;

asm MOV DX,LPT+2

asm IN AL,DX

asm XOR AL,0X01

asm OUT DX,AL ; confirm\ prezen]a datelor cu /ACK;

asm MOV DX,LPT+1

ready0: asm IN AL,DX ; cite[te portul de stare;

asm AND AL,0x80

asm JNZ ready0 ; [i a[teapt\ `n bucl\ terminarea citirii octetului;

asm MOV DX,LPT+2

asm IN AL,DX

asm XOR AL,0X01

asm OUT DX,AL ; confirm\ terminarea recep]iei;

}

void lptwrite(void)

{

char name[12];

int handle,nbytes;

unsigned char pbuf[128];

// datele de pe disc se citesc `ntr-un buffer de 128 de octe]i;

unsigned int i,j,addr,size;

unsigned long int len; // lungimea fi[ierului poate fi pe 4 octe]i;

outportb(LPT+2,0×00); // pune ie[irea C0 (inversat\ hardware) pe “1” logic;

outportb(LPT,0x00); // ini]ializeaz\ portul de date;

do { // se a[teapt\ introducerea unui nume de fi[ier (valid `n directorul curent);

printf("Input file name: "); scanf("%s",name);

handle = open(name,O_RDONLY|O_BINARY);

// deschide fi[ierul numai pentru citire `n acces binar de tip DOS;

if (handle==-1) printf("\nFile not found!\n");

} while (handle==-1);

len = filelength(handle); size = (unsigned int)(1+len/128);

// lungimea se m\soar\ `n blocuri de 128 de octe]i;

printf("File size: %lu Kbytes = %lu bytes\n", len>>10,len);

printf(" = %u blocks of 128 bytes\n",size);

printf("\nDownload address (in hex): "); scanf("%X",&addr);

printf("Waiting for response…\n");

initdevice();

printf("Transfering data at %XH…\n",addr);

for (i=0;i<2;i++) {

// transmite de dou\ ori adresa de `nc\rcare [i lungimea pe 16 bi]i a datelor;

send((unsigned char)(addr));

send((unsigned char)(addr>>8));

send((unsigned char)(size));

send((unsigned char)(size>>8));

}

for (i=0;i<size;i++)

{

nbytes = read(handle,pbuf,128); // cite[te “nbytes” `n buffer;

if (nbytes==128) for (j=0;j<128;j++) send(pbuf[j]);

// trimite tot blocul citit `n buffer dac\ are exact 128 de octe]i;

else {

for (j=0;j<nbytes;j++) send(pbuf[j]);

// altfel trimite mai `nt=i c=]i octe]i s-au citit;

for (j=nbytes;j<128;j++) send(0x00);

// [i completeaz\ cu zero p=n\ se fac 128 de octe]i;

}

printf("%u-blocks\r",i+1);

}

close(handle); // `nchide fi[ierul;

printf("\nLPT transfer complete.\n");

outportb(LPT+2,0×00); // pune ie[irea C0 `n starea inactiv\ din nou;

outportb(LPT,0x00); // reseteaz\ portul de date pe zero `nainte de ie[ire;

}

void main()

{

clrscr();

printf("––––––––––––\n");

printf("PC-X86 LPT-parallel port downloader\n");

printf("LPT: I/O=sb7/cb0 – software protocol\n");

printf("Soft By ALEO, copyright 2000,2003\n");

printf("––––––––––––\n");

lptwrite();

}

Capitolul 5.

Concluzii.

De[i aparent “`nvechit”, sistemul de dezvoltare cu Z80 poate oferi multe satisfac]ii [i posibilit\]i de lucru utilizatorilor, prin felxibilitatea sa, prin puterea de calcul [i a resurselor hardware suficiente disponibile [i nu `n ultimul r=nd prin eviden]ierea detaliilor intime de proiectare, care au un caracter sugestiv pentru acest tip de sisteme de calcul. ~n acest sens se poate spune c\ un astfel de sistem poate “umple golul” existent `ntre montajele cu microcontrollere [i sistemele mari de calcul, de tip calculator personal – PC.

Este interesant de remarcat combina]ia de circuite clasice cu o serie de circuite moderne, sistemul fiind proiectat `ntr-un context actual (prin folosirea memoriilor RAM statice de 32Ko `n locul unor memorii dinamice de asemenea capacit\]i specifice sistemelor clasice cu Z80, prin utilizarea circuitelor de conversie serial\ MAX 232 cu autoalimentare `n locul convertoarelor de nivel 1488 [i 1489 [i `n primul r=nd prin prezen]a controllerului PCF 8584 pentru magistrala modern\ – I2C [i a extensiei pentru LCD).

Gama de aplica]iii unde sistemul `[i poate dovedi cel mai bine utilitatea este `n domeniul conducerii automate a proceselor tehnice, drept calculator de proces care poate controla un echipament suficient de complex pentru a nu putea fi condus cu microcontroller sau mai multe echipamente simple care se folosesc concurent `n procesul de produc]ie. Posibilit\]ile mari de extensie [i de interfa]are cu diverse echipamente [i dispozitive industriale, fac ca prezen]a unui astfel de sistem ca un microcalculator autonom `ntre procesul tehnic condus [i un calculator PC cu interfa]\ grafic\ pentru operatorul uman s\ fie extrem de folositoare.

Protocolul [i programele de comunica]ie prezentate pot fi generalizate [i translatate `n scopul utiliz\rii lor la transferul paralel de date `ntre diverse dispozitive [i echipamente de calcul, av=nd un caracter suficient de universal [i o func]ionalitate destul de bun\.

Deoarece nu am dorit neap\rat proiectarea [i realizarea unui echipament cu succes comercial, ci demonstrarea anumitor cuno[tin]e acumulate `n lucrul cu familia microprocesorului Z80 [i eviden]ierea anumitor facilit\]i deosebite ale acestor circuite care au `nceput s\ fie pierdute din vedere, consider c\ mi-am atins scopul propus.

Bibliografie

[1.] Patrubány M. – Totul despre microprocesorul Z80, vol. 1 [i 2, Ed. Tehnic\, Bucure[ti, 1989;

[2.] Lupu C., St\ncescu S. – Microprocesoare. Circuite. Proiectare., Ed. Militar\, Bucure[ti, 1986;

[3.] Sztojanov I., Borcoci E., Tomescu N., Bulik D., Petrec M., Petrec C. – De la poarta TTL la microprocesor, vol. 1 [i 2, Ed. Tehnic\, Bucure[ti, 1987;

[4.] Mure[an T., Strugaru C., Stoinescu R., Petriu E. – Microprocesorul 8080 `n aplica]ii, Ed. Facla, Timi[oara, 1981;

[5.] Pleter O., Constantinescu C. – Z80 `n microcalculatoare compatibile Spectrum, Ed. Militar\, Bucure[ti, 1995;

[6.] Hu]anu C., Postolache M. – Sisteme cu microprocesoare `n conducerea automat\ a proceselor, vol. 1, edi]ia a 2-a, Ed. Academica, Ia[i, 2001;

[7.] Anatol G., Pintilie D. – Diagnosticarea tehnic\ a echipamentelor microprocesor, Ed. Universitas, Chi[in\u, 1992;

[8.] *** Dispozitive [i circuite electronice I – note de curs, 1999;

[9.] *** Circuite numerice – note de curs, 2000;

[10.] *** Calculatoare numerice I, II – note de curs, 2000-2001;

[11.] *** Proiectarea cu microprocesoare I, II – note de curs, 2001-2002;

[12.] *** Microcalculatorul TIM-S. Manual de func]ionare [i scheme logice – ITCI-FMECTC, Timi[oara, 1986;

[13.] *** Microcalculatorul COBRA. Manual de func]ionare [i scheme logice – ITCI Bra[ov, 1992;

[14.] *** Full Line Condensed Catalog – IPRS B\neasa, 1993-1994;

[15.] *** High Speed CMOS Logic Databook – Texas Instruments, 1993;

[16.] *** Z80 Family CPU & Peripherals User’s Manual – Zilog, Inc., 2000-2001;

[17.] *** Z80 Microprocessor Family Databook – SGS-ATES, 3rd Edition, 1982;

[18.] *** PCF8584, I2C-bus contoller data sheet – Philips Semiconductors, 1997;

[19.] *** OrCAD Capture User’s Guide, OrCAD Layout User’s Guide – Cadence Design Systems Inc., Second Edition, 2000;

[20.] *** Z80 CPU Official Support Page – pagin\ WEB, “http://www.geocities.com/SiliconValley/Peaks/3938/z80_home.htm”, 2000;

[21.] *** ICL 232, ^5V Powered Dual RS-232 Transmitter / Receiver data sheet – Harris Semiconductor, 1993;

Similar Posts