Community
 
Aggiungi lista preferiti Aggiungi lista nera Segnala abuso Invia ad un amico
------------------
Crea
Profilo
Blog
Video
Sito
Foto
Amici
   
 

 

 DISCLAIMER

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)

SCHEMA DEL PROGRAMMATORE

 

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.

PrgEpr.Zip

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

E-mail

Pagina Web

1

Pittybug

pittybug@tiscalinet.it

 

2

Michele

micjob@tiscalinet.it

 

3

Sebastiano Montoneri

sebamont@tin.it

 

4

Mauro Zunino

mauro.iw1elo@libero.it

http://www.qsl.net/iw1elo

5

Stefano Dian

stefanodi@galactica.it

http://www.sunnet.it/cb/progetti.htm

6

Gurz

gurz@libero.it

 

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:

  1. PROGRAMMATORE WILLEM
2.     PROGRAMMATORE di FALVIO FRE
3.     QUICK SMART PROGRAMMER

 


Se volete costruire il mio programmatore, sarei contento di saperlo anche per potervi aiutare nella messa a punto.
Scrivetemi all'indirizzo riportato nella Homepage