Monthly Archives: September 2013

Weekly Report Sept 29 2013

Last week was the Toronto Maker Faire. The entire faire can be divided into 4 major categories: 3D Printers, RGB LED strips, Arduino, and Raspberry Pi. Don’t take that generalization negatively, the entire faire was great. Most of the projects would beat our university symposium projects.

Seeing all the 3D printers in action and seeing their capabilities first hand really makes me want to get one. I’m just waiting a bit for the next generation of technology to become available (key patents will expire, enabling better printers).

I’m coding some FFT stuff. The nRF chip I’m using is an ARM Cortex M0, but running at 16 MHz, so I had to use some code that’s designed for a 16 bit MCU instead of something more powerful. It works like a charm though.

Gotta work on a few more examples for Trinket, making it do USB stuff like mouse and keyboard. A lot of exciting stuff for Adafruit coming.

I got to use my Hantek DDS-3X25, it is certainly useful at a reasonable price. I haven’t ran into the known sync issue yet so I haven’t used the firmware hack/fix for it yet.

Did some work regarding my clone of the Xim, the USB host library for STM32 is built in a really weird state machine, so I spent a few hours writing blocking variations of non-blocking functions. I got my TUSB hub chip enumerated. Good progress. Still a month away from PS4 launch, no rush.

Some old clients are catching up to me and I’m going to be very busy.

Red Dead Redemption is a very long game. Maybe I’m doing too many of the randomly generated “event missions”, and I don’t use fast travel because I want to do those events.

AVR Timer Calculator

This is a simple javascript calculator I wrote to help me make timing calculations while working with the timers on AVR microcontrollers. The same calculations applies for all microcontrollers but the prescaler options only contain the ones possible on an AVR microcontroller (the configuration number is indicated in the brackets).

Javascript must be enabled on this page for the calculator to work. Choose what value you want to use as input by pressing the button beside the textbox(es) you want to use as the input. The output will be reflected in the other textboxes.

Continue reading

Weekly Report Sept 22 2013

No post for last week because I didn’t have anything interesting to say.

Hacked my Rigol DS1052E to the 100 MHz firmware. Just had to place a file onto a USB drive, stick it in, hit one button. I had the newer firmware already which made it easy, older firmware has a more complicated upgrade procedure. I followed http://www.eevblog.com/forum/blog/changing-the-rigol-ds1052e-to-ds1102e-using-usb-the-dummy-guide/msg275388/#msg275388

I assembled another nRF51 board. More work to be done. Interesting design this chip has, but it runs at a slow 16 MHz. This is great for battery life but it’s going to cause problems for timing NeoPixel signals.

Something funny about working with Bluetooth Low Energy stuff: Most vendors only provide Windows based tools for programming BLE firmware, while so far only iOS devices support BLE, and you need a Mac to write apps for iOS. (yes, I know Android 4.3 is coming but that is very rare right now, I’m still waiting for the Note 3)

Got a AVR XMEGA prototype up and mostly working.

NeoPixels working on Netduino, tutorial is up on Adafruit: http://learn.adafruit.com/using-neopixels-with-netduino.

Web server on Netduino is very easy. I found http://forums.netduino.com/index.php?/topic/575-updated-web-server/ which is my starting point. Good thing I am already proficient with HTTP and ASP.NET and stuff.

Trinket and Gemma are for sale on Adafruit now. There are very rare reports of people who cannot get them working on one computer, then it works on another computer, and then it starts working on the first computer. I narrowed it down to one extra RJMP instruction that the bootloader has to execute when it is fresh (it will RJMP to another RJMP instruction), and once you’ve used the bootloader once, the RJMP is changed to jump directly to where the second RJMP will jump, hence become a little faster, and the issue (USB signal timing issue) disappears and everything is happy. This means prior to being sole, the ATtiny should be loaded with an image of the bootloader combined with a user application, instead of just the bootloader itself.

I finished Saints Row 4, while fun, I don’t think it’s nearly as funny as Saints Row 3. Red Dead Redemption is pretty good so far.

Weekly Report September 8 2013

Stupid Rigol o’scope has the USB port upside down… It also doesn’t support my 16 GB thumbdrive which is another disappointment. I wish it had Eye-Fi like my camera.

I got native code baked into Netduino Plus 2’s firmware, so now I can run real time tasks without any interruptions or preemptions. The first goal is to get NeoPixels working on the Netduino platform. There will be a long tutorial after it’s all done.

Since a lot of the Netduino-NeoPixel stuff involves timing measurements, I realized that the interpreter on the Netduino is pretty slow compared to native code.

I’ve gotten a completely custom PCB for the nRF51 working. I ran into some trouble, it appeared as if my code froze (it wouldn’t respond to button presses, and later I discovered that it wouldn’t go past a certain function using a J-Link debugger), luckily I noticed a forum discussion about a similar problem, and it turns out that I had to change one crystal related setting during BLE stack initialization. See https://devzone.nordicsemi.com/index.php/custom-pcb-how-to-quick-check-if-ble-is-working-nrf51822ab and https://devzone.nordicsemi.com/index.php/what-could-make-ble-sample-applications-not-work,-but-radio-works-ok and https://devzone.nordicsemi.com/index.php/what-low-frequency-clock-sources-can-i-use

From what I’ve learned so far, BLE one key difference from Bluetooth Classic is that “services” are application layer, so you can make custom services. This is different from Bluetooth Classic’s preset “profiles”. Read https://devzone.nordicsemi.com/index.php/is-there-a-serial-port-profile-for-ble and https://devzone.nordicsemi.com/index.php/nrf-uart-app

Turnigy ESC Programming Card Reverse Engineered

I replicated the functionality of a Turnigy ESC programming card. These programming cards are meant to configure electronic speed controllers (ESC). I always wanted to know how they work. Eventually I purchased one since I need one for my quadrotor helicopter’s ESC, and then I started playing with it.

It should be very simple to adapt the code to any microcontroller.

Continue reading

LED Pocket Watch


This is a LED pocket watch. It has 12 LEDs to show the hour, 60 LEDs to show the minute, and 60 LEDs to show the second. The LEDs are arranged in three rings. There is a button on the top to activate the pocket watch, and a button on the back to change modes and settings.


The battery is a rechargable lithium ion coin cell battery and it is charged from a micro USB connector. The battery life depends on how heavily the pocket watch is used, but if you leave it alone, it is estimated to last several months. There is a low battery indication feature. This pocket watch also feature a buzzer and a vibration motor, which are used for the alarm feature, and the motor causes a short “tick” as each second passes by. The pocket watch is constructed of a PCB, two pieces of laser cut clear acrylic plastic, and a 3D printed casing.

Click Me!! More instructions, pictures, animations, and videos.

Weekly Report September 1

I’ve been playing with a nRF dev kit from Nordic Semiconductors. The bad news is that they require a product key to access downloads. The kind-of-good news is that their code is designed to be compiled under Eclipse with GCC (hurray for open source). The bad news is that they’ve designed the files to use assumed toolchain install paths, their makefile literally says:

ifeq ($(findstring 86, $(ProgramFiles)), )
PROGFILES := C:/Program Files
else
PROGFILES := C:/Program Files (x86)
endif
GNU_INSTALL_ROOT := $(PROGFILES)/GNU Tools ARM Embedded/4.7 2013q1

So… it only works on the default install path of “GNU Tools ARM Embedded”, and only works for one version. Also note that spaces in paths are bad, brackets are even worse, especially with GCC. I had to do some editing with the project configuration and makefile before the examples can be compiled. (only some examples support GCC, all of them work in Keil).

There are plenty of other problems with using that kit. I didn’t know I had to buy a “motherboard” for it, which had buttons and LEDs and UART and stuff on it. Most of the demos depend on a button press to start. I had to solder on my own buttons and LEDs, and gave it a FTDI connector for the UART. http://i.imgur.com/ChFMyuD.jpg

My friend just got a CC2541 kit, last time I checked, he wasn’t having much luck with it.

I am considering picking up a Hantek DDS 3X25 (function generator). There are problems with it but there are also firmware fixes available so wish me luck.

Finished Uncharted 2 and 3, insanely good games, better than Tomb Raider (2013) if you compare the same style of games. I also started playing Saints Row IV but so far it’s been disappointing, there’s problems with the website (and thus I couldn’t download characters I wanted), the intro levels are very bland compared to Saints Row 3, and the game UI is terrible (the game actually pauses while you switch weapons). Also NONE of the PS3 games I’ve played so far had any loading screens, but Saints Row 4 had plenty, and some were right in the middle of the action.