A couple years ago, I started work on a timelapse camera module. I built one board, came up with some corrections, and designed a better version. Then it stagnated for quite a long time.
A few months ago I checked over the files again and sent them off to a fab shop.
After the new boards arrived, I couldn’t find a local source for some of the components I needed and it sat for a long time again.
A few days ago I found some components that would also (mostly) work, so I started the project up again. Let’s get ‘er done.
The goal of the project was to be able to hook into any 2000-era tiny resolution digital camera and take a picture at set intervals. It’s powered by USB, and regulated down to 3.3v that most cameras use. There’s a very simple 7-segment-display-based interface with which to control the timelapse interval.
It’s powered by a PIC microcontroller, and the display is driven by a couple 74HCT164 shift registers by TI. The “HCT” portion of that is key, because these are both wide-voltage range (to be able to run off 3.3v), and fast enough to clock 8 times without visible flicker.
Here’s where I’m at right now:
I don’t have the 3.3v regulator that I designed for, but I found a different one that is adequate, with some bending of pins. None of my capacitors are the right footprint, and I don’t have the right resistor network package. All of these parts are pretty easily available off Newark/Element14, so I’ll have the appropriate parts for my second prototype.
Other than that, it looks pretty good. Keep in mind that I designed this version over a year and a half ago. I’m in a very different place now. Here’s what I would do now (or will do for a redesign):
- I’ve mostly sworn off resistor network packages.
- I realize I should have added a couple more decoupling caps.
- I prefer to use SMD to DIP now.
- With surface mount, I could also make this whole board much smaller.
- USB-A male-male cables aren’t really common anymore, it would be much more convenient to use a microUSB port.
- Driving the camera inputs would probably be safer with a transistor instead of directly from the PIC.
- I need mounting holes.
I’ve rewritten the software. It stores timer values in EEprom and uses an interrupt to trigger the camera. At a later date, I’ll add in sleep settings for power saving, and control the camera on/off state for the same purpose.
For the interrupt, I want it triggered about every second. It triggers every time the 2-byte Timer1 register overflows. With the maximum prescaling dividing the clock (and register) to one second, I’d have to set the clock speed down to 1MHz. That slows down other parts of the program, enough to make my software-SPI-controlled display have visible flicker. That’s not cool.
To get the proper time, then, I need to count off a bunch of interrupts until I get to 1 second. I’ll calculate a good set of values for Timer1 to do the necessary.
Fosc / 4 = 1MHz
1MHz / 8 prescale = 125kHz
Period = 1 / 125kHz = 8ms
1s / 8ms = 125000 clocks
Say, 125000 / 2 = 62500 clocks
65536 clocks before overflow – 62500 = 3035 starting value (and decrement seconds every other interrupt)
After measuring against a stop watch for two and half minutes, it’s about 3 seconds too fast. That’s 3 / 150 seconds, or about 2%.
So change the starting value to 3035 * 1.02 = 3095.
I’m using the internal oscillator, which tends to be pretty inaccurate. That’s okay, I can tune it. A good way to do that is to take timelapse photos of a clock when I’ve put everything together. I’m curious how much it’ll drift after I calibrate it due to time or temperature. It’ll be an experiment.
Pictures of the build process to follow.
At first, I was lamenting not having proper mounting holes on my PCB. After examining the chassis I had lying around, though, this is perfect. The ribbed interior can hold slices of acrylic, and, properly cut to shape, they’ll sandwich both of the boards, the 7-seg display, and the lens assembly exactly where they need to be. No fasteners, and no unnecessary holes. Perfect.