Faster PCB Etching with Ferric Chloride

At times I am very impatient when I am working on a project and want to assemble a working design. If the design is simple enough I will assemble it on a copper perf board, but often the component count is high enough where a PCB is a much better solution. If the design has a really high component count with lots of surface mount components I will send the board out to a fab house only to have to wait a few days to a month for it to return before finally finishing my project. Sometimes this is much too long. What if I want to have a finished design that night? The solution is etching... more specifically fast etching.

I have been etching my own boards with ferric chloride for years with great success. The only downside to this is time. A larger board will take 20 to 30 minutes (sometimes even longer) to etch in the solution. It also requires agitation to keep it etching effectively by keeping the fresh solution contacting the copper. This requires you to either shake the container of ferric chloride or push the board around constantly in the solution as it etches.

My solution was to have something agitate the board for me.



This was my first test of using a VWR vortexer to speed up the process. This device was designed for a lab environment to hold test tubes, beakers, and such. The lower plate rotated around causing a mini vortex within the containers solution that would be placed on it. I have modified it to hold a glass container full of ferric chloride to agitate the solution for me. The glass container I am using is perfect for the job. It is a food container called 'Glass Lock' and has a tight fitting plastic lid that locks into place on all four sides. Nothing will be leaking out of it. I bought two of them for the lids. One has small holes that I drilled to allow fumes to evacuate while the second lid is unmodified to store the solution.

Ferric chloride also works better when it is warm. To facilitate this I mounted a good sized peltier junction to the bottom with an epoxy heatsink compound and supplied it with a 12V 2A power supply. It heats the solution up to about 110 degrees Fahrenheit, still below the maximum ferric chloride recommended temp of 135 degrees.

The VWR vortexer as it arrived has an adjustable speed control, the only issue was it had a minimum speed of 1200rpm. This is much too fast for what I needed. Opening up the unit I found two adjustable resistors that let you adjust the minimum and maximum speeds of the motor. I was able to adjust it all the way down to a nice ~200 rpm, perfect to keep the ferric chloride in motion.

In goes the PCB:



With the lid locked on and the vortexer switched on, I checked the board every five minutes.



Total etching time was about 12 minutes, less than half the time of any previous etching I have done. After a quick sanding here is the finished board before tin plating:



Not perfect, but not bad for less than an hour and a half time. I had the design drawn up in eagle in about 45 minutes, the rest was transferring the design to the copper and etching.

Future improvements will be to add a second peltier device to get the solution up to a higher temperature and to also add a digital temperature gauge to make sure the solution does not get too hot.

Brad - Mar 30th 2011, 11:24 PM

An svn users' tale of the Git (bare) learning curve.

Herein lies my woeful tale of Git assumptions and the specters of SVN, rabidly haunting my brain meats with errant lies.

I am an SVN guy. I'll outright admit it not matter how much 1337-credit i lose in doing so (offended? I also hate NoSQL and most of the major frameworks). However, with all you hip kids moving to Git, I felt the need to sip on the purple koolaid juts enough to hold a conversation with you criminally insane miscreants. This is the story how I perhaps sipped a little to much (double entendre!!!).

For those of you who are like me, and looking for a helping hand, i'm going to paste the fuck-off error i kept getting, and how I fixed it (with proper git workflow!):

refusing to update checked out branch: refs/heads/dev

By default, updating the current branch in a non-bare repository is denied, because it will make the index and work tree inconsistent with what you pushed, and will require 'git reset --hard' to match the work tree to HEAD.

You can set 'receive.denyCurrentBranch' configuration variable to 'ignore' or 'warn' in the remote repository to allow pushing into its current branch; however, this is not recommended unless you arranged to update its work tree to match what you pushed in some other way.

To squelch this message and still keep the default behaviour, set 'receive.denyCurrentBranch' configuration variable to 'refuse'.

If you're getting this error, read on! I promise you I have the answer. And not the "oh, just convert it to a bare repo" like the rest of the internet says. They are wrong. Join me in joyous perseverance!

Now, I've used Git on and off for a few years now, mostly to keep track of work on a local machine, however I wanted to implement a Git server that could keep track of a repo/ master branch much like how I currently use SVN. And that, is the beginning of "How I wasted a day of my life, a story of misunderstanding and hardship". I'm talking Ann Frank hardship. And as a personal note to you Git guys out there, DOCUMENTATION! seriously. How in the hell does that error at the top of the page help anyone? How about a "why this is bad" note or link? You wasted a day of my life, and i want it back.

If you meandered like a retard down the same path as me, you probably did the following:
  1. make directory on server, and git init
  2. add some files, git commit -a
  3. make directory on client, and git clone
  4. edit files, git commit -a, git push
  5. Git sez: "ERROR. YOU SUX. RTFM CUZ UR SHIT IZNT BARE. FUCKIN N00B."
After braving the depths of the internetz, I came across a cult of people explaining that "all you needed to do" was convert to a bare repo, and all would be well. This sounded a tab fishy to me, as up until this point nobody had cared to explain what a bare repo was (as I later discovered, it is just the contents of the .git directory. no browsable file structure). After reading a few websites on Git workflow, and heeding some sage advice from a local development firm (SRT), I bravely decided to abandon my SVN knowledge, and start playing with branches. Here is what i found (and what fixed my problem).

Create a git repo on your "Host/Storage Server":

mkdir repo
cd repo
git init

At this point, you have an empty master branch, so lets add a blank file (or copy your own files in to the dir at this point), and commit it.

touch README
git add *
git commit -a -m "here is my first commit"

Now at this point, if we were to clone the master, edit README, and commit from another machine, you'd get the fuck-off error ourlined above. So instead of fighting Git, lets place nice. Following the git workflow, you shouldnt be doing development directly in to your master branch (as it awkwardly attempts to point out in the error message). Instead, the master branch should only be deployment-ready versions of your code (ie: SVN tags). So lets add a branch in which we'll be doing some of our development:

git branch dev

Ok, now head over to your "Client/Dev Server" and clone the repo. I use ssh as a transport because its simple and I like that, but if you want to get all difficult and fancy, you can use the git-daemon which implements the git:// option (which is just ssh on port 9140 or some shit, so I would suggest the simple, cool-guy way, which is ssh).

git clone ssh://username@ip.or.fqdn/path/to/repo
git branch dev
git checkout dev

At this point, you have a full working copy of the git repo on your machine in which you have created and started work in the dev branch (like we made on our server). You can now feel free to mess up the joint by committing or editing files. Then simply:

git commit -a
git push

Bam! you have yourself a hosted Git server! Now that you have your working setup, I would suggest you read over this handy workflow which will help you further understand / make user of Git.

Jim - Mar 30th 2011, 11:54 AM

Happy Halloween

We had an extra pumpkin and I had 20 minutes... :)


Happy Halloween.

Brad - Oct 31st 2010, 11:55 PM

My Electronics Bench and Test Equipment

I have been into the electronics field since I was about 11 years old. I reached that phase of my life where I began taking everything apart and wondering what all this 'stuff' inside these electronic devices was. It wasn't too long until I began understanding and learning while making my own analog and digital designs come to life. Eventually I reached a point where my current tools were just not allowing me to really debug and see what was going on inside the circuit I was designing. This is where I realized I needed better equipment than what I had.


Throughout this post I am going to talk about the equipment I own and what you should look for if just stating out in electronics. With all of the equipment available on the used market, anyone beginning in electronics that is taking it seriously should have the basics: A good multimeter, a soldering station, and a current limiting adjustable power supply. Without these three items frustration will only ensue.

We all start somewhere and my start was with a $9 RadioShack soldering iron and a couple dollars more analog multimeter. While the meter suited me fine for a very long time, the $9 fire hazard was the most frustrating piece. I remember at the time reading my Radio Electronics (later Electronics Now) magazine and looking in the back advertising sections at the nice Weller soldering stations and amazing test equipment that was being made by companies like HP and Tektronix. I had only wished that I could have even a 20Mhz oscilloscope but with my non-existing income as being in middle school allowed, I had to settle for some basic test equipment like the multimeter I had.

My break came in 7th grade when one day I happened to notice that my science teacher had an oscilloscope in the labs storage closet. I questioned my teacher about it only to learn that it didn't work and had been there a very long time. To my surprise my teacher said I could have it if I wanted it which I enthusiastically accepted. It was a very old Bell+Howell model, most likely a kit originally. It had only a couple Mhz bandwidth and upon opening it was full of tubes. The issue it had was there was no horizontal sync, only a single dot burning a mark into its crt upon power on. I immediately pulled all the tubes and went to a local tv shop which I had remembered still had an old tube tester in the back (this was like 1993, tubes were still very obsolete). I tested all of the tubes and found a few that were definitely bad and purchased replacements. Upon powering on with new tubes in place, I finally could see into the time-domain of the circuits I was building. The 555 timer oscillator circuit I could finally see the waveform being generated. From my 1Mhz crystal oscillator I could see a near perfect square wave with a 50% duty cycle. It was a very exciting time. This only fueled the fire for things to come.

I dealt with basic equipment all thorough college, but once I had a job and could finally afford good test equipment, I went at it full force. It is amazing to see how cheap test equipment has become, especially on the used market.

Here is the current test equipment that I own as this is my current bench as it exists today:


A nice big workspace is key, I personally like deep desks which allow me to place bigger items far away from me without taking up valuable local workspace. I built the bench shown above as I was not able to find any workspace that nicely fit my needs. They do exist, but can cost a considerable amount of money. I built my bench with a strong shelf to hold most of my test equipment right at eye level, it had to be considerably strong as some of the older test equipment can weigh 60 pounds or more each (HP / Agilent builds things very well ;) ). Also shown is an anti-static mat as it it important to not destroy your expensive components before you get to use them. Now to talk about the equipment itself:

Multimeter. The absolute most important piece of test equipment for anyone. In my opinion this is the first thing anyone interested in electronics needs to buy. I use Fluke multimeters as they are the best, hands-down. I have a Fluke 77 II shown here along with a Fluke 73 (not shown). Need to see exactly how much voltage that power supply is putting out? Need to see how much current this circuit is really drawing? Need to see how many ohms that resistor really is? A multimeter has the answers. A good multimeter will pay for itself the first time you don't blow up the circuit you are working on out. I also still have my original Micronta analog multimeter and use it every now and then. Analog multimeters have the benefit of being able to see slow voltage changes over time by watching the needle move. Hook one up to an 110V outlet in your home to see what I mean, it shows a slow voltage inconsistency that a digital meter cannot easily display.


Soldering Iron, a good one. This is the 2nd most important tool anyone interested in electronics needs. An adjustable temperature one is best, especially dealing with temperature sensitive smd components. You are able to turn the temp down when needed, but also have the ability to crank it up when soldering or desoldering components on huge ground planes. I like Weller, but there are many good brands out there. A digital display is nice for being able to see what the current temperature is set at. The Weller below also has an anti-static tip to make sure you don't destroy any devices from rogue static charges on the iron itself.

Oscilloscope, the standard piece of test equipment when you are serious in electronics. I have many of them. An analog scope with decent bandwidth is still an extremely important piece of test equipment as it allows you to look into the time domains of signals to see what is really going on. The Tektronix 2246 seen here is an awesome scope. This is the scope I go to most even with the several digital scopes I own. Analog scopes are simply better for viewing complex analog waveforms such as a video signal. Everyone needs at least one good analog oscilloscope. I have talked about the benefits and disadvantages of analog vs digital scopes in previous posts, but it will deserve much more discussion in it's own dedicated post. If you are looking for your first scope, go for a 40Mhz to 100Mhz analog model IMO. It will serve you well. Above the Tektronix in the pic is a Racal-Dana 1992 1.3Ghz frequency counter which I will discuss shortly.


Digital oscilloscopes are extremely awesome as well. The one shown on the bottom here is a HP 54503A digital oscilloscope. it is a 500Mhz 4-channel digitizing oscilloscope. This is the scope I go to most when dealing with high speed digital signals. The 500Mhz bandwidth allows me to see very high speed repetitive signals easily.



The scope below is one of my favorites, an HP 54112D. It is a digital scope similar to the 54503A above, but offers may comprehensive triggering options. It is often used for glitch detection, where you are looking for an anomaly in a signal. Because it has digital storage options, it is able to store any waveform once the specified trigger has been hit allowing me to see what happened. This was very useful during the design of my own custom ttl based cpu last year.

Make sure you do not skimp on the scope probes! A good set of probes can easily cost more that the scope itself when buying used. A quality passive probe from HP / Agilent or Tektronix that is matched to the scope it will be used on is a must, especially when dealing with high speed signals. Using a cheap generic probe will distort the signal being measured and not truly represent the signal you are viewing on it's display. A cheap probe can also actually inject noise into a circuit destroying the signal you are attempting to observe. Pay attention to the probe attenuation factor as well. A 10X (attenuated by ten times) probe is good for most cases, but be aware it will be difficult to look at signals under about 10 millivolts with one. Be sure to compensate any passive probe before use, otherwise your signals could appear distorted.


Power supplies. These are actually more important than a good oscilloscope for the beginner. An adjustable voltage, current limiting power supply will keep you from destroying your circuits in the event of a mistake. I have five of these and use them for everything. The ones below are all HP / Agilent models and are my favorite for the money. They are all adjustable voltage and current limiting which means you can prevent any load from drawing too much current. This is important because most power supplies can provide several if not many amps of current per given load. If you were to make a mistake in wiring your circuit and power it up with a non-current limiting power supply, you can plan to have that circuit go up in smoke. With supplies like the Agilent E3610 and E3611 shown below, you can set the current limit to N millamps / amps so that if there is a mistake it will protect your circuit from destroying itself.

I have seen some people modifying computer ATX PC power supplies for bench use and this is ultimately a horrible idea. Since they cannot current limit, using the 5V output on them could provide a huge surge current to your circuit before the power supplies protection circuit can go into effect , instantly blowing it up in your face. A current limiting supply will pay for itself the first time you make a mistake.


Logic analyzers are very important if you work with any type of digital logic. When I was designing my own CPU from scratch, this was an invaluable tool. Think of them as oscilloscopes, but differing in the fact that they can view many channels at once (think 16 to 128+ channels) and can only show states as defined per voltage thresholds for 0's and 1's over time. Basically if you need to watch many channels at once for lengths of time (a data or address bus), then to store the data... a logic analyzer is the answer. The HP 16500B shown below is my favorite with a color display and touch-screen control. It is a modular system allowing you to populate it with the boards you need. I picked mine up (I actually have three of them) from a local Dovebid auction fully populated. I had to get two of the three working, but now have a logic analyzer capable of up to 2Ghz resolution. I am only using one, keeping the others for spare parts. They are excellent tools for any digital design debugging and hardware hacking project.



PIC Programmers. PICs are my microcontroller of choice. I use Atmels and FPGAs as well, but PICs are my favorite. I use them in probably 75% of the projects I make. They are cheap, powerful, and with MPLab IDE free from Microchip along with their C compiler, I can have a working circuit in minutes. There are two programmers I use, The PicKit-2 and ICD-2. The PicKit-2 was my first programmer and still serves me well. It can program all devices with exception of PIC24, PIC32, and dsPICs. This is where the PicKit2 comes in, handling the more powerful smd PIC devices. Both have in-circuit programming capability which is nice as well. To program my microcontrollers, I have several computers at my bench. Today it is essential to have at least one for looking up component datasheets to programming your devices with your favorite IDE.

Breadboards, have had them forever and are so nice for prototyping. I use them all the time. I have many as often I have many projects going at once and don't want to scrap a circuit to start a new one. Be sure to have good wiring kits as well, nothing sucks more than not having the correct length wires to build a circuit.


Now it is time to talk RF. I love making RF filters and amplifiers and to test them you need good, stable RF generators. The two shown below combined cover all frequencies between 10Khz to 2.4Ghz. Each can be modulated with AM or FM carriers. The HP 8656B is a much newer unit with digital controls. It has option 001 (high stability timebase) which provides extremely accurate frequency generation. The model on top is an HP 8614A frequency generator which is older than I am. I picked this up on eBay for an amazing $20 and it works perfectly. It is an analog monster utilizing a klystron tube for RF generation.


A spectrum analyzer. This is the piece of test equipment I have wanted more than anything. Unlike an oscilloscope that lets you view into a signals time domain, a spectrum analyzer allows you to view a signals frequency domain. In the world of RF design, a spectrum analyzer shows you everything you want to know. The HP model 8922H below is actually a GSM / PCS cellular test set, but has option 006 which is a 10Mhz to 1Ghz spectrum analyzer.


Frequency counters are extremely useful for measuring frequencies in oscillators or any clock / RF source. The one shown below by Startek is a handheld model designed for sniffing out transmitters and other RF sources. It can also be used with a good probe to measure frequencies of any clock or RF source up to 2.4Ghz. Earlier above I showed my Racal-Dana bench top frequency counter which has a higher resolution then the Startek. I use both to measure RF frequencies in clock sources, RF sources, and to make sure any frequency is what it is supposed to be. You can use an oscilloscope (provided it's bandwidth is high enough) to measure frequency too, but frequency counters usually have much higher resolution.


Second bench, this bench is just spare space with a Tektronix TDS-420 digital oscilloscope and analog current limiting power supply. I use it for quick testing of devices when my main bench is full of clutter. Also seen is a small parts cabinet, and plenty of spools of chemicals, solder wick, and solder (use ROHS solder!, lead is not good. Yes, solder with lead does flow better but you will get used to the non-lead stuff).


More work space, of course completely cluttered, but more space is always needed. The dry erase board in background is always fun for drawing up new ideas.


This bench is where I work on enclosures and any type of metal or plastic work needed for a project. By far a drill press is the most used tool I own. The band saw and newly added milling machine help considerably when working with aluminum and plastic parts for enclosure panels.



The parts rack is the goto place for components. Keep everything you have organized so you spend less time looking for components and more time actually working on designing and assembling!




Brad - Sep 17th 2010, 10:24 PM

NOAA APT Reception Using an Icom + Quadrifilar Helix Antenna Part III

This post is way overdue, but here it is anyway as reviously I have talked about NOAA APT reception here and here.This past June 5th was the Ann Arbor Mini-Maker Faire where this year we demo'd real time APT Reception throughout the day. I had brought my homemade quadrifilar antenna that I made a few years ago, along with my ICOM IC-R7000 receiver, Mini-Circuits ZFL-1000LN low noise preamplifier, computer running WXtoImg which is my favorite APT decoding software, plenty of LMR-400 low loss cable, and an Agilent E3611 power supply to power the preamp.

Setup was ideal with the antenna being mounted outside the building we were in with an almost completely unobstructed view of the sky. The pass list was nice with at least 8 good passes throughout the day. One addition to my setup was that the night before I threw together a serial to CIV Icom interface:

This really made all the difference to receiving APT satellites. With a general purpose receiver like the ICom (still way better than any general purpose scanner) it has less than ideal bandwidth compare to a dedicated APT receiver. With the CIV interface, WXtoImg can tune the Icom as necessary to compensate for doppler shift as the satellite passes by. It will also automatically tune to the correct NOAA APT frequency. Previously I would tune manually by watching signal strength and listening to the familiar tick-tock synchronization sounds for best quality. This course was still not perfect and led to noisy signals. With WXtoImg tuning my receiver for me, there were no issues. I still had some slight noise on the extreme ends of the signal, but it is expected when dealing with the narrower bandwidth. This resulted with near-perfect images from horizon to horizon.

I was able to get some excellent composites from the day:


Along with some good thermal water temperatures:



Here are a few raw images showing both channels (in this case visible and infrared):




These are about the best APT images you can get from a general purpose receiver, which I have been totally happy with. It would be nice to have perfectly pristine images which I have seen others make, you would just need a dedicated special purpose receiver with the necessary frequency bandwidth to receive them.

Brad - Sep 17th 2010, 9:07 PM

Social Landscape (mental vomit)

These are just some thoughts i wanted to get out somewhere. I did not edit this post, so you may contract ADD by reading it. Consume at your own risk.

Social networks face problems

Signal to noise ratio.

There is no way (easy) to filter data on your needs. I assume facebook is heading in this direction based on their recent classification of all things on their website, but twitter still relies on their archaic text search, which forces the user to consciously decided what they like (every time they look to be entertained), and search for it. They build a way to create lists (predefined ways to sort data) but seriously, who uses these? The solve for this problem would be to predict what the user enjoy (not just what bands they like, but what interests them on a core level, ie: extroverted, or introverted personality types?) which poses a different problem; how do you categorize all human interest? If you apply scope to the interest (ie music) you can classify the data (music) itself, and deliver content based on what they enjoy such as the pandora model, but even pandora requires the user to train the system. The golden ticket is to develop a system in which the users navigation and every day usage defines their interest dataset. After all, our actions are based entirely on our interests.


Interface for input.

A sale is nothing more than convincing someone your item/service is worth the exchange of their effort (be it effort as work, turned in to money, or effort in buying the item itself). I recently spent a great deal of effort (time, energy, and money) on a house. It is something that I clearly use every day, and enjoy very much. It was worth it. When purchasing an item thats worth very little (an mp3 or trinket costing less than $3), we're working on such a small scale that the money doesn't really enter in to it. The effort of filling out personal information and clicking through a payment system is tedious, and will drive people away (unless you compensate with a lower price, ie: a $0.25 mp3, which is what a lot of websites will do, however this only works on a small cross-section of people that consider that effort to be worth $2). The resolution for this is an easy checkout. Systems like Amazon and iTunes have this down to one click, which is why they are wildly popular. These websites sell a direct item or service, but a social network is no different. Instead of working with a monetary value, social networks ask for effort in its purest of forms. Currently, these systems have multiple, relatively easy methods for direct user input, however it seems they have reached their limit.

The golden ticket here, is increased payout (currency or effort) to the user. Foursquare is a system that requires users to "check in" to their location via a mobile phone application. The trade off for this effort is gaining badges (a virtual, solid asset currency) and alerting friends of their location. This system is in contrast to google latitude, which is a completely passive system (zero currency, zero effort) which rewards your user very little. There is no gain of virtual currency such as badges or points or even archival data (which can be trended, offering the user a log of places they have been, ie: effort). Another danger lesson to learn from this example is: you must have both sides of the scale. Creating a system that is 100% free (zero currency, zero effort) does not offer a sale. A trade must take place for the user to feel achievement. In summation, the trick is to create a trade, in which a users effort is worth less than the value of the item/service/data.


How to Capitalize

The goal for the company should be to make money over time, by increasing payout (virtual rewards) while attempting to charge the user a monetary value. Facebook attempts this by allowing the user to purchase virtual gifts for their friends. That reward isnt all that great, so its not a very big success. Online games such as Gunbound have been offering a free game model with purchasable shortcuts (ie: weapons that can be obtained in the game) for years. This model has not only proven itself useful, but is beginning to bleed over in to the larger markets, where games such as World of Warcraft offer special pets or items that are only available for purchase for a $10-$15 fee. Even Console games such as Modern Warfare allow users to purchase new maps to play, or even clothes that they can wear in the game. In both cases, these items do not offer a strategic advancement, yet offer a social clout or bragging rights (ie: attention).

Standing on the shoulders of giants.

To the new developer, social networking sites should be viewed as content delivery networks based on a scale of real-time to archival.

Build a system that takes advantage of the lacking in some systems. A service that archives tweets, and provides badges base on keywords, retweets, or application usage. The badges and or point system would be the reward, but the input is passive, which is 100% free. This poses a problem. We need to create a small amount of work so we have a sale. We can force our users to work (farmville: your plants are dieing), nag our users into working based on new users (mafiawars: your friend needs your help in a mob fight), or create a environment in which your rewards are not just a horde of collected trinkets, but a full currency in which they can be traded. The only problem with that is you are offering your users a get rich quick scheme (by retweeting over and over to gain points).

(this is where i began to teeter off, and get bored of my own post)

Twitter = real-time
Facebook = text:real-time, pictures:real-time/archival


Value to the user:

Attention:
- twitter
- facebook feed
- facebook photo tags

Productivity:
- Farmville: productivity (viewable as a farm) achieved through effort
- Mafiawars: productivity (viewable as stats) achieved through effort
- Online gambling: productivity achieved through risk and ability

Monetary:
- A few websites have tried to pay users for their content in the past, but no names come to mind. (mostly because they failed due to the payout being less than the effort to generate the content)

Jim - Sep 14th 2010, 9:57 AM

Maxim MAX7456 On Screen Display

While looking for a solution to display characters over video for an on screen display I came across the Maxim MAX7456. This is one easy to use chip for exactly this purpose. Using a SPI bus it is easily interfaced with a PIC microcontroller (I'm using a PIC18F2520 for testing).

I have just started playing with this chip and have discovered how easy and powerful it is to use. I have one project in mind for it that I am starting on now and will post again once it is further developed.

Brad - Mar 23rd 2010, 10:26 PM

Long Range XBee PRO XSC testing, Part 2

It has been awhile since my original post about seeing how large of a distance I can get two XBee PROs to communicate, but since coming across two nice 902 - 928Mhz ISM band 9 element yagi antennas I figured it was time to give it a try.


My plan is to mount two XBee PRO XSCs each to one of the yagis mounted on tripods. A small ttl to serial interface will be needed at each end which will allow interfacing to laptops. These setups will need to be as portable as possible. With each setup I will be able to set them up easily at any location (the tripod / antenna / XBee and interface, along with a laptop will be the only items needed) and test signal strength and communication using the XBee X-CTU application.


I finished the first ttl to serial converter tonight, only one more to make:




The final step will be to find two locations that are line of sight and up to 15 miles apart using topographical data. 15 miles is a long way, so I will be starting with a five mile distance. As soon as it warms up I will be giving the range test a try. I'm hoping to reach the 15 mile range Digi states that these modules are capable of, but even further would be better. :D

Brad - Feb 24th 2010, 12:10 AM

Using a hard drive spindle motor for projects

I was recently staring at a pile of 15K RPM SCSI drives that had gone bad at work. I have always admired the build quality of these drives, the fact that they can spin at 15000 rpm without failure for years is amazing. I was curious if the platter spindle motors would be useful to use in any type of projects, so I tore a couple drives apart and pulled the spindle motors out of them.


These spindle motors are basically a small three phase motor. My initial assumption to drive them was that you would need to provide each phase a voltage pulse in sequence to create rotation. Looking at a drive with my scope I could see that this was definitely not the case. The waveform on each pin was extremely complex, actually so complex that all of my Agilent and Tektronix digital scopes had a hard time capturing the waveform. My best success in capturing was with my Tektronix analog scope. The waveform to one of the phases can be seen here:


This shows again how as awesome as digital scopes are, sometimes an analog scope can provide a better picture of the waveform you are trying to see. :)

To drive this motor, I wanted to see if I could get it spinning as fast as possible with the minimum amount of circuitry simply by pulsing the three phases in sequence. I chose a pic 18F4520 as the controller and was driving each phase using a TIP31C power transistor. Initially I was using a ULN2003 to drive the phases, but found the current consumption from the motor was higher than I would have liked risking damage to the ULN2003. This motor is definitely harder to drive than a typical stepper motor.



When initially starting up the motor, you need to start the pulses at a slow rate. I found that pulsing each phase at about 20Hz (1200 rpm) was slow enough to get the spindle rotating.



Once initial rotation is established you can begin decreasing the delay between pulses to increase the spindle rotation speed. Driving the motor with a square wave, I am able to reach speeds just over 100Hz (6000 rpm) before the motor begins decreasing speed.

At this point my pulses begin to overrun each other causing speed to decrease as each phase is on consecutively. Decreasing the pulse width doesn't help either as the decreased pulse width doesn't provide enough current to each winding to keep the motor running. I would like to try driving it with sine waves, or that complex waveform that the original controller generates, but 6k rpm is pretty good for the minimal circuitry required. Not bad for about an hour worth of work anyway.


I found that placing the platters back on the spindle acted as a flywheel which helped the motor maintain smoothness being driven by the pulses. To control the speed, I used an adjustable resistor to provide input into one of the adc inputs on the pic. This in turn adjusted the pulse width of the motor. Here is the code to make it spin:



#pragma config WDT = OFF

void delay1(int result1)
{
result1 = result1 / 20;
if (result1 <= 30)
{
result1 = 30;
}
Delay1KTCYx(result1);
}
void delay2(int result1)
{
result1 = result1 / 12;
Delay1KTCYx(result1);
}

void main (void)
{
int result1;
TRISB = 0x00;
while (1)
{
OpenADC( ADC_FOSC_4 & ADC_RIGHT_JUST & ADC_4_TAD, ADC_CH0 & ADC_INT_OFF, 15 );
ConvertADC();
while( BusyADC() );
result1 = ReadADC();
CloseADC();


PORTB = 0b00000001;
delay1(result1); //big
PORTB = 0b00000000;
delay2(result1); //short
PORTB = 0b00000010;
delay1(result1); //big
PORTB = 0b00000000;
delay2(result1); //short
PORTB = 0b00000100;
delay1(result1); //big
PORTB = 0b00000000;
delay2(result1); //short
}
}




Next I plan creating a simulated sine wave with the pic to try to obtain higher speeds and smoothness replicating what the hard drive controller circuity does. I would like to look into the pulses generate by the actual hard drive controller as well to get a better understanding of how it can reach speeds of 15000 rpm.

Brad - Feb 4th 2010, 9:33 PM

Updates and new serial VFD modules

I'm finally moved in the new place, unfortunately there has been a lot of 'home things' that needed attention that have pushed back my electronic and software projects. I have been setting up my benches and unpacking my equipment this week in the new basement work area which I am very excited about. I should actually be able to start getting back into things this coming week.

Today my new serial VFDs showed up which has me pretty excited:



They are two line by 20 character display with both an 8 bit 5v parallel and up to 19200bps serial interface. Vacuum fluorescent displays just have a nice glow to them that contrasts the typical look of an LCD display you see today. I plan on using one as a primary display interface for my CPU project among other things.

Brad - Jan 7th 2010, 8:29 PM

Moving day, projects on hold

The downturn in the economy has created some amazing deals in the housing market around me. Because of this I have purchased a new home and will be moving next week. This will of course put my projects on hold, I definitely have a lot of packing to do...

The really good news is that my new home has a huge basement which will allow me to have much more room for my current cluttered work area. :D



Brad - Nov 18th 2009, 9:42 PM

Recovering a HP 16500B Logic Analysis System From a Failed Hard Drive to a CompactFlash Drive.

In a recent auction I purchased two HP16500B logic analysis systems and one HP16500A system for pretty much next to nothing which had me very excited. I have been looking to upgrade from my current 1630D logic analyzer to something a little more powerful. My 1630D has been excellent and has worked perfect for many tasks, but I have been finding that I have needed a more powerful analyzer with a lot more memory depth for some recent hardware hacking projects i have worked on. I have wanted to buy a 16500B system as their prices are reasonable, but the hard drives that they use have scared me. These hard drive based systems are ticking time bombs. Once it's disk fails the device is useless unless you have the original system boot disks for it and a working floppy drive.



The price of these three systems I bought was next to nothing, and having local pickup as an option saved me a ton in shipping as these devices are by no means small or light. So even if they were all dead I wouldn't be that upset. Upon arrival home and powering them all up, one of the three worked. The 16500A has a power supply issue and will be looked at soon. I was really interested in the two 16500B systems which one worked perfectly while the other had the common 'HARD DISK FAILURE' error upon boot indicating a dead hard drive. Luckily both of these systems came with a full (unopened) floppy disk set of the system software which lets me boot the system with the failed drive from the floppy. While I was able to successfully boot the system, unfortunately many of the modules in it have been upgraded which my disk set didn't support leaving these feature modules useless.

These systems use a Quantum PI16A011 hard drive of 170MB capacity (at least both of mine did, later earlier or later models may have had different disks). Now while I probably had a box of these drives 10 years ago or so, I have since thrown them all away. I figured purchasing one would be easy but the only similar ones I found on eBay the sellers wanted a premium for them because they were 'vintage'. Whatever, I'm not paying you $40 for a 15 year old hard drive that will probably just fail again. Looking for a more permanent solution I decided to give a Compact Flash card a try in the device.

CF cards have the cool ability to mimic a hard drive in CHS mode ( cylinder / head / sector) . I have saved many failed firewalls and other embedded devices by replacing their failed hard drives with a CF card using a CF to IDE adapter card. You can find these adapter cards for around $5 to $10.

To get the data onto the new system I considered pulling the good drive out of the working 16500B and throwing it in a linux machine along with the CF card IDE adapter. I could then clone the disk using the 'dd' command to the CF card making an exact copy. Since I had already backed up all the data from the working 16500B to my network in fear the the working one would die, it was easier for me to just ftp this backup data over to the failed system.

Here is how I was able to recover my 16500B system with the failed drive by replacing it with a CompactFlash card:

1. I booted the good working system and configured the network interface for an IP on my network. This allowed me to ftp to the 16500B, logging in with the user 'control' and no password. I then copied over all files on the 16500B system via ftp get to my local computer. I now had a backup of all of the system software for safe keeping. (Note: If using an ftp application such as LeechFTP, or any other that allows threaded ftp functionality, make sure only one thread runs at a time. Trying to transfer more than one file at once will cause the 16500B to lock up) Note, Note! If you have a 16500B, back up it's software to your network! When that drive fails you will need this data to recover.

2. I purchased a CompactFlash to IDE adapter to use in the 16500B with the failed disk. I had to try several of them before I found one that worked with the 16500B. (Buy a quality one, not a cheap Chinese one. Make sure it also has a jumper for master/slave configuration and set it to Master).

3. Buy a CompactFlash card and place it in the adaptor. I used a 64MB card in my 16500B successfully. These cards follow the basic CHS (cylinder / head / sector ) format of older hard drives so it works fine. Avoid cards larger than 256MB as the 16500B may not recognize them ( I haven't tested, just my assumption. I do know for sure that my 64MB card works perfect).



4. Place the adapter in the 16500B with the CF card installed. You will need to come up with your own mounting system to hold the new CF adapter in place where the hard drive was located. Connect the IDE cable and power connector to the adapter. Make sure it doesn't short out to the chassis ground.



5. Power on the 16500B and boot it via the system floppy disk. During boot, it will still report the 'HARD DRIVE FAIL' error message, this is normal.

6. In the 'system' menu, select 'hard disk' then select 'format' and press 'execute'. It will prompt you twice to confirm and format within a few seconds. If you have any errors here try a different CF card or adapter. Again, I had to try a few different ones to find one that worked.

7. Configure your 16500B's network adapter for a free ip on your network. Place an AUI media adapter on the 16500B and hook up to your network. It now should be pingable from another computer.



8. FTP to the 16500B's ip and login with user 'control', no password. You should login successfully. Now copy over all of the HP16550B's /system files from your backup to the 16500B with the CF card. If your CF adapter has an LED activity light, it will be blinking showing the data is indeed being copied. This may take up to 15 minutes to complete. If you only have the backup floppy disks, copy them to the CF card via the 16500Bs interface. I find it much faster to copy the floppies to a computer and ftp over all the data. The /system directory is the important one you will want to copy over.

9. Once all files are copied, remove the 16500B's floppy disk and power cycle. Upon boot, the hard disk should pass the self test and it should be immediately booting. Your 16500B is now ready for use!


Now CF cards do have a limited lifespan as well in regards to the amount of writes they can do, but since my 16500B just reads the card to boot, it should last a very long time. I'll still have to compare the CF card to the hard drive to see if there is any speed benefit in boot time to using the CF card. These are very powerful and excellent logic analyzers that are well worth converting to CF cards to increase their lifetime. Remember, if you have a working 16500B system, back up it's software before it's too late!



Brad - Oct 22nd 2009, 12:38 AM

CPU From Scratch

I haven't been posting too much lately, mostly because I have taken on a very ambitious project. I have decided to create an entire CPU from scratch using only TTL based logic. This project has been in the works for about two months now and I finally have something to show for it. Because this project is going to be more in-depth than most I have dedicated an entire wiki to it which can be located at bradthx.net.


As it stands now I have an 8-bit CPU that is able to load and store instructions into address and instruction registers from memory. This proves (along with a lot of additional debugging) that my design seems solid and I can begin designing my opcode and burning it to eproms. I will update this blog when I make major milestones, but all the technical data will be located at bradthx.net.


Brad - Oct 1st 2009, 12:57 AM

Power Supply Reverse Engineering

I recently came across a crazy good deal on eBay, a Scientech SP1000 precision balance / scale. For $15 I couldn't refuse the purchase of a retail $2000 precision scale even though I knew the power supply was not included with the unit. I figured I could just reverse engineer the circuitry to create my own external power supply ( $100 retail value for the power supply from Scientech) to be able to use the scale, and after an hour on my bench my assumptions were correct.

I have wanted a simple scale for awhile now to measure the weight of rocket components to be better able to predict it's performance with my addition of GPS / accelerometer payloads. There are a ton of cheap scales on eBay (mostly from Chinese suppliers) but I knew I wanted something better and more precise than the average drug dealer who purchases these cheap items. After some research I discovered Scientech was one of the leaders in precision balances and began to search for them. I was very happy to find one for very cheap with the absense of a power supply. This is where my reverse engineering began. The scale had a 5-pin din connector for power. Knowing that this was not going to be completely simple, I tore the unit apart.

To reverse engineer it's power input, I first located it's ground pins. I did this by locating known ic's and metering their ground pins to a pin on the power connector. Also noticing large ground planes on the board helped as well. There ended up being two grounds pins on this board. Two pins down, three to go. Once the two ground pins were identified, I went for non-ground voltages. The first I discovered was a +5v line. I traced the pins back through taces from some known 7400 TTL logic ic's and was able to identify a +5v input. So one pin from the power supply provided +5v.


Moving forward I was lucky to find a label on the board indicating -12V. I followed this trace back to the power connector and identified one pin as being definitely -12V. Another pin from strictly an assumption would be +12V. I followed the traces from this last pin around and discovered they followed the -12V traces to a regulator, indicating that my assumption was probably correct. Time to power up.


After making all connections to my power supply, i powered up the +5V line first. Pressing the power button resulted in the display turning on with '-----'. A good start. I set my +12V and -12V supplies to current limit at .1A as to not burn it out if I was wrong, and slowly raised the voltage on each. Once about 10V on each was hit, the device came to life. I had a working scale with the exception of some errors on display. With some testing I discovered it was just pissed because the measuring tray did not have the full tray on it (applying a certain amount of weight). Placing an object, pliers in this case, on the scale are powering back up it turned on completely and successfully. I just now need to design a high quality linear supply for it for +5V, -12V and +12V voltages.

It's interesting to note that this small wire-wrap wire:


Weighs a whole .053 grams. :D (uncalibrated of course, so give or take +-.01 grams)

Brad - Sep 20th 2009, 12:45 AM

One sweet ADC, National Semiconductor ADC08100

I spent this weekend playing with a few analog to digital convertors I have been meaning to try out, one of which is the National Semiconductor ADC08100. The ADC08100 is an 8 bit 100Msps ADC with very low power operation. To test it out I have it clocked from a PIC18F4520 running at 40Mhz and has the output being displayed on a pair of HP hexadecimal displays. Input is coming from a small Murata pot whose voltage can be adjusted over the set range of 0V to +3V.


I plan on using these ADCs for everything from video capture in basic machine vision systems to any type of ADC that needs high speed accurate conversion that can offload the ADC operation from the microcontroller itself.

Brad - Aug 8th 2009, 11:47 PM

The Hypogeum PHP Framework

I finally finished the one to many workings of the PHP Framework (Hypogeum) I am building. The framework is geared to be simple yet efficent. Each object has a database definition that links it to one or many tables in a database (ie: a user has user info in the "user" table, and the users avatar resides in the "avatar" table). Once defining your user with one simple array, the class autolads your data and gives you all kinds of ways to manpulate that user, including ways to extend your own functions (like a login function) off of the class. Here are a few quick examples as to things you could do with Hypogeum:

// get user with the unique_id of 1 from the database
$me = $c->user(1);

// echo out the users name
echo $me->attr('username');

// write a new user name to memory
$me->attr('username', 'MyNewName');

// save the users new name
$me->save();

Now the neat part is, all of the tables are bound to the same object, so lets say you want to change the users avatar image title, but thats not in the user table! no fear. You have already told the user class that we have multiple tables.

//set new avatar title
$me->attr('avatarTtitle','This is my new title');

//save the avatar title
$me->save();

The class knows that the 'avatarTitle' field exisist in the 'avatar' table, so it writes accordingly. If you have multiple fields with the same name, its as easy as:

$me->attr('avatar.avatarTitle','This is my new title');

The framework knows to look for a period, and try to use that as a table name. If it cannot, it throws an exception. And i know what you're thinking; "what if i put $me->attr('avatar',"x'; Drop Table users;")"? Well, a few things. If you wanna break your own database, go for it. However you wont be able to use my framework. Everything that interacts with the database is made safe via php filtering, but before that it has ot match the Regex that you define for each field.

So far i bet youre saying "big deal. so you can get one user from a table". Heres a few more options:

$us = $c->user->search('Jim');
foreach($us as $key => $val){
echo $us->attr('displayname');
}

This will allow you to search the user table (on the field or fields you have mapped for string seraching) for users with name 'Jim'. Lets say you want to find all users that have the letters "er" in their last name.

$us = $c->user->search('er',true,'lastName');

The second argument in the search method tells the function to perform a SQL Like search. The third binds the search to a custom field (any field mapped to the table).

If you want to find all of the users that are between the age of 18 and 25, you simply:

$us = $c->user->searchBetween(18,25,'age');

if you want to get all of your users:

$us = $c->user->getAll();

Now heres where i get to the awesome part. You can map objects (oe to many) together. Lets say you have a table of user attributes such as "happy, sad, flaky, duck-like, etc..." and you want to map these attributes to a user. With one line of code in the user class:

// table, id to map from, id to map to
map( 'user_attrib', 'user_id', 'user_id' );

you will automaticly map those attributes when you get your user info. so now, when you get your user info, the mapped data comes with it.

$me = $c->user(1);
echo $me->attr('username')." is:\n";
foreach($me->getMapChildren() as $key => $val ){
echo $val->attr('attributeName')."\n";
}

This would output something like this:
Tendrid is:
happy
duck-like
etc...

It only outputs the attributes that match the current users user_id in the attributes table. And yes, it scales. Even if you get all of the users in the database (say you have 1000), that only requires one sql statment. Once it retrieves all of the users, it then performs a second SQL statment based on a list of all of the ids. So even with 1000 users, all having 50 unique attributes, you only have 2 sql statments. Also, if the attribute already exisist in memory (based on the unique id of the class. In this case being attrib_id) then the framework does not include that in the SQL query, instead it just maps a reference to the attribute already existing in memory. This type of read-check occures on all objects. ie:

$c->user(1);
$c->user(1);

Would only result in one SQL statment.

On top of all this sweet stuff, the framework also has an extended layout class which has a template system based on sprintf expressions. Once you define the objects html template, you can simply do this:

$us = $c->user->getAll();
foreach( $us as $key => $val ){
$val->draw();
}

This will pass the objects current parameters into the template, and output the object formatted in the HTML directly to the browser. The draw method even supports custom sub templates (such as different sizes) all of which are indavidaly set.

$us = $c->user->getAll();
foreach( $us as $key => $val ){
$val->draw(SMALL);
$val->draw(MEDIUM);
$val->draw(LARGE);
}

There are a lot more features to this framework, and i will go over them in detail in the future. The framework will eventually live at hypogeum.net but there isn't much there now :)

Jim - Jul 20th 2009, 10:35 PM

Texas Instruments TMP100 Temperature Sensor

When looking for cheap and accurate temperature sensors for the next up and coming near space balloon project, I came across this great little device from TI. The TMP100. Tonight I interfaced these little devices with a PIC18F4520 via I2C and everything is working perfectly.


Some basic info about this sensor:

Resolution: up to 12bit
Temperature range: -55 to +125 degrees Celsius

I plan on using two of these to monitor temperature, one for the inside electronics temperature and one for the outside environment temperature.


Brad - Jul 19th 2009, 12:13 AM

MORE PARTS!!!

We just put in another order to sparkfun for our upcoming rocket build out:

DC to DC converter module 6A (Count: 4)
XBee Pro 900 XSC RPSMA (Count: 2)
JST Vertical Connector (Count: 10)
GPS Micro-Mini (Count: 1)
Break Away Female Headers (Count: 10)
IC Hook Test Leads (Count: 2)
Breakout Board for MEMs Barometric Pressure Sensor - SCP1000 (Count: 1)
Break Away Headers - Straight (Count: 10)
I2C EEPROM - 256kbit (Count: 10)
Humidity and Temperature Sensor - SHT15 Breakout (Count: 1)
SMA Male to RPSMA Female Adapter (Count: 2)
900MHz Duck Antenna RP-SMA (Count: 2)
2mm 10pin XBee Socket (Count: 8)
Breakout Board for XBee Module (Count: 2)
SCP1000 Gasket (Count: 1)

Some of these things will also be used for the balloon launch that we plan on being a part of later this fall. More to come on both projects as they unfold.

Jim - Jul 15th 2009, 4:37 PM

New updates to Lyfe.net

I've implemented a few new features in Lyfe.net over the past few weeks, but I haven't really had time to sit down and clickty-clack out the hows and whys on my keyboard (until now).

Short Urls - We implemented a base 64 (as in a base 64 symbol set, not the encoding mime type), so now urls are weird looking and like 2-3 characters shorter! Thats how you can tell they're fancy. We shorten the URLs by working with a larger symbol set (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_) instead of the expected base ten set (0123456789). This makes a number like 16000000 boiled down to z2G0. We do this for the sake of twitter, and other social networks where text space is vital. We have a test example script available here. Special thanks to Jeff for sassing up the code with bit tricks.

Habla chat - I implemented Habla for those of you who have questions. Im usually available at during the day. Just look for the chat box in the bottom right corner of the screen on Lyfe.net

Social network - Auto posting to facebook and twitter is fully implemented, however there are a couple of bugs with the signup i need to work out (when i get the time).

I will have more to update on Lyfe when i get some time, Unfortunately other projects (such as peoplebacon.com) are taking up a great deal of my time. Oh, and wedding planning has a tendency to monopolize time as well.

-Jim

Jim - Jul 6th 2009, 12:23 PM

TCM8230MD Camera Images Within Reach

Last night I was able issue a start command over I2c to the TCM8230MD camera module to have it start sending images. I'm now receiving valid YUV 422 data off of the 8 bit bus along with the necessary clock and sync pulses.



This camera is definitely not the easiest thing to work with. The datasheet is not as clear I would have liked and the timings necessary for the startup sequence took a little bit longer to figure out than I had expected.


The next step will be to be to send the camera a few more control codes to lower the frame rate and resolution to get the data rate to a more manageable level for the pic. I'm hoping to capture and display my first usable image over the weekend.

Brad - Jul 2nd 2009, 1:15 PM

Quick ignite notes:

Here is a quick list i am throwing together to further inform the visitors of ignite about what it was i was muttering on about up on stage.

The radio I mentioned (which we will be using for our next launch) is an XBee Pro.

The GPS I featured in my slide was the Venus634FLPx, but you may want to go with this product because it is much easier to work with, plus it stores your GPS data onboard (so no need to record the data on your ground station).

I featured 4 cameras all of which had the time laps feature, but was told after my speech that the now famous cannon hacks can work on a broad range of cameras, and one of the features they boast is time lapse photography.

Jim - Jul 1st 2009, 11:29 AM

Ignite - Ann Arbor

Five minutes, 20 slides. What would you say?

If you had five minutes on stage what would you say? What if you only got 20 slides and they rotated automatically after 15 seconds? Around the world geeks have been putting together Ignite nights to show their answers.

Ignite was started in Seattle in 2006 by Brady Forrest and Bre Pettis. Since then 100s of 5 minute talks have been given across the world. There are thriving Ignite communities in Seattle, Portland, Paris, NYC and now Ann Arbor.

We invite you to attend the first ever, Ignite Ann Arbor event. You may learn a thing or two, or perhaps even make some good networking contacts.

To learn more about this event, head over to http://www.igniteannarbor.com

Please RSVP at: http://igniteannarbor.eventbrite.com (Space is limited!)
Twitter search term: #ignitea2

Jim - Jun 29th 2009, 3:09 PM

Custom PCB for Toshiba TCM8230MD Camera

I recently purchased a few small TCM8230MD CMOS cameras made by Toshiba from SparkFun. I plan on using the camera for some machine vision experiments as they are controlled by an I2c bus and have an 8 bit parallel video out with sync and clock. This makes them very microcontroller interfacing friendly. I plan to use a higher end PIC micro to receive the picture data and process the received video frames. The only issue is that I didn't realize how small these cameras actually are until I tried to use one.

My first attempt at soldering didn't go so well as the solder pads on this device are extremely small. Since no breakout board is available and the lead spacing on this device appears to be non-standard, I went for a custom PCB design.

I made the initial pattern in Eagle using the dimensions from the datasheet to space the solder pads for it, than drew simple traces to solder pads for two headers. I then used the instructions here to transfer the trace layout to a copper PCB.


A nice thing about this simple board is that I didn't have to worry abut mirroring the layout when printing as the orientation of the camera doesn't matter. Once the board was etched in Ferric Chloride, it looked like this:


Not bad for a quick design, there was one weak trace that was etched too much but a little solder will fix that. One note about etching, It took much longer to etch than anticipated. About 20 minutes was needed with me agitating the board for the last 10 minutes.

A reflow procedure was used to solder the camera down, I did it with an electric skillet. After reflow, a quick test showed no shorts and inspection of the pins to pads looks good. I plan on starting to use it tonight.

Now that I have made the board, I would have changed a few things. I should have made pin 1 on the camera line up with the standard pin 1 location on the board. I should have also made all the header pins along one side of the board instead of two so I could use right angle headers to mount the camera vertically. I also didn't forget to drill the holes in the board for the headers, I purchased new PCB drill bits online and they have not arrived yet. I'll just solder jumpers to the pads for now. Yes i'm impatient.

Brad - Jun 27th 2009, 2:07 PM

How not to live a life of ultimate happiness

Like a raging bull on steroids, i have blindly taken up the task of resurrecting a project of mine, long forgotten by the user base it once had. Lyfe.net was once a very involved vice of mine that monopolized my time to such a degree that i lost sleep due to hallucinations about the project going awry. I will use this blog to illustrate a great deal of mistakes i made in the past, and a personal road map as not to repeat them.

Welcome to my self inflicted blight.

Entry:
My journey started long ago, sometime in January of 2004. I had just purchased my first camera phone (a Nokia 3650; the first camera phone released in North America) and wanted nothing more than to send images directly to my already established blog of daily insanity (neverendingdoom.com). Long story short, i wrote some code, and got it working. Soon after, my blog readers expressed interest in a service so that they could do the same. After some more code pounding, Lyfe.net was launched some time in early 2006. Users could sign up, and send pictures directly to Lyfe.net, or Myspace.

Decay:
As Lyfe.net became more popular, i began to create new features. I was under the impression that people wanted functionality out of a service, (which i now know to be total bullshit. want proof? how many assholes gave a green beer to each other, or threw a snowball at their friends on Facebook vs the people that actually use any of the advanced applications? the numbers are staggering) The first feature i wrote in was a survey application that allowed the user to create a series of questions, then put the survey on their Myspace profile. Once you took the survey, it would save all the answers and show you who your answers were most like. This application failed. In my opinion, it was totally bad ass. I think 6 people created surveys, and a total of 15 people took them. A total flop. So then i moved on to creating a game out of the picture aspect of the website. There was a weekly scavenger hunt to be launched that anyone could join. I was to design the first one, and the person who found all the items in my list and sent them to Lyfe.net first won. Their prize was the ability to design the next scavenger hunt. It was a great idea (and it may even work today) but nobody jumped on board. I equate this mostly to the fact that camera phones were still very early, and people commonly forgot they had the option of taking pictures with their phone. My next goal was to work video support into Lyfe.net, but when i asked my user base for videos to test with, i only received one. I ceased all development on the project the next day.

Resolve:
About a year ago i came up with a fancy idea to implement groups into Lyfe.net. I planned out the implementation, but was pulled away for another project. But now, 5 years after my initial code was written, i have started development yet again on the Lyfe.net project. I have wrangled the other two unfortunate souls i commonly called on for help with the project to put some time and effort into resurrecting this project. Perhaps Lyfe.net was before its time. Perhaps the idea is a total failure and I’m a jackass for not letting it die off, but everyone needs a hobby.

Jim - Jun 24th 2009, 5:42 PM