Work In Progress!

POV Display

A persistence of vision display made with an ATMEGA32 dev board (microHOPE) and a table fan.

A persistence of vision display made with an ATMEGA32 dev board (microHOPE) and a table fan.




The Indian Institute of Science Education and Research (IISER), Mohali organizes an annual event , during the course of which, its doors are thrown open to school kids in the hope that they will be inspired to take up scientific research.



Several Demos are set up by students of IISER that explain simple concepts as well as attract and enthrall.

One of the demos I set up was a persistence of vision display.  It consists of a linear row of Light Emitting Diodes controlled by a microcontroller. This rig is then taped to a rotating  platform such as a table fan, and the microcontroller is coded to blink the LEDs at precise intervals in order to generate patterns/text in mid air.  The viewer is unable to distinguish the flickering nature of the LEDs due to his/her eyes’ slow frame rate, and instead sees a complete pattern.  The stationary red LED is used to trigger the electronics and ensure that the text formed by each rotation overlaps perfectly with the rest in the viewer’s frame of reference.

Technical details:

All code was written in C, and downloaded onto an Atmega32 processor. The microHOPE dev board was used to save time.
A few automatic RGB LEDs were added to include a pleasing effect.

In order to figure out the blinking sequence for each character, a 8×7 grid was drawn and relevant pixel coordinates converted to binary.

A handheld POV display  ( Made a few years prior )

A Display using a row of 8 LEDS that rapidly change patterns as you wave it through the air giving the

impression of an display with 8xX resolution .. X depends on how far you wave it , usually around 50 or so.

The program in this instance merely repeats the characters T & A in a loop and, waving the board around shows you TATATA….

no switch was used in order to synchronise their appearance.…

How it works

Displaying a character, say A.

‘A’ on an 8×8 grid looks like

2 3 4 5 6 7 8
1 X X
2 X X
4 X X
8 X X X X
16 X X X X X X
32 X X X X
64 X X X X
128 X X

the first column lists the bit values that represent each LED. The marked LEDs in each column need to be lighted rapidly one column

after the other in order to make an A appear as you wave the entire LED column in the air.

WHEN PORTB=128+64, the bottom two LEDS glow , next, PORTB=64+32+16+8, LEDS 4,5,6,7 glow and so on

so if i were to store the values for A in an array it would look like

uint8_t ca[]={128+64,64+32+16+8,32+16+8+4+2,17,17,32+16+8+4+2,8+16+32+64,128+64};

and a loop execution of the elements of this array in quick succession,


the following program was loaded onto an atmega32 with a boot loader preloaded . It displays ‘JITHIN’.



An alternative arrangement would be to have a rotating mirror and keep the LED row in front of it.. the mirror must have an input trigger

and you can easily view your text in the mirror… this is better since the angular velocity of the mirror can be kept fairly

constant thus giving you a maintained aspect ratio.

No Comments Yet

Leave a Reply

Your email address will not be published. Required fields are marked *