Line 209: Line 209:
 
|}
 
|}
 
=Programming=
 
=Programming=
 +
==C Code==
 +
<syntaxhighlight>
 +
#include <avr/io.h>
 +
#include<util/delay.h>
 +
#include<stdint.h>
 +
#include<avr/interrupt.h>
 +
 +
#define Blue 3
 +
#define Green 4
 +
#define Red 5
 +
 +
uint8_t i=0; 
 +
 +
const static uint16_t image[]= {0b0000100011111111, 0b0000100011111111, 0b0000100011111111, 0b0000100011111111, 0b0000100011111111, 0b0000100011111111, 0b0000100011111111, 0b0000000000000000, 0b0000010011111110, 0b0000010000010001, 0b0000010000010001, 0b0000010000010001, 0b0000010011100001, 0b0000000000000000, 0b0000010001111110, 0b0000010010010001, 0b0000010010010001, 0b0000010010010001, 0b0000010000001110, 0b0000000000000000, 0b0000001011111111, 0b0000001000010001, 0b0000001000010001, 0b0000001000010001, 0b0000001000001110, 0b0000000000000000, 0b0000001000001110, 0b0000001000010001, 0b0000001000010001, 0b0000001011111111, 0b0000000000000000, 0b0000000000000000, 0b0000100001110000, 0b0000100011111100, 0b0000100011111110, 0b0000100011111111,0b0000100011111111, 0b0000100011111110, 0b0000100011111100, 0b0000100001111000, 0b0000000000000000, 0b0000000000000000, 0b0000010011111110, 0b0000010000010001, 0b0000010000010001, 0b0000010000010001, 0b0000010011100001, 0b0000000000000000, 0b0000001001110000, 0b0000001010001000, 0b0000001010001000, 0b0000001010001000, 0b0000001011111111, 0b0000000000000000, 0b0000001001110000, 0b0000001010001000, 0b0000001010001000, 0b0000001010001000, 0b0000001011111111, 0b0000000000000000, 0b0000010001111110, 0b0000010010010001, 0b0000010010010001, 0b0000010010010001, 0b0000010010001111, 0b0000000000000000, 0b0000000000000000, 0b0000010011111111, 0b0000010000010000, 0b0000010000010000, 0b0000010000010000, 0b0000010011111111};
 +
 +
void disp(uint16_t);
 +
 +
ISR (TIMER1_OVF_vect)    // Timer1 ISR
 +
{
 +
disp(image[i]);
 +
i++;
 +
 +
if(i==72)
 +
i=0;
 +
 +
TCNT1H=0xFF;    // Reload the 16-bit count value
 +
TCNT1L=0xF0;    // in timer1 count registers
 +
}
 +
 +
 +
int main(void)
 +
{
 +
    DDRC = 0b11111111;
 +
DDRD = 0b11111111;
 +
 +
PORTC = 0b11111111;
 +
PORTD = 0b00000111;
 +
 +
TCNT1H=0xFF;  // Load the 16-bit count value
 +
TCNT1L=0xF0;  // for 1 sec at 7.3728MHz
 +
 +
TCCR1A=0x00;
 +
TCCR1B=0x05;  // Timer mode with 1024 prescAler
 +
TIMSK=0x04;  // Enable timer1 overflow interrupt(TOIE1)
 +
sei();        // Enable global interrupts by setting global interrupt enable bit in SREG
 +
 +
    while(1)
 +
    {
 +
   
 +
    }
 +
}
 +
 +
void disp(uint16_t pat)
 +
{
 +
 +
PORTC = pat & 0x3f;
 +
PORTD = (pat>>6)& 0xff;
 +
}
 +
 +
 +
</syntaxhighlight>
 +
 +
==Arduino Code==
 +
Arduino Code will be uploaded soon.
 
==Pattern Generation==
 
==Pattern Generation==
 
To create an image/patterm, you can use the POV image maker application.
 
To create an image/patterm, you can use the POV image maker application.

Revision as of 17:02, 12 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 below 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
220
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. const static uint16_t image[]= {0b0000100011111111, 0b0000100011111111, 0b0000100011111111, 0b0000100011111111, 0b0000100011111111, 0b0000100011111111, 0b0000100011111111, 0b0000000000000000, 0b0000010011111110, 0b0000010000010001, 0b0000010000010001, 0b0000010000010001, 0b0000010011100001, 0b0000000000000000, 0b0000010001111110, 0b0000010010010001, 0b0000010010010001, 0b0000010010010001, 0b0000010000001110, 0b0000000000000000, 0b0000001011111111, 0b0000001000010001, 0b0000001000010001, 0b0000001000010001, 0b0000001000001110, 0b0000000000000000, 0b0000001000001110, 0b0000001000010001, 0b0000001000010001, 0b0000001011111111, 0b0000000000000000, 0b0000000000000000, 0b0000100001110000, 0b0000100011111100, 0b0000100011111110, 0b0000100011111111,0b0000100011111111, 0b0000100011111110, 0b0000100011111100, 0b0000100001111000, 0b0000000000000000, 0b0000000000000000, 0b0000010011111110, 0b0000010000010001, 0b0000010000010001, 0b0000010000010001, 0b0000010011100001, 0b0000000000000000, 0b0000001001110000, 0b0000001010001000, 0b0000001010001000, 0b0000001010001000, 0b0000001011111111, 0b0000000000000000, 0b0000001001110000, 0b0000001010001000, 0b0000001010001000, 0b0000001010001000, 0b0000001011111111, 0b0000000000000000, 0b0000010001111110, 0b0000010010010001, 0b0000010010010001, 0b0000010010010001, 0b0000010010001111, 0b0000000000000000, 0b0000000000000000, 0b0000010011111111, 0b0000010000010000, 0b0000010000010000, 0b0000010000010000, 0b0000010011111111};
  13.  
  14. void disp(uint16_t);
  15.  
  16. ISR (TIMER1_OVF_vect) // Timer1 ISR
  17. {
  18. disp(image[i]);
  19. i++;
  20.  
  21. if(i==72)
  22. i=0;
  23.  
  24. TCNT1H=0xFF; // Reload the 16-bit count value
  25. TCNT1L=0xF0; // in timer1 count registers
  26. }
  27.  
  28.  
  29. int main(void)
  30. {
  31. DDRC = 0b11111111;
  32. DDRD = 0b11111111;
  33.  
  34. PORTC = 0b11111111;
  35. PORTD = 0b00000111;
  36.  
  37. TCNT1H=0xFF; // Load the 16-bit count value
  38. TCNT1L=0xF0; // for 1 sec at 7.3728MHz
  39.  
  40. TCCR1A=0x00;
  41. TCCR1B=0x05; // Timer mode with 1024 prescAler
  42. TIMSK=0x04; // Enable timer1 overflow interrupt(TOIE1)
  43. sei(); // Enable global interrupts by setting global interrupt enable bit in SREG
  44.  
  45. while(1)
  46. {
  47.  
  48. }
  49. }
  50.  
  51. void disp(uint16_t pat)
  52. {
  53.  
  54. PORTC = pat & 0x3f;
  55. PORTD = (pat>>6)& 0xff;
  56. }

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