Arduino to AVR: Get Started in 3 Steps

Beyond the : Gain Flexibility and Control by Working Directly With the AVR

Andrew Retallack

Copyright © 2015 Andrew Retallack

Andrew Retallack asserts his moral right to be identified as the author of this work.

All rights reserved. No part of this publication may be reproduced, or transmitted in any form or by any means, electronic or otherwise, without written permission from the author.

Disclaimer

While every effort has been made to ensure the correctness of the information in this work, the author assumes no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein.

2 www.crash-bang.com

Why Make the Move from Arduino?

You’re starting to become an expert on an Arduino board, and can get it to do your bidding without too much effort. Motors whir at your command, LEDs flash at a click of your fingers, and you’re hooked up to the Internet-of-Things and GPS-located - so why would you even consider a move away from this environment? I was in your shoes a few years ago, and in fact still had a good deal to learn in the Arduino-world; but then a little project came along that just wasn’t a fit for my Arduino UNO. In trying to find a better solution, I ended up spreading my wings and leaving the Arduino environment behind me - and I’ve loved every minute of it!

Alright, perhaps not every minute of it - it was in fact a pretty bumpy road. The challenges and my hard-earned learning inspired me to establish my website, blog, and the “Beyond the Arduino” series of articles I write for Nuts and Volts magazine. Even though there are many challenges along the way, I passionately feel that there is much to be gained from moving from the Arduino environment to working with bare-metal . Here are some of the reasons that I’d encourage you to make the leap!

Form Factor The dimensions and shape of my Arduino UNO were what first sent me looking at alternatives. At 55mm by 75mm, it was a chunky rectangle that didn’t always fit into the casing that I needed it to. The ATmega328P microcontroller on the UNO is, by comparison, only 35mm by 10mm in size, giving you the opportunity to squeeze your project size down substantially and explore the Why Make the Move from Arduino?

creation of custom-shaped PCBs. You can get even smaller by using surface mount packages - the TQFP is only 9mm square.

Flexibility Arduino boards are great if you only need to run at one speed and one voltage - of course I’m talking about the 8-bit AVR range, where you can choose between 3.3V & 8MHz or 5V & 16MHz options, but nothing in between. Flexibility becomes critical when looking at building low-power (often IoT) projects. To reduce your project’s consumption you may want to use a 32.768kHz watch crystal, or run at 2.4V powered by a couple of AAA batteries.

Functionality

Abstraction:

The Arduino development environment makes life easier for users by abstracting a lot of the complexity. However, as you’d expect, this simplification comes at a cost - removing your access to some useful AVR functionality, for example:

● Timers: The ATmega328 has 3 timers - one of these is tied up controlling the PWM and the millis(), micros() and delay() functions. The other two are used for phase-correct PWM. This prevents you from using any of the timers for your own purposes, which in turn limits your ability to write optimized code and reduce your project’s power consumption.

● ADC: The ATmega’s ADC has a range of features that control the sample rate, the ways that readings are triggered, the use of interrupts and a way to reduce noise for higher precision readings. Unfortunately these are not accessible through the Arduino libraries.

4 www.crash-bang.com

Why Make the Move from Arduino?

● Sleep Modes: Sleep mode is a critical tool in reducing power consumption and using your microcontroller in an optimised way. One of the ways to wake the microcontroller is using a timer - but unfortunately the timers aren’t available, leaving only a couple of non-time-based ways to wake the microcontroller from sleep.

Speed:

In addition to limiting the functionality, all the abstraction adds overhead. In a simple project running at a 16MHz clock speed this may not be important - but slow the clock down and include a few time-critical functions, and speed can become critical. For example, a simple digitalWrite() instruction to turn a pin on/off takes approximately 100 clock cycles (or 6μs) - more than 60 times slower than a direct call would be. An in-depth look at digitalWrite() can be found at a post on my website.

Greater Choice Working directly with microcontrollers opens up a world of choices that the Arduino ecosystem doesn’t support. What if you only need an 8-pin microcontroller for your project - or a microcontroller with built-in USB support - or a 32-bit microcontroller? If you’re already working with the bare-metal AVR microcontrollers, these options are instantly accessible to you without much (if any) learning curve. The 8-bit AVR’s work off similar register sets, which allows you to choose from a range that includes 8 to 100 pins, USB controllers, LCD controllers, LIN and CAN controllers, a variety of FLASH and EEPROM memory sizes, and low-power options. This allows you to move on to design projects with highly optimised BOMs.

Build Your Own Real Product One of the highlights of my time working on embedded systems was the day that my first custom PCB arrived in the mail - a purple PCB with beautiful gold pads that I had completely designed myself. In order to design this PCB, I needed to be comfortable

Arduino to AVR: Get Started in 3 Steps 5

Why Make the Move from Arduino?

moving away from the Arduino environment, and to have a solid understanding of how to fit a raw microcontroller into a standalone project.

From that start I went on to design a number of boards for my own projects, as well as a few which featured in popular magazines and went on to sell well. I would never have experienced this satisfaction if I had restricted myself to the Arduino UNO and its various shields.

Lower Cost While there are a number of low-cost Arduino-compatible boards available, they’re still likely to cost more than building your own board with the specific set of features that you need for your particular project - whether you build your project at scale on manufactured PCBs, singly on PCBs you’ve etched yourself, or even on a hand- soldered strip-board. The Arduino boards are great for prototyping on, but it probably doesn’t make sense to include one into each of your projects.

The Challenge and Achievement All the reasons I’ve listed so far are tangible with specific benefits. But I bet that you also want to understand how things work behind the scenes, that you’re not afraid of a small challenge, and that you know what it feels like to have that sense of achievement when your project does what it’s supposed to do. I have to be honest and admit that, at the outset, I didn’t know about all the benefits I’ve mentioned so far - I started with microcontrollers out of curiosity and because I wanted to keep challenging myself. I couldn’t believe that I could actually build my own Arduino-on-a-breadboard, so I jumped in with both feet and went from there. If you’re the same, then welcome to the club - put your boots on and jump in too!

6 www.crash-bang.com

Step 1: Choose Your Hardware

Right, so you’ve decided to give this bare-metal microcontroller challenge a go - where to from here? First up you need to decide what microcontroller you want to use, and then how you’ll be using it. There are a staggering number of choices out there, and it can be tempting to spend time finding the perfect microcontroller and the perfect platform - my suggestion is that you read through this section, and then put a peg in the ground and get started.

Which Microcontroller? Unless you’ve been living off the grid, you’ll be aware that there are more prototyping platforms out there than just the Arduino - many designed by the manufacturers themselves as a way to get users comfortable with their specific microcontrollers. You’ll likely have come across LaunchPad boards from Texas Instruments, the PICkit boards from Microchip, and a host of others from STM, Silicon Labs, and of course Atmel. While there are common elements and methodologies across the various manufacturer’s microcontroller families, there a large number of differences. It’s for this reason that most people tend to stick with the manufacturer they got started with.

So which microcontroller should you get started with? My recommendation is to begin with where you left off; in other words, continue with the microcontroller on the Arduino UNO - Atmel’s ATmega328P. There are a number of reasons for my suggestion: Step 1: Choose Your Hardware

● Familiarity: You’re already comfortable with some of the features and functionality on the ATmega328P, even though they have been hidden behind the Arduino IDE.

● Friends: Large numbers of hobbyists and enthusiasts have gone this same route, and used the ATmega328P for their first “raw” microcontroller projects. This means that there are plenty of people out there who have bumped their heads, learned the hard way, and are willing to share their experience (myself included).

● Features: The ATmega328P is actually a pretty good chip with a good spread of features that are easily accessible. In addition to the decent number of I/O pins, it has 32K of Flash (program) memory, three timers, an ADC with six channels, six PWM channels, low power consumption, and can communicate over I2C, SPI and UART.

● Family: The ATmega328P is part of the AVR family of microcontrollers, a family that works in similar ways. Once you’re comfortable with the ATmega328P, then you can move onto larger or smaller members of the family and use them in your projects without too much learning needed.

Have I managed to convince you?

Which Platform? Now that you’ve selected a microcontroller, you need to think about how you’re going to use it. Microcontrollers need a handful of components to support them and enable them to do their job in a stable fashion - so you need to find a way to house these components. Additionally, of course, you need to be able to access the I/O pins on your microcontroller in a way that makes it easy to use. The Arduino board used to take care of all that, but now you’ve got to! There are a number of ways you can do this, but I’ve touched on the three most popular.

8 www.crash-bang.com

Step 1: Choose Your Hardware

Option 1: Breadboard Your Microcontroller

This is a great way to quickly build your knowledge of your microcontroller. You’ll need to focus on each of your microcontroller’s pins in turn, understanding what they do, and what external components they need to be connected to (and why). Specifically, you’ll learn about:

● building a regulated power supply, so that your microcontroller operates off clean, regulated power

● powering your microcontroller and how to use the VCC/AVCC and GND pins

● connecting an external crystal and the capacitors needed to make the crystal function correctly

● the operation of the reset pin

● using bypass capacitors to filter the supply to the MCU

● connecting a programmer or debugger using the microcontroller’s SPI interface

Breadboarding is the lowest-cost way to start working with microcontrollers, making it a good way to get started without investing too much - you should be able to buy all the components you need for less than $10. However, it is a little time consuming and needs some care to make sure everything is connected correctly - and a dose of patience, as all those carefully connected jumper wires often find ways to disconnect

Arduino to AVR: Get Started in 3 Steps 9

Step 1: Choose Your Hardware

themselves. So you may find that, after your first few projects, you decide to move to a more permanent development board - and of course by then you will have the foundational understanding to successfully build your own.

Option 2: Build / Buy a Development Board

After I had built my first two projects on a breadboard, I started to become a little frustrated working with a rats-nest of wires - particularly once I started building more complex projects. The “core” wiring and components needed just to get the microcontroller working cluttered my breadboard, and I kept disconnecting the wrong wires or connecting components to the wrong pins. At that point I built my first development board, designing the PCB in Eagle CAD and etching the copper circuit board at home. After about six iterations, I ended up with the board that I use at the moment - the Toadstool mega328. Using a development board gets you up and running more quickly, and makes your projects that bit simpler to work on.

You may also choose to go this route - either buying a development board or creating your own. I wouldn’t recommend starting out this way, though, as you’ll miss out on building that fundamental understanding you gain from breadboarding your microcontroller project.

There are a wide range of development boards to choose from - from Atmel’s own Xplained Mini boards, through to boards sold on sites like Tindie. While you may have specific requirements, here’s what I look for in a development board:

● Selectable Voltage: I like to be able to choose between 5V and 3.3V, as it gives me the ability to include external modules that operate over narrow voltage ranges.

10 www.crash-bang.com

Step 1: Choose Your Hardware

Additionally it enables me to reduce power consumption (a project operating at 3.3V draws significantly less than one at 5V).

● Crystal Choices: For certain projects you may want to be able to run at a lower speeds, or even connect an external 32.768kHz watch crystal. I like a board that doesn’t lock me into an on-board 16MHz crystal.

● ICSP Header: An ICSP (In-Circuit Serial Programming) header is a (commonly) 6-pin header that you connect your programmer to. If you aren’t using bootloaders, then one of these is a non-negotiable as it allows for faster programming (and for certain microcontrollers, it allows you to debug your projects).

● Power: Personally, I prefer to connect power using a 2.1mm jack rather than a USB connector - it makes my projects more portable (picture a robot, for example). I also like to have an on-board fuse (to prevent over-current conditions) and reverse-polarity protection (in case I mix up the +ve and -ve terminals).

● Breadboard-friendly: in most instances I prefer to plug my development board straight into the breadboard rather than to have it sit separately - it’s easier to see what is connected where, and reduces the risk of wires becoming disconnected. The alternative to this would be a larger board with a built-in prototyping area, but these typically are only good for a single project (once your project is soldered, it’s soldered!).

The above sounds a lot like the Toadstool boards I developed - which is to be expected, as I included the features that I found important. Of course you’ll have your own set of criteria, so will need to make your choice based on those - or even build your own board to suit the way you work, just as I did.

Option 3: Use your Arduino Board

Wait! We’re moving away from the Arduino… how could your Arduino board possibly be a way to achieve that? While this is not the path that I recommend, it is possible.

Arduino to AVR: Get Started in 3 Steps 11

Step 1: Choose Your Hardware

Your Arduino UNO (for example) already has all the components you need to work directly with the microcontroller - plus a few more. You can throw the Arduino IDE away, and still use your board. You’re able to program it through the ICSP header on the Arduino UNO using another IDE, and have it behave the same as the two options we discussed above. The one gotcha is that the Arduino pin naming doesn’t match the microcontroller’s native naming - so you’ll need to use a cheat sheet that maps the Arduino pins to the microcontroller pins.

All in all I don’t recommend this, but if it enables you to get going with the raw microcontroller faster, then go for it. You can move onto the better options at a later stage.

12 www.crash-bang.com

Step 2: Choose Your IDE

The hardware is of course only half of an embedded system - the other half is the software (or firmware). So far we’ve hinted that the Arduino IDE may not be the best IDE (Integrated Development Environment) to develop your project’s firmware in - but we haven’t gone into much detail why. In this step we’ll look at what makes a good IDE, and then take a look at some of the options available.

What’s in an IDE? An Integrated Development Environment is an application that supports the writing and development of software. At the minimum, an IDE should contain a code editor to allow you to enter the program code, and a compiler to syntax check and build the code into a format that the target machine (or microcontroller) understands. As a programmer, you live inside your IDE - I think of it a bit like my office. And just like a physical office, there are a range of features that make it more or less comfortable or useful. Think of a bare-bones office with a plain wooden desk and chair, and a low-spec PC on a desk - it’s simple and does the job you need it to. Compare that to an office with a comfortable leather chair, a wireless keyboard and mouse, a large bright monitor, a powerful PC, a high-bandwidth connection and a great coffee machine! How much more productive are you working in the second office?

Let’s take a look at some of the wireless-mouse and comfortable-chair features that an IDE has, making your programming more productive. Step 2: Choose Your IDE

Debugging

By using a hardware debugger, you’re able to step through your code as it’s running, look at the contents of variables and registers, set conditional breakpoints and a whole lot more to help you debug code that isn’t behaving as it should.

Simulation

You code runs within the IDE, which simulates your microcontroller’s inner workings and behaviour. This can be useful for testing modules within a program, or for projects where you don’t interface with external modules. All the debugging features are available, so you can look at and manipulate registers (for example the I/O registers), variables etc.

Compiler and Code Optimization

Most IDEs allow you to tap into the compiler’s code optimization settings (e.g. you can choose to optimize for size vs speed), giving you that little bit more control over how your code is compiled. In addition to the optimization you may be able to receive warnings and information about things like unused variables, better ways to write certain types of code, best practices, and even compliance with guidelines like MISRA (helping you to create robust, reliable code).

Editor Features

Editors come with a range of features that make your coding life easier. These include items such as:

Autocomplete / Visual Assist / Intellisense: As you type expressions in your editor, small popups appear anticipating what you’re trying to type and giving you guidance.

14 www.crash-bang.com

Step 2: Choose Your IDE

For example, typing a function name may popup a note showing the parameters that it accepts; typing the first few letters of a variable name will show you the name of possible variables allowing you to press the TAB key to insert the full name - this also serves as confirmation that you’re using the name of a variable that actually exists.

Refactoring / Renaming: If you choose to change the name of a variable or function, the IDE will rename all instances of the variable/function automatically for you.

Goto Implementation: This allows you to quickly and easily jump to the point in code where specific variables or functions are defined. This is a very useful way to efficiently navigate your code, as it also jumps into definitions inside “#include” files.

Code Formatting: If you’ve taken over a project from someone else, or are inconsistent in your own coding, this allows you to have your code neatly indented and consistently formatted.

Analysis Tools

Some IDEs have built-in real time analysis tools to help you troubleshoot and optimize your projects. These may depend on you having a specific hardware debugger, and may only support certain microcontrollers. Two of the tools I’ve come across are power-

Arduino to AVR: Get Started in 3 Steps 15

Step 2: Choose Your IDE

profiling (tracking your project’s power consumption over time), and oscilloscope/logic analyser functionality.

Libraries and Library Management

Some IDEs come with a set of libraries (and “drivers”) that make it easier to achieve certain tasks - for example, you may want to use an LCD library to interact with an LCD, rather than to write your own code from scratch. Additionally, as you work on projects, you’ll start to develop code libraries that you’ll want to re-use in other projects - some IDEs have functionality to facilitate this.

Device Support

A good IDE will support a wide range of microcontrollers, and make it easy for you to get started with the one you choose for your specific project. A wizard might create a project framework that includes all the files needed to support the specific device. A good set of reference examples can be useful for helping you to learn about specific functionality. Additional features could include hyperlinks to fact sheets, links to compatible programmers and debuggers, and other useful information.

Project Management

As projects become more complex, and as you modularize your projects for ease of maintenance, you’ll want to easily keep track of (and navigate between) the separate source files in your project. A tree-view is a classic way of representing the project structure, and should include all dependencies.

Give Me Some Options Now that we know what kind of features we could expect from an IDE, we need to use these to actually find one. There are a handful of choices, but to retain focus I’ve restricted the discussion to the three most common ones available. When you read this section, remember that choosing an IDE is down to personal preference; similar, I suppose, to choosing an - or the type of leather chair you want in your

16 www.crash-bang.com

Step 2: Choose Your IDE

office! All three of these have similar functionality, the only differences are really down to the ease-of-use, the cost, and the way that the user-interface is structured. Let’s take a look.

Option 1: Atmel Studio

This, as the name suggests, is Atmel’s own IDE. It sits on top of Microsoft’s Visual Studio platform, and therefore only runs on Windows. It supports Atmel’s complete microcontroller range, including their ARM processor, so gives you a good growth-path without needing to move to another IDE. Atmel Studio is free to use without any restrictions, which makes it a good choice for hobbyists and enthusiasts. This is the IDE that I personally choose to use: it is easy to install, is actively supported and developed (version 7 was released at the time of writing - October 2015), and supports all Atmel’s debugging tools. It uses the GCC toolchain, which is the de-facto open source standard for AVR microcontrollers.

Atmel Studio boasts a fairly full set of features: debugging, simulation, a well-implemented auto- complete/intellisense system, and an interface that I find easy to use. The compiler does optimize the code, but perhaps not with the same level of functionality as a professional tool. One of the things that I enjoy most about it is the way that new projects are created - once you have chosen your microcontroller, all the right files are magically included to get you up and running immediately. If I’m permitted to make a recommendation for someone starting out with AVR, then I would recommend Atmel Studio. Download Atmel Studio from Atmel’s website.

Arduino to AVR: Get Started in 3 Steps 17

Step 2: Choose Your IDE

Option 2: Eclipse with the AVR Plugin

If you’re not running on Windows, then this is the best option for you. Eclipse is a really good IDE (covering a range of programming languages), is actively being developed and improved, and has a strong community behind it. Eclipse is designed to be generic, and therefore it doesn’t work with microcontrollers “out of the box” - which is why a generous man named Thomas Holland spent a great deal of time and effort developing a plug-in for Eclipse, making it easy to develop AVR systems. Unfortunately, this plug- in is not actively being developed anymore, and relies on a third-party installation of the GCC toolchain that is a number of versions behind the latest. It is possible to upgrade the toolchain, but it takes some time and research. If you have the patience to get it installed and upgraded and running, then it’s a good solution.

The IDE is feature-rich, and next to Atmel Studio I find it the easiest to use. The big missing piece for me is the ability to debug projects without jumping through a number of hoops to get the GCC debugger working in Eclipse. I researched the best way to configure my debugger, but shied away from the complexity in getting it working.

If you aren’t afraid of spending some time configuring your IDE (or need to run on a non-windows system), then this is for you. Visit the Eclipse website to download it, or the AVR Plugin wiki page for documentation.

Option 3: IAR Embedded Workbench

This is a professional-level IDE, with everything that you’d expect for professional project development - including a hefty price tag. IAR support a range of microcontrollers from various manufacturers, so if you want a single IDE to support all your microcontrollers the chances are that this could be it (although each microcontroller-range is separately priced). As a hobbyist, you’re able to download a free 30-day trial, or a code-limited version that allows a maximum program size of 4KB. I have very limited experience with IAR Embedded Workbench - I found it less intuitive to use than I would have liked, and as I wasn’t prepared to invest financially in the paid version I didn’t put in the time to learn its intricacies.

18 www.crash-bang.com

Step 2: Choose Your IDE

Before you spend any time exploring the trial versions, I’d suggest you get a quote to see whether it really is something you’ll choose long-term. Visit the website for pricing and to download.

Arduino to AVR: Get Started in 3 Steps 19

Step 3: Choose Your Resources

We’ve covered the “what” of working directly with an AVR microcontroller - we now need to cover the “how”. It’s good that the hardware and the development environment are setup and ready to roll - but you need to know how to use these new-found tools. One of the things that I struggled with when I moved on from the Arduino, was my lack of knowledge on how the underlying microcontroller functioned - I had always used an Arduino UNO with shields and libraries that someone else had written. It took a while for me to firstly understand the fundamentals of how microcontrollers worked, and to secondly put those into practice in a project.

There is an incredible amount of information available on the internet - a search on a particular topic will likely send you to blogs, forums, YouTube, university course notes, component manufacturers, online stores, tutorials, instructables, podcasts, and more. That was what I found to be the challenge - there was just too much information available, it was unstructured, it was often from people who were learning just like I was - and so it wasn’t always reliable or accurate. This mass of information led me down rabbit hole after rabbit hole without any real results to show. The learning was slow, but I eventually settled on a number of resources that I found were either structured, or turned up good answers when I needed them. Where I wasn’t able to find clear information online, I made notes of how I solved particular problems - eventually culminating in me establishing my website containing these notes: Crash-Bang Prototyping. Here are some of my favourite resources - by no means exhaustive, so please share what you use: Step 3: Choose Your Resources

Structured Courses I learned a great deal about the fundamentals and how microcontrollers worked from a couple of courses I completed through the edX MOOC (Massive Open Online Course). They were free and operated by top universities - and although they didn’t use the AVR microcontrollers (both were focused on the Texas Instruments LaunchPad development boards) they were extremely useful. I took these two specific courses, but there are many more:

● Electronic Interfaces: Bridging the Physical and Digital Worlds

● Embedded Systems: Shape The World

Forums Forums can be extremely useful, but can also scare you off if you take the abrupt manner of some respondents to heart. I found that each forum has its own rules that you need to be aware of, or you will certainly be on the receiving end of a well-aimed slap on the wrists. The most important point to remember is that you should always search the forum for an answer to your problem before you post a question - while members are willing to share their knowledge, they don’t want to waste time answering the same question over and over. Some of my favourites, for AVR-based information, are:

AVR Freaks: this is the best forum I know dedicated to AVR microcontrollers. It seems to be affiliated to Atmel, with staff often on the site. It is a very active forum, with many extremely knowledgeable members.

StackOverflow: a forum for all things programming, with a number of members asking and answering questions on AVR programming specifically. Make sure you stick to their strict guidelines on acceptable posts and etiquette.

Reddit - the AVR subreddit: Reddit users are more forgiving, in line with a forum that is less structured.

Arduino to AVR: Get Started in 3 Steps 21

Step 3: Choose Your Resources

Arduino StackExchange: this is actually an Arduino forum, but some AVR-specific topics pop up from time to time.

Podcasts and Magazines While these sources aren’t focused on microcontrollers, there are often podcast guests and magazine articles that cover relevant topics you won’t easily find elsewhere. I subscribe to the following and never miss an edition:

Embedded.FM Podcast: hosted by Elecia and Chris White, it covers an eclectic range of topics with some quite technical episodes.

The Amp Hour Podcast: hosted by Chris Gammel and David Jones, this provides great entertainment with some really interesting guests.

The Spark Gap Podcast: hosted by Karl Bowers and Corey Lange, they have a number of episodes that dive into specific topics, providing good learning opportunities.

Elektor Magazine: has some good tutorials, as well as projects that illustrate ways to use microcontrollers.

Nuts and Volts Magazine: carries a series of articles I am writing (Beyond the Arduino), designed to help you progress from Arduino to AVR.

Other Websites There are too many other websites to include here, many of whom have great newsletters that keep you challenged. I’d suggest that you spend some time finding ones with content that really resonates with you, and then bookmark them or plug into their RSS feeds and newsletters.

22 www.crash-bang.com

Wrapping It Up

If you’ve read this far, then you’re well on your way to progressing from the Arduino environment into one that is more challenging and more flexible. It is exciting working with the raw microcontroller: not only are you able to develop more efficient and feature-rich embedded projects, but you’re also opening yourself up to the potential of creating your own custom boards and possibly even products you can sell.

We’ve covered the three steps to get you started down the path - but that’s only the beginning of the journey. Hopefully it will be a journey that keeps you growing, and achieving things you never thought possible with a small piece of silicon. Enjoy the ride!

Oh, and make sure that you share your thoughts or comments - leave them on my website, drop me a mail, or get in touch on twitter: