Posted By

ausrobotics on 03/29/09


Tagged

day heartbeat ausrobotics valentines


Versions (?)


Advertising

Website Promotion DIRECTORY is a crucial factor for all websites that need to gain better organic search engine rankings and increase website traffic.
Submitting your website as part of your Web Promotion strategy to our SEO friendly and high traffic Business Directory for review is an excellent way to gain a valuable backlink and increase your websites visibility online.

Submit Site


Heartbeat


Published in: C 






The code for my heartbeat electronic sculpture.

Built using AVR Studio 4 for the ATiny8.

Expand | Embed | Plain Text
  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3.  
  4. // Some macros that make the code more readable
  5. #define output_low(port,pin) port &= ~(1<<pin)
  6. #define output_high(port,pin) port |= (1<<pin)
  7. #define set_input(portdir,pin) portdir &= ~(1<<pin)
  8. #define set_output(portdir,pin) portdir |= (1<<pin)
  9.  
  10. #define LON 1
  11. #define LOF 0
  12.  
  13. #define LED_COUNT 12
  14.  
  15. uint8_t led_table[] =
  16. {
  17. LOF, PB0, PB1,
  18. LOF, PB1, PB0,
  19. LOF, PB0, PB2,
  20. LOF, PB2, PB0,
  21. LOF, PB0, PB4,
  22. LOF, PB4, PB0,
  23. LOF, PB1, PB2,
  24. LOF, PB2, PB1,
  25. LOF, PB1, PB4,
  26. LOF, PB4, PB1,
  27. LOF, PB2, PB4,
  28. LOF, PB4, PB2
  29. };
  30.  
  31. void clear_leds()
  32. {
  33. set_input(DDRB, PB0);
  34. set_input(DDRB, PB1);
  35. set_input(DDRB, PB2);
  36. set_input(DDRB, PB4);
  37. }
  38.  
  39. void set_led(uint8_t index, uint8_t state)
  40. {
  41. uint8_t i = (index * 3);
  42.  
  43. uint8_t s = led_table[i];
  44. uint8_t p1 = led_table[i + 1];
  45. uint8_t p2 = led_table[i + 2];
  46.  
  47. set_output(DDRB, p1);
  48. set_output(DDRB, p2);
  49.  
  50. if(state == LON)
  51. {
  52. output_low(PORTB, p1);
  53. output_high(PORTB, p2);
  54. }
  55. else
  56. {
  57. output_low(PORTB, p1);
  58. output_low(PORTB, p2);
  59. }
  60. }
  61.  
  62. void delay_10us(uint8_t us)
  63. {
  64. uint8_t delay_count = F_CPU / 2000000;
  65. volatile uint8_t i;
  66.  
  67. while (us != 0) {
  68. for (i=0; i != delay_count; i++);
  69. us--;
  70. }
  71. }
  72.  
  73. void do_pwm_fade(uint8_t index, uint8_t start_duty, uint8_t end_duty, uint8_t rate)
  74. {
  75. uint8_t duty;
  76. uint8_t j;
  77.  
  78. duty = start_duty;
  79. while (duty != end_duty)
  80. {
  81. for (j = 0; j < rate; j++)
  82. {
  83. set_led(index, LON);
  84. delay_10us(duty);
  85. set_led(index, LOF);
  86. delay_10us(255-duty);
  87. }
  88.  
  89. if (start_duty < end_duty)
  90. duty++;
  91. else
  92. duty--;
  93. }
  94. }
  95.  
  96. int main(void)
  97. {
  98. // initialize the direction of the B port to be outputs
  99. // on the 3 pins that have LEDs connected
  100.  
  101. while(1)
  102. {
  103. for(int i=0; i < LED_COUNT; i++)
  104. {
  105. clear_leds();
  106. do_pwm_fade(i, 0, 255, 1);
  107. do_pwm_fade(i, 255, 0, 1);
  108. }
  109. }
  110. }

Report this snippet 

Comments

RSS Icon Subscribe to comments
Posted By: aisheteru_143 on June 2, 2009

include

include

// Some macros that make the code more readable

define output_low(port,pin) port &= ~(1

Posted By: aisheteru_143 on June 2, 2009

include

include

// Some macros that make the code more readable

define output_low(port,pin) port &= ~(1

You need to login to post a comment.

Download royalty free graphics