Scrolling Text Display on 8×8 LED Matrix using AVR Microcontroller Using Atmega

In this tutorial we are going to design an 8×8 LED Matrix Scrolling Display using ATMEGA32, which will show scrolling alphabets.

8×8 LED Matrix contains 64 LEDs (Light Emitting Diodes) which are arranged in the form of a matrix, hence the name is LED matrix. We are going to make this Matrix by soldering 64 LEDs on to the perfboard or DOT PCB. The LEDs can be of any color, choose the ones which are available with you. Then we will write a C program for ATmega32 AVR Microcontroller to control these 64 LEDs matrix. The ATmega, according to program, powers appropriate LEDs to show characters in scrolling fashion. We have previously done same Scrolling Text project with Arduino.

Components Required:

• ATMEGA32
• Power supply (5v)
• 64 LEDs
• 1KΩ resistors (8 pieces),
• AVR ISP Programmer
• Perfboard with other soldering tools
• ATMEL STUDIO 6.1

Circuit and Working Explanation:

There are 64 LEDs arranged in a matrix form. So we have 8 columns and 8 rows. Over those rows and columns, all the positive terminals in a row are brought together. For each row, there is one Common Positive Terminal for all 8 LED in that row. It is shown in below figure,

So for 8 rows we have 8 common positive terminals. Consider the first row, as seen in the figure, 8 LEDs from D57 to D64 have a common positive terminal and are denoted by ‘POSITIVE0’. Now if we want glow one or all LEDs in the first ROW of matrix, then we should power the A0 of LED Matrix. Likewise if we want to glow any LED (or all) in any ROW then we need to power the corresponding Common Positive Terminal Pin of that respective Row.

This is not over yet and just leaving the MATRIX ROWS with positive supply will not yield anything. We need to ground the LEDs negatives to glow them. So in 8×8 LED matrix, all the negative terminals of the LEDs in any column are brought together to form eight Common Negative Terminals, like all the negative terminals in first column are connected together to the C7 (NEGATIVE7).

Driving 8×8 LED Matrix using Multiplexing:

Now let’s say we want to turn ON LED57 then we need to power PORTA0 of ATMEGA32 and ground the PORTC0 of ATMEGA32. Now for turning both LED57 and LED50 on, we need to power PINA0, PINA1 and ground PINC0, PINC1. But doing so will not only turn on D57, D50 but also D49, D58. To avoid that we use a technique called Multiplexing. We have already discussed this Multiplex Technique in 8×8 LED Matrix in detail; go through that article for detailed explanation. Here we are explaining the Multiplexing briefly.

The human eye cannot capture a frequency more than 30 HZ. That is if a LED goes ON and OFF continuously at the rate of 30HZ or more. The eye sees the LED as continuously ON. However this is not the case and LED will be actually turning ON and OFF constantly. This technique is called Multiplexing.

Let’s say for example, we want to only turn on LED57 and LED50 without turning on D49 and D58. Trick is, we will first provide power to first row to turn ON LED57 and wait for 1mSEC, and then we will turn it OFF. Then we will provide power to second row to turn on LED50 and wait for 1mSEC then will turn it OFF. The cycle goes continuously with high frequency and LED57 & LED50 will getting On and Off rapidly and both the LEDs will appear to be continuously ON to our eye. Means we are only providing power to the one row at a time, eliminating the chances of turning on other LEDs in other rows. We will use this technique to show all characters.

We will write decimal value for each character and we will program these values into the ATMEGA32. The program shifts these values from left to right continuously showing scrolling characters.