Over the years I’ve written a few fairly lengthy tutorials relating to AVRs. Originally, I posted these over on the AVRFreak’s Tutorials forums, but after many requests for PDF versions and after becomming frustrated at the lack of typesetting expressiveness given in the forum software, I converted over the text into LaTeX.
Now the tutorials are available in PDF form, and can be freely redistributed under an MIT license. I’ve even put up a public mirror of the tutorial LaTeX source SVN repository, so that others can fork off and examine past revisions of the files as I update them in the future.
I created this reference sheet for my BB313 board outlining all the alternate pin functions and descriptions. While I’ve pretty much got the pins memorized at this point (from constantly cross-checking with the ’313 datasheet), I wish I’d thought of this earlier. The sheet is a single-page 8.5×11 PDF, so you can just print it out and keep it for reference at the workbench (or desktop). You can get the PDF, as well as all the project source files, at the GitHub project page.
When I started this, as can be seen in the image below, the case was two parts that fit together in a semi-complex manner (Actually, the very first version just had a little plastic square that covered the AVR, but nothing else). It was hard to print with any quality and, frankly, the front looked awful. So I simplified it such that the IR LED could stick out a small hole, as seen in the middle. But then it dawned on my that the translucent plastics might just be transparent enough to IR that no hole was needed at all. And sure enough, it just worked! Thus, the design is now even simpler (assuming you have translucent filament).
Welcome to the Atmel® University Program. Our mission is to support the academic community and to advance education through technology platforms, engineering resources and classroom solutions.
You are invited to become a part of an educational community with over 1,000 members worldwide. Here, you can collaborate and learn from each other by sharing curricula training materials and student projects.
Apply for donations
Request student sponsorships
Access curriculum material and labs (educators)
Access training material
Enjoy discounts and specials on recommended textbooks
Get 50% discount on boards and kits, plus discounts and specials from partners
Get free passes for special Atmel training events
Get early access to product updates and news on Atmel events and training opportunities
For an embedded project I’m working on, I had to implement an algorithm to convert from HSB (hue/saturation/brightness) to 8-bit RGB color values for PWM’ing LEDs. This is what I came up with. It creates a ‘constant brightness’ RGB value: at full saturation (no ‘whitewash’), only two of the 3 RGB colors are on at a time, and their ‘on’ times are mathematically complimentary (though not phase-complimentary) with respect to the max 255 value.
Increasing saturation will increase the overall brightness of the LEDs, but that is to be expected — for a given maximum magnitude, there is more overall energy in white light than there is in light of a particular color. The saturation calculation works by adding a constant ‘floor’ value to all channels. Individual color values are then placed between this floor and the 255 maximum. A saturation value of 0 results in all channels at 100% duty cycle.
The ‘brightness’ is the last calculation performed. It takes a saturation modified hue value, and simply proportions it to the maximum value. So, a brightness of 197 will output light which is ~197/255 of the maximum output value. Naturally, there are losses inherent to integer arithmetic, but it’s close enough for most uses. Further, the linear nature of the brightness control means it is not ‘gamma corrected’ — that would require logarithmic brightness control which, for what I’m doing, is completely unnecessary.
This algorithm uses no sine tables or floating point math, so it’s pretty fast, though it could probably be optimized to use shifts and adds instead of mults and divides. It’s also relatively small. The code itself is in C, so it can be used on most platforms.
Click ‘more’ for the code snippet and just copy/paste into a text editor –
A little over a year ago, I started playing around with the newly available AVR ATTiny4313. It’s a neat little chip, and you can have a lot of fun with it. However, I soon got tired of wiring up programming headers, power supplies and all the other stuff you need to get up and running. I also grew wary of all this support circuitry taking up significant breadboard real estate.
To eliminate all that hassle, I created the BB313. It’s got all the stuff you need (programming header, regulated 5V power, etc.) wrapped up in a nice little package, and it plugs in on the edge of the breadboard so you have lots of space for other stuff. I also added an 6-pin connector for an FTDI cable or adapter.
I originally designed it for myself, but I figured other people might like it too, so I’m releasing it open-source CC-BY-SA 3.0) so you can make your own.
NEW PRODUCT – Teensy++ (AT90USB1286 USB dev board) + header! The Teensy++ is a complete USB-based microcontoller development system, in a very small footprint! All programming is done via the USB port. No special programmer is needed, only a standard “Mini-B” USB cable and a PC or Macintosh with a USB port. Its the big sister version of the popular Teensy board we carry, this board has tons of FLASH, RAM, pins and more. This is the latest version, 2.0.
USB can be any type of device
AVR processor, 16 MHz
Single pushbutton programming
Easy to use Teensy Loader application
Free software development tools
Works with Mac OS X, Linux & Windows
Tiny size, perfect for many projects
Comes with headers pins that you can solder on to plug it into any solderless breadboard
Comes with assembled Teensy++ board (AT90USB1286 with bootloader preinstalled) and header to allow easy breadboarding. We suggest using AVR-gcc (like WinAVR) with the LUFA library or ‘Teensyduino’ Be sure to check out the multiple resources available at PJRC!
It’s ideal when you need simultaneous data. If you try the example that comes with SoftwareSerial in Arduino 1.0, and type “Goodnight” in the Arduino Serial Monitor, you’ll see what actually comes out of pin 3 at 4800 baud is “Goot”. The characters “dnigh” are lost. The reason is because while SoftwareSerial is sending the letter “G” at 4800, the letters “oodnigh” arrive at 57600 baud. Only “oo” are held in the UART registers. The rest are lost because interrupts were disabled for too long.
Often people misunderstand these problems and falsely attribute them to NewSoftSerial’s inability to keep up with the rapid pace of data. In this example, the failure is actually on the hardware serial reception. NewSoftSerial is easily able to work at 4800 baud, but in doing so it interferes with other things.
BACK IN STOCK – Atmega32u4 Breakout Board. Toss out those FTDI cables and go USB-native with the ATmega32u4. After many months of back-orders, we finally received a shipment of these little guys and are excited to offer our breakout board. The little dev board keeps it simple, with just the bare essentials:
Atmega32u4 – AVR core with USB capability. 32K flash, 2.5K RAM running at 16MHz
Standard AVR 6-pin ISP connector for direct programming (when you need the extra space)
Big Bootload/Reset button
500mA fuse on the USB power line
Power LED and ‘user’ LED (also indicates when the bootloader is active)
Fits nicely in any breadboard
4 mounting holes
This breakout board is best for those who have familiarity with some microcontrollers and are comfortable with writing code in C. This board doesn’t come with any ‘learn to program’ tutorials! If this is your first time with a microcontroller, we suggest going with an Arduino which is easier. Then when you want to upgrade, check this out.
Plug it in, connect a mini-B USB cable and you can start writing code immediately. With the built-in bootloader you don’t even need an AVR programmer. We suggest checking out the LUFA library to get started with the USB core as nearly every kind of device has an example already.
Thanks for the ATmega32U4 Breakout Board and TPIC6B595 chip. They are super! I am using them to learn basics. I always write a blog entry about what I learn. This way I am forced to learn the details and remember things better. Currently learning about shift registers and SPI.
I say “partially” self-balancing because it only balances along one axis (forward/backward), and the rider still needs to balance left and right (it’s analagous to riding a bicycle “no hands”). It operates much like a Segway — you lean forward to accelerate, and lean back to brake. The top speed is about 15 mph, and it easily goes 5 miles on a single charge. This is my primary mode of transportation on the MIT campus.
When I was a little kid, my dad worked at Bell Labs. Every year around Christmas, we’d go visit him at work. One memory which has always stuck with me from my holiday visits was seeing a Christmas tree on an oscilloscope. I was pretty amazed by it. Engineers are a funny bunch — they tend to celebrate holidays in the most uniquely nerdy and wonderful ways, just like kids. When I recently acquired a new ‘scope and wanted to familiarize myself with it, I knew exactly what my test circuit was going to be.
In honor of the nameless BTL engineer whose scope scribbling captivated me as a child, here we are. Maybe the same thing will happen for some other kid. There are a lot of holiday parties coming up. You could put this on one of your scopes at work or at your hackerspace, and some other kid will see it, and it’ll fire their imagination too. It looks pretty neat at any rate, and it’s downright fascinating after a few fortified egg nogs.
At the completion of my internship at Atmel Norway in late 2010, I was offered a full time position working as an AVR Applications Engineer in the Atmel Norway facility. While the start date of this job was delayed to give me time to finish my University degrees, I have now completed all required materials and am only a few weeks away from the big move. In early 2012, I will be moving across to the other side of the world, to join the ranks of the Atmel AVR Applications group and live in Norway.
Designing and implementing device drivers for mobile space operating systems such as Android to interface to user interface co-processors.
Managing the technical relationship with operating systems companies to specify next generation feature sets.
Team leader for a distributed group responsible for designing, building, integrating, testing, validating and documenting device drivers.