|
板凳
楼主 |
发表于 2014-12-29 21:24:20
|
只看该作者
- 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;
- #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;
- #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;
- #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;
- #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;
- #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;
- #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;
- #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;
- #else
- #error "This chip is not supported!"
- #endif
- }
复制代码 |
|