[問題] Arduino 2-Wire與PWM衝突?
這標題下的可能不是很好還請見諒
我近日遇到一個神奇的問題,在Arduino Mega2560
我目前使用MPU6050獲取姿態資料(2-wire,I2C)
用於控制馬達,由於Arduino預設的PWM resolution只有8bits
所以我採用自己寫的PWM設定如下:
void pwm_init()
{
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
TCCR4A = _BV(COM4A1) | _BV(COM4B1) // non-inverting PWM
| _BV(WGM41); // mode 10: PWM, Phase Correct,
//TOP=ICR4
TCCR4B = _BV(WGM43) | _BV(CS40); // no prescaling
ICR4 = 26666; //300Hz TOP counter value
OCR4A = 100;
OCR4B = 100;
TCCR1A = _BV(COM1B1) | _BV(COM1C1) // non-inverting PWM
| _BV(WGM11); // mode 10: PWM, Phase Correct,
// TOP=ICR1
TCCR1B = _BV(WGM13) | _BV(CS10); // no prescaling
ICR1 = 26666;
OCR1C = 100;
OCR1B = 100;
TIMSK1 = 0;
TIMSK4 = 0;
}
這段程式碼單獨測試都沒有問題,而MPU6050的程式碼單獨測試也沒有問題
MPU6050採用I2Cdevlib的library,程式碼類似:
https://reurl.cc/g7l9L (官方sample code)
讀取資料部份全部搬入ISR中
只要兩者一合併(單單pwm_init()搬入setup()中),MPU6050大約跑個30秒就crash,但是
只要移除pwm_init(),就可以跑十幾分鐘都不是問題。
我有讀過ATmega640/V-1280/V-1281/V-2560/V-2561/V 這份datasheet,裡頭I2C (2-wire)
是跟PWM無關的(clock source等都無關)。
想請問各位大大有什麼可能的原因會造成類情形呢?
任何可能性都可以提出來,我會盡量去試試debug。
--
There are no two words in the English language more harmful than “good job”.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.223.199.160
※ 文章網址: https://www.ptt.cc/bbs/ASM/M.1535602351.A.473.html
→
08/30 16:42,
6年前
, 1F
08/30 16:42, 1F
→
08/30 16:42,
6年前
, 2F
08/30 16:42, 2F
推
09/03 22:13,
6年前
, 3F
09/03 22:13, 3F
→
09/03 22:32,
6年前
, 4F
09/03 22:32, 4F
推
09/04 21:43,
6年前
, 5F
09/04 21:43, 5F
→
09/04 21:44,
6年前
, 6F
09/04 21:44, 6F
ASM 近期熱門文章
PTT數位生活區 即時熱門文章