Line 308: Line 308:
 
* To upload a new image, '''hold down the RESET button, press and release the BOOT button and then release the RESET button''' as shown below.
 
* To upload a new image, '''hold down the RESET button, press and release the BOOT button and then release the RESET button''' as shown below.
 
* Note the LEDS will stop blinking once the kit is detected by the computer.
 
* Note the LEDS will stop blinking once the kit is detected by the computer.
 
+
==POV Board Soldering Steps==
 +
[[File:POV_Board_Soldering_Steps.gif|framed|POV Reset Sequence for uploading new image]]
 
=Downloads=
 
=Downloads=
 
*[http://exploreembedded.com/wiki/images/b/b3/Explore_POV_v1.pdf Schematic]
 
*[http://exploreembedded.com/wiki/images/b/b3/Explore_POV_v1.pdf Schematic]
 
{{DISQUS}}
 
{{DISQUS}}

Revision as of 16:45, 15 November 2014

POV poster copy.jpg

The colorful Persistence Of Vision (POV) kit enables you to create colorful messages in air with just 8 LEDs. This kit is great introduction to soldering and AVR/Arduino Programming. The kit does not require a external programmer, it is self programmable with USB.

Solder it!

  • Image above shows the layout of various components for the board. It is also printed on the PCB.

Component Layout

The image shows reference numbers for all the components.

  • From the table below find out the exact part for the reference number.

Component List

ref
value
Item count
C1
4.7uF
1
C2
100nF
1
C3,C4
22pF
2
CON1
AVR-ISP-10
1
D1,D2
3.6V Zener
2
IC1
ATMEGA8-P
1
J1
USB_2
1
LED1..LED8
LED-RGB
8
P8
Batt
1
Q1..Q3
BC547
3
R1
2.2K
1
R2,R3
68E
2
R4
10K
1
R5..R12
22
8
R13..R15
1K
3
SW1
Boot
1
SW2
Reset
1
X1
12MHz
1

Programming

C Code


  1. #include <avr/io.h>
  2. #include<util/delay.h>
  3. #include<stdint.h>
  4. #include<avr/interrupt.h>
  5.  
  6. #define Blue 3
  7. #define Green 4
  8. #define Red 5
  9.  
  10. uint8_t i=0;
  11.  
  12.  
  13. const static uint16_t image[]=
  14. {
  15. 0b0000100011111111, 0b0000100011111111, 0b0000100011111111, 0b0000100011111111,
  16. 0b0000100011111111, 0b0000100011111111, 0b0000100011111111, 0b0000000000000000,
  17. 0b0000010011111110, 0b0000010000010001, 0b0000010000010001, 0b0000010000010001,
  18. 0b0000010011100001, 0b0000000000000000, 0b0000010001111110, 0b0000010010010001,
  19. 0b0000010010010001, 0b0000010010010001, 0b0000010000001110, 0b0000000000000000,
  20. 0b0000001011111111, 0b0000001000010001, 0b0000001000010001, 0b0000001000010001,
  21. 0b0000001000001110, 0b0000000000000000, 0b0000001000001110, 0b0000001000010001,
  22. 0b0000001000010001, 0b0000001011111111, 0b0000000000000000, 0b0000000000000000,
  23. 0b0000100001110000, 0b0000100011111100, 0b0000100011111110, 0b0000100011111111,
  24. 0b0000100011111111, 0b0000100011111110, 0b0000100011111100, 0b0000100001111000,
  25. 0b0000000000000000, 0b0000000000000000, 0b0000010011111110, 0b0000010000010001,
  26. 0b0000010000010001, 0b0000010000010001, 0b0000010011100001, 0b0000000000000000,
  27. 0b0000001001110000, 0b0000001010001000, 0b0000001010001000, 0b0000001010001000,
  28. 0b0000001011111111, 0b0000000000000000, 0b0000001001110000, 0b0000001010001000,
  29. 0b0000001010001000, 0b0000001010001000, 0b0000001011111111, 0b0000000000000000,
  30. 0b0000010001111110, 0b0000010010010001, 0b0000010010010001, 0b0000010010010001,
  31. 0b0000010010001111, 0b0000000000000000, 0b0000000000000000, 0b0000010011111111,
  32. 0b0000010000010000, 0b0000010000010000, 0b0000010000010000, 0b0000010011111111
  33. };
  34.  
  35. void disp(uint16_t);
  36.  
  37. ISR (TIMER1_OVF_vect) // Timer1 ISR
  38. {
  39. disp(image[i]);
  40. i++;
  41.  
  42. if(i==72)
  43. i=0;
  44.  
  45. TCNT1H=0xFF; // Reload the 16-bit count value
  46. TCNT1L=0xF0; // in timer1 count registers
  47. }
  48.  
  49.  
  50. int main(void)
  51. {
  52. DDRC = 0b11111111;
  53. DDRD = 0b11111111;
  54.  
  55. PORTC = 0b11111111;
  56. PORTD = 0b00000111;
  57.  
  58. TCNT1H=0xFF; // Load the 16-bit count value
  59. TCNT1L=0xF0; // for 1 sec at 7.3728MHz
  60.  
  61. TCCR1A=0x00;
  62. TCCR1B=0x05; // Timer mode with 1024 prescAler
  63. TIMSK=0x04; // Enable timer1 overflow interrupt(TOIE1)
  64. sei(); // Enable global interrupts by setting global interrupt enable bit in SREG
  65.  
  66. while(1)
  67. {
  68.  
  69. }
  70. }
  71.  
  72. void disp(uint16_t pat)
  73. {
  74.  
  75. PORTC = pat & 0x3f;
  76. PORTD = (pat>>6)& 0xff;
  77. }


Arduino Code

Arduino Code will be uploaded soon.

Pattern Generation

To create an image/patterm, you can use the POV image maker application. Maker.PNG

Uploading the Pattern

  • Install USBasp driver on your computer. Note that the it will show up as not recognized if the reset sequence is not followed

Reset Sequence for uploading new pattern/image

POV Reset Sequence for uploading new image
  • Perform reset sequence every time you connect the kit to the computer.
  • To upload a new image, hold down the RESET button, press and release the BOOT button and then release the RESET button as shown below.
  • Note the LEDS will stop blinking once the kit is detected by the computer.

POV Board Soldering Steps

POV Reset Sequence for uploading new image

Downloads

Explore POV

Sandeep (talk) 15:35, 6 March 2015 (IST) The colorful Persistence Of Vision (POV) kit enables you to create colorful messages in air with just 8 LEDs. This kit is great introduction to soldering...

Water Level Indicator

By : Sandeep 11:49, 6 March 2015 (IST) At times you just need a simple device that just works and this is one. This DIY kit indicates the level of water and sets an buzzer whenever...

Explore Ping-Pong with Arduino

Retro gaming is nostalgia, isn't it? We will look at building the simplest Ping pong game with LED Matrix Display and a Joystick using Arduino. The setup can be used to program and play other retro...

Building a LED matrixGame console with Arduino

Retro games are cool! The pixel games like tetris, ping-pong, snake etc., are fun to play with physical buttons instead of a touch screen. In this tutorial, we will build a Retro gaming console...