Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- inline void initPWM1(uint8_t freq) {
- #if defined(__AVR_ATmega8__) || \
- defined(__AVR_ATmega48__) || \
- defined(__AVR_ATmega88__) || \
- defined(__AVR_ATmega168__) || \
- defined(__AVR_ATmega328P__)
- // use PWM from timer2A on PB3 (Arduino pin #11)
- TCCR2A |= _BV(COM2A1) | _BV(WGM20) | _BV(WGM21); // fast PWM, turn on oc2a
- TCCR2B = freq & 0x7;
- OCR2A = 0;
- #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
- // on arduino mega, pin 11 is now PB5 (OC1A)
- TCCR1A |= _BV(COM1A1) | _BV(WGM10); // fast PWM, turn on oc1a
- TCCR1B = (freq & 0x7) | _BV(WGM12);
- OCR1A = 0;
- #elif defined(__AVR_ATmega32U4__)
- // on arduino leo, pin 11 is now PB7 (OC0A)
- TCCR0A |= _BV(COM0A1) | _BV(WGM00) | _BV(WGM01); // fast PWM, turn on oc0a
- TCCR0B = freq & 0x7;
- OCR0A = 0;
- #else
- #error "This chip is not supported!"
- #endif
- pinMode(11, OUTPUT);
- }
- inline void setPWM1(uint8_t s) {
- #if defined(__AVR_ATmega8__) || \
- defined(__AVR_ATmega48__) || \
- defined(__AVR_ATmega88__) || \
- defined(__AVR_ATmega168__) || \
- defined(__AVR_ATmega328P__)
- // use PWM from timer2A on PB3 (Arduino pin #11)
- OCR2A = s;
- #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
- // on arduino mega, pin 11 is now PB5 (OC1A)
- OCR1A = s;
- #elif defined(__AVR_ATmega32U4__)
- // on arduino leo, pin 11 is now PB7 (OC0A)
- OCR0A = s;
- #else
- #error "This chip is not supported!"
- #endif
- }
- inline void initPWM2(uint8_t freq) {
- #if defined(__AVR_ATmega8__) || \
- defined(__AVR_ATmega48__) || \
- defined(__AVR_ATmega88__) || \
- defined(__AVR_ATmega168__) || \
- defined(__AVR_ATmega328P__)
- // use PWM from timer2B (pin 3)
- TCCR2A |= _BV(COM2B1) | _BV(WGM20) | _BV(WGM21); // fast PWM, turn on oc2b
- TCCR2B = freq & 0x7;
- OCR2B = 0;
- #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
- // on arduino mega, pin 3 is now PE5 (OC3C)
- TCCR3A |= _BV(COM1C1) | _BV(WGM10); // fast PWM, turn on oc3c
- TCCR3B = (freq & 0x7) | _BV(WGM12);
- OCR3C = 0;
- #elif defined(__AVR_ATmega32U4__)
- // on arduino leo, pin3 is now PD0 (OC0B)
- TCCR0A |= _BV(COM0B1) | _BV(WGM00) | _BV(WGM01); // fast PWM, turn on OC0B
- TCCR0B = freq & 0x7;
- OCR0B = 0;
- #else
- #error "This chip is not supported!"
- #endif
- pinMode(3, OUTPUT);
- }
- inline void setPWM2(uint8_t s) {
- #if defined(__AVR_ATmega8__) || \
- defined(__AVR_ATmega48__) || \
- defined(__AVR_ATmega88__) || \
- defined(__AVR_ATmega168__) || \
- defined(__AVR_ATmega328P__)
- // use PWM from timer2A on PB3 (Arduino pin #11)
- OCR2B = s;
- #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
- // on arduino mega, pin 11 is now PB5 (OC1A)
- OCR3C = s;
- #elif defined(__AVR_ATmega32U4__)
- // on arduino leo, pin 11 is now PB7 (0C0A)
- OCR0B = s;
- #else
- #error "This chip is not supported!"
- #endif
- }
- inline void initPWM3(uint8_t freq) {
- #if defined(__AVR_ATmega8__) || \
- defined(__AVR_ATmega48__) || \
- defined(__AVR_ATmega88__) || \
- defined(__AVR_ATmega168__) || \
- defined(__AVR_ATmega328P__)
- // use PWM from timer0A / PD6 (pin 6)
- TCCR0A |= _BV(COM0A1) | _BV(WGM00) | _BV(WGM01); // fast PWM, turn on OC0A
- //TCCR0B = freq & 0x7;
- OCR0A = 0;
- #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
- // on arduino mega, pin 6 is now PH3 (OC4A)
- TCCR4A |= _BV(COM1A1) | _BV(WGM10); // fast PWM, turn on oc4a
- TCCR4B = (freq & 0x7) | _BV(WGM12);
- //TCCR4B = 1 | _BV(WGM12);
- OCR4A = 0;
- #elif defined (__AVR_ATmega32U4__)
- // on arduino leo, pin 6 is now PD7 (OC4D)
- TCCR4C |= _BV(COM4D1) | _BV(PWM4D); // fast PWM, turn on OC4D
- OCR4D = 0;
- #else
- #error "This chip is not supported!"
- #endif
- pinMode(6, OUTPUT);
- }
- inline void setPWM3(uint8_t s) {
- #if defined(__AVR_ATmega8__) || \
- defined(__AVR_ATmega48__) || \
- defined(__AVR_ATmega88__) || \
- defined(__AVR_ATmega168__) || \
- defined(__AVR_ATmega328P__)
- // use PWM from timer0A on PB3 (Arduino pin #6)
- OCR0A = s;
- #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
- // on arduino mega, pin 6 is now PH3 (OC4A)
- OCR4A = s;
- #elif defined(__AVR_ATmega32U4__)
- // on arduino leo, pin 6 is now PD7 (OC4D)
- OCR4D = s;
- #else
- #error "This chip is not supported!"
- #endif
- }
- inline void initPWM4(uint8_t freq) {
- #if defined(__AVR_ATmega8__) || \
- defined(__AVR_ATmega48__) || \
- defined(__AVR_ATmega88__) || \
- defined(__AVR_ATmega168__) || \
- defined(__AVR_ATmega328P__)
- // use PWM from timer0B / PD5 (pin 5)
- TCCR0A |= _BV(COM0B1) | _BV(WGM00) | _BV(WGM01); // fast PWM, turn on oc0a
- //TCCR0B = freq & 0x7;
- OCR0B = 0;
- #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
- // on arduino mega, pin 5 is now PE3 (OC3A)
- TCCR3A |= _BV(COM1A1) | _BV(WGM10); // fast PWM, turn on oc3a
- TCCR3B = (freq & 0x7) | _BV(WGM12);
- //TCCR4B = 1 | _BV(WGM12);
- OCR3A = 0;
- #elif defined(__AVR_ATmega32U4__)
- // on arduino leo, pin 5 is now PC6 (OC4A) (This is complimentary pin to PC7. Bot are active if are set to output mode
- 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
- OCR4A = 0;
- #else
- #error "This chip is not supported!"
- #endif
- pinMode(5, OUTPUT);
- }
- inline void setPWM4(uint8_t s) {
- #if defined(__AVR_ATmega8__) || \
- defined(__AVR_ATmega48__) || \
- defined(__AVR_ATmega88__) || \
- defined(__AVR_ATmega168__) || \
- defined(__AVR_ATmega328P__)
- // use PWM from timer0A on PB3 (Arduino pin #6)
- OCR0B = s;
- #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
- // on arduino mega, pin 6 is now PH3 (OC4A)
- OCR3A = s;
- #elif defined(__AVR_ATmega32U4__)
- // on arduino mega, pin 6 is now PC6 (OC4A)
- OCR4A = s;
- #else
- #error "This chip is not supported!"
- #endif
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement