system
July 18, 2013, 7:26am
#1
Hi Everyone, i want to ask about PWM setting on Arduino Mega 2560.
Previously, i use this PWM setting for my Arduino Board that based on ATMEga 328p microcontroller.
TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM00);
TCCR0B = _BV(CS00);
TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(WGM10);
TCCR1B = _BV(CS10);
TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM20);
TCCR2B = _BV(CS20);
Can i use same PWM setting in Arduino Mega 2560? Or the PWM setting on Arduino Mega 2560 is different?
They won't be identical. You'll have to haul out the datasheet and do some reading.
system
July 18, 2013, 10:12am
#3
I have read the datasheet, they looks identical..
system
July 18, 2013, 12:23pm
#4
mamette:
[quote author=Nick Gammon link=topic=178094.msg1320594#msg1320594 date=1374133292]
They won’t be identical. You’ll have to haul out the datasheet and do some reading.
I have read the datasheet, they looks identical…
[/quote]
Oh, sorry, they looks identical, but when i try with same code, it didn’t works well. I must have missed something…
Which one? You seem to be using 3 timers there. Can you post a full sketch that demonstrates this?
system
July 24, 2013, 5:00am
#6
Yes, it is same, and it is works now. I forget to change PIN configuration before. This is the code:
//ATMega 2560 Pin
pinMode(13, OUTPUT);
pinMode(4, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
/*
//Atmega 328p Pin
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
*/
#ifdef PWM_8KHZ_FAST
TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM01)| _BV(WGM10);
TCCR0B = _BV(CS01);
TCCR1A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM10);
TCCR1B = _BV(WGM12) | _BV(CS11);
TCCR2A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM21)| _BV(WGM20);
TCCR2B = _BV(CS21);
#endif
#ifdef PWM_32KHZ_PHASE
TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM00);
TCCR0B = _BV(CS00);
TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(WGM10);
TCCR1B = _BV(CS10);
TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM20);
TCCR2B = _BV(CS20);
#endif
#ifdef PWM_4KHZ_PHASE
TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM00);
TCCR0B = _BV(CS01);
TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(WGM10);
TCCR1B = _BV(CS11);
TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM20);
TCCR2B = _BV(CS21);
#endif
TIMSK1 |= _BV(TOIE1);
sei();
// Enable Timer1 Interrupt for Motor Control
OCR2A = 0; //11 APIN
OCR2B = 0; //D3
OCR1A = 0; //D9 CPIN
OCR1B = 0; //D10 BPIN
OCR0A = 0; //D6
OCR0B = 0; //D5
system
July 27, 2013, 6:35am
#8
Yes, it solved, Thank You..