End of 2013 brain dump

So, time for an update. As usual, it’s late — but dagnabit I’m on holidays now and I just moved to the other side of the world again. Get off my back!

A lot has been going on over the last few months, and I’ve been keeping pretty busy. After handing in my resignation to Atmel (*sniff*) I managed to get my mind off things by flying down to Germany to meet up with a few of my Australian friends, who were traveling around Europe for their vacation. First we met in Hamburg (or was it Frankfurt? A food-like name, anyway…) and jumped in a rental Audi A3 with the plan to drive all the way back up to Trondheim. Things ended up not going quite to plan when I had not one, but two Norwegians telling me to turn around and go back due to bad weather, so we got up as far as Oslo before they turned around and I escaped back via a cheap last-minute plane flight. Under normal conditions Norwegians will drive in just about any situation, so it’s best to take heed when they start to worry about your welfare.

Germany is a lot nicer the third time, perhaps due to me being over there for leisure this time rather than for work. I think our fellow Germans agree with me, when we spotted this guy on the Autobahn doing ~200KM/h:

Germans are completely bonkers.

Yes, that’s his leg. The driver’s leg. Plus one point for relaxed driving, minus several million for a complete disregard for common sense.

Driving through Denmark was weird; the language is similar in many respects to modern Norwegian (for obvious reasons) but with a few strange words. For the most part I was able to translate signs and speak enough basic phrases to order things in shops, but apparently the word for “Minibank” (ATM, cash machine, hole-in-the-wall, money dispenser, etc.) is completely different in Danish, leading to much confusion on my and the shopkeeper’s part. In general however Denmark was just as pretty as Norway, but everything was significantly cheaper.

We stayed in two interesting (cheap) locations in Denmark. First off was a lovely hostel with “attached gymnasium” that we snagged at the last minute online – we spent a good few minutes trying to figure out where the heck it was, before realizing that, yes, we just booked a gymnasium for the night. Apparently the gym also catered to school camps and such with some very utilitarian dormitories, which I found to be a bit of a laugh for the night we stayed. It would seem the hotel listings in Denmark are written by ex-real estate copywriters – lesson learned. Waking up and having just for four of us eating breakfast in a hall clearly designed for around 100 screaming kids was a bit disconcerting but hey, free Wifi!

Next was a deliberately interesting place, a farm. We expected a bit of a ye-olde bed-and-breakfast in a quaint farm cabin or something, however when we turned up we were instead led into what can only be described as a modern unit with hot tub, flat-screen TV, the world’s largest spa bath and tandem showers (not entirely sure about the last one…) all for the low low price of DK1200. It seems the Danish tourism authority gives out large cash grants to places to upgrade their rental properties to increase tourism and boy-howdy, it works. Nothing like waking up and drinking coffee while watching cows graze the fields and cute bunnies running around a field to put you into a relaxed mood.

After taking the Color Line ferry to Kristiansand (near my good friend/ex-coworker Morten’s old home) we then drove up to Oslo for a couple of days to get our fill of culture in the form of more molded and sculpted genitals than I ever thought I needed to see, as well as seeing how Norway used to be, as well as their horned ancestor’s boats. Great stuff.


So, enough about that. The last month at Atmel was hard; I’ve forged some great friendships over the last two years and gained much experience, but it was time to move back to Australia, back with my partner and look a bit more long term. Of course, being Trondheim, it couldn’t let me go without snowing the bejeesus out of my rental apartment the week before I left:

Snow status: lots.

And trying to kill me with a mysterious bacterial infection in the last few days. After two years of perfect health, I think the country was finally actively trying to kill me. On the other hand, I can now say the Norwegian medical system is wonderful. Before heading out, I made sure to make my mark on the office with a tube of super-glue and a coworker’s Yoda (don’t worry, it’s 3D printed so easy for him to get a untouched replacement):

Googly, I am.

But ultimately, I’ll really miss my friends over there. I only hope no one leaves out any cable tidy mesh around where unsuspecting coworkers can find it:

Sadly, the vet had to put him down afterwards due to his injuries.

With any luck I’ll be back on a holiday over to Norway to say hello in the future, and of course thanks to modern technology I can still talk with my friends over there. Timezones at a bit of a problem however, due to the 9 hour difference between Trondheim and Melbourne. One good thing about returning home is trading food like roast Whale:

Norwegian Whale.

Into real food:

Australian BBQ.

And of course opening my Christmas presents:

BACON! My girlfriend’s sister knows me too well.


But of course with my return came a bit of a problem; I didn’t have a job lined up. I’ve been looking around for the last three months while still over in Norway, but was finding it tough until I put out a call on Twitter and got a bite from Marc over at LIFX Labs. I took a look, and it seems they manufacture some pretty snazzy Wifi controlled light-bulbs:

One in-person visit, a signed contract later and I can now announce that as of January next year, I’ll be part of the LIFX team! Really, really looking forward to it – right now I’m a 50/50 mix of optimism and sheer terror.

So that’s it for now; a few project announcements and other random things to talk about, but I’ll hold off on those until the new year. Happy New Year everyone!


Let’s rotate the board!

So I mentioned it briefly on my Twitter account last week; alas, my time here in Trondheim is beginning to come to a close. As of Monday, the clock has started its 3 month countdown to me being unemployed, homeless, jobless, on the streets, woe is me, etc., etc. – you get the picture. In December I’ll be home for Christmas, but also home for good.

Deciding to move back home was a very, very difficult decision for me; I love my work, the company, my coworkers, the lifestyle and everything else that I’ve gained over the last two years, but ultimately and realistically with a long-distance relationship and family and friends so far away it was always a time-limited experience anyway. Sadly it looks like my original plan to keep working as an Applications Engineer remotely is being thwarted by the machinery of the company legal department, which now means I’m scouring Aussie job sites. It seems my university professors lied to me; the job market for embedded system engineers in Australia looks absolutely atrocious. If you know anyone that’s hiring, please let me know (will code for food). I’m not above selling out my dignity for employment, and landing a awesome job right after finishing my degrees has left me without any experience in this whole “people networking” think I keep hearing about.


Over the last few weeks our department (when we’re not trying to poison each other, that is) has been playing the role of Avon Lady, flying out to meet and greet customers and help them out with their new and potential SAM D20 based designs. Normally we’re an unruly bunch not fit to be placed in front of paying folk, but now that we’re the site with the most knowledge of how the SAM D20 parts work from an applications perspective, management decided we needed to get cleaned up and shipped out. Cue hotels, both swanky:

German Hotel - Heilbrunn

And, well, German:

German Hotel - Berlin

Which had a lovely view of a giant wood pile to keep me occupied.

Got wood?

Actually, the first hotel made me very glad I was traveling alone; I’m familiar with the concept of having a window between the bed and the shower (for, ahem, obvious reasons) but hadn’t seen one before that lacked a shutter…or that also overlooked the toilet. Odd.

Not pictured from this angle: shower, toilet.

But in any case, the trips were a interesting. I was asked to give a technical presentation on the SAM D20 twice – something I wasn’t aware of, so I had to “karaoke” my way through it – but ultimately they went OK since I’m already intimately familiar with the chips. The customers seemed to appreciate me pointing out the outright fabrications and half-truths from marketing via my colourful Australian language, at any rate (hey, I pointed out all the good stuff, too).

My personal quirk is that I love to try foreign beverages at all opportunities, which led me to this glorious stuff:

Beer for Germans that don't like beer (or are kids).

Which is a non-alcoholic pseudo-beer drink aimed at kids. Not bad, at any rate. I did get one chance to down a glass of damned good German Weiss beer, something I’ve come to love since I’ve been in Trondheim – highly recommended.


On the coding front, I’ve been quiet due to all the travel, but still chugging along with our current reference design at work. It’s actually shaping up really well, and I’ve learned a heck of a lot about how to code for an actual real-world product, rather than just toy applications and drivers. Right now I’m in the middle of power optimization, something made quite difficult by the Xplained Pro’s Embedded Debugger that consumes variable (and quite large) amounts of current. Investigations ongoing.


The other day I released another simple Atmel Studio extension, a basic Maximum Stack Usage checker. It’s very basic and the operation is simple – it just paints the stack area with a known 0xDEADBEEF constant, then after you pause execution it can dump the memory and see where the highest overwritten value is and present it as a percentage. Most of the extensions I’ve made have been to scratch personal itches, and while this one has limited utility I still think someone else might get some use out of it.

I’ve also got an update to my Data Size Viewer extension to add multi-project solution support, which I expect to be pushed out early next week.


LUFA 130901 Released!

After a two week soak period with no complaints, I’ve packaged up a new LUFA release as scheduled. The downloads are now live – but the Atmel Studio extension update on the gallery has to go through review first before it will be public, which I expect will take a few days. Not much to report on since most of the relevant information was posted in the beta announcement – other than some additional documentation tweaks (Spelling: I am not good at it). Hopefully I haven’t forgotten anything in the release packages; if you experience any problems, let me know.

Download the new 130901 release
Read the online documentation
Complain about me on the support list

A big thank you as always to all the contributors, no matter how large or small. The LUFA community is what makes the project successful, and I’m grateful to everyone that tries out my work.

Am I excited to get this out? Yes. But I’m also full of half a battalions’ worth of homemade pizza from last night, so I’m writing this while wishing for death. Lactose intolerance and pizza are a bad combination regardless of the absurd levels of deliciousness. Go forth and enjoy in the meantime.


Also uploaded is the source code to the Atmel Studio integration blob, so you can choose to build it from the source – not that I expect anyone to, given how painful it is to assemble all the prerequisites to make a working VSIX. I’m a C# novice and even more novice at Visual Studio extension development, so the code isn’t very pretty.


Coming in the next few days is another update to my Data Size Viewer extension, following the new release a few weeks ago to fix a crash when C++ projects were used. This new version adds configurable colors to visually distinguish between text and data segment symbols, as well as symbols that aren’t available in source form (such as symbols pulled from precompiled libraries). That update, too, should be live in a few days once it is approved to the Atmel Gallery.


In unrelated news, last week our department finally restructured our desk layout and cleaned up the place. While it was heartbreaking to throw out what must have been a year’s salary worth of old parts and boards, I suppose at some point things really are just junk. No pictures of the new layout, but trust me, it’s freaking awesome. We have an actual lab area now!

Cleaning out the Atmel office.

On the upside however I did manage to rescue a ton of still-good kits and tools (some even in their original boxes) from this side of the new millennium:

Some of the rescued kits.

Which are still sitting in a corner awaiting their fate. Once everyone’s had a chance to snag what they want/need hopefully they will be released to me for distribution elsewhere. Incidentally, seeing an intact AVR-ONE! probe is kind of like seeing a unicorn; the JTAG header on almost everyone I’ve seen has been sheared off – including my own personal one. I suppose I should replace it at some point, but my JTAG-ICE3 is faster and more convenient.


Next week I’m off on a customer visit to Germany for a few days, helping out with their new SAM D20 project. With any luck I’ll have time to meet up with Thomas (student engineer I met at Atmel previously, who’s now working for Atmel in Heilbrun) and find some genuine Bratwurst.


LUFA 130901 BETA Released!

I had actually forgotten my release procedure – but eventually it came back to me with a bit of mental digging. I’ve now released a new beta of LUFA with the usual two week public stress test, this time with a Atmel Studio VSIX extension as well to upgrade existing installations to the beta version. Please download the new release and try to break it, then email me your complaints so I can fix them up.

This release is mostly a maintenance release; I know it’s been a long while since I made the previous release, but work and other factors means I just haven’t felt like making large changes on the codebase. This release brings the new Mass Storage class and Printer class bootloaders I talked about in previous blog entries, support for a few new first and third party boards, a new XMEGA TWI driver contributed by Michael Janssen, some Python host example code for a few demos and bootloaders, and a bunch of fixes. You can check out the full changelog for the release here.

One major improvement is the porting of all the demos (where possible) to now compile and run on the XMEGA, so I’m now upgrading the port from “experimental – may explode in your face” to “experimental – may contain bugs”. It’s a good step up, and I’ve been testing LUFA on the XMEGAs with great success so far. It’s severely unoptimized due to the API’s design around the AVR8’s USB controller design, but it works well enough in testing so far that I’m not completely embarrassed to have it out in the open.

The other area I’ve been concentrating on is improving the Atmel Studio 6.1 extension, since I’ve got a large amount of feedback that it’s the preferred method of using LUFA now, even with the added “feature”. Apparently my revamped make build system excites only me, alas. I’ve concentrated on several areas:

  • Adding Example Project entries for all the bootloaders
  • Creating a magic transform to convert the LUFA documentation into the format that the Atmel Studio native help system can use (somebody please use this, it took freaking forever to create)
  • Updating the Getting Started page to native XAML for better speed and higher quality
  • Adding Example Project entries for XMEGA architecture devices
  • Restructuring the internal XML modules so that the USB class drivers can be configured to speed up compilation if they aren’t needed in a project (for advanced users)
  • Adding the PC side application code to the various examples inside Atmel Studio, as they were previously available in the standalone package only

Some of the above enhancements made it into a small update I did to the LUFA AS6.1 extension in May to fix a number of small bugs, but they’ve been further tweaked and enhanced in this new version. So what are you waiting for? Download already!


This Saturday I was at the local Trondheim Mini Maker Faire, helping out my coworkers inspire a new generation of children into the world of robotics and electronics. Of course, that was the plan until I showed up and realized that I couldn’t speak Norwegian well enough to be useful – so I mostly just rubbernecked around and tried to make sure our improvised line drawing robot (which turned out to be a real hit with the kids, after our attempt to build a line following robot miserably due to sensor saturation from the sunlight) didn’t fall off the table.

The real highlight for me was checking out the Omega Verksted booth full of completely insane(ly brilliant) engineers. From a 3D Snake cube which I sucked at playing to a giant to a somewhat homicidal Automatic Waffle robot, they had it all. Some day in my life I hope to travel to the US and see the real Maker Faire in action.


Stacktraces, SAM D20 and silly pranks

Ok, so it’s been another long posting period (fun fact: 70% of all online blog posts open with the obvious statement that the author is lazy about updates). Sue me.


Actually, I’ve been quite enjoying some semi-R&R at home, given that I can’t really take a mid-year trip home due to the astronomical costs and travel time. Since my last update I’ve been very, very busy at work (more on that later) which meant that my home time was my me-time.


So, last time I posted about the LUFA extension going up on the Atmel Gallery – what I didn’t mention was the small easter egg I happened to put into it. I love pulling non-destructive lighthearted pranks; as long as the person getting pranked can laugh too and no one gets hurt/nothing gets destroyed, I think it keeps life interesting. Well, certainly it was for this guy. Apparently at one of the largest Atmel Tech of Tour seminars in the US several attending engineers forgot to adjust their system clocks to the new timezone, causing it to trigger during the trainings, so overall I rate it a big success.

Speaking of which, I need to get a new version out soon. Not too many changes but more and more of the bug reports I’m seeing are from small issues already fixed in the Git repository, although since I’m enabling XMEGA project examples in the next release inside Atmel Studio I’ve got a little more bug-chasing to do beforehand.

Now, enough of that. On to other things. Hrm.


Ah yes, the Great Git Migration of 2013. Last year at work we all switched from developing ASF via Subversion, a torture I would wish upon no one, to working in Git. I’ve grown up with Subversion and witnessed it’s complete failure to merge anything in a useful manner (even on my one person, local machine setup) for years, but I confess I still resisted a little due to the fear of the unknown. The command syntax is a little crazy, but after a month of re-training we were all happy and actually branching/merging things without fighting with the tools all the time at work. It’s worth learning – and I love it now so damned much I migrated everything on my machine to new Git repositories and shoved up some of the more generally useful projects to my account on GitHub. Learn Git, you won’t regret it. The downside is that the LUFA SVN repository is now down as is the old legacy broken Git-SVN imported version, in favor of the new single canonical source code location. No real complaints from users in the last few months, so I guess no one really cared about it anyway.


Python! Python is great! I have a fatal personality flaw that I can’t stand making “Hello World” type applications in new languages and technologies, and always wait around for a real (if simple) problem to solve before diving in. Last week I started testing the waters with the PyUSB library (freaking fantastic) and it’s a damned joy to use. If you want to use the LUFA HID bootloader on Windows, I now have a much quicker solution to compiling the C application I modified from PJRC. Works on other platforms, too. Very sexy and intuitive language – I hope I find new projects for it soon.


A month or two ago, our work lifted the super-secretive veil on the project we’ve all been working full-steam on over the last few months in the NPI department, the SAM D20. Yes, there’s actually space in the family name – blame marketing. The previous internal names were even worse, but this one takes the cake for breaking all our scripts…but no matter. Our entire department was re-tasked mid-to-late last year to work exclusively on the software for it, and I’m damned proud we’ve managed to release on schedule with mostly working drivers (a few bugs not withstanding) and a readable datasheet so quickly. A big, big emphasis was placed on making usable documentation for the software, so I had to learn XSLT and Docbook, and come up with the Doxygen-to-Docbook-to-PDF transform toolchain that turns our source code into PDF documents like this. Cool technologies, but repeat after me Apache: A 300 LINE STACK TRACE IS NOT A GOOD ERROR MESSAGE. Darn you, Apache FOP.

Since the release of the SAM D20 we’ve been re-tasked (yay!) once again, this time into Application Solutions and high-tier customer support. It’s a little nerve-wracking to be the sole support contact for a “we are sending a barge to carry the amount of money we owe you for this deal” kind of customer, but it’s all worked out great and it’s taught me to think on my feet and anticipate problems before they evolve into questions a little better. Of course it’s easy to say it’s not so bad once it’s over and you receive all the kudos for it, but still. The last two weeks I’ve been developing a new reference design which has been fan-freaking-tastic, as it’s what I love to do and the code’s practically been writing itself. Using FreeRTOS with multiple concurrent tasks, queues and cross-thread synchronization, oh-my. Getting up and running with an RTOS was much easier than I expected it to be, and the tracing product here is an absolute magical god-send.


Ok, that’s enough for now, I can hear the snores. One last thing; I’ve decided to try this professional networking shtick everyone’s doing these days to talk to more engineers out in the field, so if you know me you can now find me on LinkedIn.


Vital Stats

  • 35 Years Old
  • Australian
  • Lover of embedded systems
  • Firmware engineer
  • Self-Proclaimed Geek

Latest Blog Posts