Advertisement
Guest User

Untitled

a guest
Dec 5th, 2012
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.84 KB | None | 0 0
  1. inline void initPWM1(uint8_t freq) {
  2. #if defined(__AVR_ATmega8__) || \
  3. defined(__AVR_ATmega48__) || \
  4. defined(__AVR_ATmega88__) || \
  5. defined(__AVR_ATmega168__) || \
  6. defined(__AVR_ATmega328P__)
  7.     // use PWM from timer2A on PB3 (Arduino pin #11)
  8.     TCCR2A |= _BV(COM2A1) | _BV(WGM20) | _BV(WGM21); // fast PWM, turn on oc2a
  9.     TCCR2B = freq & 0x7;
  10.     OCR2A = 0;
  11. #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  12.     // on arduino mega, pin 11 is now PB5 (OC1A)
  13.     TCCR1A |= _BV(COM1A1) | _BV(WGM10); // fast PWM, turn on oc1a
  14.     TCCR1B = (freq & 0x7) | _BV(WGM12);
  15.     OCR1A = 0;
  16. #elif defined(__AVR_ATmega32U4__)
  17.     // on arduino leo, pin 11 is now PB7 (OC0A)
  18.     TCCR0A |= _BV(COM0A1) | _BV(WGM00) | _BV(WGM01); // fast PWM, turn on oc0a
  19.     TCCR0B = freq & 0x7;
  20.     OCR0A = 0;
  21. #else
  22. #error "This chip is not supported!"
  23. #endif
  24.     pinMode(11, OUTPUT);
  25. }
  26.  
  27. inline void setPWM1(uint8_t s) {
  28. #if defined(__AVR_ATmega8__) || \
  29. defined(__AVR_ATmega48__) || \
  30. defined(__AVR_ATmega88__) || \
  31. defined(__AVR_ATmega168__) || \
  32. defined(__AVR_ATmega328P__)
  33.     // use PWM from timer2A on PB3 (Arduino pin #11)
  34.     OCR2A = s;
  35. #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  36.     // on arduino mega, pin 11 is now PB5 (OC1A)
  37.     OCR1A = s;
  38. #elif defined(__AVR_ATmega32U4__)
  39.     // on arduino leo, pin 11 is now PB7 (OC0A)
  40.     OCR0A = s;
  41. #else
  42. #error "This chip is not supported!"
  43. #endif
  44. }
  45.  
  46. inline void initPWM2(uint8_t freq) {
  47. #if defined(__AVR_ATmega8__) || \
  48. defined(__AVR_ATmega48__) || \
  49. defined(__AVR_ATmega88__) || \
  50. defined(__AVR_ATmega168__) || \
  51. defined(__AVR_ATmega328P__)
  52.     // use PWM from timer2B (pin 3)
  53.     TCCR2A |= _BV(COM2B1) | _BV(WGM20) | _BV(WGM21); // fast PWM, turn on oc2b
  54.     TCCR2B = freq & 0x7;
  55.     OCR2B = 0;
  56. #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  57.     // on arduino mega, pin 3 is now PE5 (OC3C)
  58.     TCCR3A |= _BV(COM1C1) | _BV(WGM10); // fast PWM, turn on oc3c
  59.     TCCR3B = (freq & 0x7) | _BV(WGM12);
  60.     OCR3C = 0;
  61. #elif defined(__AVR_ATmega32U4__)
  62.     // on arduino leo, pin3 is now PD0 (OC0B)
  63.     TCCR0A |= _BV(COM0B1) | _BV(WGM00) | _BV(WGM01); // fast PWM, turn on OC0B
  64.     TCCR0B = freq & 0x7;
  65.     OCR0B = 0;
  66. #else
  67. #error "This chip is not supported!"
  68. #endif
  69.    
  70.     pinMode(3, OUTPUT);
  71. }
  72.  
  73. inline void setPWM2(uint8_t s) {
  74. #if defined(__AVR_ATmega8__) || \
  75. defined(__AVR_ATmega48__) || \
  76. defined(__AVR_ATmega88__) || \
  77. defined(__AVR_ATmega168__) || \
  78. defined(__AVR_ATmega328P__)
  79.     // use PWM from timer2A on PB3 (Arduino pin #11)
  80.     OCR2B = s;
  81. #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  82.     // on arduino mega, pin 11 is now PB5 (OC1A)
  83.     OCR3C = s;
  84. #elif defined(__AVR_ATmega32U4__)
  85.     // on arduino leo, pin 11 is now PB7 (0C0A)
  86.     OCR0B = s;
  87. #else
  88. #error "This chip is not supported!"
  89. #endif
  90. }
  91.  
  92. inline void initPWM3(uint8_t freq) {
  93. #if defined(__AVR_ATmega8__) || \
  94. defined(__AVR_ATmega48__) || \
  95. defined(__AVR_ATmega88__) || \
  96. defined(__AVR_ATmega168__) || \
  97. defined(__AVR_ATmega328P__)
  98.     // use PWM from timer0A / PD6 (pin 6)
  99.     TCCR0A |= _BV(COM0A1) | _BV(WGM00) | _BV(WGM01); // fast PWM, turn on OC0A
  100.     //TCCR0B = freq & 0x7;
  101.     OCR0A = 0;
  102. #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  103.     // on arduino mega, pin 6 is now PH3 (OC4A)
  104.     TCCR4A |= _BV(COM1A1) | _BV(WGM10); // fast PWM, turn on oc4a
  105.     TCCR4B = (freq & 0x7) | _BV(WGM12);
  106.     //TCCR4B = 1 | _BV(WGM12);
  107.     OCR4A = 0;
  108. #elif defined (__AVR_ATmega32U4__)
  109.     // on arduino leo, pin 6 is now PD7 (OC4D)
  110.     TCCR4C |= _BV(COM4D1) | _BV(PWM4D); // fast PWM, turn on OC4D
  111.     OCR4D = 0;
  112. #else
  113. #error "This chip is not supported!"
  114. #endif
  115.     pinMode(6, OUTPUT);
  116. }
  117.  
  118. inline void setPWM3(uint8_t s) {
  119. #if defined(__AVR_ATmega8__) || \
  120. defined(__AVR_ATmega48__) || \
  121. defined(__AVR_ATmega88__) || \
  122. defined(__AVR_ATmega168__) || \
  123. defined(__AVR_ATmega328P__)
  124.     // use PWM from timer0A on PB3 (Arduino pin #6)
  125.     OCR0A = s;
  126. #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  127.     // on arduino mega, pin 6 is now PH3 (OC4A)
  128.     OCR4A = s;
  129. #elif defined(__AVR_ATmega32U4__)
  130.     // on arduino leo, pin 6 is now PD7 (OC4D)
  131.     OCR4D = s;
  132. #else
  133. #error "This chip is not supported!"
  134. #endif
  135. }
  136.  
  137.  
  138.  
  139. inline void initPWM4(uint8_t freq) {
  140. #if defined(__AVR_ATmega8__) || \
  141. defined(__AVR_ATmega48__) || \
  142. defined(__AVR_ATmega88__) || \
  143. defined(__AVR_ATmega168__) || \
  144. defined(__AVR_ATmega328P__)
  145.     // use PWM from timer0B / PD5 (pin 5)
  146.     TCCR0A |= _BV(COM0B1) | _BV(WGM00) | _BV(WGM01); // fast PWM, turn on oc0a
  147.     //TCCR0B = freq & 0x7;
  148.     OCR0B = 0;
  149. #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  150.     // on arduino mega, pin 5 is now PE3 (OC3A)
  151.     TCCR3A |= _BV(COM1A1) | _BV(WGM10); // fast PWM, turn on oc3a
  152.     TCCR3B = (freq & 0x7) | _BV(WGM12);
  153.     //TCCR4B = 1 | _BV(WGM12);
  154.     OCR3A = 0;
  155. #elif defined(__AVR_ATmega32U4__)
  156.     // on arduino leo, pin 5 is now PC6 (OC4A) (This is complimentary pin to PC7. Bot are active if are set to output mode
  157.     TCCR4A |= _BV(COM4A1) | _BV(PWM4A); //This is very strange. We are using the complimentaru OC4A output on pin 5 and this requires COM4A1..0 to be 01, but the shield works only if its 10
  158.     OCR4A = 0;
  159. #else
  160. #error "This chip is not supported!"
  161. #endif
  162.     pinMode(5, OUTPUT);
  163. }
  164.  
  165. inline void setPWM4(uint8_t s) {
  166. #if defined(__AVR_ATmega8__) || \
  167. defined(__AVR_ATmega48__) || \
  168. defined(__AVR_ATmega88__) || \
  169. defined(__AVR_ATmega168__) || \
  170. defined(__AVR_ATmega328P__)
  171.     // use PWM from timer0A on PB3 (Arduino pin #6)
  172.     OCR0B = s;
  173. #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  174.     // on arduino mega, pin 6 is now PH3 (OC4A)
  175.     OCR3A = s;
  176. #elif defined(__AVR_ATmega32U4__)
  177.     // on arduino mega, pin 6 is now PC6 (OC4A)
  178.     OCR4A = s;
  179. #else
  180. #error "This chip is not supported!"
  181. #endif
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement