<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8387508194324684167</id><updated>2011-08-03T09:46:01.433-07:00</updated><category term='simulation'/><category term='microcontroller'/><category term='rebate'/><category term='ashley'/><category term='nerd'/><category term='customer service'/><category term='furniture'/><title type='text'>ActionPhoto</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://actionphoto97.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://actionphoto97.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>SG</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8387508194324684167.post-3222672040337978682</id><published>2010-08-09T17:54:00.000-07:00</published><updated>2010-08-09T18:27:11.697-07:00</updated><title type='text'>First Surface Mount Soldering Attempt</title><content type='html'>Last Friday or Saturday, I received the final tools I needed to attempt the surface mount soldering as taught by the tutorial at &lt;a href="http://freetronics.com/"&gt;freetronics.com&lt;/a&gt;.  Today, I received two SOIC14 ATtiny44 chips to attempt to solder onto an &lt;a href="http://adafruit.com/"&gt;Adafruit&lt;/a&gt; Arduino protoshield.  Pictured below is an ATtiny44 on my finger to give perspective.&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qg-DwrA9RQw/TGCjy-kYnXI/AAAAAAAAACo/gAIDz6dU1zw/s1600/_MG_3915.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://2.bp.blogspot.com/_qg-DwrA9RQw/TGCjy-kYnXI/AAAAAAAAACo/gAIDz6dU1zw/s400/_MG_3915.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5503578840831139186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I squirted the syringe of solder paste on the board and tried to line up the chip.  As you can see by the image below, I didn't get things lined up quite right.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qg-DwrA9RQw/TGCjlu59SXI/AAAAAAAAACg/Fp5oh7sTVnY/s1600/_MG_3914.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 267px; height: 400px;" src="http://2.bp.blogspot.com/_qg-DwrA9RQw/TGCjlu59SXI/AAAAAAAAACg/Fp5oh7sTVnY/s400/_MG_3914.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5503578613288356210" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I wasn't aware that I hadn't gotten the chip lined up before I put it in the oven.  In fact, I wasn't aware until I saw the picture.  Luckily, the oven sucked the chip right onto the pads.  The only thing was that I apparently globbed a little too much paste in a couple of areas.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qg-DwrA9RQw/TGCkIH72gSI/AAAAAAAAACw/fvLJkN2CYxY/s1600/_MG_3917.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 266px; height: 400px;" src="http://1.bp.blogspot.com/_qg-DwrA9RQw/TGCkIH72gSI/AAAAAAAAACw/fvLJkN2CYxY/s400/_MG_3917.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5503579204122738978" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Though the picture is out of focus, you can see big solder bridges across a set of pins on each side.  Solder wick took care of the problem, so I could test.  After figuring out that I was misreading the pins on the proto shield and rearranging the wires, I was able to hook up my USBTiny and read the chip type.  The chip reported correctly!  I was able to upload a simply blinky LED program and blink and LED.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qg-DwrA9RQw/TGCqSNbuCjI/AAAAAAAAAC4/eU3fVs_n044/s1600/_MG_3918.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://1.bp.blogspot.com/_qg-DwrA9RQw/TGCqSNbuCjI/AAAAAAAAAC4/eU3fVs_n044/s400/_MG_3918.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5503585974467037746" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At this point I'm confident that I can do surface mount soldering.  However, I consider my first attempt a qualified success because I had to use solder wick to remove excess solder.  Now I'm ready to design a new board using surface mount chips!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8387508194324684167-3222672040337978682?l=actionphoto97.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://actionphoto97.blogspot.com/feeds/3222672040337978682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8387508194324684167&amp;postID=3222672040337978682' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default/3222672040337978682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default/3222672040337978682'/><link rel='alternate' type='text/html' href='http://actionphoto97.blogspot.com/2010/08/first-surface-mount-soldering-attempt.html' title='First Surface Mount Soldering Attempt'/><author><name>SG</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qg-DwrA9RQw/TGCjy-kYnXI/AAAAAAAAACo/gAIDz6dU1zw/s72-c/_MG_3915.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8387508194324684167.post-121839617784594108</id><published>2010-06-19T13:49:00.000-07:00</published><updated>2010-06-19T14:51:11.291-07:00</updated><title type='text'>Taking Forever to Fix the Garage Door Opener Pt. 2</title><content type='html'>In Part 1, I admitted several of my failures, at least one of which wasn't very compatible with the boards I was using from Radio Shack.  I also noticed that my soldering skills seemed much better when I was soldering on a Printed Circuit Board rather than a prototyping board.  I recently purchased a copy of &lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=9613"&gt;Practical Arduino&lt;/a&gt; which gave me some ideas on how to solve a couple of other challenges I had with other projects.  My main frustration with the introductory chapter was that it didn't give any good tips on soldering using a prototyping board.  What I did find was a rather &lt;a href="http://www.freetronics.com/pages/surface-mount-soldering-with-a-toaster-oven"&gt;cool tutorial on surface mount soldering&lt;/a&gt; written by the author.  That tutorial looked even easier than what I was doing with through the hole soldering.  It was also the final push that I needed to try having my own printed circuit board created.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The design of my board is really quite simple (even though I couldn't get it right).  I shared part of the schematic in &lt;a href="http://actionphoto97.blogspot.com/2010/06/taking-forever-to-fix-garage-door.html"&gt;Part 1&lt;/a&gt;, that is, the screw up trying to create an inverter with an NPN transistor.  Here is the whole schematic:&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qg-DwrA9RQw/TB0xE8crscI/AAAAAAAAACA/txoKAl4Zy0E/s1600/Screen+shot+2010-06-19+at+4.04.16+PM.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 239px;" src="http://2.bp.blogspot.com/_qg-DwrA9RQw/TB0xE8crscI/AAAAAAAAACA/txoKAl4Zy0E/s320/Screen+shot+2010-06-19+at+4.04.16+PM.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5484593882222801346" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is actually the second iteration of the schematic.  The first one didn't have a Vcc net and when I let Eagle autoroute the board, I at least noticed that the 7804 chip didn't have it's power pin connected to anything.  To solve that problem, I created a Vcc net and connected it to the 5v net and everything seemed to route like I wanted.  Although I wasn't very confident in the design, I shipped it off to &lt;a href="http://batchpcb.com/index.php/Products"&gt;BatchPCB&lt;/a&gt; anyway so that it might be ready when I got back from vacation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I got the board on Thursday and started soldering things up.  Here's the way it looked when I thought I was done:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qg-DwrA9RQw/TB0z33rq5fI/AAAAAAAAACI/rXIFowx5I3M/s1600/_MG_3898.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 292px; height: 320px;" src="http://1.bp.blogspot.com/_qg-DwrA9RQw/TB0z33rq5fI/AAAAAAAAACI/rXIFowx5I3M/s320/_MG_3898.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5484596956140070386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qg-DwrA9RQw/TB0z45XBYKI/AAAAAAAAACQ/6Ox5BXrm-Bs/s1600/_MG_3899.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 294px; height: 320px;" src="http://4.bp.blogspot.com/_qg-DwrA9RQw/TB0z45XBYKI/AAAAAAAAACQ/6Ox5BXrm-Bs/s320/_MG_3899.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5484596973770203298" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course, my test program didn't work and I quickly found that I had made the same mistake twice...this time in the form of a printed circuit board!  ARGH!  Well, At least that mistake wasn't too hard to fix.  I needed a resistor between Pin 12 and the base of the transistor, so I soldered one end of a resistor in the hole meant for the base of the transistor and then connected the base lead of the transistor to the other end of the resistor.  My pretty board isn't so pretty, but at least that problem was fixed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unfortunately, my test program still didn't work.  The test program adds a couple of LEDs that I just jumper from the female headers on the shield.  The test program doesn't get through the initial indication that all of the parts are there...that is, the program resets.  If I disconnect one of the LEDs, the program runs farther before resetting, so I believe that my problem is that I'm shorting power somewhere and the processor resets due to the lack of power.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My initial thought was to verify how the buttons and switches were wired.  Using a tutorial by Lady Ada, I found a completely different schematic than what I was using.  First there was a 100 Ohm resistor between the +5 rail and the Arduino pin.  Second, there was a 10K pulldown resistor between the switch and ground.  The tutorial talks about different resistor values and specifically talks about wasting power if you choose too low of a value.  I'm not sure how I would rig up both resistors, but I could at least try replacing my 1Ks with 10Ks.  I tested the ability of the Arduino to read the state of the switch using my schematic with 10K resistors instead of 1K resistors and it didn't seem to have any problem.  So I desoldered the 1Ks for each switch and soldered in 10Ks instead.  So now the board looks like this:&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qg-DwrA9RQw/TB04P8IUMMI/AAAAAAAAACY/z-SAypGHf-o/s1600/_MG_3900.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 296px;" src="http://3.bp.blogspot.com/_qg-DwrA9RQw/TB04P8IUMMI/AAAAAAAAACY/z-SAypGHf-o/s320/_MG_3900.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5484601767697330370" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It might not be easy to see, but the mess to the left of "Relays" is the resistor soldered into the hole for the base lead of the transistor.  That's why the transistor is sitting so high on the board.  The 1K resistors have been replaced by 10K resistors except for the one at the top right of the board.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With high hopes, I went back to my test program.  It didn't take long for my hopes to be dashed.  Right now I'm stuck with two problems that I haven't been able to track down.  First, the 10K resistors didn't change the fact that the program resets with what appears to be a power failure.  Second, the "down" relay is activated when the program fires up.  If I have the relay connector plugged in, the program resets almost immediately.  The relay activates and drains the power, then deactivates as the board resets.  If I don't plug in the connector for the relays, but do have the connector for the external LEDs that come on when the relays are active, the program runs longer.  The "down" LED lights almost immediately upon program startup and stays lit until the program resets...which takes a bit longer without the relay connector plugged in.  Long enough, in fact, for me to measure values coming out of the AND gate.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And this is where I have a real problem that I can't figure out.  Pins 12 and 13 are both read zero on my volt meter.  Pins 1, 2, 4, and 6 all read zero as expected.  Pin 5 reads 5 volts as expected.  Pin 3 reads 4.7 volts.  That's supposed to be the output of the AND gate supplied by Pins 1 and 2.  Even stranger is that this pin is supposed to control the 'up' relay.  Yet it is the down relay LED that is lit.  So part 3 of this mess won't be coming until I figure some things out.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8387508194324684167-121839617784594108?l=actionphoto97.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://actionphoto97.blogspot.com/feeds/121839617784594108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8387508194324684167&amp;postID=121839617784594108' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default/121839617784594108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default/121839617784594108'/><link rel='alternate' type='text/html' href='http://actionphoto97.blogspot.com/2010/06/taking-forever-to-fix-garage-door_19.html' title='Taking Forever to Fix the Garage Door Opener Pt. 2'/><author><name>SG</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qg-DwrA9RQw/TB0xE8crscI/AAAAAAAAACA/txoKAl4Zy0E/s72-c/Screen+shot+2010-06-19+at+4.04.16+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8387508194324684167.post-7805368240173258257</id><published>2010-06-18T20:17:00.000-07:00</published><updated>2010-06-18T21:11:17.154-07:00</updated><title type='text'>Taking Forever to Fix the Garage Door Opener</title><content type='html'>We have a commercial garage door opener that opens a 12 ft x 16 ft door on our trailer shed.  The opener failed a couple of years ago and the repair consisted of a service call and an over priced part.  When the opener failed again last year, I somehow convinced my wife that I could build a circuit board that would take over the job of controlling the opener motor and not have to pay for a service call again.  Of course, our door still isn't working.&lt;div&gt;&lt;br /&gt;&lt;div&gt;The process of creating a circuit board using a micro-controller and a couple of relays seemed fairly straight forward.  In fact, it still seems straight forward even though I have failed thus far in creating the board.  In my first attempt, I purchased an Arduino Pro Mini from Sparkfun, a simple prototyping board from Radio Shack, and various electronic components to be able to read the state of the buttons and limit switches.  The Mini has 12 holes on each side in which I soldered male header pins.  I made a little socket in which to plug the mini by soldering female headers on the prototyping board.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The garage door opener motor is controlled by switching power on one of two wires.  Which wire you switch determines the direction the motor runs and therefore the direction the door moves.  I purchased one relay for each wire, but I wanted to make sure that I couldn't activate them both at the same time.  The relays are easy to control with an output pin of an Arduino, but rather than wiring a pin to each relay, I decided to put a logic chip in between to make sure that only one relay could be active at a time.  I used pin 13 to indicate whether or not I wanted the motor to be active (HIGH means running, LOW means stopped).  I then used pin 12 to determine the direction the motor should run (HIGH means up, LOW means down).  Pins 12 and 13 are connected to an AND gate with the output of the gate driving the relay that makes the door go up.  Pin 13 is also connected to a second AND gate, but I needed to invert the value of Pin 12 before connecting it to the other input.  The output of that gate drives the relay that makes the door go down.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'll stop here to admit that I'm not an EE major, I'm a computer science major.  I'm good at programming.  Things that may be obvious to an EE major, aren't obvious to me until I screw up good!  I purchased a logic chip in a 14 pin DIP package, but I didn't want to waste the board space on an inverter chip, so I contrived a way to use a transistor as an inverter.  Again this seems straight forward, but there was some fundamental knowledge that just isn't there for me.  Even after I figured it out, I managed to make the mistake again!  Here's the diagram of what I did:&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qg-DwrA9RQw/TBw8adVFqAI/AAAAAAAAABo/As7syQY00SM/s1600/Screen+shot+2010-06-18+at+10.40.28+PM.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 273px; height: 198px;" src="http://1.bp.blogspot.com/_qg-DwrA9RQw/TBw8adVFqAI/AAAAAAAAABo/As7syQY00SM/s320/Screen+shot+2010-06-18+at+10.40.28+PM.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5484324871477766146" /&gt;&lt;/a&gt;The top line in the picture is Pin 12, the one under is Pin 13.  The idea was that when Pin 12 was high, the transistor would ground input 6.  When Pin 12 was low, the transistor would not connect the collector and emitter and the input on the gate would be high.  Unfortunately, I discovered that when Pin 12 was high, all of its current was grounded through the transistor and input pin 2 was pulled to ground.  The top AND gate would never yield a high value.  Of course, I'm getting ahead of myself because I didn't actually discover this until the second version of the board!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The first problem I had was that I couldn't get my program to upload to the Mini.  I built a simple little programming board that contained the same female header that I had built on the prototype board.  The "socket" connected the appropriate pins of the Mini to the programming header.  Unfortunately, the mini wouldn't take the program.  I still have no idea why.  So I changed gears and decided to use an Arduino Pro that I had purchased a while back.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The next thing that I have to admit is that I make stupid mistakes while I'm soldering up wires and I have to desolder and re-solder too often.  The cheap prototyping boards from Radio Shack don't stand up too well to this and the copper foil they use to connect holes peels up.  I had already moved the power supply portion of the board to a different area because I had destroyed a whole section.  Most of what I had done would have to be moved now because the foot print of the Arduino Pro is so much bigger than the Mini (as the name would suggest).  So I started a new board.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As an example of making stupid mistakes, I didn't wire the 7408 from a diagram but from trying to match the wires on the previous board.  However I screwed it up, I managed to swap one of the input pins and one of the output pins on each gate.  And wouldn't you know it, the relays didn't work!  I actually managed to desolder the wires and wire it up correctly without doing too much damage to the board.  It was then that I discovered the problem with the transistor.  By the time I got that straightened out, I was having problems with the board resetting and my connectors kept coming apart.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So I ordered polarized connectors that would clip when connected, desoldered the old connectors and soldered in the new ones.  The board looked pretty nice from the top...the bottom showed off how many mistakes I had made:&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qg-DwrA9RQw/TBxBsxfkDdI/AAAAAAAAABw/AVjJEGnij4o/s1600/_MG_3896.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://2.bp.blogspot.com/_qg-DwrA9RQw/TBxBsxfkDdI/AAAAAAAAABw/AVjJEGnij4o/s320/_MG_3896.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5484330683686194642" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qg-DwrA9RQw/TBxCq_PX_YI/AAAAAAAAAB4/l7dIbyFkPs4/s1600/_MG_3897.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://1.bp.blogspot.com/_qg-DwrA9RQw/TBxCq_PX_YI/AAAAAAAAAB4/l7dIbyFkPs4/s320/_MG_3897.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5484331752528280962" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At this point I decided to take the learning experience one step further.  I would design my own Arduino shield using Eagle and have a PCB custom made for my project. I'll relate my experience with that in part 2!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8387508194324684167-7805368240173258257?l=actionphoto97.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://actionphoto97.blogspot.com/feeds/7805368240173258257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8387508194324684167&amp;postID=7805368240173258257' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default/7805368240173258257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default/7805368240173258257'/><link rel='alternate' type='text/html' href='http://actionphoto97.blogspot.com/2010/06/taking-forever-to-fix-garage-door.html' title='Taking Forever to Fix the Garage Door Opener'/><author><name>SG</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qg-DwrA9RQw/TBw8adVFqAI/AAAAAAAAABo/As7syQY00SM/s72-c/Screen+shot+2010-06-18+at+10.40.28+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8387508194324684167.post-544112792865479270</id><published>2009-08-19T09:55:00.000-07:00</published><updated>2009-08-19T11:41:53.166-07:00</updated><title type='text'>AirSplat Customer Service</title><content type='html'>My last blog was about the great customer service we got unexpectedly from Ashley Furniture.  Unfortunately, for the last month I have had one of my worst customer service experiences.  My son ordered an airsoft gun and bio-degradable BBs from AirSplat on July 7th.  Below is an accounting of our interaction.  Note that every email exchange has the entire conversation included.&lt;br /&gt;&lt;br /&gt;7/14 - Package arrives.  BBs are not bio-degradable and the gun is missing a part.  We plugged in the rechargeable battery and set off an email to customer support:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;I think that I am missing a part the my gun. In the picture on the box&lt;br /&gt;there is an aiming device that goes on the top of the gun. It is a small&lt;br /&gt;cylinder with a small triangular cut out.  I think that it is supposed&lt;br /&gt;to be in the box and something that I attach to the gun. There were no&lt;br /&gt;separate packages in the gun's box.&lt;br /&gt;&lt;br /&gt;I also think that I was sent the wrong BB's.  I ordered biodegradable&lt;br /&gt;BB's and can find no indication on the package that these are, in fact,&lt;br /&gt;biodegradable.&lt;br /&gt;&lt;br /&gt;Thanks for your time.&lt;span style="font-family:Georgia,serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;7/15 - We are on vacation and discover that the battery charger doesn't work.&lt;br /&gt;7/16 - received this email from AirSplat customer support:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;Thank you for contacting Airsplat.&lt;br /&gt;&lt;br /&gt;We sincerely apologize for any inconveniences and are disappointed to learn&lt;br /&gt;of the difficulties you have experienced.&lt;br /&gt;If you like I can have the Optics that are missing sent out for you; the&lt;br /&gt;BB's you received were in fact not the Airsoft Elite 6mm .2g 4000 BIO BB's.&lt;br /&gt;&lt;br /&gt;The BB's sent were KSC .25g 3000 6mm, you where not charge $16.00 but rather&lt;br /&gt;$11.00 for the alternative BB's due to the fact that the Airsoft Elite 6mm&lt;br /&gt;.2g 4000 BIO BB's are out of stock.&lt;br /&gt;&lt;br /&gt;Thank you for choosing Airsplat and please feel free to contact us with any&lt;br /&gt;additional questions or concerns.&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;Notice that they offered to send the missing optics &lt;span style="font-weight: bold;"&gt;if we like&lt;/span&gt;&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;7/17 - We return home to find the above email.  We respond:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;I really wanted the biodegradable BB's that I ordered, not the standard&lt;br /&gt;BB.  Can you exchange theses for the biodegradable?  Since the ones that&lt;br /&gt;I ordered are out of stock, can B2-5000-BIO&lt;br /&gt;&lt;&lt;a href="http://www.airsplat.com/itemdesc.asp?ic=B2-5000-BIO" target="_blank"&gt;http://www.airsplat.com/itemdesc.asp?ic=B2-5000-BIO&lt;/a&gt;&gt;&lt;br /&gt;&lt;&lt;a href="http://www.airsplat.com/itemdesc.asp?ic=B2-5000-BIO" target="_blank"&gt;http://www.airsplat.com/itemdesc.asp?ic=B2-5000-BIO&lt;/a&gt;&gt; be sent instead?&lt;br /&gt;&lt;br /&gt;In addition, I have found that the charger for the battery for the gun&lt;br /&gt;doesn't charge the battery.  Can a replacement be sent?  Please send the&lt;br /&gt;missing Optics for the gun as well.&lt;br /&gt;&lt;br /&gt;Thanks&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;Yes we want the missing optics, that was one of the two reasons we contacted them about the order.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;7/20 AirSplat's response:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;pre&gt;You actually received what you had ordered. These BBs are in fact&lt;br /&gt;biodegradeable, but are not marketed as such since they take several years&lt;br /&gt;to degrade as opposed to several months.&lt;br /&gt;&lt;br /&gt;Please feel free to contact us with any additional questions or concerns. &lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;Are you kidding me?  I wonder if that logic would work with a "90 days - same as cash" deal!  Notice that they don't even acknowledge the problem with the battery charger or the Optics. So now I'm really aggravated, as my next email shows:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;7/22 &lt;/span&gt;- It did take two days for me to respond, although if I had responded earlier, it probably would have been profanity laden:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;The BBs that were sent were substituted without permission.  We wanted the&lt;br /&gt;BBs that degraded in several months.  We wanted 4000 BBs.  We wanted .2g&lt;br /&gt;BBs, not .25g.  They are not what we wanted and we do not want to pay for&lt;br /&gt;them.  Frankly, I find the fact that it was even suggested that we received&lt;br /&gt;what was ordered was ridiculous.  You also failed to address the charger&lt;br /&gt;issue.  The charger that came does not charge the battery.  The LED on the&lt;br /&gt;charger does not light and an electrical meter test on the charger indicates&lt;br /&gt;that the charger is not functioning.  Finally, the initial message also&lt;br /&gt;indicated that a gun sight was not shipped in the original package.&lt;br /&gt;Airsplat's first response indicated that the sight could be sent if we&lt;br /&gt;desired.  We replied that we would like the sight sent, but have not&lt;br /&gt;received an indication that it was ever shipped.&lt;br /&gt;&lt;br /&gt;I noticed a recent Airsplat tweet touting 0% negative feedback on Amazon for&lt;br /&gt;the past 30 days.  With customer support like this, I would not expect that&lt;br /&gt;string to last much longer.  I will, however, give you a chance to fix this&lt;br /&gt;before breaking the string myself.&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;7/22 - AirSplat's Response:&lt;blockquote&gt;&lt;pre&gt;Dear Customer,&lt;br /&gt;&lt;br /&gt;We will have the Airsplat Bio BBs as well as a replacement charger sent out&lt;br /&gt;to you shortly.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Please feel free to contact us with any additional questions or concerns.&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;Well, apparently being aggravated gets results!  We wait for the shipment, although we don't really hold out any hope that they sent the missing sight.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;7/29 - Shipment received.  Bio-degradable BBs and a fancy new charger!&lt;span style="font-style: italic;"&gt;  No gun sight.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now I'm at least somewhat satisfied, and I figure I'll get back to them on the missing sight.  The battery doesn't seem to charge right and we have problems with the gun.  We get it to work intermittently but by 8/11 it won't function at all.  AirSplat has a 30 day return policy, but this process has been so painful, I mistakenly believe it has been longer.&lt;br /&gt;&lt;br /&gt;8/11 - We again contact AirSplat support:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;Thank you for sending the replacement charger and BBs.  However, the first&lt;br /&gt;thing that was requested was a sight that was supposed to be with the gun.&lt;br /&gt;You offered to send the sight, but that seems to have been dropped while&lt;br /&gt;handling the other issues.  You can find the sight issue at the bottom of&lt;br /&gt;this email thread.&lt;br /&gt;&lt;br /&gt;Unfortunately, I am having trouble with the gun.  The charger seems to be&lt;br /&gt;charging the battery (a volt meter indicates that the battery has power),&lt;br /&gt;but the gun will not fire.  Is there any way the gun can be exchanged?&lt;br /&gt;Although we are beyond the initial 30 days, we did not have the ability to&lt;br /&gt;test the gun because of the charger issues that were only resolved a couple&lt;br /&gt;of weeks ago.&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;Ok, my sense of time stinks, but they can see from the email history that we have only had the working charger for two weeks:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;8/12 - AirSPlat's Reply:&lt;blockquote&gt;&lt;pre&gt;Hello&lt;br /&gt;&lt;br /&gt;We are thankful for your patronage with AirSplat.com!&lt;br /&gt;&lt;br /&gt;We are sorry to hear of the troubles you have experienced and sincerely&lt;br /&gt;apologize for any inconvenience it may have caused. It is never our&lt;br /&gt;intention to inconvenience our customers.&lt;br /&gt;&lt;br /&gt;Regarding your concern, at this time the only offer we would be able to&lt;br /&gt;offer is to have you send the gun in for repair and not charge you the&lt;br /&gt;service fee because the warranty has expired.  Please advise.  Concerning&lt;br /&gt;the optics that you were missing I believe you are inquiring about the&lt;br /&gt;EG706, correct?  If this is the case your gun does come with a sight.&lt;br /&gt;&lt;br /&gt;Trust that at Airsplat.com, we take pride in working closely with our&lt;br /&gt;customers to ensure the highest level of service. Please let us know if&lt;br /&gt;there is anything else we may assist with.&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;Great, you've told me what we discussed in the first email....the gun is supposed to have a sight.  It's at least they aren't going to charge for the repair right...but wait, how do we go about getting the repair?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;8/15 - Another email to AirSplat:&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;pre&gt;Considering that we were unable to test the gun due to the charger issue, I&lt;br /&gt;am disappointed that you are strictly adhering to the 30 period while&lt;br /&gt;knowing that it was impossible for us to test the gun without a charged&lt;br /&gt;battery.  However, if that is our only recourse, please send us the&lt;br /&gt;information on how to go about sending the gun in for repair.&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;8/17 - AirSplat's response:&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;pre&gt;Thank you for the update.&lt;br /&gt;&lt;br /&gt;Repair fees are as follows for various models:&lt;br /&gt;&lt;br /&gt;1. Full size spring           $29.95&lt;br /&gt;2. Full size gas               $39.95&lt;br /&gt;3. Full size electric          $49.95&lt;br /&gt;&lt;br /&gt;Repair fees quoted are for inspection and minor repairs.  Major parts or&lt;br /&gt;replacement parts will be additional.&lt;br /&gt;&lt;br /&gt;Please feel free to contact us with any further questions.&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;Oh, and I forgot to mention that each response from AirSplat has this attached to the bottom:&lt;br /&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;pre&gt;PLEASE EMAIL FROM REGISTERED EMAIL ADDRESS WITH AIRSPLAT.COM &amp;amp; RETAIN ALL&lt;br /&gt;EMAIL HISTORY WITH YOUR ORDER # IN THE SUBJECT LINE TO PREVENT DELAY.&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;I have yet to figure out why they want all email history retained, because they obviously don't read it!  It did make it easier to create the timeline, though.&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8387508194324684167-544112792865479270?l=actionphoto97.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://actionphoto97.blogspot.com/feeds/544112792865479270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8387508194324684167&amp;postID=544112792865479270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default/544112792865479270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default/544112792865479270'/><link rel='alternate' type='text/html' href='http://actionphoto97.blogspot.com/2009/08/airsplat-customer-service.html' title='AirSplat Customer Service'/><author><name>SG</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8387508194324684167.post-5596422957106670818</id><published>2009-07-07T20:03:00.000-07:00</published><updated>2009-07-07T20:34:48.948-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rebate'/><category scheme='http://www.blogger.com/atom/ns#' term='ashley'/><category scheme='http://www.blogger.com/atom/ns#' term='customer service'/><category scheme='http://www.blogger.com/atom/ns#' term='furniture'/><title type='text'>Ashley Furniture Customer Service</title><content type='html'>Earlier this year, my son wanted to change his room around.  Part of the redecoration involved buying a love seat.  We found that we liked a couple of different ones.  Turned out the more expensive one was going to be cheaper if you factored in the great grocery rebate they offered.  If you spent over $500, they gave you $500 in free groceries.  The more expensive seat was just over $500 and the cheaper one was just under.  What a deal!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The catch is that you get it $50 a month, and they gave you the $50 as a gift card after sending in $100 worth of grocery receipts.  Still, it made sense, and we got the better piece of furniture.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Over the next three months, we submitted $300 worth of receipts, but never received a gift card.  A week ago, we got an email from the company managing the rebate program saying that they were filing for bankruptcy.  In the email, they said not to contact the company from whom we received the rebate as they had no control over the situation.  We figured we had lost the $500 and didn't contact Ashley.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Today we received a letter from Ashley Furniture.  The letter acknowledged that the company managing the program had declared bankruptcy.  They also said that they had found another company to manage the program, and that they would honor the rebates.  I was impressed!  Not only were they honoring the program, they actively sought us out rather than us having to contact them to ask about it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's easy to find negative things on the web related to companies.  It's easy to complain.  I certainly haven't ever published anything positive about a retailer.  But this seemed to be beyond good customer service.  I hope that someone who is looking what kind of company Ashley is will find this.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8387508194324684167-5596422957106670818?l=actionphoto97.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://actionphoto97.blogspot.com/feeds/5596422957106670818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8387508194324684167&amp;postID=5596422957106670818' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default/5596422957106670818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default/5596422957106670818'/><link rel='alternate' type='text/html' href='http://actionphoto97.blogspot.com/2009/07/ashley-furniture-customer-service.html' title='Ashley Furniture Customer Service'/><author><name>SG</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8387508194324684167.post-5396623871315650440</id><published>2009-03-05T19:17:00.000-08:00</published><updated>2009-03-05T19:47:07.963-08:00</updated><title type='text'>Nerd Kit Week 2</title><content type='html'>Well we did get the stoplight operational and we learned some things along the way.  The final lesson we learned is that the connections on the solderless breadboard are unstable.  More on that later.  The first step was to verify that the clock interrupt was working correctly.  The ATmega168 has a couple of built in timers that essentially operate independent of the controller CPU.  It has lots of options and can be used to generate PCM patterns on the controllers output pins to create a clock signal.  Very useful, but got in the way of understanding what I wanted to use it for.  Eventually, we figured out the configuration to just use it to interrupt our program.&lt;br /&gt;The oscillator runs at 14.7456 MHz.  That means it generates a clock tick 14, 745, 600 times per second.  The timer can be set up to increment an internal 8 bit counter every clock tick.  When the counter wraps around (256 ticks), an interrupt occurs and the controller executes the interrupt routine specified by the timer overflow vector.  That would mean 57,600 interrupts per second.  That's exactly 57,599 more interrupts per second than we needed.  Luckily the control register for the timer provides a setting such that the timing can be divided by some amount.  By setting up the timer to only increment its counter every 256 clock ticks, we get our interrupts down to a managable 225 times per second.  Using that method and a simple 8 bit integer, I can accurately determine when a second has passed.&lt;br /&gt;The idea behind our timer was that we had a global value that determined how many seconds were left in whatever cycle we were waiting on.  The interrupt would simply decrement that value every second until it reached zero.  To prove to myself that the timer was functional, I added an LED to one of the output pins on the controller.  If the global timer value was odd, I'd set the pin to high, thus lighting the LED.  If the global timer value was even, I'd set the pin low, turning off the LED.  After discovering one bad bit combination that I had put in the control register, I did indeed get the LED to flash every other second! Now on to the switches.&lt;br /&gt;The switches turned out to be more confusing.  We didn't actually have weight sensing switches, but we did have a 7 position dip switch.  The NerdKit came with a project by which you could do binary arithmetic by inputting the number through the position of the switches.  In their example, they hooked up the dip switch to ground.  So, I hooked up my dip switch to ground.  Much to my dismay, once I read the value of the pin, the value seemed to disappear.  That made the program think that the switch had been flipped off almost as soon as it was flipped on.  Eventually, I randomly tried connecting the switch to +5v instead and the value stayed.  Another problem solved, but not really understood.  When the switch was connected to ground, the program would light the appropriate green LED, but would almost immediately change to yellow and start the timer.  At least the cycles were working right!  Once the switch was connected to +5v, the program waited until I flipped the switch back before "pretending" that there was no longer traffic on the sensor.&lt;br /&gt;The program basically worked right the first time.  That is, I guess it did, because we saw it do the right things in all of the scenarios we through at it. But I can't get it to repeat.  One of the things we did was to display what was going on, including the timer value, on the LCD display.  Unfortunately, that doesn't seem to work consistently either.  And I didn't write the code for that!  What I've discovered is that the connections are "brittle" and the program flakes out when the connections aren't quite right.  Especially the power connection itself.  So that's led me to soldering.  I've purchased a printed circuit board (PCB) that's especially designed for the ATmegax8 series.  I'm still waiting on parts, but eventually, we are going to wire/solder our traffic example so that the connections are stable.  I'll report back when we finish.  Once that's done, we are going to create the LED marquee display that got me interested in this in the first place.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8387508194324684167-5396623871315650440?l=actionphoto97.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://actionphoto97.blogspot.com/feeds/5396623871315650440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8387508194324684167&amp;postID=5396623871315650440' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default/5396623871315650440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default/5396623871315650440'/><link rel='alternate' type='text/html' href='http://actionphoto97.blogspot.com/2009/03/nerd-kit-week-2.html' title='Nerd Kit Week 2'/><author><name>SG</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8387508194324684167.post-183209704888262136</id><published>2009-02-14T06:01:00.000-08:00</published><updated>2009-02-14T15:48:46.702-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='microcontroller'/><category scheme='http://www.blogger.com/atom/ns#' term='simulation'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>NerdKit Stoplight Project, Week 1</title><content type='html'>&lt;style&gt;table, tr, th, td { border: 1px solid black; } &lt;/style&gt;&lt;br /&gt;Unfortunately, I had to leave town on business before the NerdKit arrived.  Marshall and I had been discussing the Finite State Machine aspect of the traffic light controller.  I put together a simple one just based on timers.  It only had a handful of states and the only event that triggered a state change was when the timer expired, which we represented using TX. Our simulation is to be based on the temporary traffic signals that are put in place when they rebuild a bridge and restrict traffic to one lane.  The signal allows traffic from both directions to share a single lane to cross the bridge.&lt;br /&gt;Our "requirements" are to include weight sensors at each end of the bridge to signal the controller when traffic is waiting to cross the bridge.  We decided that we wanted the traffic to have a maximum wait time of 1 minute.  We also decided to assume that it took 15 seconds to get from one side of the bridge to the other at the posted work-zone speed limit.  Given a 5 second yellow light, that meant that there would be a green light for a maximum of 40 seconds.&lt;br /&gt;Our initial "weightless" state diagram only cared about the position of the lights.  The valid states were INIT, GR, YR, CR, RG, RY, and RC.  The letters R, Y, and G in the those states represent the color of the light in one of each direction.  The letter C, represents a red light in one direction while we wait for traffic to clear.  Although we could have used a single RR state that would work for both directions, I was already thinking ahead to the version with weight sensors.&lt;br /&gt;On Monday morning, I made my trip to the airport.  I began to work on the FSM diagram, and quickly realized that I couldn't keep track of everything.  So I changed direction and began building a spreadsheet.  The spread sheet had four columns: &lt;span style="font-style: italic;"&gt;current-state, event, action, new-state&lt;/span&gt;.  The initial state and initial transitions are easy.  You start in the state &lt;span style="font-weight: bold;"&gt;RRNN&lt;/span&gt; which represents a red light in both directions and no traffic on either weight sensor.  In my initial attempt, there were 5 events that would cause a state transition: &lt;span style="font-style: italic;"&gt;T1, N1, T2, N2, &lt;/span&gt;and &lt;span style="font-style: italic;"&gt;TX&lt;/span&gt;.  These events correspond to the weight sensor for direction 1 indicating traffic and no traffic, repeating for direction 2, and finally the timer expiring.  So my table looked like this:&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;Current&lt;/th&gt;&lt;br /&gt;&lt;th&gt;Event&lt;/th&gt;&lt;br /&gt;&lt;th&gt;Action&lt;/th&gt;&lt;br /&gt;&lt;th&gt;New State&lt;/th&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;RRNN&lt;/td&gt;&lt;br /&gt;&lt;td&gt;T1&lt;/td&gt;&lt;br /&gt;&lt;td&gt;G1,T(40)&lt;/td&gt;&lt;br /&gt;&lt;td&gt;GRTN&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;RRNN&lt;/td&gt;&lt;br /&gt;&lt;td&gt;N1&lt;/td&gt;&lt;br /&gt;&lt;td&gt;N-A&lt;/td&gt;&lt;br /&gt;&lt;td&gt;N-A&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;RRNN&lt;/td&gt;&lt;br /&gt;&lt;td&gt;T2&lt;/td&gt;&lt;br /&gt;&lt;td&gt;G2,T(40)&lt;/td&gt;&lt;br /&gt;&lt;td&gt;RGNT&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;RRNN&lt;/td&gt;&lt;br /&gt;&lt;td&gt;N2&lt;/td&gt;&lt;br /&gt;&lt;td&gt;N-A&lt;/td&gt;&lt;br /&gt;&lt;td&gt;N-A&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;RRNN&lt;/td&gt;&lt;br /&gt;&lt;td&gt;TX&lt;/td&gt;&lt;br /&gt;&lt;td&gt;N-A&lt;/td&gt;&lt;br /&gt;&lt;td&gt;N-A&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Note that two of the events never make sense. If the weight sensor indicates that traffic is present, the event corresponding to traffic arriving isn't valid. In the initial state, we aren't waiting for a timer to signal anything, so we are simply waiting for traffic to appear. When it appears, we will give that direction a green light. The action column indicates which light and for which direction as well as "T(40)", meaning we're setting a timer for 40 seconds.&lt;br /&gt;&lt;br /&gt;Working through the table, I discovered that there were 12 states for one direction. Double that for both directions and add in the initial state yields 25 states. Thus the table consists of groups of five entries for each state. However, every group had two entries that didn’t apply.&lt;br /&gt;&lt;br /&gt;For each state, there were two “events” that really couldn’t occur, and if they did occur, they would yield the same state. For example, the state GRTN represents a Green light in direction 1, a Red light in direction 2, Traffic sensed by the weight sensor for direction 1, and No Traffic sensed by the weight sensor for direction 2. The T1 event would indicate the sensor changing from not sensing weight to sensing weight. That change cannot occur without first generating the N1 event representing the sensor changing to no weight. Further, even if the event were possible, the event would not cause a state transition as the state machine is already in the state indicated by traffic sensed in direction 1. Therefore, I changed the meaning of T1 and T2 to mean Toggle, or change in the value of the weight sensor in direction 1 and 2 respectively. I was then able to remove the N1 and N2 events and shrink the table by 50 integers.&lt;br /&gt;&lt;br /&gt;That reminds me of a time early in my Bell career when Linda Lahue made fun of me for worrying about saving a couple of bytes in a structure. I had come from a programming environment where we only had 64K of data available to us. I wasn’t used to working on a machine with a whole 32MB memory! Today, that’s tiny! Of course, on a large midrange computer, 50 bytes won’t matter, but programming a microcontroller with a small amount of memory, you had better be in the habit of maximizing your memory usage.&lt;br /&gt;&lt;br /&gt;At first, Marshall didn’t understand why the table even had rows for events that didn’t make sense for a given state. Of course, he doesn’t have any programming experience at all, so this was an opportunity to show him how we can write a very generic programming routine that is driven by the data. The first thing I noticed about the action column of my table was that there are only two types of actions listed. The first was an indication of what light was to be turned on. Although I didn’t list it in the table, there was also an implied light that needed turned off. The other type of action was setting a timer. Given that these were the only actions ever described by the table, I came up with the following structure to represent the states and transitions:&lt;br /&gt;&lt;br /&gt;struct stateEntry {&lt;br /&gt;&lt;br /&gt;uint8_t lightOn;&lt;br /&gt;&lt;br /&gt;uint8_t lightOff;&lt;br /&gt;&lt;br /&gt;uint8_t timer;&lt;br /&gt;&lt;br /&gt;uint8_t newState;&lt;br /&gt;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;Next I created an array of these structures. The array consists of groups of three of these structures, one for each of the possible events. The start of this array looks like this:&lt;br /&gt;&lt;br /&gt;struct stateEntry stateTable[] {&lt;br /&gt;&lt;br /&gt;/* RRNN */&lt;br /&gt;&lt;br /&gt;/* T1 */ { G1, R1, GT, GRTN },&lt;br /&gt;&lt;br /&gt;/* T2 */ { G2, R2, GT, RGNT },&lt;br /&gt;&lt;br /&gt;/* TX */ { NA, NA, NA, NA },&lt;br /&gt;&lt;br /&gt;/* GRTN */&lt;br /&gt;&lt;br /&gt;/* T1 */ { Y1, G1, YT, YRNN },&lt;br /&gt;&lt;br /&gt;/* T2 */ { NA, NA, NA, GRTT },&lt;br /&gt;&lt;br /&gt;/* TX */ { NA, NA, NA, GRTNX }&lt;br /&gt;&lt;br /&gt;The comments indicate the current state and the three events. Each of the values in the array has an associated #define associated with it to give it a value. The lightOn and lightOff values are bit masks corresponding to pins on the microcontroller that need to be turned on or off. Those pins will be connected to LEDs representing our traffic lights. In the real world, they could be connected to relays which would actually control the more power hungry traffic signals. The third column is defined to be the timer length for the appropriate condition. GT stands for green timer and would be defined as 40. YT is the yellow timer and is defined as 5. If we decide we want a different period of time for these lights to be on, we can change the definition instead of having to change the value in each state in which they apply.&lt;br /&gt;&lt;br /&gt;Once the table is filled in, the program becomes very simple. Assume we have functions to return an event number (0,1,2) corresponding to the events (T1, T2, TX), functions for setting the timer, and functions for turning lights on and off. The get_next_event function would figure out if the timer expired or if one of the weight sensors had changed values and return the appropriate value corresponding to the event. The main loop would then have the following logic:&lt;br /&gt;&lt;br /&gt;current_state = RRNN&lt;br /&gt;&lt;br /&gt;LOOP: event = get_next_event()&lt;br /&gt;&lt;br /&gt;index = (current_state * 3) + event&lt;br /&gt;&lt;br /&gt;entry = stateTable[index]&lt;br /&gt;&lt;br /&gt;if (entry.lightOn != -1)&lt;br /&gt;&lt;br /&gt;toggleLights(entry.lightOn, entry.lightOff)&lt;br /&gt;&lt;br /&gt;if (entry.timer != -1)&lt;br /&gt;&lt;br /&gt;setTimer(entry.timer)&lt;br /&gt;&lt;br /&gt;if(entry.newtState != -1)&lt;br /&gt;&lt;br /&gt;current_state = entry.newState&lt;br /&gt;&lt;br /&gt;goto LOOP&lt;br /&gt;&lt;br /&gt;Notice how simple the main logic is. For any given state, the set of data corresponding to the 3 possible events are grouped together. To get to the appropriate group, multiply the value of the current_state by three. This gets us to the group of three entries that correspond to the current state. Then add the value for the current event to obtain the appropriate entry for the current event. This forces the programming thought to be pushed into data. It’s not that we can’t create a buggy program, but the logic errors are mostly likely to be found in the state model.&lt;br /&gt;&lt;br /&gt;There are still some hardware dependent issues to deal with, like how to actually enable the chip to output a current on the appropriate pins, how to make the timer work, etc. Since I didn’t actually have the NerdKit with me, the best I could do was to read lots of documents while I was away. In fact, the first step when I get home is to get used to wiring the pieces together. My first program will probably attempt to use the watch dog timer (part of the microcontroller) to count in seconds and display the count on the provided LCD. Once that works, it will be a short step to getting the traffic controller operational.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8387508194324684167-183209704888262136?l=actionphoto97.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://actionphoto97.blogspot.com/feeds/183209704888262136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8387508194324684167&amp;postID=183209704888262136' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default/183209704888262136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default/183209704888262136'/><link rel='alternate' type='text/html' href='http://actionphoto97.blogspot.com/2009/02/nerdkit-stoplight-project-week-1.html' title='NerdKit Stoplight Project, Week 1'/><author><name>SG</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8387508194324684167.post-1029137327436225083</id><published>2009-02-08T14:23:00.000-08:00</published><updated>2009-02-08T15:06:37.855-08:00</updated><title type='text'>When a nerd has a birthday</title><content type='html'>Just before my birthday this year, I found an interesting article shared on &lt;a href="http://slashdot.org"&gt;Slashdot&lt;/a&gt;.  The article was a &lt;a href="http://www.nerdkits.com/videos/ledarray2/"&gt;DIY kit for an led marquee&lt;/a&gt;. The project is based on something put together by a couple of MIT students that they call a "nerd kit".  I thought it sounded like fun and asked for it for my birthday.  It seemed like something that Marshall would enjoy participating in.&lt;br /&gt;After Ruth said that she ordered it for my birthday, I looked up the parts list and downloaded a document on the micro-controller.  For a while, I felt like I was in college again.  I got really excited about working in assembler and dealing with interrupts!  I know that there are very few people in the world that can identify with that.&lt;br /&gt;The other thought that I had involved me teaching Marshall about programming.  Marshall has been asking me for a long time to teach him how to write programs.  I have tried several times to teach him Java, but every time I try to talk about things I get tangled in the circular dependencies.  I can never seem to get a foundation on which to build.  Several people at work thought it sounded crazy, but it seemed to me that the limited number of instructions on the micro-controller would make it easier to learn than Java.&lt;br /&gt;Yesterday, Marshall's bantam hockey team had two games in Decatur, a 2 hour drive.  Marshall and I sat in the back seat for the trip.  We brought a small white board and I made up a hybrid assembler language based on my college experience with the PDP-11 and what I had seen of the instruction set for the micro-controller.  In addition, we made up a magic register that would automatically decrement its value every second until it reached zero.  Another register was tied to output pins on the micro-controller.  Those pins could be used to drive LEDs.  Having this in place, we were able to write a small program that simulated a traffic light system using the LEDs.  I showed him the various registers in the CPU and how they are used.  After going through the program, he seemed to understand how it worked.&lt;br /&gt;After that, I taught him about interrupts and showed him how we could actually accomplish the magic by using a clock interrupt routine to cause a register decrement every second until it reaches zero. He felt comfortable with it all.&lt;br /&gt;Today, we had games in Springfield.  This time it was just the two of us in the car, so I wouldn't be able to draw things on a white board.  I had printed out the reference pages containing the instruction set for the micro-controller.  Marshall started looking at it and asking questions.  I was amazed at how many times he pointed out that my "hybrid" language was wrong for the micro-controller based on what he found.  At one point, he found some instructions that differentiated between signed and unsigned integers.  So we spent the rest of the trip discussing how to represent negative integers in a binary system.  I can remember two's complement giving some people fits in college, but Marshall picked it up fairly quickly.  I thought it was impressive considering we didn't have anything to write on and the only prop we had was our fingers to represent binary digits!&lt;br /&gt;On the way home, we decided that we were going to do the project where we simulate the traffic lights.  The scenario will be the situation where they close down one lane of a two lane road and share the one remaining lane via a traffic light.  To do so, I taught him about Finite State Machines.  For our next step, we're each going to design a FSM to control the signal.  Since this topic excites me, look for me to blog more about our progress!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8387508194324684167-1029137327436225083?l=actionphoto97.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://actionphoto97.blogspot.com/feeds/1029137327436225083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8387508194324684167&amp;postID=1029137327436225083' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default/1029137327436225083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default/1029137327436225083'/><link rel='alternate' type='text/html' href='http://actionphoto97.blogspot.com/2009/02/when-nerd-has-birthday.html' title='When a nerd has a birthday'/><author><name>SG</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8387508194324684167.post-4343147266352635105</id><published>2009-01-17T17:33:00.000-08:00</published><updated>2009-01-17T19:56:08.245-08:00</updated><title type='text'>A day of contrast</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qg-DwrA9RQw/SXKLK1p52xI/AAAAAAAAAAc/2y4sKTUksrA/s1600-h/Skating3.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_qg-DwrA9RQw/SXKLK1p52xI/AAAAAAAAAAc/2y4sKTUksrA/s320/Skating3.jpg" alt="" id="BLOGGER_PHOTO_ID_5292445530431544082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qg-DwrA9RQw/SXKLKgQSE6I/AAAAAAAAAAU/5m6cI1dQqJs/s1600-h/Skating2.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_qg-DwrA9RQw/SXKLKgQSE6I/AAAAAAAAAAU/5m6cI1dQqJs/s320/Skating2.jpg" alt="" id="BLOGGER_PHOTO_ID_5292445524686934946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qg-DwrA9RQw/SXKLKDDjuiI/AAAAAAAAAAM/CuWv9EbwLBo/s1600-h/Skating1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_qg-DwrA9RQw/SXKLKDDjuiI/AAAAAAAAAAM/CuWv9EbwLBo/s320/Skating1.jpg" alt="" id="BLOGGER_PHOTO_ID_5292445516848937506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Earlier today I tweeted about skating on a pond.  After several "dangerously cold" days, the ice on the pond was thick enough to support us.  All five of us went down to the pond behind Grandma's house.  Mitchell set up a line of shoes to be one goal and used the hockey bag that I carry my coaching equipment in as the other.  He added a couple of shoes and my hockey gloves to the sides of the bag to make the goals as even in size as possible.  The we played a little pond hockey....Mitchell, Ruth and Monica against Marshall and me.  It was a blast!  Ruth has a pair of figure skates, but they hurt her feet yesterday.  So today, she wore an old pair of hockey skates.   Hockey skates differ from figure skates in a lot of ways, but most significantly hockey skates don't have toe picks.  Every time she tried to use the non-existent toe pick, she fell down.&lt;br /&gt;&lt;br /&gt;While we were playing, I had a rather amazing feeling of how wonderful life was with these four other people.  Mitchell kept trying to get the puck to Monica so she could score, and Marshall let Ruth score.  As we played, all of the kids would get these big grins on their faces and everyone was having such a good time just being with each other.  When we were about ready to take our skates off, Mitchell and I raced.  I just wanted to see how much faster he was than me.  I actually was able to beat him the first time, but he was wearing my old skates so that his wouldn't need to be sharpened.  He beat me fairly easily by the third race because my wind falls off so quickly compared to his.  Then he started helping Marshall with how he took off from a complete stop.  And Marshall was a willing student!  All in all, the day was amazingly special for how simple it was.&lt;br /&gt;&lt;br /&gt;Then came the complete reverse.  On Wednesday night, we had a message on our voicemail from the mother of one of the kids who used to play roller hockey for me.  We had seen them at teacher conferences recently, and they told us a sad tale of how their son had been arrested for possession.  Now they were asking me to participate in an intervention.  First I was asked to write a letter to their son, and then I was to read it to him during an intervention.  I was given a document to read explaining the format for the letter.  It also gave me directions on what types of things to say as well as what not to say.  Section one was supposed to say that you loved them and tell them why.  Use examples through memories.  Section two was supposed to say how things have changed because of their addiction.  Section three was to ask them to accept help.  There was an example letter that was written by an addict's brother.  I hadn't been involved with the boy for many years, but his parents wanted me to be included because I had had a big impact on his life as his roller hockey coach.  It was also a time in his life where everything was going well, and they wanted to take him back to that time.  I was supposed to be at their house at 4:00 today.&lt;br /&gt;&lt;br /&gt;I got there about 5 minutes early, but they were already started.  The boy's dad met me at the door and came outside.  They had a professional to lead the intervention who had read each of the letters and ordered them so that they had the most impact.  I was to read my letter after their daughter.  When we entered the room, the boy's mom was reading her letter.  Everyone was crying, including intervention target.  That was a good thing because the whole idea was to touch something deep inside him and bring him back. &lt;br /&gt;&lt;br /&gt;Once we had all read our letters, the boy agreed to accept help.  I'm not sure that he knew it then, but that meant going directly to rehab.  They left at 7:00 tonight for Tulsa.  I discussed the situation with his mom while we were there.  Her son had gotten with the wrong crowd in highschool and hid it well.  By the time he'd graduated, he was no longer the child they remembered.&lt;br /&gt;&lt;br /&gt;I'm truely thankful for my family, even more so after seeing another family go through the pain of an intervention.  At least for them, the intervention was successful and they have hope that they will again be the family they had been.  The interesting thing was how this boy came from a good family.  There are lots of kids that I see doing things of which I don't approve, but they almost exclusively come from parents who, in my opinion, put to much emphasis on alcohol in their own lives.  This just brought out that it can really happen to anyone.  I just think that your chances are better if you teach your children by example.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8387508194324684167-4343147266352635105?l=actionphoto97.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://actionphoto97.blogspot.com/feeds/4343147266352635105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8387508194324684167&amp;postID=4343147266352635105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default/4343147266352635105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default/4343147266352635105'/><link rel='alternate' type='text/html' href='http://actionphoto97.blogspot.com/2009/01/day-of-contrast.html' title='A day of contrast'/><author><name>SG</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qg-DwrA9RQw/SXKLK1p52xI/AAAAAAAAAAc/2y4sKTUksrA/s72-c/Skating3.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8387508194324684167.post-3333124535551965858</id><published>2008-12-23T07:41:00.000-08:00</published><updated>2008-12-23T08:12:21.782-08:00</updated><title type='text'>Marshall Update</title><content type='html'>Everyone  asks about Marshall's condition.  During a hockey game on Thursday, October 17th, Marshall was hit after a whistle.  Because the play was over, Marshall had stood up and was not in position to absorb a check.  The unexpected check knocked him head first into the boards.  That  night and for the next few days, Marshall felt dizziness and headaches.  We skipped practices, and when the symptoms did not go away by the following Monday, we took him to the doctor.&lt;br /&gt;&lt;p&gt;The doctor's diagnosis was a mild concussion, and we were instructed to keep him out of hockey until his symptoms went away.  The doctor did not expect the symptoms to last long.  For the next two weeks, Marshall missed both hockey and school as he had a great deal of difficulty concentrating.  The work of trying to concentrate made his headaches worse.   After two weeks, we took him back to the doctor.  The doctor said everything was normal and that some people heal more slowly than others.  However, the time frame was not unusual.&lt;/p&gt;&lt;p&gt;Marshall's path back to playing consisted of a series of tests.  The final two of those tests were to make it through a non-contact practice followed by a contact practice, both without the recurrence of any symptoms.  On November 4th, he passed the first test by skating a non-contact practice with the Bantam team.  Unfortunately, we never made it to the second test because the next day at school, Marshall was hit in the head at recess.&lt;/p&gt;&lt;p&gt;This time, the blow to the head caused short term memory loss in addition to the other symptoms.  The doctor ordered a CT scan which came out normal and again said it was just a matter of waiting for healing to occur.  For three more weeks, Marshall missed school and hockey.  His mom and I talked to the school about how to get him caught up.  After three weeks, Marshall started going to school for half days and that has lasted until Christmas break.&lt;/p&gt;&lt;p&gt;The doctor's original diagnosis was to keep him out until Dec. 1.  However, he also took the information to a pediatric neurologist.  The neurologist said that Marshall needs to go two weeks without symptoms and be released by another specialist.&lt;/p&gt;&lt;p&gt;At this point, he is still experiencing headaches, but the dizziness and short term memory loss has mostly gone away.  With no way of predicting the end of symptoms, it is likely that he'll miss three full months of hockey this year.  Given that there isn't much hockey left, it may make sense to simply hold him out the entire year.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8387508194324684167-3333124535551965858?l=actionphoto97.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://actionphoto97.blogspot.com/feeds/3333124535551965858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8387508194324684167&amp;postID=3333124535551965858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default/3333124535551965858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8387508194324684167/posts/default/3333124535551965858'/><link rel='alternate' type='text/html' href='http://actionphoto97.blogspot.com/2008/12/marshall-update.html' title='Marshall Update'/><author><name>SG</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
