http://www.opencircuits.com/api.php?action=feedcontributions&user=Zorton&feedformat=atomOpenCircuits - User contributions [en]2024-03-29T10:43:17ZUser contributionsMediaWiki 1.34.2http://www.opencircuits.com/index.php?title=Linuxstamp&diff=14727Linuxstamp2008-02-29T14:01:32Z<p>Zorton: /* Project files */ Clarify eagle is the EDA suite being used</p>
<hr />
<div>[[Image:linuxstamp_top_02.jpg]]<br />
== Status ==<br />
We now have working linuxstamp prototypes. There are a few minor hardware changes needed, and then we will make a production run.<br />
<br />
== Description ==<br />
The Linuxstamp is designed to be a general purpose processor module. It is designed to work as a stand alone module (SD card, Ethernet and USB/Serial converter are all on the module). This allows all initial development to be done without a motherboard, but for integration into a specific project a motherboard with specific features could be designed. Check out the start of the first mother board for the Linuxstamp, [http://opencircuits.com/Linuxstamp_Mboard_1 Mboard 1].<br />
<br />
== Features ==<br />
* Atmel AT91RM9200 processor (Arm9 processor with MMU, 180Mhz operation)<br />
* 32MB SDRAM (Only limited by 1x 54-TSOP SDRAM chip)<br />
* 8MB SPI Dataflash<br />
* 1x 10/100 Ethernet<br />
* 1x USB host port (allows wifi adapters, flash drives and other USB devices to be used)<br />
* 1x SD card slot<br />
* Serial debug port access through FTDI USB/Serial converter<br />
* JTAG port<br />
* 2-Layer PCB design<br />
* POE capable (48v -> 5v Power supply can be implemented on a motherboard)<br />
<br />
== License ==<br />
All files for this project are licensed under the GNU GPL V2<br />
<br />
== Project files ==<br />
Warning!!! This is an untested design. As testing results are available I will post them on this site.<br />
Project files are built using eagle.<br />
* [[Media:linuxstamp-rev111-top.pdf|PCB Top view (pdf)]]<br />
* [[Media:linuxstamp-rev111-bottom.pdf|PCB Bottom view (pdf)]]<br />
* [[Media:linuxstamp-rev111-sch.pdf|Schematic (pdf)]]<br />
* [http://greenflaginc.com/linuxstamp-20070513.zip Project zip file]<br />
<br />
== Power ==<br />
The power supply for the board is based on the Linear LTC3407-3. This is a very compact high frequency switching power supply. It has both a 3.3v and a 1.8v output. It does have a very tight input range 3.3v-5.5v. The Micrel PHY also needs 2.5v, but this is provided by an internal regulator. Currently a regulated 5v must be used to power the board. Talking with Jeff from Jendy Labs it seems like POE (Power Over Ethernet) is a good idea. [http://en.wikipedia.org/wiki/Power_over_Ethernet Wikipedia] has a good general description of POE. The basic idea is that POE provides 48v and up to 13 watts, more than enough power for the Linuxstamp. The problem for the module is that a 48v -> 5v power supply is not small or cheap. In order to take advantage of POE without increasing the board size I found a part from Transtek Magnetics that is made for POE and has the rectifier built into the jack. The 48v lines are then connected to the pin header. This will allow a motherboard to integrate a POE power supply.<br />
<br />
== Minicom & the debug port ==<br />
The USB device port on the Linuxstamp does not connect directly to the AT91RM9200 it connects to the FT232R chip. The FT232R is a USB/serial converter. The FT232R chip has drivers for both Windows and Linux, but the Linux drivers are included in later kernels. When you plug the Linuxstamp into your host (Linux) machine a device should appear '''/dev/ttyUSB0''' (I think the postfix number will increment as you add more devices). '''/dev/ttyUSB0''' will behave as any other serial port now. '''Minicom''' is the standard program to access the serial port in Linux. The first time you run minicom you will have to be root in order to do the setup, after that you can change the permissions on /dev/ttyUSB0 so any user can run minicom. To enter configuration mode in minicom type '''CTRL-A o''', now scroll down to '''Serial port setup'''. Use the letters to navigate. You will want the device to be '''/dev/ttyUSB0''' and '''Bps/Par/Bits''' to read '''115200 8N1'''. Connection to the board is important for loading Atmel's tiny program and u-boot, but once the board is working it might not be as important.<br />
<br><br><br />
The built in xmodem in minicom does not seem to work with the hardware bootloader in the AT91RM9200. The folks at [http://www.koansoftware.com/it/art.php?art=68 Koan] have created a workaround. The one thing you have to do is edit the .c file for the proper serial port ttyUSB0 in my case.<br />
<br />
== nfs & tftp ==<br />
Nfs (network file system) and tftp (trivial file transfer protocol) are two servers you will want running on your host machine. Nfs is useful for hosting the root file system of the Linuxstamp. Tftp is useful for u-boot to retrieve the kernel from. There are many other websites on nfs and tftp, but I will try and go over a simple setup. I would suggest being behind a firewall before trying either of these setups as neither is secure. I wrote this using a Fedora 7 system. First make sure you have nfs installed.<br />
*$ '''yum install nfs-utils nfs-utils-lib portmap system-config-nfs'''<br />
Now to make sure the service is enabled run:<br />
*$ '''serviceconf''' and make sure '''nfs''' and '''nfs lock''' are checked<br />
Now edit '''/etc/exports''' you should add a line like this '''/path_to_nfs_root/ *(rw,no_root_squash,insecure)'''. Now restart nfs.<br />
*$ '''/etc/init.d/nfs restart'''<br />
You can test this with<br />
*$ '''mount -t nfs server_name:/path_to_nfs_root /path_to_test_mount'''<br />
Now on to tftp. Make sure it is installed.<br />
*$ '''yum install tftp-server'''<br />
This will create a file '''/etc/xinetd.d/tftp'''. In this file you will want to change '''disable''' from '''yes''' to '''no'''.<br />
Now make a test file.<br />
*$ '''cd /tftpboot'''<br />
*$ '''echo hello > file'''<br />
Now we can test it <br />
*$ '''tftp -v server_name -c get tmp'''<br />
Now with u-boot we can load image files<br />
*> '''tftpboot 20800000 uImage'''<br />
And boot them<br />
*> '''bootm 20800000'''<br />
<br />
== Cross Compilier ==<br />
In order to compile for the AT91RM9200 we need to build a cross compilier. Dan Kegel has created a very useful [http://kegel.com/crosstool/ tool] for building a cross compiliers. I am using Fedora 6 (x86_64) as my host system. After downloading and extracting crosstool (I was using version 0.43) I made two small changes. In the "demo-arm.sh" file I changed the eval line to <br />
*"'''eval `cat arm.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest'''"<br><br />
In the "arm.dat" file I changed the TARGET to "arm-linux" (By default u-boot looks for arm-linux-* tools). Now if you run "demo-arm.sh" you should get a cross compilier.<br />
<br />
== Booting ==<br />
The AT91RM9200 has several features the facilitate easy booting. There is a good description of the booting order [http://www.open-research.org.uk/ARMuC/At91rm9200_Booting.html here]. Atmel provides a tiny [http://www.atmel.com/dyn/resources/prod_documents/uboot-DataFlash_1_01.zip program] that lives in the Dataflash and loads u-boot (see next section). <br />
<br />
== U-boot ==<br />
First we need [http://www.denx.de/wiki/UBoot u-boot] (doc) [http://www.denx.de/cgi-bin/gitweb.cgi source] (git) (formerly on [http://sourceforge.net/project/showfiles.php?group_id=65938 sourceforge]) (I was using version 1.1.6 - this is an old version). If you have not yet built a cross compilier now would be a good time to do so (See the cross compilier section above). Now you can do a test for the Atmel AT91RM9200 DK board.<br />
* $ '''make at91rm9200dk_config'''<br />
* $ '''make'''<br />
This should give you a "u-boot.bin" file. We will have to write a board specific configuration file for the Linuxstamp. We should be able to base it off the the Atmel DK board. If you look at "/u-boot-1.1.6/include/configs/at91rm9200dk.h" you can see the configuration for the DK board.<br />
<br />
== Busybox ==<br />
[http://www.busybox.net/ Busybox] provides the necessary utilities (e.g ls, cp, etc...). After you have downloaded and unpacked busybox we are ready to get started (I was using version 1.4.2).<br />
* $ '''make defconfig'''<br />
Now for a quick test we can make busybox for our host machine<br />
* $ '''make'''<br />
After you run this you should have a file 'busybox'. Now try<br />
* $ '''./busybox ls'''<br />
But we want to build busybox for our embedded system so run<br />
* $ '''make ARCH=arm CROSS_COMPILE=arm-linux-'''<br />
If you want to make Busybox with all the symbolic links for the tools run<br />
* $ '''make CONFIG_PREFIX=/path_to_dir ARCH=arm CROSS_COMPILE=arm-linux- install'''<br />
<br />
== Building the Linux Kernel ==<br />
If you have ever built the kernel for your desktop, then cross-compiling the kernel isn't that much harder. First get the latest kernel from [http://kernel.org/ kernel.org] (I was using 2.6.23-rc9), then get the AT91RM9200 patch from [http://maxim.org.za/at91_26.html here]. After you unpack both of these you can apply the patch.<br />
* $ '''patch -p1 < 2.6.23-rc3-at91.patch'''<br />
Now lets take a look at the default configurations<br />
* $ '''make ARCH=arm help'''<br />
The ecbat91 is the closest to the linuxstamp.<br />
* $ '''make ARCH=arm ecbat91_defconfig'''<br />
If we what to further customize the build we can use 'xconfig'<br />
* $ '''make ARCH=arm xconfig'''<br />
Now we're are ready to build the kernel. You will have to have the u-boot tool '''mkimage''' in the '''PATH''' for this to work<br />
* $ '''make ARCH=arm CROSS_COMPILE=arm-linux- uImage'''<br />
<br />
== Minimal filesystem ==<br />
There isn't much you need for a minimal filesystem. I suggest creating a staging area to create the filesystem. First you need the libraries generated by the cross compiler. On my machine they are located at '''/opt/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/arm-linux/lib'''. Next you will need busybox, and we saw in the busybox section we can tell busybox where to output the files (use the root directory of your staging area). The last file we need is '''/dev/console'''.<br />
* $ '''mkdir /staging_path/dev'''<br />
'''/dev/console''' is a special file used to bind a device driver to a file. As such we use the '''mknod''' command.<br />
* $ '''mknod /staging_path/dev/console c 5 1'''<br />
The '''c''' says this is a character device. The '''5''' is the major node, and the '''1''' is the minor node.<br />
<br><br><br />
For development the most convenient way to work is by mounting an NFS root file system. Another easy way to deal with thre root file system is by mounting it on either a USB drive or SD card, but if you want a stand alone system you will want the root filesystem to come from the onboard Dataflash. There are several steps to do this. The Dataflash on the Linuxstamp is 8MB. A little under 2MB is used for the bootloaders and the Linux kernel. This leaves about 6MB for the filesystem. The filesystem I am working with is about 10MB, so we will need to compress the filesystem. One method of doing this is to use the initramfs function in the kernel. The kernel expects the image to be a gzipped CPIO archive. In the kernel source there are tools to create the CPIO archive. First we must create a file list from our file system (presumedly this is just the root of your current NFS mount).<br />
* $ '''cd /path_to_linux_source'''<br />
* # '''scripts/gen_initramfs_list.sh /path_to_fs_root/ > cpio_list<br />
Next create the CPIO archive<br />
* # '''usr/gen_init_cpio cpio_list > initramfs.cpio'''<br />
Gzip the CPIO archive<br />
* $ '''gzip initramfs.cpio'''<br />
Now copy initramfs.cpio.gz to usr/initramfs_data.cpio.gz, and run the normal kernel make. You will notice that uImage is much larger (size = kernel + fs).<br />
<br />
== Dropbear SSH ==<br />
One of the first non busybox tools you will want is SSH. Dropbear is a small SSH client/server. I was able to get version 0.50 working.<br />
* $ '''./configure --host="arm-linux" --disable-zlib --prefix=/staging_path'''<br />
* $ '''make all'''<br />
* # '''make all install'''<br />
You will have to make the device nodes '''/dev/ptmx''' and '''/dev/tty'''<br />
* # '''mknod /dev/ptmx c 5 2'''<br />
* # '''mknod /dev/tty c 5 0'''<br />
You will also have to have the devpts filesystem mounted.<br />
<br />
== Eagle Stuff ==<br />
I will put tools and libraries here.<br />
* I would post a cam job, but opencircuits won't let me upload a .cam file<br />
<br />
== Links ==<br />
*[http://atmel.com/dyn/products/product_card.asp?part_id=2983 Atmel]: AT91RM9200 info on Atmel's site<br />
*[http://maxim.org.za/at91_26.html]: Up to date kernel patch for the AT91RM9200<br />
*[http://cadsoft.de/ Cadsoft.de]: Free (as in beer) tools for schematic and PCB design<br />
*[http://openhardware.wordpress.com/ openhardware.wordpress.com]: Here is my openhardware blog<br />
*[http://www.atmel.com/dyn/products/app_notes.asp?family_id=605 App notes]: for Atmel arm processors<br />
*[http://www.jendylabs.com/ Jendy Labs]<br />
*[http://opencircuits.com/Linuxstamp_Mboard_1 Mborad 1] for the Linuxstamp<br />
*[http://wiki.emqbit.com/wiki ECB AT91] This is another open source project similar to the Linuxstamp. They have somve very good documentation.<br />
<br />
== Pricing ==<br />
The parts cost for qty 1 is $75 from digikey, and $55 for qty 100<br><br />
I'm sure this can be greatly reduced with higher quantity<br><br />
We will make a small run soon, and I will let you know when these are available.<br><br />
<br />
== Discussion ==<br />
<br />
Can I plug a USB peripheral into the Linuxstamp, such as a USB Wifi adapter? --[[User:DavidCary|DavidCary]] 22:02, 17 April 2007 (PDT)<br><br />
:Yes, any USB device that is supported by the kernel should work with the Linuxstamp. --[[User:Linuxvolts|Linuxvolts]] 23:15, 18 April 2007 (PDT)<br />
<br />
This is not a true USB port is it? Its just a usb serial peripheral port, therefore USB stick will not work.<br />
:Should be answered by the last answer, too. An USB stick is also USB peripheral^^ --SebDE<br />
<br />
This is not a USB host....it (Linuxstamp)is seen as the peripheral surely?<br />
:From the Features:<br />
:''1x USB host port (allows wifi adapters, flash drives and other USB devices to be used)''<br />
:You can plug in any USB device that is supported by the kernel. The Linuxstamp is not supposed to be plugged via USB to a PC.<br />
:--SebDE<br />
<br />
The AT91RM9200 has 2x USB host ports and 1x device port. I bring out one of the USB host ports directly from the chip to a USB A connector. There is also a mini USB B connector on the board this is connected to the FT232RQ (USB/serial converter) which in turn is connected to the debug serial port on the AT91RM9200. So the linuxstamp can be both a USB host and a USB device. --[[User:Linuxvolts|Linuxvolts]] 20:10, 4 July 2007 (PDT)<br />
<br />
== Contact ==<br />
For further questions or comments please contact Paul (pthomas8589 _at_ gmail _dot_ com)<br />
<br />
== other boards that run Linux ==<br />
<br />
* [[ARMUS Embedded Linux Board]]<br />
* [http://balloonboard.org/ Balloon board]<br />
<br />
[[Category:Projects]]</div>Zortonhttp://www.opencircuits.com/index.php?title=User_talk:Zorton&diff=14724User talk:Zorton2008-02-29T13:45:50Z<p>Zorton: </p>
<hr />
<div>Welcome to Open Circuits, Zorton.<br />
<br />
I hope you enjoy reading OpenCircuits and sharing your knowledge with us.<br />
<br />
A few tips:<br />
<br />
* You can "sign" your contributions by typing four tildes <nowiki>"~~~~"</nowiki> at the end.<br />
* Be bold with your editing. If you add information that really belongs on some other page of this wiki (or on some other wiki entirely), or you accidentally delete some crucial stuff, it's fairly easy for anyone to fix it. Please feel free to revert or otherwise fix-up any of my edits that turn out to be erroneous and/or misguided.<br />
* Sometimes it is faster to [[How to delete spam | delete spam]] (and restore what the spammer may have deleted) by pressing the "undo" button on the page history "diff" page.<br />
* We are all volunteers here.<br />
<br />
Please feel free to talk about your electronics experiences here.<br />
<br />
Welcome.<br />
<br />
--[[User:DavidCary|DavidCary]] 19:43, 6 February 2008 (PST)<br />
<br />
<br />
Thanks for the welcome Dave. I'll throw the project i've been working on up at some point. For now i'm just poking around and reading fixing problems as I go.<br />
<br />
Cya<br />
<br />
16:25, 9 February 2008 (PST)<br />
<br />
Thanks again.<br />
<br />
So what tools do you expect to use for your next project?<br />
<br />
(Yes, I'm a little obsessed with tools.<br />
I keep hoping to find "the silver bullet" that will make all this electronics and software stuff ''easy''.<br />
Well, Frederick Brooks has convinced me that there is no silver bullet.<br />
But there certainly are tools that make things somewhat easier).<br />
--[[User:DavidCary|DavidCary]] 16:43, 19 February 2008 (PST)<br />
<br />
<br />
Right now i'm trying to learn my way around gEDA. If I can get gEDA figured out enough i'll post some of the source files i've got. Right now they certainly don't describe a useable circuit :)<br />
<br />
--[[User:Zorton|Zorton]] 05:45, 29 February 2008 (PST)</div>Zortonhttp://www.opencircuits.com/index.php?title=User_talk:Zorton&diff=14393User talk:Zorton2008-02-10T00:25:23Z<p>Zorton: </p>
<hr />
<div>Welcome to Open Circuits, Zorton.<br />
<br />
I hope you enjoy reading OpenCircuits and sharing your knowledge with us.<br />
<br />
A few tips:<br />
<br />
* You can "sign" your contributions by typing four tildes <nowiki>"~~~~"</nowiki> at the end.<br />
* Be bold with your editing. If you add information that really belongs on some other page of this wiki (or on some other wiki entirely), or you accidentally delete some crucial stuff, it's fairly easy for anyone to fix it. Please feel free to revert or otherwise fix-up any of my edits that turn out to be erroneous and/or misguided.<br />
* Sometimes it is faster to [[How to delete spam | delete spam]] (and restore what the spammer may have deleted) by pressing the "undo" button on the page history "diff" page.<br />
* We are all volunteers here.<br />
<br />
Please feel free to talk about your electronics experiences here.<br />
<br />
Welcome.<br />
<br />
--[[User:DavidCary|DavidCary]] 19:43, 6 February 2008 (PST)<br />
<br />
<br />
Thanks for the welcome Dave. I'll throw the project i've been working on up at some point. For now i'm just poking around and reading fixing problems as I go.<br />
<br />
Cya<br />
<br />
16:25, 9 February 2008 (PST)</div>Zortonhttp://www.opencircuits.com/index.php?title=Category:Suppliers&diff=14391Category:Suppliers2008-02-09T23:09:24Z<p>Zorton: Undo revision 14379 by 200.29.96.75 (Talk)</p>
<hr />
<div>See [[supplier]].</div>Zortonhttp://www.opencircuits.com/index.php?title=Digikey&diff=14390Digikey2008-02-09T23:08:39Z<p>Zorton: DeSpam</p>
<hr />
<div>{| align=right<br />
|-<br />
| <br />
[[Image:Digikey-Logo.gif|Digikey]]<br />
|}<br />
<b>Description:</b><br> The defacto standard for small parts ordering. Once you get used to their interface/search engine, you'll cuss at every other parts website out there. They are great. $25 minimum order. Same day shipping. They have a lot of stock items, but a lot of non-stocked items so don't believe the catalog.<br />
<br />
<b>Website:</b><br><br />
[http://www.digikey.com www.digikey.com] of course<br />
<br />
<b>Contact Info:</b><br><br />
1-800-344-4539<br />
<br />
All major credit cards accepted. Many shipping methods. I believe they ship to USA, Canada, and many other countries.<br />
<br />
[[Category:Suppliers]]</div>Zortonhttp://www.opencircuits.com/index.php?title=PCB_Footprints&diff=14389PCB Footprints2008-02-09T22:57:34Z<p>Zorton: Removed dead link and corrected grammer</p>
<hr />
<div>{| class="wikitable"<br />
! Manufacturer !! Description !! Available footprints<br />
|-<br />
|Trimble || Lassen iQ GPS Module || [[Media:Trimble Lassen iQ GPS Module.zip|Protel]]<br />
|-<br />
|(none) || Compact Flash IDE Connector || [[Media:Compact Flash IDE connector.zip|Protel]]<br />
|-<br />
|Linx Technologies || RF transmitters, RF receivers and USB transcievers || [[Media:Linx_Technologies.zip|Protel]]<br />
|-<br />
|Spark Fun Electronics || [[SFE_Footprint_Library|Old SFE Footprint Library]] || [[Media:SFE-Custom-Footprints.zip|Protel]] <br />
|-<br />
|Spark Fun Electronics || [[SFE_Footprint_Library_Eagle| Updated Eagle SFE Footprint Library]] || [[Media:SparkFunEagle-3-2-07.zip|Eagle]] <br />
|-<br />
| Cypress || PSoC microcontrollers || [http://www.psocdeveloper.com/forums/viewtopic.php?t=1029 Protel]<br />
|-<br />
| Microchip || PIC microcontrollers || [http://www.geda.seul.org/links.html gEDA ?] [http://www.isl.ee.boun.edu.tr/projects/motordriver/ ORCAD ?]<br />
|-<br />
| Atmel || Atmel AVR || [http://agentj.osk-net.pl/index.php/ProtelLibraries Protel]<br />
|-<br />
| Philips || ARM microcontrollers in LQFP-48 package || [http://k9spud.com/arm/lpc2103/ Eagle]<br />
|-<br />
| Misc. || Variety of footprints for gEDA/PCB || [http://www.luciani.org/geda/pcb/pcb-footprint-list.html PCB] [http://massmind.org/techref/app/PWB_libraries.htm Protel ] ||<br />
|}<br />
<br />
==gEDA Symbols and footprints==<br />
*[[Media:GEDA_sym_footprint.zip|un-tested gEDA symbols and footprints]]<br />
**All of these Symbols are heavy symbols. gEDA has already provided most of the above symbols in light format for us to modify. The above symbols include more information than normal to save some time instead of configuring each symbol every time you use them.<br />
<br />
== Other footprint libraries ==<br />
<br />
[http://freelabs.com/~whitis/opensymbol/ "Open Symbol Project" with Mark Whitis]<br />
"The Open Symbol Project aims to create an open collection of schematic symbols and PCB footprints released under a license that does not interfere with use in either commercial or free projects.<br />
...<br />
can easily be modified to accommodate various design rules."<br />
<br />
What can we do to help the Open Symbol Project?<br />
<br />
-----<br />
<br />
[http://www.pcb123.com/community/content/modules.php?name=screen_shots PCB123 Libraries] includes some footprint libraries (and a gallery of PCBs).<br />
<br />
----<br />
See also the [[SFE Footprint Library Eagle]].<br />
<br />
-----<br />
[http://www.luciani.org/geda/pcb/pcb-footprint-list.html "John Luciani's gEDA/PCB Library"]<br />
<br />
A collection of footprints for use with the gEDA/PCB program. Also on the site are a<br />
variety of scripts to build footprints and automate PCB layout tasks.</div>Zortonhttp://www.opencircuits.com/index.php?title=Talk:Atomic_Microscope&diff=14242Talk:Atomic Microscope2008-02-07T02:41:24Z<p>Zorton: DeSpam</p>
<hr />
<div></div>Zortonhttp://www.opencircuits.com/index.php?title=Talk:Chalk_Roach&diff=14240Talk:Chalk Roach2008-02-07T02:40:45Z<p>Zorton: DeSpam</p>
<hr />
<div></div>Zortonhttp://www.opencircuits.com/index.php?title=Talk:Manufacturers&diff=14236Talk:Manufacturers2008-02-07T02:38:53Z<p>Zorton: DeSpam</p>
<hr />
<div></div>Zortonhttp://www.opencircuits.com/index.php?title=Enclosures&diff=14232Enclosures2008-02-07T02:32:00Z<p>Zorton: Remove spam</p>
<hr />
<div>== external links ==<br />
<br />
[http://www.pactecenclosures.com/ PacTec Enclosures]<br />
<br />
[http://www.newageenclosures.com/ New Age Enclosures] - They will usually send you free samples if you ask.<br />
<br />
[http://www.tekoenclosures.com/ Teko Enclosures] - Excellent quality, and very generous with samples. Fast, free shipping on all samples.<br />
<br />
[http://www.hammondmfg.com/ Hammond Manufacturing] - Versatile boxes, great service for adding custom machining to standard parts for moderate quantities. Transparent boxes make holes unnecessary for LED indicators, etc.<br />
<br />
[http://saltaquarium.about.com/library/blank/bl_diyacrylicrefugiumph6.htm "DIY Acrylic Refugium"] describes how to make an acrylic enclosure.</div>Zorton