Tuesday, March 18, 2008

Something new:

I leaned something new the other day and decided to give it a go. Charlieplexing is a type of multiplexing for LEDs that allows N pins to control N*(N-1) LEDs. So 5 pins on a Tiny13 can control 20Leds. I used 14 and here is the result:



Update: I tried POV (persistence of vision) but I'm not really clear on what needs to happen for the affect to show up. It was a half-hearted attempt to say the least.

Jay

Thursday, March 13, 2008

Gripper: final version with new video and source code



As promised here is the source code. Also, I hinted at another project I want to tackle .. .that being an electromagnetic levitator. I think the Tiny is up to the task :)

Of course it would behoove me to get my development environment built too. I programmed the Tiny at least 50 times, by removing it from the socket on my circuit. I need to order a ZIF socket, a 6-pin programming cable, and a longer USB cable so I can do ISP and debug wire on future circuits :)

Jay

Wednesday, March 12, 2008

Updates: 3/12/2008:

First let me say that if you are an engineer and a father a great "toy" for both you and your kid(s) is the Snap Circuits kits from www.elenco.com (available at Radio Shack for a premium price). We bought the Jr. kit as my son is only 4 and he and I have already made all 101 circuits in one day. I have since ordered the Extreme kit which should offer all kinds of experiments. it just arrived today :D I recommend you get the Extreme first.

Now back to my gripper controller project. I have decided to continue improving the design some more. Most all my friends that have seen the video have commented that the motion looks too jerky and that it's not obvious that my hand is controlling the position of the servo. To address these I am going to modify the code to only update the servo position at 5Hz even though the A2D is being read at 20Hz. Furthermore, the servo position will only move +- 1 each iteration. I may change this based on the actual movement I see of course. As for the second issue, I'll just shoot a better video and maybe add some explaining :) I also plan to add in another sensor to control the gripper opening and closing the same way.

Forward,
Jay

Monday, March 10, 2008

Update 3/10/2008:

I been MIA working on some paying projects. After I completed that, I got drawn into a new venture with a buddy. I can't say too much about what it'll be, but in order to get ready for it I've been playing with a new chip (to me anyway). The Atmel Tiny13.

Pros:
  • 8-pin dip $1.29
  • No xtal needed has internal clocks up to 9.6MHz
  • Supports in-circuit programming
  • 1K flash, .5k EEPROM
  • 6 I/O all of which can be digital or 10-bit A2D
  • Requires a pull-up on reset
  • Uses the same GCC compiler as I am used to
Cons:
  • Internal clocks while they can be calibrated are somewhat inaccurate (thought they work fine for what I want)
  • 1K of flash goes fast :)
In a nutshell I wanted a servo tester/driver. So I surfed the web, found snippets of code here and there, and came up with a little demo. If I were to use this on my robot, I would change it to trigger a "pickup" sequence of servo moves. However, I've never really played with the A2D on an Atmel and I purchased 4 Sharp gp2d12's so I figured why not. The A2D is read about 40Hz which is also how often the servos get a new value (if required). The timer ISR is set to execute every 13us. At the end of every 20ms frame, the servo signals are turned on. Each run of the 13us timer subtracts 1 from the servo count until it reaches 0. Then the servo pin is turned off. I'm only using the upper 8-bits of the A2D conversion (16-bits adds a lot to the program size and I don't think it's needed). The most current reading is compared to the previous reading + or - 7. This is to prevent the servo from "jerking" all over the place, but it results in visible "stops" in the video.


Here is a video of the results. I may add to it, I may not. The important thing is that on a 1" square PCB I can have a multi servo controller that uses analog feedback to position the servos.

I promise to post the source code once I get it cleaned up (this was just quick and dirty) and commented.

Forward,
Jay