Category Archives: My Projects

Cable Equation and Hodgkin-Huxley

Progress marches forward on the Neural Emulator front. I’ve currently fleshed out the functionality as described by the cable equation, that describes how voltage/current flows down neural structures. This will allow adjacent sections of the cellular membrane to propagate changes in potential, thereby properly emulating the action potential. Before I can advance at all, I need to ensure that the action potential sequence models properly, since this is such core functionality.

Voltage Propagation

In the following graph, I’ve setup a neuron consisting of 4 structures. For the purposes of this test, it doesn’t really matter what the structures themselves are, but you could think of it as 4 sections of a fiber in a dendritic arbor. They all start out with the same intra and extracellular ionic concentrations, membrane permeability, and size. They are arranged linearly, where structure 0 is connected to 1, which is connected to 2, which is connected to 3. In this experiment, I increased in the extracellular concentration of Sodium surrounding structure 0. The graph shows both the local potential (potential for the cell membrane when isolated from adjacent membranes), as well as the total potential (when accounting for adjacent membranes).

As can be seen, as we increase the extracellular Sodium concentration, the cell membrane of structure 0 depolarizes as the local potential goes positive. Though the Sodium concentration surrounding the adjacent structures has (mostly) not changed, as can be seen by their local potentials, their total potential increases accordingly due to their proximity to structure 0. The closer they are (structure 1 is the closest), the more their membrane potential is affected. The effects of such are calculated by voltage difference, connecting membrane area, and distance between them. So this test came out successful.


In addition, I’m about half way finished with integrating the Hodgekin-Huxley model and associated equations in with calculating the permeability of gated ion channels, specifically for voltage and inactivation gates. This will ensure that the ion permeability adjusts correctly depending on the membrane potential. However, before I was able to move forward on HH, I needed to ensure membrane potentials were propagating properly, which is why the work above was important. More on this soon!

A Verification of SynthNet’s Ion Handling

The following graphs demonstrate SynthNet’s substance and electrochemical engine.

For each graph, we have a setup a virtual soma with typical ion concentrations for a Mammalian neuron. Specifically:

Intra/Extra Na: 18mM/145mM
Intra/Extra K: 140mM/3mM
Intra/Extra Cl: 7mM/120mM
Intra/Extra Ca: 100nM/1.2mM

First, we verify that GHK is properly reducing to the Nernst equation and equilibrium potential is correctly being calculated. For this test, we isolate the ion in the question by removing permeability of all other ions across the cellular membrane. We then record membrane potential and ensure it matches equilibrium potential for that ion’s electrochemical gradient.

I forgot to change the scale over, so potential is shown in volts – so remember the factor of 1000 for mV.

For Sodium, we should get +56mV (Verified!)

For Potassium, we should get -102mV (Verified!)

For Chloride, we should get -76mV (Verified!)

For Calcium, we should get +125mV (Verified!)

So at this point, we verify that GHK is correctly reducing to Nernst for single ions. Now we need to test that GHK correctly works with multiple ions. So at this point, we setup typical permeability ratios for our neuron. Specifically, Pk:PNa:PCl:PCa = 1.00:0.04:0.45:0.000001.

For these ratios, we should see around -70mV, which is typical for many neurons, including the dorsal lateral geniculate nucleus, thalmus, and close for many others. (Verified!)

Now, switching over to verifying functionality of GHK flux, we setup an experiment where we again isolate a single ion type, but this time mimic voltage clamping experiments by turning off GHK voltage calculation on our membrane and setting it to a static voltage. We then initiate calculations with the incorrect intracellular and extracellular ion concentrations. If GHK flux is working properly, the ionic concentrations to achieve their respective homeostatic values for the specified membrane potential.

For Potassium, we clamp the voltage at -102mV – we should see concentrations even out at Intra/Extra K: 140mM/3mM (Verified!)

For Calcium, we clamp the voltage at +125mV – we should see concentrations even out at Intra/Extra Ca: 100nM/1.2mM (Verified!)

So ionic flux calculations look spot on too! With both potential and flux working properly, the engine provides enough functionality for the purposes of our emulator (currently, anyway).

I’ll leave off with a fun graph of running substance calculations over time with no ionic pumps in place to maintain homeostasis. I had to use LiveGraph for this one as Excel doesn’t allow this many graph points, and I don’t know how to turn on the legend – Green/Pink:K, Purple/Yellow:Na, Blue/Cyan: Cl, Ca not really visible, bottom is voltage. Next time I’ll have graphs of action potentials, fun stuff.

SynthNet, the Start of a Neural Emulator

If you’re anything like me, or many of the programmers and hardware hackers out there, you have a deep urge to constantly be creating something. While this presents the opportunity to try new and fun stuff, it can also be a curse in the fact that sometimes it’s hard to complete projects before jumping into a new one. I constantly have this issue, and in general I’ve tried to be good about not staring a new project before completing my existing one. And if you’ve known me for any period of time, you know there is one project that is the big one for me – the one that I’ve been working on for years, and the one that really drives me as a computer scientist – that is my quest to fully emulate the biological neural network (easy, right?). Well, after years of constantly putting it aside while working on other projects, the last 4 months I’ve been very good about focusing on it.

Goodbye TFNN, Hello SynthNet

The problem with emulating the biological brain is – it is extremely complicated to say the least, and there is still a library of information we don’t understand about neuroscience. However – there is also a huge amount of information we DO understand. I’ve had the disadvantage that I do not have a formal education in the biological sciences, let alone the specifics of neurophysiology. Because of that, the process for me of emulating it has been difficult. I have had to do a lot of catchup research to equal what the average graduate would have. This is very apparent looking at the work I’ve done now as compared to earlier versions of the emulator (TFNN) – you can see as much going back to older blog entries on this site. I am by no means an expert now, but I was less so of one back then. In the last year or two, I’ve really hit the books and tried to learn everything I can. And in doing so, I’ve learned that I got so much wrong before, that it was easier to start over again than try to repair what I had. And with that, comes the newest revision of the emulator, SynthNet.

What SynthNet Does So Far

At this point, SynthNet does the following:

  1. Emulates virtual major cellular structures, such as neuron soma, dendrites and denritic arbors, axons, terminals/boutons, synapses, etc – each with the full functionality (when applicable) of the following:
  2. Physical properties such as position, surface area, and cellular membranes.
  3. The ability to contain substances, including ions such as Sodium, Potassium, Chloride, and Calcium, as well as neurotransmitters and modulators, such as Glutamate, Serotonin, Norepinephrine, etc, both intracellular and extracellular.
  4. For all substances, current concentration is stored (with resolution to nanomoles), homeostatic concentrations, and valance of any ion substances
  5. Cellular membranes contain channels, both to the extracellular space, as well as gap junctions to the intracellular space of other cellular structures.
  6. Each channel stores permeability, what substance it is permeable, and tag information for synaptic tagging or other secondary messenger processes.
  7. Both leak channels and active pumps are supported
  8. Channels can also have gates, including voltage gates, inactivation gates, and ligand gates. Voltage gates activate at specified membrane potential, inactivation gates close either voltage or ligand gates after a certain amount of time, and ligand gates open in response to a specific concentration of a specific substance
  9. Membrane voltage is calculated using the Goldman-Hodgkin-Katz Voltage Equation modified for the inclusion of divalent ions (this may need a little tweaking though, converting this over to make use of Spangler’s equation from Ala J Med Sci, 9:218-223, 1972)
  10. Ion flux across the membrane is calculated using the Goldman-Hodgkin-Katz Flux Equation, with a membrane surface area coefficient.
  11. All substance flux is virtually processed in an N+1 parallel fashion across all neurons simultaneously
  12. The emulation of myelin sheaths via the elimination of channels/permeability in specific axonal segments, and an increase in intracellular trans-segment permeability across axonal segments.
  13. CSV export functionality for analysis within Excel, LiveGraph, or other tools

So at this point, it handles ions and substances as a whole pretty well, calculating flux across a substance’s electrochemical gradient fairly accurately (for our purposes). At this point, we can setup typical ion concentrations for a mammalian neuron, setup leak, pump, and voltage channels, and trigger action potientials with the expected results (still tweaking some of the values).

To Do:

What we don’t have yet, but will have:

  1. The regulation of extracellular substances via astroglia. This is the next thing I’m working on
  2. Any kind of protein synthesis or activation, such as kinase phosphorylation. After I get some of the glial cell work done, this will be the next big addition to the emulator. This is critical for the mediation of Hebbian plasticity and other types of learning. The genetic engine of the emulator will allow any sequence of instructions to be run under the specified protein activation – so this will cover everything from the addition of AMPA receptors due to NMDA receptor activation, to neurite growth due to nitric oxide as a retrograde messenger, and the entire neurogenesis process as a whole. Very excited to get started on this.
  3. Visualization engine, as a kind of virtual fMRI, for the purposes of graphical analysis
  4. A separate engine to mutate genetic code across generations for the purposes of natural selection (more on this later, a whole different phase of the project)
  5. A lot of other details, those are the biggies for now

Shredz64 at NJ Science and Engineering Festival

A quick notice for you in the NJ area tomorrow (10/24/10) – Jeff Brace and the gang at MARCH (Mid Atlantic Retro Computing Hobbyists) will be demonstrating Shredz64 at the NJ Science and Engineering Festival in Clifton, NJ. This is the second time Jeff and MARCH have been kind enough to show off our game and adapter, and it’s really appreciated.

It looks like they’re going to have a lot of very cool technology at the festival, so be sure to check it out.

Player Videos of Shredz64 in Action

It’s always a blast to see people enjoying the game – here are a couple of videos posted by some dedicated Shredz64 players.

The first is a nice and detailed video by Arkanoid_376970 who does much better on Zak McKracken than I could hope to:

The next is by Anders C who was kind enough to bring Shredz64 along to Retrogathering 2010 in Stockhold, Sweden:

Thanks guys! ๐Ÿ™‚

Win a Free PSX64 Interface and Help a Great Cause!

If you’ve been following along on the blog, you’ll know that I recently got a Twitter account. Yeah – I was definitely one of the hold outs. But – I wanted a place to post little tidbits that weren’t really blog worthy, but were interesting none-the-less, and Twitter is the perfect place for that. Plus, I’ve already met some pretty groovy people through it – and it’s a great place to get news out fast. However, Twitter is definitely a more-the-merrier kind of thing, so along that vein, presenting:

The Synthetic Dreams Spooktacular Giveaway!

First, the prize: we’ll be giving away a free PSX64 Interface, along with a copy of Shredz64 to the lucky winner. Additionally, we’ll be donating $50.00 to one of the charities below – to which is by choice of the winner.

Heart to Heart International – Disaster Response and Medical Aid
Global Links – Medical Aid and Health Education
Vitamin Angels – Nutrients for Infants and Children
Books for Africa – Literature and Education for Africa

Not only do you get to rock out to your favorite SID tunes Guitar Hero style and reinvigorate your old C64, Amiga, and Atari games with a Playstation controller – but you also get to help out those less fortunate who could really use a hand.

The Rules

The rules are simple! Follow me, @ToniWestbrook, on Twitter between now and Halloween (October 31st). Once you’re following me, send me a tweet saying you’d like to participate in the contest – and your name will be entered into the drawing! (And I’ll follow you back!)

You can even double your chances to win – after tweeting the above to me, if you then tweet to all your followers:

“RT: @ToniWestbrook Win a free PSX64 to play Guitar Hero on your Commodore 64 while helping those in need! Details:”

You’ll be entered twice!

Keep following along, and at midnight (EST) at October 31st, the winner will be announced.

More on the Charities

There are a lot of future scientists, doctors, and engineers waiting to soar, but they may never get the chance without food, medicine, or education. This blog, and Synthetic Dreams as a whole, is about letting people achieve their dreams – but before you can do that, you need your basic needs met – and sometimes you need a helping hand to meet them.

Each of the charities above has been verified with Charity Navigator.

Good Luck Everyone!

Shredz64 – Check It Out at Maker Faire This Weekend!

First off, before I make the plug – if you haven’t checked out MAKE or the Maker Faire before, you TOTALLY should. There are a lot of imaginative people with a ton of amazing, brilliant, or just plain zany creations. It’s very cool stuff.

And speaking of Maker Faire – if you’re around NYC this weekend (Sept 25th and 26th), or are within driving distance, you’re in luck! The New York Hall of Science in Queens will be hosting this awesome event. Still on the fence? Well – time to hop off, because Jeff Brace and the gang at MARCH. (Mid Atlantic Retro Computing Hobbyists) will be demonstrating, amongst other retro goodness, Shredz64. If you haven’t tried it in person yet, now’s your chance.

So enjoy the explosion of engineering this weekend, and get your retro on while you’re at it!

Shredz64 at the Portland Retro Gaming Expo

Just a heads up, if you’re around the Portland, OR area this weekend (September 18-19), stop by the Portland Retro Gaming Expo. Not only does it promise to have TONS of retro games, hardware, and general awesomeness to play and buy, but the Commodore Computer Club and Users Group of Vancouver, WA will be at the Expo demonstrating Shredz64 and the PSX64 in action! They’ll also have lots of other Commodore goodness to check out.

The expo is located at:

Portland Crowne Plaza
1441 NE 2nd Avenue
Portland, OR

And full details can be obtained on the website. Personally I’m very jealous of everyone who gets to attend, I wish I could be there myself – it looks like its going to be a blast! Check it out if you can!

PSX64 – Rev B (ATmega168) Firmware Update

Since no boards with the ATmega168 have been shipped out, this shouldn’t affect anyone, but if you happened to build your own board in the last few days and used firmware 1.1b for it – you’ll want to update it to 1.2b found here.

The ATmega168 appears to access its flash memory at a different speed (perhaps due to increased size), which slowed down macro playback to a noticeable degree. This firmware updates the playback speed to put it back in line with the ATmega8.

Again, this firmware is only for the ATmega168, so if you bought your board, you won’t need this firmware.

PSX64 – New MCU (and Firmware)

For whatever reason, Digikey and Mouser’s supply of the Atmega8-16 MCU is completely out of stock. I’ve seen differing reports whether this chip is End-Of-Life’d, but that certainly seems like it might be the case – neither site indicates that a future stock will be available. With this in mind, all new PSX64s produced will be using the Atmega168 instead. Really, this will functionally make no difference. The 168 can run faster and has more memory, but I’m driving it with the same 16 MHz crystal and with the same code. And luckily, the two chips are pin compatible, so no rework of the PCB is necessary.

The Atmega168 does have different fuses and slightly different architecture, and the firmware needed to be recompiled. I made a PSX64 with the ATmega168 tonight, and recompiled the firmware, and life is good. If you’re building a new board with an ATmega168, or (in the future) need to reflash your PSX64, the new revision B firmware is available here. (i.e. psx64fw11.hex is version 1.1 for the ATmega8, and psx64fw11b.hex is version 1.1 for the ATmega168).