OEP
(One Eprom Programmer)
Questo progetto è nato dall'esigenza di programmare una Eprom non
pensando di doverlo fare ancora ..... ma che attualmente ne ha programmate con
successo almeno una decina.
Prologo:
Alcuni anni fa ho iniziato ad usare dei
microprocessori nei miei progetti. L'idea di quel tempo era di realizzare una
pedaliera midi gestita da un uP. Mi necessitava un uP che avesse l'UART per
pilotare l'interfaccia seriale midi e quindi la scelta è caduta sul vecchio, ma
sempre valido, 80C32 nella versione romless. Dopo aver reperito da amici (non
ero ancora collegato in Internet) l'assemblatore (in realtà tempo prima ne
avevo realizzato personalmente uno io in Basic: Basic Assembler)
mi trovai nella necessità di programmare una Eprom per fare il primo
esperimento. Non sapendo se fosse stato anche l'ultimo scartai subito l'idea di
acquistare un programmatore universale che a quel tempo costava anche
parecchio. Pensai: -Il falegname si costruiva la pialla, il fabbro le pinze, il
muratore la cazzuola ... e quindi è giusto che anch'io inizi con costruirmi gli
attrezzi-.
Il dispositivo doveva leggere il file di
codici macchina prodotto dall'assemblatore in formato Intel (.hex) e trasferire
i byte al programmatore esterno che calibrando opportunamente le tensioni e gli
impulsi li memorizzasse sulla Eprom. Pensai di utilizzare la porta parallela.
A quel tempo avevo a disposizione uno schema di M24 Olivetti e da li reperii le
informazioni sulla parallela, dai manuali quelle sulla Eprom e iniziai a
studiare il linguaggio C per poter scrivere del software in grado di gestire la
parallela.... Dopo alcuni mesi avevo tutto il know-how necessario per
realizzare l'OEP.
L'obiettivo principale era quello di
costruire un programmatore di Eprom che fosse composto dal minor numero di
pezzi, in quanto iniziavo allora a stampare in proprio le PCB (printed circuit
board), e fosse il più funzionale possibile. Mi resi conto subito che tale programmatore
doveva essere in grado anche di leggere il contenuto della eprom per poter
verificare se l'operazione di scrittura fosse andata a buon fine e che doveva
inoltre controllare che la cancellazione tramite UV avesse riportato a 0xFF
tutte le locazioni di memoria
Dopo numerose prove e schede I/O bruciate
finalmente raggiunsi lo scopo.
Tesi:
La filosofia del OEP è quella di essere un programmatore ridotto
"all'osso" in grado di programmare un solo tipo di EPROM, ovviamente
la meno costosa e quella più facilmente reperibile sul mercato. La scelta è
caduta sulla eprom 27C256 da 32K in tecnologia CMOS.
La realizzazione in casa di questo semplice programmatore non dovrebbe
richiedere una spesa superiore alle 30.000, escluso lo zoccolo ZIF di cui si
può benissimo fare a meno per una programmazione saltuaria. Nel file zip e'
presente anche una versione senza l'alimentatore, infatti si può usare un
alimentatore da laboratorio esterno.
Foto del programmatore nella
versione iniziale.
(successivamente sono state apportate delle modifiche)

ATTENZIONE, NON sostituire gli integrati
74LSxx con i 74HCxx e viceversa, in questo progetto NON SONO EQUIVALENTI.
Utilizzate soltanto integrati con la sigla indicata, pena MALFUNZIONAMENTI e/o
ROTTURE.
Descrizione del circuito:
Per ridurre il numero di piste sul PCB ho
pensato di utilizzare dei contatori per generare gli indirizzi della Eprom
invece dei soliti D-latch. La scelta per quanto azzardata si è rivelata
funzionale. Un LPF (low pass filter) costituito da C1 e R2 previene qualunque
glitch sulla linea del clock dei suddetti contatori.
In questo modo per raggiungere un determinato indirizzo è necessario azzerare i
contatori e poi portarli al valore voluto.
Il bus bidirezionale, che permette di
trasferire il dato e di rileggerlo da e verso la Eprom, l'ho implementato con
un 74LS374 che ha le uscite three-state e un 74LS241 che realizza un "bus
nibble" (cioè multipla 8 bit su 4 bit soltanto) necessario in quanto la
parallela SPP ha solo 5 bit in lettura.
L'impulso di 100uSec necessario per
programmare la EPROM viene generato dai rimanenti inverter del 74HC14. Il
monostabile così realizzato non è molto preciso in quanto il condensatore si
scarica completamente soltanto dopo un certo tempo che il pin 12 del 74HC14 è
stato portato a livello logico alto; rimane infatti un residuo di tensione pari
a 0.6 volt (tensione diretta del diodo) che genera un errore del 5% sul tempo
dell'impulso. Anche se tale errore è accettato dalle specifiche di
programmazione presenti nei manuali, il software che pilota il programmatore
lascia trascorrere almeno un millisecondo prima di emettere un altro impulso. Con
questo accorgimento, e utilizzando un condensatore in poliestere (ridotto
coefficiente di temperatura), il monostabile produce il suo bell'impulso di
100uSec con una stabilità nel tempo del tutto accettabile.
Le tensioni necessarie per programmare le
27C256 vengono generate da tre stabilizzatori integrati che generano e
commutano le suddette tensioni. Rimanendo libera un uscita dei contatori ho
pensato di utilizzarla per passare automaticamente dalla condizione di lettura
a quella di programmazione. Quando si programma una Eprom è necessario, per
essere sicuri della buona riuscita dell'operazione, controllare che tutte le
locazioni siano state cancellate, cioè che il loro valore sia FF in
esadecimale. Per fare questo occorre incrementare i contatori partendo
dall'inirizzo 0000 fino a 7FFF che corrisponde all'ultima locazione di una
27C256. L'impulso di clock successivo inviato ai contatori li porta nella
condizione 8000, cioè l'indirizzo della Eprom è 0000 e risulta alta l'uscita QD
dell'ultimo contatore. Questa uscita controlla le tensioni di Vpp e Vcc+ che in
fase di programmazione devono essere portate a 12.75 e 6.25.
Led:
Il led VERDE segnala la presenza
dell'alimentazione a tutto il circuito e quindi anche al pin 28 Vcc della EPROM
(Alimentazione della EPROM).
Il led ROSSO segnala la presenza della
tensione di programmazione sul pin 1 Vpp e l'innalzamento della Vcc a 6.25
Volt. Da questo momento in poi e' possibile la programmazione e quindi il led
ROSSO acceso segnala: programmazione in corso.
L'interruttore SICUREZZA impedisce,
quando e' chiuso, la programmazione accidentale della EPROM. Se state copiando
o semplicemente verificando il contenuto di una EPROM gia' programmata e'
preferibile chiudere questo interruttore.
Tarature:
Una volta costruito il circuito occorre fare
due semplici tarature:
Queste specifiche sono state prese dal
manuale della National: "Memory Databook" edizione 1992 (temperatura
ambiente di programmazione da 20 a 30 ° C). Da prove
effettuate queste specifiche non sono cosi' stringenti.
ATTENZIONE, prima di togliere la EPROM
dallo zoccolo spegnere il programmatore agendo sul deviatore ON/OFF, il led
verde deve risultare spento. Sfilando l'EPROM con l'alimentazione inserita si
rischia di danneggiarla
Descrizione del software di controllo:
IL
SOFTWARE NON FUNZIONA SOTTO I SISTEMI OPERATIVI TIPO: NT, WINDOWS 2000, XP
occorre creare una partizione Windows 95/98 o DOS sul PC
Il programma gestisce tutte le funzioni
della scheda usando parametri nella riga di comando:
Funzioni di controllo:
Funzioni operative:
ATTENZIONE, prima di togliere la EPROM dallo zoccolo spegnere il
programmatore agendo sul deviatore ON/OFF, il led verde deve risultare spento.
Sfilando l'EPROM con l'alimentazione inserita si rischia di danneggiarla
Opzioni del software di controllo:
IL
SOFTWARE NON FUNZIONA SOTTO I SISTEMI OPERATIVI TIPO: NT, WINDOWS 2000, XP
occorre creare una partizione Windows 95/98 o DOS sul PC
Il programma gira sul mio 386 da laboratorio
in DOS e richiede un parametro per specificare le opzioni.
La sintassi è la seguente:
PRG256 [/opzioni] [file.hex]
opzioni:
Il valore x identifica la porta parallela da usare:
1=0x378 (Lpt1)
2=0x278 (Lpt2)
3=0x03BC
NULL=0x378 (Default LPT1)
Esempi:
Prg256 /p1 test.hex
Programma la EPROM collegata sulla porta
0x378 (Lpt1) con il file test.hex
Prg256 /t2
Tara il programmatore collegato sulla porta
0x278 (Lpt2)
Formato del file:
Il
formato INHX8M (*.hex) è un file di testo in formato ASCII composto da un
numero di righe variabile:
Ogni riga di testo e' cosi'
composta:
:BBAAAATTHHHH....HHHCC
dove
: Carattere di inizio della riga (due punti)
BB Due cifre esadecimali che rappresentano il numero di
bytes dati contenuti nella riga di solito 10 (cioè 16 bytes)
AAAA Quattro cifre esadecimali che rappresentano l'indirizzo di
partenza dei dati contenuti nella riga
TT Indica il tipo di record
· 00 - I dati contenuti nella
riga sono bytes di dati
· 01 - Ultima riga del file
·
02 - Extended segment address record (non usato)
·
03 - Start segment address record (non usato)
·
04 - Extended linear address record (non
usato)
·
05 - Start linear address record (non usato)
HH Due cifre esadecimali (8 bit) che rappresentano i bytes
dei dati
CC Checksum, cioe' somma di controllo: la somma di tutti i
bytes piu' il byte di checksum, esclusi i riporti, deve dare come risultato 00
Esempio
Una riga del file ad esempio
risulta essere: :03000B000201915E cioè:
: Inizio riga
03 La riga contiene 3 bytes di dati
000B L'indirizzo del primo byte è 000B in esadecimale, gli altri
bytes a seguire
00 La riga e' una riga di byte dati normale
02 01 91 I bytes di dati associati agli indirizzi:
000B: 02
000C: 01
000D: 91
5E checksum cioè (03+00+0B+00+02+01+91+5E) AND FF = 00
L'ultima riga del file
risulta essere: :00000001FF cioe' : 00 0000 01 FF
Il file Binario (*.bin) è invece
un file composto dai singoli byte. Per questo motivo non può essere letto con
un editor di tesi ma occorre un editor specifico di files binari.
Inoltre il file binario non
contiene l'indirizzo dove devono essere scritti i byte e tale informazione quindi
deve essere fornita a parte. L'uso dell'indirizzo in ogni riga del file *.hex
rende possibile memorizzare dati in aree non contigue dell'EPROM con notevole
risparmio di lunghezza del file e di velocità di programmazione su EPROM molto
grandi.
Utility Software:
Convertitore
da formato INHX8M (*.hex) a binario
(*.bin)
Convertitore
da formato binario (*.bin) a INHX8M
(*.hex)
Visualizzatore di file binario
Download software:
Potete scaricare il file *.zip contenente tutti i files relativi al progetto compreso questo file in formato testo.
|
Prg256.c |
Sorgente in C |
|
|
Prg256.com |
Eseguibile |
Dos o Finestra Dos Windows95/98 |
|
Prgepr.eps |
LayOut PCB in formato EPS |
Per stampare su pellicola nei service tipografici |
|
Serig.gif |
LayOut Serigrafia |
Posizione componenti |
|
Prgepr0.pcb |
Circuito stampato CON alimentatore |
|
|
Prgepr1.pcb |
Circuito stampato SENZA alimentatore |
|
|
Prgepr.sch |
File Schema Circad |
|
|
Hex2Bin |
File
eseguibile |
File di
conversione da INHX8M a BINARIO |
|
Bin2hex |
File eseguibile |
File di conversione da BINARIO a INHX8M |
|
Prg256.txt |
File testo |
Questo file in formato testo |
ATTENZIONE, NON sostituire gli integrati 74LSxx con i 74HCxx e
viceversa, in questo progetto NON SONO EQUIVALENTI. Utilizzate soltanto
integrati con la sigla indicata, pena MALFUNZIONAMENTI e/o ROTTURE.
IL
SOFTWARE NON FUNZIONA SOTTO I SISTEMI OPERATIVI TIPO: NT, WINDOWS 2000, XP
occorre creare una partizione Windows 95/98 o DOS sul PC
Note
per Windows95:
Se si fa girare tale programma sotto Windows 95
occorre aggiungere sul collegamento al file uno spazio e un punto
interrogativo.
Istruzioni passo-passo:
In questo modo quando si lancia il programma, Windows
chiede i parametri da passare al programma DOS visualizzando una finestra in
cui possiamo inserire per esempio: /p1 test.hex e il software viene lanciato
per programmare sulla porta LPT1 il file test.hex nella EPROM.
Software per leggere i files:
Il disegno del circuito elettrico è stato realizzato
con il programma CIRCAD della HoloPhase (versione di valutazione) che si può
scaricare dal sito http://www.holophase.com. Quando siete in possesso di tale programma potete
visualizzare i files del programmatore con estensione *.sch (schemi) e *.pcb
(circuiti stampati).
Per poter visualizzare i files in formato Encapsulated
PostScript Standard (*.eps) potete utilizzare un'ottimo programma freeware
disponibile in rete.
Occorre infatti un interprete PostScript per leggere un file *.eps che e'
parente stretto al *.ps.
Lo potete scaricare dal sito: http://www.cs.wisc.edu/~ghost/index.html
Prima devete scaricare e installare: Aladdin Ghostscript
Poi scaricare e installare: GSview
Se volete realizzare in casa i PCB potete leggere la pagina dedicata dove descrivo la mia "semplice" attrezzatura: PCB
Limitazioni:
Per i motivi che ho spiegato all'inizio, questo
progetto e' limitato alla programmazione di una sola EPROM la 27C256. Molti
lettori mi hanno chiesto di modificare il programmatore per accettare anche
altre EPROM. Sebbene questo sia possibile, l'idea iniziale verrebbe meno, cioe'
il circuito si complicherebbe poiche' ho gia' spremuto fino all'osso i 5 IC TTL
di cui e' composto.
Ci tengo comunque a dire che una EPROM 27C256 da 32K
puo' emulare le sorelline minori, 16K e 8K:
Una 27C128 e' perfettamente rimpiazzabile con
una 27C256 a patto di programmare quest'ultima dalla locazione 0x4000 in poi.
Una 27C64 e' rimpiazzabile con una 27C256,
occorre controllare sullo zoccolo in cui dovrebbe andare la 27C64 come risulta
collegato il pin 26:
E' possibile in teoria rimpiazzare una 27C32 con una
27C256 ma le operazioni da fare sono un po' piu' complicate.
I cloni:
Sebbene l'OEP fosse nato per programmare una sola
EPROM destinata ad un esperimento con l'8032 e' tuttora sul mio tavolo e si
sta', con mio orgoglio, replicando nei laboratori d'Italia.
Elenco incompleto di quelli che hanno costruito l'OEP
|
|
Nome |
|
Pagina Web |
|
1 |
Pittybug |
|
|
|
2 |
Michele |
|
|
|
3 |
Sebastiano Montoneri |
|
|
|
4 |
Mauro Zunino |
||
|
5 |
Stefano Dian |
||
|
6 |
Gurz |
|
|
| 7 | Nicola | niconico3@inwind.it |
Poiche' ho pensato solo adesso di creare questo elenco
utile a chi costruisce l'OEP, sicuramente ho tralasciato di riportare qualcuno
che mi ha scritto molto tempo fa dicendomi di aver costruito il programmatore;
me ne scuso anticipatamente.
Altri programmatori nel Web:
Per chi non fosse soddisfatto di questo progetto, in
rete esistono altri programmatori di EPROM: