6502.org Forum  Projects  Code  Documents  Tools  Forum
It is currently Sun Nov 24, 2024 12:37 pm

All times are UTC




Post new topic Reply to topic  [ 6 posts ] 
Author Message
PostPosted: Sat Oct 24, 2020 10:06 am 
Offline
User avatar

Joined: Wed Feb 13, 2013 1:38 pm
Posts: 589
Location: Michigan, USA
I'd like to take advantage of PCB prices and design a new version of my old EPROM programmer for 12.5 volt CMOS 27C series devices. I'd also like to use an inexpensive Arduino Uno or Nano with built-in USB interface as the controller.

I'm hoping someone can recommend a better voltage control solution to provide the 12.5 / 5.0 volt VPP control and the 5.0 / 6.0 volt VCC control. I think I'm going to use an external supply (18650 + Boost Regulator) to supply precisely 13.1 volts to the Arduino and then I can access that voltage off of the Arduino Vin pin.

I wonder if it might be possible to squeeze the programmer into an Arduino Uno Shield form factor?

TIA. Cheerful regards, Mike


Attachments:
EPROM Programmer.png
EPROM Programmer.png [ 216.29 KiB | Viewed 914 times ]
Top
 Profile  
Reply with quote  
PostPosted: Sat Oct 24, 2020 8:02 pm 
Offline
User avatar

Joined: Thu May 14, 2015 9:20 pm
Posts: 155
Location: UK
Don’t you need two separate control signals to clock different address data into the 74HC574 flip-flops?

Mark


Top
 Profile  
Reply with quote  
PostPosted: Sat Oct 24, 2020 9:16 pm 
Offline
User avatar

Joined: Wed Feb 13, 2013 1:38 pm
Posts: 589
Location: Michigan, USA
1024MAK wrote:
Don’t you need two separate control signals to clock different address data into the 74HC574 flip-flops?

Mark

Hi Mark:

The latch chips copy data on the inputs to the outputs on the rising edge of the CP input signal. Setting up the address requires writing the hi address byte followed by the lo address byte to the latch ICs.

Regards, Mike


Top
 Profile  
Reply with quote  
PostPosted: Sun Oct 25, 2020 9:00 am 
Offline
User avatar

Joined: Wed Feb 14, 2018 2:33 pm
Posts: 1488
Location: Scotland
Michael wrote:
1024MAK wrote:
Don’t you need two separate control signals to clock different address data into the 74HC574 flip-flops?

Mark

Hi Mark:

The latch chips copy data on the inputs to the outputs on the rising edge of the CP input signal. Setting up the address requires writing the hi address byte followed by the lo address byte to the latch ICs.

Regards, Mike


I did wonder about that myself - so it's a 2 deep, 8-bit wide shift register... Saves a control pin at the expense of slightly more code complexity (Woz style!)

Just getting my head round this (mostly for my own clarification as I have a project to do something similar but its very deep down my to-do list!)

To program:
  • CE, Prg, OE: 1
  • Data (address Hi), OE 0-1, Address high now U1 -> U2, EPROM ignored signals as CE high
  • Data (address Lo), OE 0-1, Address low now into EPROM, U1 feeding Lo into EPROM, U2 feeding Hi into EPROM
  • Data (data 0-7), CE low, PRG 0........1 (held low for programming time)
  • and repeat for next byte.

To read/verify it might be:
  • CE, Prg, OE: 1
  • Data (address Hi), OE 0-1, Address high now U1 -> U2, EPROM ignored signals as CE high
  • Data (address Lo), OE 0, (and left 0 for now), Address low now into EPROM, U1 feeding Lo into EPROM, U2 feeding Hi into EPROM
  • Data input mode, CE low, read data, CE high
  • and repeat for next byte.

The 'trick' as I see it would be matching the baud rate and input buffer on the ATmega which only has 2KB of RAM such that you can download e.g. 512 bytes at a time, program and verify it while the next 512 bytes is still being clocked in via interrupt driven serial, else you might need some sort of flow control from the ATmega to the host PC sending the data down. (which isn't there by default on Arduinos)

As for voltage control - Looks like you're biasing linear regulators with diodes to up their voltages slightly - that's a nice old trick, but I suspect these days I'd have thought about using a pair of the many cheap buck/boost adjustable regulators you can get from e.g. ebay these days for just a few £/$ fed from a 9V, 2A "wall wart" and gate the outputs with TTL gate level mosfets for the 6.2v & 12.6v outputs (Arduno has on-board 5v linear regulator which can be fed from the same 9v source).

(Mostly because I've recently re-built my 30-year old home-made bench PSU with a pair of them to give me 5.2v and whatever else I want)

Quite possibly a bulkier solution to yours though with a separate power 'brick' needed next to the arduino+shield.

-Gordon

Ps. what did you use to draw the schematic?

_________________
--
Gordon Henderson.
See my Ruby 6502 and 65816 SBC projects here: https://projects.drogon.net/ruby/


Top
 Profile  
Reply with quote  
PostPosted: Sun Oct 25, 2020 10:51 am 
Offline
User avatar

Joined: Wed Feb 13, 2013 1:38 pm
Posts: 589
Location: Michigan, USA
Greetings Gordon:

Yeah, that's pretty much the procedure. Re-tasking the /OE pin temporarily for use as the clock for the latches saves a pin but there are a couple caveats. The /OE pin should be maintained high and when you use it to load the address latches you need to make sure the /CE line is high. Writing the SST39SF series Flash ROMs requires an unlock procedure which involves writing four locations to program each byte so I thought that loading a pair of latches might be a bit faster than loading a pair of shift registers.

The procedures are different for EEPROM and EPROM devices. The 28C256 EEPROM does not have a VPP pin and only needs 5 volts.

Reading 27C64, 27C128, and 27C256 EPROMs

() /PRG = 1, /PWR = 1, /CE = /OE = 1
() /PWR = 0 (VCC = VPP = 5v)
() Arduino Data pins set to output
() Write address Hi, Data = addr Hi, /OE = 0, /OE = 1
() Write address Lo, Data = addr Lo, /OE = 0, /OE = 1
() Arduino Data pins set to input
() /CE = 0, /OE = 0, input Data
() /OE = 1
() /PWR = 1

Writing 27C64, 27C128, and 27C256 EPROMs

() /PRG = 1, /PWR = 1, /CE = /OE = 1
() /PWR = 0 (VCC = VPP = 5v)
() /PRG = 0 (VCC = 6.2v, VPP = 12.6v)
() Arduino Data pins set to output
() Write address Hi, Data = addr Hi, /OE = 0, /OE = 1
() Write address Lo, Data = addr Lo, /OE =0, /OE = 1
() Data = Data
() /CE = 0 (initiate write for 27C256)
() /WE = 0 (27C64/27C128 /PRG pin) (initiate write)
() device specific delay/write complete
() /WE = 1, /CE = 1
() /PRG = 1
() /PWR = 1
() Arduino Data pins set to input


I'd like to send Hex files and use Xon/Xoff software handshaking with a small buffer. If that doesn't work I'll ask for help writing a host control program.

Wiring diagrams are made using the drawing tools in Microsoft Excel.

I'm thinking about using an 18650 battery pack or USB and an MT3608 Boost regulator to supply 13.1 volts. Then I'll need 5.6v and 6.6v regulators and the transistor or mosfet switches.

Cheerful regards, Mike


Attachments:
EPROM Pinouts.png
EPROM Pinouts.png [ 65.77 KiB | Viewed 828 times ]


Last edited by Michael on Sun Oct 25, 2020 7:40 pm, edited 3 times in total.
Top
 Profile  
Reply with quote  
PostPosted: Sun Oct 25, 2020 5:04 pm 
Offline
User avatar

Joined: Thu May 14, 2015 9:20 pm
Posts: 155
Location: UK
Where I use two 74HC574 flip-flops with the input data coming from a single 8 bit wide data source, I use an inverter to feed the clock to one of the 74HC574 flip-flops, but a direct feed to clock the other 74HC574. Then I can connect the inputs in parallel. On one edge of the clock one 74HC574 latches the data. On the other edge of the clock, the other 74HC574 latches the data. Works well for me.

Mark


Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 6 posts ] 

All times are UTC


Who is online

Users browsing this forum: Google [Bot] and 27 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to: