OverviewThis is a small microcomputer whose basic components are a microprocessor chip and an EPROM (Erasable Programmable Read Only Memory) chip. The EPROM chip contains a data value at each address. The processor chip runs through these address in order and executes the instruction at each. By putting different data sets, or programs, in the EPROM chip, the computer can be made to do different things.
May 8, at homeFor a project, I am going to see if I can make a small microcomputer. Hopefully the hardware won't be too hard; then I can see what programs are possible and what it's like to program something on the hardware level.
I asked my dad, an electrical engineer, and he said it would be easy to use the Intel 8039; we have a few and the supporting EPROMs. It's mostly compatible with the 8048, a popular chip.
May 9, at homeMr. Rosa has an EPROM programmer at school that consists of a plug-in card for an IBM compatible, an external module, and some software. It has not yet been set up, so I'll have to find a computer and set that up as well.
I searched the Internet for an assembler for the 8048, and I found one at the uwm ftp site, it was written by William C. Colley III and is distributed in C source code. I compiled a version for DOS with Borland C and a version for OS/2 with the GNU C compiler.
I spent most of my afternoon sorting the boxes of ICs we have in the basement into similar groups. My reason for doing this was to find how many 8039s we have and what EPROM chips we have. I can't start planning until I know what I have to use. It's unlikely that I could easily buy more 8039s or the memory chips because they are so antiquated.
I also found several manuals for the 8048 microcomputer chips. These are Intel MCS-48 Microcomputer User's Manual and Intel MCS-48 Single Chip Family of Microcomputers Product Description (a smaller book). The latter has application examples in it, from which I can base my design.
May 10, at schoolI looked at the documentation for the EPROM programmer, and it supports the 2716 EPROM; I have a few of those, so I will base my designs on that chip.
May 11, at schoolI brought in an old Compaq XT type computer to install the EPROM programmer in. There was no difficulty in getting it working. I checked to see if it was working by programming a chip with some random data, reading it back, and comparing the two.
May 15, at homeFrom page 16 of the small book, I have a basic design of what I want. The blocks are in the right places, but many changes will have to be made because of the differences in designs.
Now I am going to gather the information pages for all the chips I am using. Here is the list:
74-74, 8039, 74-374, 74-240, 2716
Now that I have all the information, I am going to set up the drafting table and get started with the detailed schematic. Since I know what chips I am going to use, I can lay them out on the diagram and then just go through the description of every pin on each chip and determine where it goes. Because I am dealing with a digital system, the most I will have to do when connecting an input and an output is add a buffer or maybe an invertor.
I worked on it for 3 hours and got about half of it done.
May 16, at homeI worked on the schematic for most of the day, and finished it around 5:00 pm.
May 17, at homeAfter school, when my dad got home, I had him check out the detailed schematic for obvious errors. He didn't find any, so hopefully there are no major problems. I made copies of the original design so that I could mark them up and not lose anything.
The thing will need a power supply. I found one (in our basement) that was mostly together and had fine tuning adjustments. It was from one of the piles of scrap semi-working stuff we have. I mounted it on a piece of wood, soldered on the connectors, and tested it. It has connections for +5 and ground.
May 18Here is a list of what materials I will need, mostly complete:
1 5 Mhz crystal
May 19After scrounging the basement and making a trip to Radio Shack, I think I have all I will need.
At school, during one of my study halls, I had studied the instruction set and written a very basic square wave program, that output on P10.
0: 0010 0011 0000 0001 mov A,1 2 1: 0011 1001 outlp P1,A 1 2: 0000 0000 nop 1 3: 0000 0000 nop 1 4: 0010 0011 0000 0000 mov A,0 2 5: 0011 1001 outlp P1,A 1 6: 0000 0100 0000 0000 jmp 0 2Using this, I should be able to test the computer.
May 20I found a suitable board to mount all the stuff on. I had to hack-saw it to the right size. The rows of holes were connected in some weird way that was unacceptable, so I had to use the Dremel Tool to cut the connections on some of them.
I mounted the power connector (it's a PC-style connector) onto the board. I also drilled holes in it for the switches.
I also determined an acceptable layout for the chips and other components.
May 21I got home from school and eagerly started soldering the components in. First I placed the sockets and soldered alternate corners to make them stay. Next I placed the row of resistors for the LED display by first bending them to the right width, sticking them through, and soldering them to the +5v bar and the socket for the LEDs.
After completing a connection, I overwrite the wire on the diagram with a highlighter. This way I can keep straight what wires have been added. Also, I can still see the original diagram underneath.
I got about 1/2 of it wired by 9:30 pm. Making sure the wires are not too long or too short and getting good solder joints takes time, but I'm getting better at it.
May 22I spent from about 1:20pm to about 5:30pm soldering wires. I must say, it is much easier to make wire connections and routing look good on paper than on the real thing!
I had all the connections on the diagram done by about 6pm. I then took a multimeter and checked all the connections. As I confirmed a connection, I circled the pin number on the diagram. I fixed individual connections as I found them. Because the wiring was very cramped, it was hard to see the connections. Most of the time the errors were a wire that was too far in and the insulation was touching the solder, not the wire.
I added a LED and resistor combination to P10 so I could more easily see the output.
I plugged in the chips, added my EPROM with the square-wave program, hooked up the oscilloscope, and tried it! Agh! It didn't work. By watching the address lines, and probing with the oscilloscope, it was clear that there were problems between the 374's and the 2716, and the 2716 was never outputing anything.
On that note, I quit for the day.
May 23Short of a major design failure, the only thing I connection that I thought could be the problem was the Clock on the 374's, it's the clock pulse that tells them when to latch onto the incoming values, and the Output Enable on the 2716 was what told that when to enable the outputs. By watching the timing of the system with the oscilloscope, I was able to see that, although the C and OE pulses were occurring in sync with the clock, the edge of the pulses that triggered the chip was occurring after the clock pulse. I fixed this by adding an invertor (240) before each.
The only other problem was that the Clocks of the 240's should have been connected to the ~PSE of the 8039, not the ~RD. This is because the LEDs should have the last state of the data buss, which is triggered by the ~PSE signal.
Finally, after fixing that, it worked.
I checked the program flow by single stepping through the square wave program and monitoring the outputs. All seemed well.
May 24I brought the assembler to school and installed it on the PC. I then assembled a few programs I had written and tried them out. I was trying to get P10 to change slow enough so that it looked like it was flashing to the eye when the computer was going at full speed, not in single step mode.