Archive for August, 2010
Grill Control Project Part 2
Based on Bob’s lead, I chose the Arduino platform as my microcontroller. Specifically the Arduino Duemilanove.
- ATmel ATmega168 Micocontroller
- RISC 8-bit CPU running at 16MHz / 5V
- 32kB code space (30,720 bytes usable)
- 2kB RAM
- 1kB Flash storage EEPROM
- Integrated ADC, Digital PWM, SPI bus interface, UART TTL Serial
- C/C++ programming environment
Yeah 2kB of RAM. For comparison, my blog front page is currently 250 times that. 30kB of usable code space? The default Delphi Project1.exe baseline with no user code is 13 times as large. Squeezing everything in to that space seems like a challenge: a web server, LCD and buttons with a menuing system, and I reckon it should control a grill too.
This post was going to be about the platform, but that’s boring. Let’s just jump into the project and I’ll introduce things as needed.
Software Guy Builds Hardware
or: How I Learned to Stop Working at Making Things Burn, the Great Grill Control Project part 1.
Foods cooked on the grill are at the top of my food chain. I am a main predator of Kingdom Animalia, Phylum Grilledatas. The problem with grilling is that the grill is outside, in a place where it is usually hot, far away from my beer, and entertainment-starved unless observing the negative gravitropism of stenotaphrum secundatum is your thing. Barbecue further aggravates the situation by requiring long cook times which may even necessitate losing sleep. Sure you can “barbecue” in an oven, “barbecue” cooked in an oven isn’t barbecue all and bears as much resemblance to the real deal as K-rab does to stone crab. There has to be smoke, and the easiest way I know to get smoke it to light something on fire.
Contrary to what Frankenstein says, fire isn’t always bad, but it can require a good bit of fiddling make it do what you want, sort of light plate spinning. It certainly is a lot easier than plate spinning and you can’t eat anything when you’re done spinning plates for 8 hours, so I’m not sure why I used that analogy. Anyway, I’ve tried the Alton Brown Electric Pot smoker concept, which produced lackluster results even after several attempts and equipment swaps. The initial solution was to step up to the big leagues and buy a Big Green Egg, the self-described “World’s Best Smoker and Grill!” (emphasis theirs).
Proper Timing with GetTickCount()
Often programmers are faced with implementing timers for short-period operations, anywhere from the sub-second to a few hours. These sort of timers are typically used in timeout operations, like idle connection timeouts, stale cache timeouts, and fade timers, but are also used in basic discrete physics calculations, input debounce timers, and timeslice allocations. In these applications I like using GetTickCount().
More information on why I like it and why to choose it over other timing options follow after the break.