Core 64: Interactive Core Memory Badge

Interact with Core Memory to explore, learn and inspire.

Similar projects worth following
Draw with a magnet directly IN CORE MEMORY!

Many people may have heard of core memory (most recently with the buzz surrounding the Apollo Guidance Computer) but few have experienced it. This project enables interaction and education using core memory that is unexpectedly engaging with the door wide open for more exploration. Core memory is a lost technology and you will be able to physically interact with it using a magnet. You simply have to try it! The array of LEDs underneath brings the cores to life in a completely new way. You will be able to create your own core/light interactions with Arduino.

This is one of those ideas that seems too simple but needs to be experienced to get it. Based on the feedback I have received from people who have used the proof-of-concept, it is clearly worth sharing with a wider audience as a complete product. The form factor begs for this project to take shape as a badge because it is easier to carry around and share the experience.

The previous work with the proof-of-concept is posted here and runs with 32 cores. The badge version of this project is taking shape on this project page and has 64 cores. The project name is a nod to my favorite 8-bit computer, the Commodore 64.

What does it do?

In its simplest form, the badge allows you to draw on the RGB LED matrix "screen" with a magnetic stylus. In this first mode, you are directly interacting with the cores which are acting as static screen RAM. It is that simple but it ends up being very engaging on its own. When I share this with people, this is where I start to hear, "Oh, this is cool. Now I get it." At this point you are only seeing a monochrome drawing mode.

There is another mode of operation that enables a much wider range of interaction. In the second mode, the cores are acting as a touch overlay on the RGB LED screen. The cores are effectively acting as "touch RAM." By refreshing and checking the state of the cores, the whole array comes alive and can sense which core (or cores) are being affected by a magnet at a given moment. By decoupling the cores from the screen RAM, the creative juices can be unleashed. Instead of a monochrome drawing mode, full color drawing can come alive. The core array turns into a mesmerizing magnetic flux detector. I have even implemented a simple game of snake that is fun to play.

Beyond the "core memory + LEDs" party trick, I have several other goals for this project. Here they are, along with the reasoning behind why I think they are valuable:

Deceptively Simple

My aim is to keep the badge clean looking from the front so the focus is entirely on the cores and LEDs themselves. That is, after all, the focal point of this project. Everything will be accessible from a mechanical/electrical/programming perspective which leaves the door open for your creativity to be expressed.

Full Control of the Cores

I made a conscious decision to use a microcontroller to discretely drive the core wiring matrix with transistors. This allows you to develop your own control algorithms and have complete control of each wire in the core matrix to really learn about what is happening. I have seen other projects which decouple the addressing logic through hardware which makes it easier to interface with the cores, but the point of this project is to get you as close to the cores as possible. You can choose to abstract the interface as much or as little on the software side.

Hidden [Magnetic] Tricks

In order to open the door even wider to your creativity, and sticking with the spirit of a project which revolves around magnetism, there will be a few more goodies on the backside of the board. I anticipate these items to be:

  • Several Hall-Effect switches to act as user assignable hot buttons.
  • A reed switch; just 'cause it is magnetic
  • Communication ability. I would like the badges to be able to interact with other badges. The obvious choice is with Near Field Magnetic Induction (NFMI). I am not sure how that will be implemented but using a standard audio speaker is my leading concept. Maybe this would be an add on...
  • Expansion header conforming to the SAO standard (I2C, 3.3V, 2x GPIO) for the OLED display or magnetic compass or any number of fluxy devices.
  • Haptic feedback. Maybe as a dedicated component, a pager motor, or the speaker. 
  • I wonder if a small speaker could serve multiple purposes: NFMI communication, haptic feedback, audio, ultrasonic communication?

Almost Ready to Use

The product will be delivered as a partially completed kit. Again, to get you closer to the cores, you will have to assemble the cores and wire grid to complete the project. Everything else will be ready to go, including a magnetic stylus and stylus clip. Even batteries! But you will need a soldering pencil and some patience to weave the cores. Probably some decent magnification too!

If you'd like to follow along, all of the development and documentation will take shape in the Core 64 Github...

Read more »

Adobe Portable Document Format - 29.86 kB - 08/25/2019 at 12:26


Adobe Portable Document Format - 52.61 kB - 08/25/2019 at 02:59


Adobe Portable Document Format - 68.01 kB - 08/25/2019 at 02:59


Adobe Portable Document Format - 34.86 kB - 08/25/2019 at 02:59


Adobe Portable Document Format - 96.65 kB - 08/25/2019 at 02:52


View all 8 files

  • Where are the electrons going?

    Andy Geppert09/09/2019 at 02:30 0 comments

    Despite not posting an update, progress continues. I have written the low level core driver code to test setting and clearing bits, and am working on trying to detect the state of a bit. This has turned into a lot of time spent probing with an oscilloscope verifying that the current is flowing in the proper wire, in the proper direction, and with enough juice. And this is where the weakness of the circuit design has become apparent.

    I've been able to sense some cores, but not reliably. I think there are three issues I'm dealing with:

    1) Core/MCU voltage selection. The transistors are driven with 3.3V but the power from the battery is above that. When it is too high, half of the transistors aren't turning on like I expected, because of physics. Short-term I'll use an auxiliary 3.3V supply. Long-term, this design may require tighter voltage regulation for the cores, instead of taking whatever the battery has available.

    2) Transistor Vce drop. The drive current capability of the MCU is very weak, and with the voltage drop of the transistors (three in series), there isn't much left to work with to magnetize a core. I'm seeing ~300mA for each half select current is marginal at setting cores. And increasing the battery supply voltage above 3.3V makes the situation worse because the transistors fail to switch around 4.2V, without an increase in drive current. Short-term I'm going to test darlington transistors and MOSFETs. 

    3) Sensing signal circuit. This may come down to biasing in the sensing circuit that needs to be tuned. Fairly consistently, I see the core is set in one direction or cleared, but then not in the opposite direction. This could also be because the drive currents aren't high enough because there is a difference depending on which direction the current is flowing. I can clearly see how the sense signal timing varies based on the current through the cores. It affects how quickly the core snaps to the opposite polarity. I'll circle back to troubleshooting this after I get #1 and #2 pinned down.

  • Documentation Updates

    Andy Geppert08/25/2019 at 03:09 0 comments

    I created and uploaded several important files and updated the documentation today. You'll see PDFs in the "files" section of this project here on hackaday,io, and the similar updates in Github.

    • Schematic
    • BOM
    • Code plan for reading and writing the cores
    • Development plan
    • Electrical Block Diagram
    • Software Block Diagram
    • Manufacturing Considerations
    • And licensing and permissions analysis of everything I'm making use of

    I also added an STL of the stylus, designed with Onshape.

    And finally the code that has been updated to show the symbols on the LED matrix.

  • LED Matrix Control

    Andy Geppert08/22/2019 at 22:06 0 comments

    I've succeeded in taming the LED matrix with the FastLED library. That's a new one for me. Because of how I chose to install the LED array, and how I'd like to depict symbols to be almost-human-readable in the firmware as a 2-D array, I had to rotate the image CW 90 degrees when translating from the "monochrome screen memory" array to the display. Here's what this progress looks like. 

    Hopefully that's recognizable... I need work on my shutter tech skills to capture the OLED without letting the electronic shutter mess it up.

    I've begun implementing the core memory control, at the lowest level. I'm working on an approach that is flexible, but still abstracted enough to make it easy to follow the logic. This is one of the parts of the project that I think would be a highlight for someone wanting to get into the nitty gritty of core memory control schemes. Because none of the decoding is in hardware, you get to configure it however you'd like in the firmware!

    Also had another eureka moment, maybe. I've been considering adding a few more magnetic features, since the theme of this project is fundamentally magnetism. I wonder if I can put in a small speaker and have it serve all of these functions, depending on how the coil is driven:

    • Audio (in the human range and beyond)
    • Vibration for haptic feedback
    • Nearfield Magnetic Induction (NFMI) two-way communication between adjacent boards (send AND receive with the same coil)

    I'll be chewing on that and experimenting in the near future to see how far that concept might go. 

    Oh, and I 3D printed a stylus with a small magnet on the end. It works well with the other 4x8 core shield, and I expect it'll work well for this arrangement. The cores are almost exactly twice as far apart now, which should make them more discretely controllable. In the other shield concept the magnetism from the stylus was fairly wide spread and would often affect cores outside of the one you wanted to control.

  • Prototype V0.1 Assembly Complete

    Andy Geppert08/17/2019 at 21:11 0 comments

    Everything is assembled [electrically] and ready for testing! The weaving process went fairly smooth and I was able to finish at a faster pace than I started. I took extra time to align and tighten the wires. And lots of time thinking about how these processes must have been automated back in the day.

    *** Manufacturing Challenge Alert ***

    I think the core weaving experience should be part of the project that the user does so they can get the full experience. And because I'm not sure this product can exist if I have to charge for the weaving work!

    Some mechanical assembly remains to secure the LED array, but that'll come soon enough.

  • Weaving core memory

    Andy Geppert08/17/2019 at 03:20 0 comments

    All of the components are populated now, and the accessory functions are in place. The focus tonight was the weaving part of the project. This part of the process makes the SMT work seem easy.

    The rows are installed, and the technique I have right now makes each row take about 10 minutes. Having started the columns now, I don't think I should have tightened the rows until the end. I have three columns threaded and those are about 20 minutes each. The weaving process is looking like a 3-4 hour job in the first pass. I'd like to see a nice square grid, but that aspiration may be a little two grand. This part of the proceed needs some refined techniques which I have yet to develop.

  • PCB Bring-up has begun!

    Andy Geppert08/15/2019 at 14:11 0 comments

    The bare boards just arrived, right on schedule! The first step was to bring-up the board to the demo state I had tested on the breadboard. It's all working as expected with the following functionality so far:

    • Power switch selects battery or USB power
    • Battery charge manager
    • Battery voltage sensing
    • OLED Display
    • LED Matrix
    • Reed switch
    • Teensy LC

    The form factor feels about right and the next steps are:

    • Bring the driver matrix to life by populating some more components
    • Weave the cores
    • Mount the LED Array

    So far, an exciting and fast start for me. I'm very pleased with the results so far.

  • PCB Design Release for fabrication!

    Andy Geppert08/11/2019 at 01:33 0 comments

    This is my first PCB release! A major milestone and a long climb. I think I'm getting the hang of the basics in KiCad, and it's a lot of fun. Three pages of schematics, and a 3x6 inch PCB, and a few hours of learning curve...

    This is the V0.1 release, and I'm going for speed in the fabrication realm so it's a standard green board. Here's a rendering from KiCad, and this will be the backside of the badge:

    I learned it's not possible to route traces at the corners of the board when I have the quarter-circles drawn, so I had to delete the rounded corners to in order to route and push traces around. One of the many little stumbling blocks along the way of learning KiCad I suppose!

    The main page of the schematic is by far the busiest. One of the project goals is that the matrix will be directly controllable in the firmware. This opens the door for the user to experiment and learn how to control the resistors directly from the code instead of pushing that decoding into other hardware. Similarly, the sensing circuit is minimal to enable flexibility via code. The primary goal of this project is to make core memory an interactive experience, but a secondary goal is to enable learning and creativity to flow from the experience of programming this contraption.

    All of the components are ordered and mostly received... I took some risk on the cores and wire by ordering from eBay and I think they will come on a slow boat. I do have a handful of spare cores that should get me started for board bring-up though.

    Goodies that made it into the first prototype:

    • Pimoroni Unicorn Hat aka "An equine banquet of 64 WS2812B RGB LEDs in a handy, expressive 8x8 grid"
    • OLED display on the front [optional]
    • Adafruit Microlipo charger
    • Teensy LC (just enough IO!)
    • A hidden reed switch
    • A hidden hall switch

    The next update log should will share the excitement of bringing the PCB to life, and the creation of a list of the opportunities for improvement in the next version.

  • Schematic and PCB layout

    Andy Geppert08/01/2019 at 03:58 0 comments

    I'm cutting my teeth in KiCad and have the schematic created and the board outline getting ready for routing. Latest state of the files are updated in GitHub.

    I need to review the schematic and footprints closely before diving into the layout. I'm excited to get this fabricated though!

  • Hardware IO Testing Breadboard

    Andy Geppert07/08/2019 at 12:22 0 comments

    In order to make sure I have a workable hardware solution, I'm pulling together the various components I intend to use to make sure there is enough IO and that it maps out as I think it will to the Teensy LC pins. The source code on Github has been updated to reflect the state of the project now. 

    The important parts of this hardware testing are:

    1. Will it all run from a single cell LiPo since that is the lowest voltage I intend to use? Yes.
    2. Since I plan to use discrete IO on the Teensy LC to directly drive the 20+ transistors needed for 64 cores, are there enough pins without conflicts? Yes, although some pins will be used for more than one function to keep a few IO pins open. The shared pins will be: I2C bus, LED Array.
    3. The LED Array runs well on GPIO 17 through the buffered output with a 1S LiPo. The Unicorn Hat looks like a great option to use directly, as is.
    4. The OLED screen is for testing the I2C bus, which I intend to use for some hall sensors and general expansion.
    5. As shown above, the components are drawing about 70 mA. The LED matrix brightness is set as low as it can go. The cores are not running, but the current pulse is expected to be about 300-400 mA, and will be handled with a capacitor to make sure the system doesn't brownout.


    Connect and drive some cores through Jussi's 4x8 shield to ensure adequate power sourcing. Then get going on the circuit and PCB prototype in KiCad!

View all 9 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates