From our last part we looked at adding in the TMP102 sensor, experimenting with I2C pull-ups, re-testing the voltage switcher diode and other improvements/fixes. This time we’ll look at adding in the RTC including programming the time from the PC, more bug fixes, estimating battery life and briefly looking at some logging results.
I started off re-designing the RTC crystal layout which I would also make into a little board to connect up to the breadboard and since I already have a RTC clock project I can use that for reference.
The MCP7940M has the option to output a 1 Hz square wave which is what we’ll use to wake up the ATtiny every second. We no longer need to use the watchdog timer which takes about 4uA when in use where as the RTC takes 1.2uA.
An alternative is to use the alarm capability build into the RTC to wake us up however this would mean that for 1 second logging, you would need to constantly reconfigure the alarm for the next second which could be complicated in the end and you might spend even more current reconfiguring it however for longer logging delays say every minute or hour it would make sense but I’ve opted to keep everything simple for the moment and just use the 1Hz output.
Today we’ll be taking a look at a low cost Action Cam, the VWTech VW898 ActionCam which does 1080p @ 30fps, 720p @ 60fps with a 135 degree wide angle lens cost me $35 AUD from Ebay which is about half the price of a Mobius ActionCam. I decided to buy this after my Turnigy camera stopped recording audio, the price was good and if the quality wasn’t good I could use this camera for something else.
This camera is quite heavy, mostly it’s the 2 outer shells which combined weighs 33 grams. Once we pop those out, the camera weighs 31 grams. The shell not only protects the device but has some foam to keep the camera in place otherwise it can move a little bit. I do prefer the Turnigy’s 185 degree lens over the 135 degree lens and you have to boost the audio up quite a lot in post processing but anyway, on to the teardown.
The build quality is ok for this cheap camera, it’s a 3 chip solution and we have 3 small SOT23-5 DC-DC converters and the camera is glued in place; apart from that there isn’t a whole lot to see.
Today we’ll be taking a look at a router, the SMC Networks ADSL2/2+ Barricade G Wireless Modem/Router (SMC7901WBEA2 B1) which is a 1 LAN Port Wireless ADSL2Modem/Router in a small form factor compared to other routers but that’s mostly due to it having only 1 LAN port.
Four screws later, the top pops out and we’re in.
We’ve got 3 main chips plus the Wifi chip shielded with a fair bit of capacitors, 4x 16V 1000uF KMG branded caps near the input and we have 2x AP1534 and 1x AP34063 DC-DC converters, the inductors aren’t glued down at all. Interestingly there may have been the possibility to shield the SDRAM and one side of the SoC too, I guess it wasn’t needed. We have a u.FL connector going to the antenna. PCB date code is 46th week of 2009.
I’ve had the HobbyKing Rattler for some time now and I’ve been making small modifications here and there which have accumulated over time and has gotten to the point where it would be nice to have everything on a custom PCB.
Here’s how everything looks at the moment, pretty messy with kapton tape wrapped around each separate board, we have a large DC-DC converter bought off Ebay a while back for the video transmitter (VTX), an ATtiny control board for the lights/connecting to the receiver and an ATmega with another board doing the temperature/video osd. On the right, we have the finialised PCB.
Let’s start off with the video OSD as it’s what the whole board revolves around, I’m using DIY OSD which uses an ATmega with some resistors, diodes and capacitors to overlay text over the screen and it works fairly well. It’s written in Arduino so I’m going to have to use that and I took out the GPS code references so we can fit it into an ATmega168. There are other solutions like Minimosd use a dedicated chip (MAX7456) to do the overlay and the text it generates is better however I wanted to keep things simple and small.
From our last part we looked at choosing capacitors for our LDO, testing our I2C timing, switching to a 1Mbit EEPROM and using EEPROM page writes. This time we’ll look at adding in the TMP102 sensor, experimenting with I2C pull-ups, re-testing the voltage switcher diode and other little improvements.
It has been a good while since I’ve worked on this project, though it’s not all bad, it does give me a chance to re-look at the project and pick up on things I might have missed.
Adding the TMP102
The TMP102 is a very small I2C temperature sensor with 0.5C accuracy (typical, -25C to 85C), 12 bit resolution, 1.4 to 3.6V supply and low current at 1uA shutdown and 10uA active plus it’s much smaller than what I thought so I had to use enamel wire to connect to it.
By default the TMP102 operates in a continuous conversion mode where it samples the temperature and puts it in a register at power on, we should disable this feature by enabling shutdown mode (SD).
We change from 12bit data mode which lets us measure -55 to 128C to 13bit mode which does -55 to 150C by setting the extended mode bit and write the above changes by referencing the configuration register (0x01) first.
Today we’ll be taking a look at the D-Link 16-Port 10/100Mbps Desktop Switch (DES-1016D), it’s just a simple 16 port 10/100 switch and I don’t expect there to be too much going on inside just like we’ve seen with other switches.
Three screws later and we’re in.
We have 3 separate boards, the power supply board taking the AC in which connects to the main board and then another small board for the LEDs. PCB date code is 16th week of 2007.
The power supply board looks decent with a clean design.
Lately my blog has been focused on quadcopters / RC cars and here’s another little one, I’ve been wanting to try out Acro mode but would rather not crash a whole lot to test it out. There’s a program called FPV Freerider which lets you simulate the quadcopter on a few different maps. Normally you would use a Flight Simulator Cable however I didn’t want to wait and they were out of stock locally.
I happened to stumble upon Giuseppe’s Urso’s Blog which had some code for this exact purpose but for some reason only my first channel was working with my Turnigy iA6 receiver. The format being sent by 9600 baud serial was the FMS PIC 9600 which involves a special byte mixed in with the number of channels, another byte for buttons and then each channel has it’s own byte ranging from 0 to 255. Now that we have the format, I can write some code.
I found that my iA6 receiver outputs all it’s channels at the same time, i.e all at the same time and not one after another like some other receivers might, it actually makes it easier for us as all we need is an interrupt on any of the pins and then we start counting. Connect RX channel 1 to Arduino pin 2, RX channel 2 to Arduino pin 3 and so on.
#define RX_CHANNELS 4
// Set inputs
// Attach interrupt to pin 2 as rising
// Reuse Timer1 to count the microseconds after pin 2, etc go high
After playing around with the Arduino micros function, it had glitching every few results so I used the timers directly. We setup the pins as inputs, attach the interrupt INT0 to pin 2 to only trigger when the pin goes high and reset the timer to the default.
Today we’ve got another old device to look into, the D-Link DSL-502T ADSL2 Modem which is simple ADSL2 modem that has 10/100 Ethernet and USB.
Two screws later and we’re in.
As with these old devices there’s lots of capacitors on board, we have 4x Everon 1000uF and 2x Taicon 220uF near the input and we have an AP34063 DC-DC with a reasonably sized inductor and it looks like the input DC jack was intended for an AC adapter so they just bypassed the diodes with links. PCB date code is 7th week of 2003.
Previously I was able to modify the Turnigy TGY-i6 transmitter to read the signal strength (RSSI) byte and illuminate an LED near the FPV display if the error rate was high so you could easily tell that it’s probably a good idea to turn around. There was a comment from Paul asking if there was a way to read the RSSI from the receiver itself and then pass this onto the flight controller or OSD. (This isn’t really RSSI but just error rate which is a good indicator when you are going to lose signal as you are too far away)
This sounded like a good idea so I went ahead and did just that with a spare iA6 receiver (I suspect the iA6B should be the same. Edit – it’s different, see end of post). Firstly lets do a quick teardown of the receiver.
On the top we’ve got our 2 antennas going to the RF can with a microcontroller (TG84023) which would be converting the incoming data to the 6 channels, an 8MHz crystal/oscillator and on the bottom we have another MCU (no label). The PCB marking reads FS-iA6 (Flysky branded), 20130217 and it’s got 3.3V and 5V which I’ve verified so the little 3 or 6 pin packages would be an LDO for 3.3V and DC-DC boost/buck for the 5V and I think the inductor is under the white potting compound.
After a bit of probing around, the MCU on the bottom looked to be producing a clock output of 1MHz and some serial data. One initial problem that I thought might be an issue is with syncing the serial data to the clock pulses as at the start and near the middle there is a 4 clock block but it turns out there is an even number of them so it works out just fine.
The current doorbell we’re using at home is a bit old now and it can play up from time to time (it’s one where you rotate some screws to give a certain combination to link up with the transmitter). A majority of my time for the last few months have been with RC and now I’ve got some spare parts we can put to good use.
My idea is to use a nRF24L01+ with an ATtiny for the transmitter and receiver, an old small video camera bought off Ebay, a 10mW 5.8GHz video transmitter, 5.8GHz receiver, 4.3″ monitor and some batteries. I have some more ideas for the next iteration of this project found at the end.
So the first part is the transmitter, I could make an acrylic box with the CNC but it wouldn’t look quite as good as a proper enclosure (though I could stack the layers), a 3D printer would be perfect for this job but since I don’t have one I decided to re-use the enclosure. I took out all the electronics and lined up a button and LED on a veroboard and it fit in nicely.