Alpha Clock Firmware v2

From Evil Mad Scientist Wiki
Revision as of 19:57, 8 September 2012 by Windell (talk | contribs)
Jump to: navigation, search

The Alpha Clock Five is an alarm clock and alphanumeric LED display development platform based on the ATmega644A AVR microcontroller. It can be programmed through an AVR ISP programmer, using standard AVR-GCC techniques, or through an FTDI USB-TTL interface, using a modified version of the Arduino development environment.


Alpha Clock Five firmware version 2.0 is coming soon. Please go here for information about firmware version 1.0.


Bootloader (Arduino style) programming

The microcontroller in Alpha Clock Five kit comes preprogrammed with the Sanguino Bootloader. Because of this, Alpha Clock Five can be reprogrammed right in the Arduino environment, through a USB-TTL interface such as the FTDI USB-TTL cable or the http://evilmadscience.com/productsmenu/accessories/210 Adafruit FTDI Friend].

The bootloader itself can only be written (or rewritten) with an AVR ISP programmer, such as the USBtinyISP. While most users will not ever need to do this, see below (under AVR ISP Programming) if you should need to do so.


Setting up the environment

Alpha Clock Five requires a rather specialized programming environment, that uses some older software versions and will be updated in the near future.


Required software:

  • Arduino 1.0.1 (available here).
  • Sanguino version 1.0.1 from here.
  • Arduino Time library, available here.

First, install the Arduino program on your computer.

Secondly, install the Time library in your Arduino libraries folder. The exact location of this libraries folder depends a bit on your operating system. For example, on Mac OSX, the directory would be ~/Documents/Arduino/libraries/. On Windows, it would be My Documents\Arduino\libraries\ . If your library is installed correctly, it will show up in the Sketch | Import Library menu in the Arduino program when you restart it.

Finally, the Sanguino extensions need to be installed separately, and the method for that depends, very slightly, on your operating system:

Installing Sanguino: Mac

First unzip the Sanguino .zip file, which reveals a folder called "Sanguino." Then, find the location where you need to install it.


  • Locate your Arduino.app file, version 1.0.1 (which you may have just installed).
  • Ctrl-click the file to show the contextual pop-up menu.
  • From that menu, select "Show Package Contents."
  • Within the resulting directory (Arduino.app), navigate to the folder Contents/Resources/Java/hardware
  • Inside "hardware" there several folders, including one called "arduino." Copy the whole "Sanguino" folder, which you unzipped earlier into the hardware folder, next to "arduino."
  • Restart Arduino.

If the Sanguino software is installed correctly, you will see Sanguino options in your Tools>Board menu.


Installing Sanguino: Windows

First unzip the Sanguino .zip file, which reveals a folder called "Sanguino." Then, copy that to within your Arduino application.

  • Locate your Arduino application, version 1.0.1 (which you may have just installed).
  • Copy the Sanguino directory to arduino\hardware/
  • You should end up with arduino\hardware\Sanguino\
  • Restart Arduino.

If the Sanguino software is installed correctly, you will see Sanguino options in your Tools>Board menu.


Installing Sanguino: Linux

First unzip the Sanguino .zip file, which reveals a folder called "Sanguino." Then, copy that to within your Arduino application.

  • Locate your Arduino application, version 1.0.1 (which you may have just installed).
  • Copy ~/Sanguino to arduino/hardware/
  • You should end up with arduino/hardware/Sanguino/
  • Restart Arduino.

If the Sanguino software is installed correctly, you will see Sanguino options in your Tools>Board menu.


Uploading firmware

Connect your FTDI interface (e.g., USB-TTL cable) to location J2 on the circuit board (the 6-pin SIL right-angle header also labeled "LOGIC-LEVEL (TTL) SERIAL"), watching the polarity. For one of the cables with rainbow-wires on the end, black goes down, green goes up.

Make sure that the correct serial port is selected in the Tools>Serial Port menu.

Select "Sanguino W/ ATmega644P" from your Tools>Board menu

Make sure that Alpha Clock Five is powered on.

Click the "Upload" button in your Arduino window to upload a sketch.


Change in baud rate from firmware version 1.0

The bootloader baud rate is the interface speed at which your computer talks to the Alpha Clock Five hardware when writing new firmware. The baud rate supported by the Arduino/Sanguino development environment has changed since firmware version 1.0, as follows:

  • Alpha Clock Five firmware version 1.0 is based on Sanguino version 0023r2, which has a default a bootloader speed of 38400 baud.
  • Alpha Clock Five firmware version 2.0 is based on Sanguino version 1.0.1, which has a default bootloader speed of 57600 baud.


Therefore,

  • Alpha Clock Five kits that originally shipped with firmware version 1.0 need to be programmed at 38400 baud.
  • Alpha Clock Five kits that originally shipped with firmware version 2.0 need to be programmed at 57600 baud.


As this baud rate is programmed into the bootloader section of the microcontroller's firmware, it can only be changed by rewriting the microcontroller's bootloader, with an AVR ISP programmer. So, to upgrade an Alpha Clock Five kit from firmware version 1.0 to version 2.0, you have two choices: Either (A) Reprogram the bootloader with an AVR-ISP programmer or (B) Modify the development environment so that it uses a bootloader speed of 38400 baud. If you choose to do neither, programming will not work, and you will get an error. (Likely error: "avrdude: stk500_getsync(): not in sync: resp=0x00")


To modify the Arduino/Sanguino development environment to work at 38400 baud, you will need to locate and edit the "boards.txt" file within your Sanguino installation. This file is located inside the Sanguino folder that you installed earlier. (If you cannot locate it, refer to the instructions above about where your Sanguino folder was installed.) In that file, locate the line that reads "atmega644.upload.speed=57600", change it to read "atmega644.upload.speed=34800", and save the file.


Programming the bootloader

Most users will not need to reprogram the bootloader at any point.

Programming the bootloader onto a new ATmega644A requires an AVR ISP programmer (see more about that below). This can be done directly from within the Arduino environment (using the Tools>Burn bootloader option), but is complicated by the fact that we are using an ATmega644A rather than the ATmega644P normally expected by Sanguino.

First, download this alternate boards.txt file (1 kB .zip file), which includes a definition of the 644A for purposes of using the bootloader.

Then, to install the bootloader:

  • Select as your board type (from Tools>Board), "Sanguino W/ ATmega644/644A"
  • From Tools>Burn Bootloader, select your AVR ISP programmer type, to actually burn the bootloader

After installing the bootloader, select board type "Sanguino W/ ATmega644P" when you wish to reprogram the board through the bootloader, as the "software" device signatures returned by the bootloader are those for the '644P. If you reprogram the board through an ISP programmer (including reburning of the bootloader), you will still need to select ATmega644A as the device type.


Technical note on device signature

The device signature that the Alpha Clock's bootloader returns is that of the ATmega644P (not the ATmega644A). This is intentional. It is (1) code compatible and (2) better supported under both AVR-GCC and the Arduino/Sanguino environments. There are longstanding bugs in support for the 644A, and this is a stable and sane workaround.

The "hardware" device signatures-- those that you will read if you try to reprogram the AVR through an ISP interface --do remain those of the ATmega644A.


AVR ISP Programming

The Alpha Clock Five PCB features a 6-pin AVR ISP connector (J4), which can be used to program the microcontroller through any suitable AVR ISP programmer. We recommend the Adafruit USBtinyISP programmer for most purposes. The Alpha Clock Five should be powered separately from 5 V while programming; Alpha Clock Five requires more power than can usually be safely provided by USB.

The circuit can be programmed through AVR-GCC or any other AVR software environment, including AVR Studio. If using AVR-GCC, you may find it helpful to target (set the MCU type as) the ATmega644P rather than the ATmega644A, as it is better supported.

Please refer to the schematics (PDF) for pinouts and electrical features of the Alpha Clock Five.


Standard Firmware

Version 1.0

Version 1.0 of the Alpha Clock Five firmware is discussed here.


Version 2.0

Currently under development.


Besides the Arduino 1.01/Sanguino environment described earlier, this code requires that you install the "new" Time library, available here. This should be installed like regular Arduino library, within the "libraries" directory of your sketch folder.


Planned future versions

Planned future features include:

  • Additional display modes
  • Expanded serial communication, with additional commands
  • Expanded serial communication, using the second serial port for daisy-chained displays

If you would like to suggest additional features, please use the talk page or the Evil Mad Scientist Forums.

Code contributions and are welcome, of course, and we will be setting up a formal repository in the near future. In the mean time, please contact Evil Mad Scientist Laboratories if you are interested in contributing.


Alternate "Demo" firmware

A simple demo program, which shows displaying text on the LED display, playing sounds, lighting up the rear-panel nightlight, and recognizing button events is available for on the firmware v. 1.0 page. It has not yet been tested or updated for the development environment used by firmware v. 2.0.