Magnetic core memory

First off, I don't know if any of you have even heard of magnetic core memory, but here's a link explaining the basics: Magnetic core memory - Everything2.com

Don't ask why I want to build one of these.. I don't even know! It's not like a 32B memory would be very useful these days.. ::slight_smile: I want to learn (specially how to use an opamp), and I guess I am just drawn to awesome old-school computer stuff. You know, old-school always gives the most geek-cred. :wink:

Short description:
When a wire going through a ferrite ring (core) carries a certain amount of current, the ring is magnetized in a corresponding direction. If the current is reversed, the polarization of the ring is reversed. These two states of the ring is used to store a binary bit, 0 or 1.

In a normal setup, the cores would be hooked up in a grid of wires. To access any one ring(core), half the current needed to flip the magnetic field of a ring is passed through a horizontal (x) line and half through a vertical (y) one. The ring at the intersection of these two wires gets enough juice to flip it's magnetic field while the other rings on the active x/y lines only get half the current (and thus their polarization remains unchanged). In this way one can write a 0 or 1 to any single ring in the grid.

To read the state of a ring, one uses a "sense wire" which is threaded through all the rings in the grid. To read, a "0" is written to a ring. If the ring was already polarized in the "0" direction, no (or very little) voltage will be seen on the sense wire. However, if the ring already contained a "1", the "write 0"-action will flip the core and a larger voltage will be induced in the sense wire. This is called a destructive read cycle as any read bit will contain a "0". Thus, the bit will need to be re-written to "1" if that was what it originally contained.

I have ordred 260 (256+4 spare) ferrite rings for this project, and I also have 4 MAX4196 opamps lying around. My problem is that the signal coming off the sense wire is very small and needs to be amplified, but I have no clue as to how I would go about hooking up an amp (MAX4196) in between the sense wire and an Arduino analog input.

Could you guys pleeaaase help me? From what I have seen in my hours of reading, the signal on the sense wire can be expected to be around 40mV. I need to get this amplified abount 10-100 times or so, so that the Arduino can detect it.

Edit: spelling error.

Don't ask why I want to build one of these.. I don't even know! It's not like a 32B memory would be very useful these days.. ::slight_smile: I want to learn (specially how to use an opamp), and I guess I am just drawn to awesome old-school computer stuff. You know, old-school always gives the most geek-cred. :wink:

LOL, that's so cool. Thanks for the explanation on how it all works--I learned something. :slight_smile:

I assume there must be plenty of op-amp tutorials out there... (You couldn't get away with a simple high-gain transistor? Or using the ADC?)

--Phil.

same as Phil here: very nice project and thank you for the link.

maybe you should look into handling interrupts for the sense wire. i imagine that the inducted (?) signal will not only be weak but also quite short.
as for the opamps, i can't help you very much neither. maybe wait for your ferrite cores to get an idea of the signal you'll be getting. if you could use an analog pin to sense the signal, that would be by far the most simplest solution.

keep us informed, please :slight_smile:

kuk

Magnetic core memory is fast, they had 600ns in the 1970's and could probably have gotten that even lower given time. It's non-volatile.

Larger cores require more current.

Another method you may consider

Thanks for all the replies folks! :smiley:

I thought about using the analog line of the arduino to sense the signal.. From what I have read, the signal strength from a flipped core can't really be expected to be above 40mV. The arduino's analog pins are 10 bit, 1024 states, represented by 0-5V right?

5V / 1024 states = 0,0048828125

...
.....
Ooooh! The analoge pins has a resolution of 4,88mV! I, for some reason or other, was thinking the resolution was 40mV until this very moment. -_-' In that case, I might actually be able to get a readout when the pin flips! =D If I get that working, I can move on to the next step. Wooho!

For those who might wonder, the next step is writing 0,0,1,0,0,1 and so on to a single core while manually decreasing the current through the core until I no longer get a proper "flip". Then I'll know what exact current is needed to flip the core and I can continue to my first multi-core test where half that current is used in an x-line and half in y. After some more adjusting with this 3-4 core setup, I will know what I need to know to build a full-fledged 32B memory!

Who knows? I might even throw in some nice, clicky relays. One for each line, since a transistor isn't very compatible with this setup where the current has to be able to flow both ways. ^^

Oh, btw, how would I go about hooking the sense-wire to the arduinos analog input? Could probably figure it out, but I'm not entirely used to this whole pull-up/pull-down resistor stuff yet so you guys could likely save me a lot of trouble by just telling me. Thanks!

do you have an idea of how much current it will take to magnetize the core approximately? i'm expecting it bo be a little more than an arduino pin can handle which is only about 40mA. if it's not much more, you maybe could use multiple pins for the x and y lines to get the juice.

do you have an idea of how much current it will take to magnetize the core approximately? i'm expecting it bo be a little more than an arduino pin can handle which is only about 40mA. if it's not much more, you maybe could use multiple pins for the x and y lines to get the juice.

Aah, I am not going to use the output-pins directly. =) I will use 2 outputs (I think) to control the direction of the current coming of either a 12V or a 19V transformer I have. Then I will find some smart way to use the remaining outputs to access one of the 8 x-lines and one of the 8 y-lines to let the current pass through in the direction set by the first 2 outputs.

I am thinking perhaps two binary to decimal converters since I only need to access 1 x-line and 1 y-line at a time.