-
Project Log #6 It's alive
05/14/2019 at 06:41 • 0 commentsThis project has existed in one form or another since 2015, and I'm happy to say that now I can finally consider this project feature complete.
I've been through multiple revision of the board: the first two was based on the idea of using I/O expanders to deal with the lack of pins on the Arduino Uno, but the third revision is based on a much more simpler design I did back in the prototype phase in 2015 using shift registers for the address bus. I was also inspired by other designs using similar concepts which shows that a simpler design could work quite well (and helped me save pins).
In the actual build I used 74HC595 instead of the HCT-chips I accidentally used in the schematic. All devices involved are CMOS so there is no need to be compatible with TTL levels.
For now I have everything I need to program 28C64 EEPROMs, which means it can now be used for other project. I consider the hardware final at this point, and any improvements from now on will be on the software and firmware side. The programmer is not fast, but I've had issues with timing and therefore I feel it's better to be safe than sorry. The programmer verifies each block it's written to the EEPROM, so the design and software seems robust enough.
-
Project #5 Resurrection
01/27/2019 at 10:29 • 0 commentsWelp, I can't believe I haven't updated in almost exactly two years. Time flies, since my last update I've moved to a new city which took up a lot of time and energy, and also my soldering station died. The project is not dead however, I even have new boards that I ordered from JLPCB.
I made a new schematic that seemingly fixed the bug in the old one, and since I got a new soldering station during the holidays I've soldered it up.
I'm starting to prototype the firmware; I've been wanting to try PlatformIO which I will use for the microcontroller code, and I will also implement a CLI tool and possibly a GUI. I've set up an organization on Github that will house the different repositories.
I've said this before but let's hope it won't take a year or so for the next update :-)
-
Project log #4 Transfer protocol
01/25/2017 at 09:48 • 0 commentsIt's already been well of a year since I last made an update, but I promise the project is not abandoned! Fellow hacker @Erik Bartmann pointed out to me (thank you!) that I had an error in my revision A schematic. It turns out it made the entire circuit very unstable, which means I'll have to make a new revision of the schematic and order new boards. However, I'll leave the details of the schematic update to the next project log.
Last time I worked on the project, I started prototyping a simple graphical user interface in Java. The data itself is sent over a serial interface, so I have the need of a simple transfer protocol. I could use something like XMODEM, but I think it's more fun to make something myself.
I figured I wanted some sort of message passing protocol, so I sketched the following data structure:
The first three data fields make up the header. The magic word is used to identify the start of a message (this is set to 0xBEEF). With this message structure, a message can be at most 262 bytes long, with a maximum payload of 256 bytes. The Message ID is used to decode the payload. After the payload there is a CRC-16 checksum, used to validate the data before potentially writing to the EEPROM. The checksum is calculated on the header and the payload together.
The structure of the payload data depends on the message. With some messages the payload may even be zero-sized. Here's a table of the messages so far (there may be more coming):
Message ID (hex) Name Direction Description 0x00 - - Reserved (not used) 0x01 Erase To device Erase the entire EEPROM 0x02 EraseAck To client Acknowledge the erase 0x03-0x0F - - Reserved (not used) 0x10 WriteBlock To device Write a 64 byte data block to the EEPROM 0x11 WriteBlockAck To client Acknowledge the block write 0x12-0x1F - - Reserved (not used) 0x20 ReadBlock To device Read a 64 byte data block from the EEPROM 0x21 ReadBlockAnswer To client Read response with 64 byte data 0x22-0xFE - - Reserved (not used) 0xFF - - Reserved (null message) I'll omit the message details and leave that to the avid source code reader to find out :-)
-
Project log #3 Revision A PCBs
08/31/2015 at 19:11 • 5 commentsWow. It's been a while since I posted an update. Since last time, I ordered PCBs from OSHPark. I found an excellent Arduino Uno template for Eagle that I used to make my shield.
I designed the board using my schematics in Eagle. It's the first time I've made a board in Eagle; I used auto-routing and hoped for the best.
To my eyes, the boards looked excellent when uploaded to OSHPark. Two weeks later, I got the boards in the mail!
Here's one of the boards with some of the components. In the next project log, I hopefully have a finished version with mounted components to show.
-
Project Log #2
03/07/2015 at 16:05 • 0 commentsI made this first schematic for the prototype that uses the Arduino Uno rather than a dedicated ATmega328 microcontroller. I haven't wired it up yet, but the circuit is quite simple so it should be no problems.
I'll make another update when I've wired everything up on my breadboard :-)
-
Project Log #1
03/07/2015 at 13:01 • 0 commentsFor a long while I've wanted to do an electronics project. One of my goals is to make a complete computer from scratch, using an 8-bit microprocessor. But in order to build an 8-bit computer, I need a way to program ROM-chips. This is because when (most) CPUs boot up, they need to fetch the initial program from somewhere, and this somewhere is usually in ROM. My idea for a first project is therefore to make an ATMega-powered programmer for EEPROMs, specifically 286C4s. The entire project will be open source (both software and hardware).
My plan is to develop this project in incremental steps, roughly as follows:
- Prototype A on solderless breadboard, controlled by an Arduino Uno
- Prototype B on solderless breadboard with dedicated ATmega328 microcontroller.
- Standalone Revision A on stripboard
It's likely that I will go on and produce Revision B with a custom printed circuit board.
In my next update, I'll post the first schematic and a picture of the wired-up prototype A.