The Hackable Handheld [part 1]
Thursday March 23rd 2006, 12:12 am
Filed under: school news

hackable handheld thumbnailWhat does it take to build a new microcontroller from scratch?

It seems to me that hand-held games (Nintendo DS, PSP, etc.) should all come with programming systems. It is a form of tyranny that these companies put all that great compute power in the hands of children, yet give them no tools for accessing the inside of the device. I’m not the only one to suffer this frustration, it has lead people to put Linux on iPod, and to relentlessly hack the PSP (no matter how hard Sony tries to close the platform).

Not long ago, it became clear that Tinkering School should start incorporating some kind of programming and electronics in the curriculum. I looked around at all the usual suspects (Parallax, microE, etc), but it seemed that none of them had all the features I thought were required and they were all too expensive for kids to use in an experimental way.

Nonetheless, I ordered some kits and started tinkering. I found that while the Parallax BOEBot was fun to play with, it lacked a display and was too large to incorporate in kid-built toys. The mikroE EasyPIC 3 has every bell and whistle you could hope for in a development kit (except servo motor drivers), but at nearly 8″ square it’s way too big to put in a toy.

In a pure “you put peanut butter in my chocolate” moment, it struck me that both of these problems (closed handhelds, big hobby boards) could be solved at once. So I loaded up the kits and went to visit my old friend Bob Blick to tell him my tale of woe. We looked over the boards from the packaged kits and discussed the features that seemed critical to both problems. We wanted a display, some servo controls, some buttons - none of the kits had this combination of parts - Bob agreed that there was a need for another little tiny microcontroller board…

During a trip to Harbor Freight, he offered to help me with the circuit design, and told me that the first step would be to create a parts list that included all the things that had to be on the board. We bounced some e-mail back and forth over a couple of weeks and quickly settled on what seemed like the right balance of features and cost. It was important that the board be cheap enough that if a tinkerer destroyed one in an experiment, it wouldn’t be the end of the world.

Needless to say, I’m not the only person who has looked around the internet and decided that I “just can’t find the exact little tiny computer I want with all the features I need.” There are lots of smart folks making their own little computers. But with Bob helping me, it just seems completely feasible (reasonable even) to make an inexpensive, programmable, highly functional, tiny computer that is suitable for use in toys and, with the addition of a graphics-capable LCD, suitable for developing hand-held games.

To keep the costs down we decided to get rid of any hardware we could simulate in software. For example, instead of a sound chip, we decided to do pulse-width modulation which we could drive a little piezo-electric speaker with. Following that cue, we eliminated specialized servo drivers and put in a little multi-plexer so that we could talk to 4 servos and use software to synthesize the necessary waveforms. Instead of a programmer on-board, we plan to pre-program the PIC chips with a serial boot-loader - basically a self-programming system that allows us to load code when the CPU is fired up - and then install the chip on the board.

After a while, we had a list that looked something like this:

Consolidated Functional Parts List
- power switch
- DB9 serial connector
- 9v battery (on tail)
- voltage regulator
- buttons (4)
- servo headers (4)
- exposed port headers (A,B,C)
- GLCD/2×16 header
- PIC CPU (40pin package)
- power-on LED

[To be continued in Part Two]


No Comments so far
Leave a comment



Leave a comment
Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

(required)

(required)