Monday, August 19, 2013

3208Clock Part 3: Implement the board into the Arduino IDE

General overview

In this post we take a closer look into the configuration of the Arduino IDE and we also upload the first test sketch to the 3208Clock.

UPDATE:

24. Jul.2016:
I figured out that the following descriptions does not work anymore for the actual Arduino IDEs (> 1.5.x). I have no clue how its done now and i assume its a similar way to implement the new board but at the moment i dont have the time to do it.

Add the new board to the configuration files of the Arduino IDE

There is a configuration file called boards.txt in the program folder of the Arduino IDE. It can be found here .../arduino-1.0.5/hardware/arduino/boards.txt. Open this file in a text editor and add the following lines at the end of the file and save the file. Then start/restart the Arduino IDE. Now there is an entry called "Lattice Clock w/ ATmega8" in the Arduino IDE which can be found in the menu Tools - Boards.

atmega8.name=Lattice Clock w/ ATmega8
atmega8.upload.maximum_size=8192
atmega8.bootloader.low_fuses=0xe4
atmega8.bootloader.high_fuses=0xc9
atmega8.build.mcu=atmega8
atmega8.build.f_cpu=8000000L
atmega8.build.core=arduino
atmega8.build.variant=standard

The entries in the boards.txt are more or less self explaining but we still want to venture a further look on the parameters.

atmega8.name=Lattice Clock w/ ATmega8

With this parameter the name which will be shown in the Arduino IDE under the boards section can be set. In this case its "Lattice Clock w/ ATmega8"

atmega8.upload.maximum_size=8192

This parameter sets the maximum upload size of the hex-file. in this case we can use the complete 8192 bytes (8kB) of the ATmega8L program space. It is not necessary to install a boot loader on the device because the ICSP connection will be used.

atmega8.bootloader.low_fuses=0xe4
atmega8.bootloader.high_fuses=0xc9

With this two parameters the two bytes of the fuses will be set. The fuses are the internal configuration of the Atmel chips.
With this fuse settings the reservation for the boot loader in the flash space is disabled and it is also set to a clock frequency of 8MHz from the internal oscillator.

IMPORTANT! If you don't know exactly what you are doing with the fuse settings then it is very easy to reduce the usage of the device to a paperweight. Changes are at your own risk.

atmega8.build.mcu=atmega8

This parameter tells the compiler of the Arduino IDE which micro controller is used.

atmega8.build.f_cpu=8000000L

This parameter sets the information of the clock speed (in this case 8000000Hz or 8MHz). This parameter is used by the compiler to calculate some constants which will be used by some of the internal hardware of the ATmega e.g. usart / serial connection.

atmega8.build.core=arduino
atmega8.build.variant=standard

I'm not sure what this two parameters are doing. If someone has an idea please leave me a message in the comments.

Burn the fuses

Select the board "Lattice Clock w/ ATmega8" in the boards menu and select the programmer (If you use an Arduino as a programmer then select ArduinoISP). Both can be found in the Tools menu.

IMPORTANT! If the wrong board is selected for example the Arduino NG or older w/ ATmega8 then you will brick the 3208Clock because the fuses for this board configure the clock source to external 16MHz quartz. The 3208Clock does not have an external 16MHz quartz.

After the correct programmer and board has been selected go again to the tool menu and click on Burn Bootloader. In our case it only flashes the fuses and erases the chip.

Build a "Test LED" and flash the test sketch to the device

I guess a picture says more than thousand words. I have used a 1kOhm resistor. Everything between 330 and 1000 Ohm will be fine. Also the selection of the LED is not critical any common LED which emits visible light will fit. It is also not necessary to solder the LED to the board for the first test it only needs to be plugged through the holes of the DS18x20 footprint.


If the LED is prepared so far then please download the test sketch from my github repository or use the blink sketch from the examples and change the ledPin from 13 to 15.

To burn the test sketch to the 3208Clock you must hold the shift key while clicking the upload button. Otherwise the Arduino IDE tries to use the serial connection to upload the sketch which will cause an error message.


In the next posts we will take a closer look on how to get in contact with the Holtec HT1632C display driver to get something shown on the display.

Sunday, August 18, 2013

3208Clock Part 2: Prepare the Hardware to get connected with the Arduino IDE

Hardware connection

The 3208Clock has of cause no Arduino boot loader installed and it also has no serial or USB connection on pin headers. For this reason it is only possible to program the device over the ICSP connector with an programmer like an AVR ISPmk2.

Don't be scared. If you have an Arduino (I only tested it with the UNO but it should also work with older versions) then you also have an ISP Programmer. Just flash the ArduinoISP sketch which is delivered with the examples of the Arduino IDE to your Arduino.


Here are the parts that are needed to make the connection.
  • 1 Arduino (in this case its an Arduino UNO others should work as well)
  • 6 Jumper wires female to male
  • 1 2*3 pin header OR I would recommend a boxed header


The pin header / boxed header must be soldered to the 3208Clock board. To make sure that the boxed header is mounted in the correct direction take a closer look on the picture below.


And here is a picture with the finished setup. Please double check the connections before you power on the Arduino programmer just to make sure that the Arduino and the 3208Clock is still alive after our first try.


If there is already an ISP programmer by hand then of cause this can be used. I personally use a USBprog which works as an AVR ISPmkII clone.

In the next post I will show a closer look into the configuration of the Arduino IDE. Especially the way how a new device can be added so that it can be selected under Tools - Board in the Arduino IDE.

Tuesday, August 13, 2013

The modified 3208Clock Part 1 the beginning

I stumbled upon this lattice clock while I was surfing through the products of one of this Chinese Internet sellers with worldwide free shipping. I thought "OK, 12$ (~9,0 EUR) what can I loose?" So I've ordered one of this devices.

I have stolen this Picture from www.FastTech.com

After only four weeks the package has arrived. My first thought was to quickly unwrap it and connect it to power to see what it is doing...

...BÄÄM! INSTANT KILL!
It took me $12.30 and a lot of patience (waiting for delivery) to learn that this device can not be powered directly by 12V DC. After the magic smoke has disappeared and I have turned the PCB I have seen that this device is labeled with DC 5V

From this setback, I did not let me discourage and I ordered a new unit. During the delivery time for the new device I had some time to do some reverse engineering. So I unmounted all the parts which hide the direct view to the PCB.

The contents of the 3208Clock

This device consists of an ATmega8L which is the brain of the Clock and a Holtec HT1632C Display controller paired with four 8x8 LED segments.

Optional components

During my investigation I have discovered that the PCB was in general developed in a very clever way. The following parts can be retrofitted to the board.
  • Mini USB port
  • TSOP infrared receiver
  • DS18x20 1-Wire temperature sensor / LM35 temperature sensor
  • Bi-color LED (color changing by reversing polarity)
  • 6-Pin ICSP header to reprogram the ATmega8L
  • Buzzer/Speaker (can not be mounted if ICSP header is mounted)
  • On the backside is a place to mount a RTC IC and a coin cell battery to power the clock IC if the main power is not connected.
But due to the Problem that the ATmega8L has only 8KB of program space I'm not sure if all of the above components can be implemented into the software.

PCB Overview

The most interesting part seems to be the right part of the front side. Here are a lot of footprints of the unpopulated optional parts which can be used to interact with the real world.



I have prepared a picture which shows which pins of the ATmega8L are connected to the footprints. The numbers are the Arduino pin numbers. I was to lazy to also write the original port pin numbers like "PB3" to the Picture. But here you can see a very good pinout diagram made by Pighixxx. I know its for a ATmega168 but the Pinout is more or less compatible.


Here is a picture of the backside of the PCB. We see here that three ICs can be mounted to the board. From left to right we have at first the footprint for the ATmega8L with its TQFP32 package. The next ones are the footprint for a battery and a SO16 IC where a RTC can be mounted.
The last one is the Footprint 52 pin QFP footprint for the Holtec HT1632C driver IC for the 8x8 LED displays.


I also have made a picture with some additional descriptions for some pins. During my reverse engineering I also painted some pads red to make it easier for me to track the +5V line. Also take a look at the top left of the picture there is a very important information written which I have ignored at my first try.



My actual setup

The only parts from the optional components which I have installed are the ICSP header for programming the device and a bi-color LED which was laying around for debugging purposes.


With the Setup in the picture above I'm now able to send a zero terminated string to the device over Bluetooth which will then scroll through the display. Here is a short video which I have made.


The next steps

In the next posts I will show a more insight view about the single steps which I have made to get this device up and running with the Arduino IDE and a couple of libraries. I also want to upload a well commented version the code to GitHub so that everyone can get started with playing around with this cheap and versatile device.

I'm not sure which topic the next posts will have but they will be more or less related to the 3208Clock device. It is also possible to post requests for additional informations of specific parts of this device or the procedure of hacking it to the comments.




Just some info about me and how do I got addicted to playing with electronics

The early days

I was born in the early 80s in the near of Frankfurt Germany and I soon have discovered that it is very interesting to disassemble things to more or less (more less than more) understand how they are working.

I guess I was 10 as I got my first own IBM compatible PC. This device laid the foundation stone for my later life.

The youth / I survived the 90s

It was a hard time. At the beginning of the 90s there was no Internet, no smart phones and even no cell phone. (OK, there were cell phones but they where not affordable to common people, you also have needed a briefcase or a car to transport them) We have used phones which where connected with a cable to a special outlet on the wall in our house.

At the mid of the 90s I gained access to the Internet. At this time the Internet looked like an LSD trip. Especially under some enthusiasts which have created their own private pages. There where some unwritten rules to design private web pages. I just want to point out some of these rules here:
  1. Use as many different colors as possible. There where 16 different colors. With some patience and training you where able to implement all of them into one page.
  2. Try to bring some harmony into your page. E.g. Blue text on green background. Yellow text on blue background was also very popular.
  3. Use frames, at least three.
  4. Use plenty of animated GIFs which do not belong to the topic of the page. (If there was a topic) 
  5. The last but also one of the most important point was to upload a lot of large pictures to show the visitor that you either have a lot of patience to upload the pictures or to blame all your visitors which where visiting your page with an 28.8kbps modem which was pretty slow.
During this time I also played a lot of computer games and also played with some electronic kits.

The first decade of the new century

School was finished and I had to start with working / learning a job. I my case I have learned electrician at construction sites. I general I would say that working is a nice activity but you definitely loose to much leisure time.

I've done this job until the mid of this decade. Then I have decided to go back to school for two years to improve my skills and to rise my value to the job marked.

One of the teachers has developed the PICee development and learning platform for PIC microcontrollers. This was also part of the lessons, so I got the first contact to C and the world of programmable micro controllers. I was interested in electronics for a long time but I have not got the final push into this topic until the beginning of this lessons.

And today its a hobby for me which is inevitable.

Until today

Since this time I'm playing with micro controllers. The first time I used the PIC16Fxxx from Microchip but then I switched to Atmel because they have full support for Linux. And about a year ago I have discovered the Arduino plattform which makes my life a lot easier.

Here is a short list about my skills (or things which I believe I'm skilled at)

German, English, Perl, C, HTML, Linux, Arduino, Electronics (More the digital part, for the analog stuff I would need better math skills), Eagle CAD Software, Beckhoff PLC, CNC-Programming (DIN code)


Hope that was enough info about me

Sunday, August 11, 2013

The first test entry

 

So this is just the first test entry to get some look and feel of this Blogger engine.
A RaspberryPi project which I already have published on Github.

And here is a Picture of this Project: