universele EPROM-emulator met Centronics-interface ontwerp: B.C. Zschocke en N. Breidohr (Duitsland) Een ander groot voordeel van de hier gepresenteerde emulator is dat er geen aparte software bij nodig is. Er is ook geen speciaal dataformaat noodzakelijk voor de data die naar de emulator worden verstuurd. Men kan gebruik maken van kommando's die in het operating-system van de meeste computers standaard aanwezig zijn, om de gegevens via de printer-aansluiting naar de emulator te sturen.
Overzicht
Een EPROM-emulator is bij het testen van zelfgeschreven software voor microcontroller-toepassingen haast onontbeerlijk. Het hier voorgestelde ontwerp maakt gebruik van standaardkomponenten en kan eenvoudig worden aangesloten op de Centronics-poort van de computer. De schakeling is in staat om alle EPROM-typen van 2764 tot 27512 te emuleren. Er kunnen zelfs meerdere van deze emulatoren aan elkaar gekoppeld worden om busbreedtes van 16 of 32 bit te verwezenlijken. Technische gegevens universele EPROM-emulator -
emuleert EPROM's van 2764 t/m 27512 aansluitbaar op elke Centronics-poort auto-reset-funktie ingebouwd eenvoudig te konfigureren voor busbreedtes van 8, 16 en 32 bits - geen aparte software noodzakelijk, maakt gebruik van standaard-routines van het operating-systeem in de computer
34
Een EPROM-emulator is een brok logica met RAM-geheugen, dat de EPROM in een computer- of microcontroller-systeem vervangt. In de RAM wordt de software geplaatst die anders in de EPROM zit. Op deze wijze kan de inhoud van de RAM eenvoudig naar behoefte aangepast worden en dat scheelt bij het ontwikkelen en testen van software veel tijd. Een EPROM moet immers steeds weer gewist worden.
De emulator kan byte-gewijs georganiseerde EPROM's van 8 tot 64 KB (2764 tot 27512) vervangen. De nog maar zelden gebruikte typen 2708 (1 KB) en 2716 (2 KB) kunnen door middel van een adapter-printje ook nog geëmuleerd worden. Voor het werken met grotere busbreedtes dan 8 bits kunnen maximaal vier emulatoren (32-bits) aan elkaar gekoppeld worden. Als data-zender kan elke Centronics-poort gebruikt worden. De door de computer verstuurde strobe-pulsen worden niet alleen als geldigheidssignaal voor de datalijnen gebruikt, maar ook als enablesignaal, als klok voor tri-state-teller IC7...IC9 en als keuzesignaal voor één van de emulator-printen bij 16en 32-bits kombinaties. Het tellergedeelte adresseert twee RAM-IC's die elk 32 Kbyte groot zijn. De op de data-ingangen aanwezige nivo's worden ingelezen en in de RAM's opgeslagen. Nadat alle bytes verwerkt zijn, komt de teller in een hoogohmige toestand te staan. Daarna kunnen de RAM-adressen via een adresbuffer door de applikatie-schakeling geselekteerd worden en komen de daar aanwezige data beschikbaar via een aantal databuffers. Die hele leescyclus komt voor rekening van het systeem waarin de EPROM geëmuleerd wordt.
De schakeling De schakeling bestaat grofweg uit drie blokken (zie figuur 2): - Een besturingsgedeelte dat is opgebouwd rond IC10 en IC11. Deze IC's zorgen voor een korrekte bus-timing op de Centronics-aanElektuur 9-95
sluiting en ze leveren enkele interne signalen. Verder produceert dit gedeelte het RESET-signaal voor de applikatie waarin de emulator is opgenomen (auto-reset). Alle naar buiten uitgevoerde signalen worden gebufferd door open-kollektor-uitgangen (IC3). - De byte-breedte-keuze (IC7 en de helft van IC12) zorgt er voor dat bij 16- of 32-bits toepassingen steeds de juiste 8 bits (1 byte) door de juiste emulator verwerkt worden. Dit gedeelte is alleen nodig wanneer men ook van plan is te werken met 16- en 32-bits busbreedtes. - RAM- en adresseringsgedeelte. Dit bestaat uit een teller (IC8/IC9) die de schrijf-adressen genereert, een latch voor de opslag van de gegevens op de Centronics-aansluiting en een aantal buffers (IC3...IC5) voor de verbinding met het EPROM-voetje. Afhankelijk van de instelling (laden of emuleren) worden de RAM-adressen geleverd door de teller met de latch of door het systeem waarin de EPROM geëmuleerd wordt. Voor de gegevensopslag zijn twee 32-Kbyte-CMOS-RAM's verantwoordelijk. Daarmee kan maximaal een 27512-EPROM geëmuleerd worden. Bij kleinere EPROM's wordt een gedeelte van het RAM-bereik uitgeschakeld door de adreslijnen A15 (27256), A15/A14 (27128) of A15/A14/A13 laag te maken. Dit kan men doen met behulp van de jumpers A13...A15 op de print, of via de adapter-print die straks nog beschreven wordt.
Figuur 1. Het blokschema van de EPROM-emulator. Tijdens de duur van de strobe-puls hebben adres en data de tijd om te stabiliseren. De stijgende flank van de strobe-puls triggert IC10a en aktiveert daarmee gedurende de mono-tijd van IC10a het write-signaal voor de RAM's en het acknowledge-signaal voor de Centronicsinterface. Nadat de mono-tijd van IC10a verstreken is, ontvangt IC11a
een klokpuls en maakt het busy-signaal weer inaktief. Tegelijkertijd wordt de inhoud van de teller met één verhoogd. Het eerste byte is dan in de RAM's geschreven en de schakeling staat klaar voor de ontvangst van het volgende byte. Komt er binnen de mono-tijd van IC10b een nieuw byte binnen, dan wordt IC10b gehertriggerd. Verder verloopt de
Iets gedetailleerder In de Centronics-standaard is vastgelegd dat de data voor en na de strobe-puls een bepaalde tijd lang stabiel moeten zijn. Daarmee wordt bereikt dat printers die reageren op de dalende flank van de strobe-puls even korrekt werken als printers die de opgaande strobe-flank gebruiken. Na het inschakelen van de voedingsspanning zorgt het RC-netwerkje R7/C7 (figuur 3) voor het setten van de flipflops IC11a en IC11b, en het resetten van IC10a en IC10b. IC11b reset dan alle tellers en zet de schakeling in de emuleerstand. Voor de verdere beschrijving roepen we de hulp in van het timing-plaatje in figuur 2. De dalende flank van het strobe-signaal triggert IC10b en reset IC11a en b. IC11b schakelt dan over naar "schrijven" en aktiveert tevens de reset-lijn. IC11a geeft aan de Centronics-bus een busy-nivo terug. De neergaande flank van IC11a laadt de tellerstand in het teller-register en zet de op de Centronics-aansluiting aanwezige data in latch IC6. Elektuur 9-95
Figuur 2. Dit timing-diagram toont het verloop van de belangrijkste signalen in de schakeling.
35
5V
R13
10k
1
R14
10k
1
S1-1
5V 2
3
4
5
6
7
8
2
3
4
5
6
7
8 20
20
IC4
IC5
20 C10
K1
*
C11
100n
40
39
38
37
36
35
34
33
32
31
30
29
28
27
RESET 26
25
24
23
22
21
20
19
18
17
CD7
16
15
CD6
14
13
CD5
12
11
CD4
20 C8
C9
IC3 100n 10
C14
IC6 100n
100n 10
10
100n 10
IC13a
S1-12 2
1 11 CLK
10
9
CD3
8
7
CD2
6
5
CD1
4
3
CD0
2
1
CD0
2
CD1
3
CD2
4
CD3
5
CD4
6
CD5
7
CD6
8
CD7
9
D0
Q0
D1
Q1
IC6
D2
Q2
D3
Q3
74 HCT 574
D4 D5 D6 D7
Q4 Q5 Q6 Q7
19
RD0
18
RD1
17
RD2
16
RD3
15
RD4
14
RD5
13
RD6
12
RD7
OC 1
5V
S1-4 S1-5
R8
2
10k
3
A
Y0
IC12a
B
IC13d 8
5V
S1-1
10k
10k B
Q
13
Q
CCLK
4
QA
IC7 12
CLR
10
3
13
4 2
S D
Q
CLK
Q
6
QB QC
CCLR
QD
RCLK
QE
74 HC 590
5 14
IC11a 3
CCLKEN
G
QF QG QH
RA1
9
RA2
8
RA3
7
2
RA4
6
3
RA5
5
4
RA6
4
5
RA7
3
6
RA8
25
7
RA9
24
RA10
21
RA11
23
RA12
2
RA13
26
RA14
1
9 1
11
5V
CCLK
QA
IC8 12 10
R7
13
S
5V
14
C7
CCLKEN
QB QC
CCLR
QD
RCLK
QE
74 HC 590 G
QF QG QH
15
RA0
1
RA1
2
RA2
3
RA3
4
RA4
5
RA5
6
RA6
7
RA7
RCO 9
330n
5V 11
R6
CCLK
QA
1M
IC9 12 C6
10 2µ2 16V
7
13
6
Q
5
12
12
11
S D
IC10b
3
Q
IC11b Q
CLR
CCLKEN
QC
CCLR
QD
RCLK
QE
74 HC 590
10
Cext
B
CLK
Q
9
14
QB
G
QF QG QH
10
1
RCO
R
RA0
15
3 11
A
A
S1-8
28
IC13b
Cext
IC10a
9
7
14
RCext
RCext
6
5V
5 4
1n 15
10
Y3
IC13c 6
RESET
G
5
R12
C5
1
1
4
5V
R5
2
Y1 Y2
9
100k
procedure hetzelfde als bij het eerste byte. Komen er binnen de "wachttijd" van IC10b geen nieuwe data binnen, dan schakelt de emulator na het verstrijken van deze tijd in de stand "emuleren", het reset-signaal verdwijnt, de tellers worden gereset en de teller-uitgangen worden hoogohmig gemaakt. Nu kan het controller-systeem werken met de pseudo-EPROM. Voor het vergroten van de busbreedte naar 16 of 32 bits worden de write-signalen voor de RAM's annex kloksignalen voor de tellers door IC7 en IC12a verdeeld over 2 of 4 emulatoren. Afhankelijk van de stand van de DIP-schakelaartjes (of jumpers) S1-1...S1-8 wordt in de RAM's van elke emulator beurtelings het eerste, tweede, derde of vierde byte opgeslagen. De tellerpulsen worden daartoe over de verschillende emulatoren verdeeld en de RAM's worden geselekteerd met behulp van de write-signalen. De keuze in elke emulator tussen het eerste en tweede RAMIC geschiedt overigens met behulp van adreslijn A15 en IC12b. Op het eerste gezicht lijken de uitgangssignalen van IC10b en IC11b identiek. De flipflop is echter toegevoegd om een vervelende eigenschap van het timer-IC weg te werken. Bij lange mono-tijden blijkt namelijk de tijd tussen het triggermoment en het aktief worden van de uitgang van IC10b relatief lang te duren. Nu wordt IC11b door het triggersignaal voor IC10b direkt gereset en pas geklokt na het verstrijken van
15
RA8
1
RA9
2
RA10
3
RA11
4
RA12
5
RA13
6
RA14
7
RA15
A0 A1 A2 A3
D1
A5
D2
RAM
A6
D3
A7
D4
A8
D5
62256
A9 A10
D6 D7
11
RD0
12
RD1
13
RD2
15
RD3
16
RD4
17
RD5
18
RD6
19
RD7
A11 A12
CE
A13
20
A14 OE
WE
22
14
27
5V 28 RA0
10
RA1
9
RA2
8
RA3
7
RA4
6
RA5
5
RA6
4
RA7
3
RA8
25
RA9
24
RA10
21
RA11
23
RA12
2
RA13
26
RA14
1
A0 A1 A2 A3
D0
IC2
A4
D1
A5
D2
RAM
A6
D3
A7
D4
A8
D5
62256
A9 A10
D6 D7
11
RD0
12
RD1
13
RD2
15
RD3
16
RD4
17
RD5
18
RD6
19
RD7
A11 A12
CE
A13
20
A14 OE
RCO
8
D0
IC1
A4
WE
22
14
27
9
R 13
RA15
IC10 IC11 IC12 IC13
= = = =
74HCT123 74HCT74 74HCT139 7407
14 13
A B
Y0
IC12b
Y1 Y2
15
G
Y3
12 11 10 9
Figuur 3. Het volledige schema. In twee CMOS-RAM's worden de de mono-tijd van IC10b. Ook met de waarde van C6 moet men in de praktijk oppassen, aangezien de MMV niet in staat is om grotere kapaciteiten snel genoeg te ontladen. Een eventueel vergroten van C6 moet dus met de nodige voorzichtigheid gebeuren. Wanneer de computer data naar de EPROM-emulator stuurt, dan laat IC13e LED D1 oplichten. IC3f levert een aktief laag reset-signaal dat op
36
K2 beschikbaar is en dat gebruikt kan worden voor het resetten van het controller-systeem waarin de emulator zijn werk doet. Na het laden van nieuwe data start de applikatie-schakeling dan meteen met het uitvoeren van het nieuwe programma in de EPROM-emulator. De voedingsspanning van de emulator kan uit de testschakeling worden betrokken (via S1-10) of via stabilisator IC14 (via S1-9) uit een kleine Elektuur 9-95
16
16
IC7
IC8
8
8
16
16
C15
C13
IC11
100n
C12
IC12
100n
8
14
C17
IC10
100n
16
14
C16
IC9
IC13
100n
8
100n 8
7
emulator dan in een ongedefinieerde toestand terecht komen. Om dit probleem op te heffen kan men een reset-toets monteren tussen de punten S en massa. Het is echter beter om de emulator in zo'n geval apart te voeden, want een nietgedefinieerde toestand kan desastreuze gevolgen hebben waarbij een of meerdere TTL-IC's in de emulator de geest geven.
7
IC14 9V
7805
5V
S1-9
De praktische realisatie
14
RA13
13
RA14
12
RA15
11
A2
Y3
Y5
18 17
RA3
16
RA4
15
RA5
14
RA6
13
RA7
12
RA12
11
A5 A6
Y7
A7
A0
Y1
A1
IC4
Y2
A2 A3
74 HCT 541
Y4 Y5
A2
4
A11
5
A9
6
A8
7
A13
8
A14
9
A15
19
Y0
Y3
A1
3
G2
1
RA10
A4
Y6
G1
RA0
A3
74 HCT 541
Y4
2
100µ 16V
A4 A5
Y6
A6
Y7
A7
G1
2
A0
3
A10
4
A3
5
A4
6
A5
A15
RA8
A1
IC3
Y2
A14
15
A0
Y1
100n
R9
R11
A6
7 8
A7
9
A12
K2 5V
G2
1
19
10K
R1
R2
1
19
G1 2
RD2
3
RD4
4
RD1
5
RD5
6
RD0
7
RD6
8
RD7
9
G2
A0
Y0
A1
Y1
IC5
A2 A3 A4 A5
Y2
74 HCT 541
Y3 Y4 Y5
A6
Y6
A7
Y7
18
D3
17
D2
16
D4
15
D1
14
D5
13
D0
12
D6
11
D7
*
2
1
A15
A14
4
3
A12
A13
6
5
A7
A8
8
7
A6
A9
10
9
A5
A11
12
11
A4
14
13
A3
16
15
18
17
A1
D7
20
19
A0
D6
22
21
D0
D5
24
23
D1
D4
26
25
D2
D3
28
27
30
29
32
31
34
33
A10
RD3
C4
100k
RA9
Y0
330n
10K
16
470µ 16V
A13
17
RA11
C3
100k
18
RA2
C2
100k
RA1
S1-10
C1
A2
5V
D1
11
R4 10k
470Ω
R3
IC13e 10
13
12
RESET
R
IC13f
*
zie tekst
910082 - 11
gegevens opgeslagen die anders in een EPROM zouden staan. netadapter worden gehaald. Of er een externe voeding nodig is, dat hangt natuurlijk in eerste instantie af van de vermogensreserves van de voeding van de applikatie-schakeling. Men moet echter nog op enkele punten letten. Wanneer de emulator via het EPROM-voetje uit de applikatie zijn voedingsspanning krijgt en de voeding van deze schakeling is uitgeschakeld (bijv. vanwege een power-on-reset) terwijl de Elektuur 9-95
Centronics-interface verbonden is met de host-computer, dan kan er een gevaarlijke situatie ontstaan. In dat geval wordt de emulator via de beveiligingsdioden van de drivers van de Centronics-interface in de host-computer van stroom voorzien. De voedingsspanning in de emulator is dan ongeveer 3 V, voldoende voor de RAM's maar te weinig voor de TTL-IC's. Na het inschakelen van de applikatie-schakeling kan de
Voor de schakeling is een dubbelzijdige print ontworpen (figuur 4) die netjes in een kunststof kastje past. Let er bij het kopen van de kondensatoren op dat deze de juiste steek hebben, want in verband met de beschikbare printruimte zijn vrij kleine typen gebruikt. De opbouw van de print zal voor iemand die zich toch al met microcontroller-boards en dergelijke bezig houdt, zeker geen probleem zijn. Let er wel op dat C11 onder IC1 komt te zitten (eventueel de kondensator aan de soldeerzijde monteren). Stabilisator IC14 wordt van een koelvinger voorzien. Konnektor K1 heeft een dubbele funktie. Hierop (pen 1...25) kan via een stukje flatcable en een perskonnektor direkt een 25-polige sub-Dsteker volgens IBM-norm aangesloten worden (zo'n konnektor dient op een PC voor de printer-aansluiting). Er kan ook een 36-polige Centronics-konnektor met K1 verbonden worden, maar dan moeten wel de pennen 4 en 6 van K1 worden verwijderd of de desbetreffende flatcable-aders worden doorgeknipt. Als men gebruik maakt van een subD-konnektor, dan is het niet mogelijk om de voedingsspanning via deze konnektor door te lussen. Konnektor K1 mag overigens ook minder dan 40 pennen hebben (bijv. 26-pens voor sub-D), maar een 40-pens type is in elk geval goed verkrijgbaar. Voor een goede instelling van de verschillende mogelijkheden is het aan te bevelen om voor S1 een 12voudige DIP-switch te nemen en deze in een voetje te plaatsen, zodat Kommando's voor het versturen van binaire files MS-DOS COPY
LPT1 /B (/B betekent binair versturen) Amiga COPY PAR: (PAR: gebruiken i.p.v. PRT:) TOS Bij de Atari ST klikt men twee keer op de desbetreffende file met de muis en stuurt deze file dan naar de printer. Denk er wel aan dat TOS bij elke file een CR/LF toevoegt, wat tot gevolg heeft dat de laatste bytes van een EPROM niet gebruikt kunnen worden.
37
komponenten-opstelling
soldeerzijde
Figuur 4. De print voor de emulator is zeer kompakt gehouden, maar dat betekent wel dat kondensatoren met een steek van 1/10 of 2/10 inch gebruikt moeten worden.
Tabel 1. De verschillende DIP-switch- en jumper-instelingen. Instellingen S1 mode
1
8-bits 16-bits 32-bits on byte-nr. ext. voeding
2
3
on on
on
4
5
6
7
8
0
1
2
3
9
10
11
on on on
voeding via EPROM-voet
on
voeding via Centronics
on
busy op Centronics
on
Indien niets is vermeld, staat de schakelaar op "off". Instellingen adreslijnen voor EPROM-type type
jumper A13
2764 (8 KB) 27128 (16 KB) 27256 (32 KB) 27512 (64 KB) X = jumper aanwezig
38
12
X X X
jumper A14
X X
jumper A15
X
hij iets boven de overige komponenten uitsteekt. Het is ook mogelijk de DIP-switch aan de onderkant van de print te monteren en hiervoor in het kastje een opening te maken. Hetzelfde geldt voor de LED, zodat deze ook duidelijk zichtbaar is. Wil men een 16- of 32-bits versie van de EPROM-emulator bouwen, dan worden twee of vier identieke printen opgebouwd en deze worden allemaal met dezelfde Centronicskabel verbonden (een stuk flatcable met een aantal daarop geperste konnektoren). De instelling van de jumpers op elke print is in tabel 1 gegeven. De synchronisatie tussen de printen geschiedt via de ACK-lijn op de Centronics-interface. Ook de reset-lijn wordt via deze interface gesynchroniseerd. Het busy-signaal mag maar op één print zijn werk doen; dit wordt ingesteld met S1-12. Maken de emulatoren gebruik van een externe voeding, dan wordt de netadapter bij één print aangesloten op de stabilisator (via S1-9) en de overige printen krijgen dan de gestabiliseerde spanning van deze print via K1 en S1-11 Elektuur 9-95
Onderdelenlijst Weerstanden: R1,R2,R4,R5,R8,R12 = 6 × 10 k R3 = 1 × 470 Ω R6 = 1 × 1 M R7,R9...R11 = 4 × 100 k R13,R14 = 2 × SIL8-weerstandarray 7 × 10 k
komponentenzijde
Kondensatoren: C1 = 1 × 470 µ/16 V radiaal (steek 2/10") C2,C7 = 2 × 330 n (steek 2/10") C3,C8...C17 = 11 × 100 n (steek 2/10") C4 = 1 × 100 µ/16 radiaal (steek 1/10") C5 = 1 × 1 n (steek 2/10") C6 = 1 × 2µ2/16 V radiaal (steek 1/10")
(op die printen is schakelaar S1-9 dus open). Op alle printen moet S110 geopend zijn.
EPROM-adapterprintje Voor de koppeling tussen de applikatie-schakeling en de emulator moet nog een adaptertje worden gemaakt. Dit is vrij eenvoudig, vooral als u eens goed kijkt naar de foto van figuur 5. Neem een stukje experimenteerprint van minstens 17 koperbaantjes breed en 7 gaatjes lang, en kras alle baantjes door na het derde gaatje. Op dit printje wordt een boxheader gesoldeerd en twee rijen enkelvoudige voetjes. De aan de onderzijde uitstekende pennen worden in een of twee op elkaar gestapelde voetjes gestoken. Voor de verbinding met de emulator zorgt een kort stukje flatcable met aan elk uiteinde een perskonnektor. Op deze wijze kunt u enkele voetjes maken voor verschillende EPROMtypen. Eventueel kunt u dan de jumper-instellingen A13...A15 direkt op de adapter verwerken. De pennen 29...34 van K1 zijn met het reset-signaal verbonden. Een van deze punten kan op het adapterprintje worden gebruikt voor een reset-aansluiting voor de applikatie-schakeling. Elektuur 9-95
Halfgeleiders: D1 = 1 × LED 3 mm, groen IC1,IC2 = 2 × 62256 (<100 ns) IC3...IC5 = 3 × 74 HCT541 IC6 = 1 × 74HCT574 IC7...IC9 = 3 × 74HC590 IC10 = 1 × 74HCT123 IC11 = 1 × 74HCT74 IC12 = 1 × 74HCT139 IC13 = 1 × 7404 (74LS04) IC14 = 1 × 7805
De software-kant Het enige dat aan software nodig is om te kunnen werken met de EPROM-emulator, is een utility waarmee binaire files in binaire vorm geprint kunnen worden. In tabel 2 zijn enkele mogelijkheden gegeven voor gebruikers van DOS-systemen en voor mensen die nog met een Amiga of Atari werken. Voor de bezitters van een PC (met MS-DOS) is er ook nog het programma EPROMSIM versie 2.0 verkrijgbaar via de EPS. Deze software kan EPROM's tot 64 KB verwerken en ze biedt de mogelijkheid om de drie meest voorkomende dataformaten naar een binair formaat te vertalen en dit dan naar de emulator te versturen. De ondersteunde formaten zijn: - Intel Intellec-8-formaat - Tektronix hexadecimaal formaat - Motorola-formaat Tot slot willen we nog opmerken dat u er op moet letten dat de verbindingskabels tussen het EPROMvoetje in de applikatie-schakeling en de emulator zo kort mogelijk moeten zijn. Dat vermindert de kans op storingen van buitenaf. (910082)
Diversen: S1 = 1 × 12-voudige DIP-switch of 24-pens header K1 = 1 × 40-polige boxheader K2 = 1 × 34-polige boxheader 40-polige perskonnektor voor K1 Centronics-bus of 25-polige subD-bus met pers-aansluiting 2 34-polige perskonnektoren voor verbinding met adapter-printje circa 50 cm 36-aderige flat-cable 1 U-vormige koelvinger voor IC14 1 kastje, bijv. Bopla E440 1 print EPS 910082 (zie pag. 6) evt. programma EPROMSIM V2.0, EPS 127
Figuur 5. De konstruktie van een adapter-printje. Ernaast is te zien hoe het stukje experimenteerprint bewerkt moet worden.
39