Код, хорошо работающий на Arduino Uno, не работает с Mega 2560.
Ниже приведен блок кода из моего сценария. Он использует таймер1. Почему он несовместим с Arduino Mega?
TCCR1A = theTCCR1A; // 0b10000010;
/*10 очищается при совпадении, устанавливается в BOTTOM для compA.
00 compB изначально отключен, позже переключен на очистку при совпадении, установлен на BOTTOM.
00
10 WGM1 1:0 для сигнала 15.
*/
TCCR1B = 0b00011001;
/*000
11 WGM1 3:2 for waveform 15.
001 no prescale on the counter.
*/
TIMSK1 = 0b00000001;
/*0000000
1 TOV1 Flag interrupt enable.
*/
sei(); // Включаем глобальные прерывания.
// Установка выходных контактов.
DDRB = 0b00000110; // Установите PB1 и PB2 в качестве выходов.
pinMode(13, OUTPUT); // Устанавливаем вывод триггера на выход
@Vivek Vijayan, 👍0
1 ответ
Лучший ответ:
▲ 0
Это не работает, потому что код, который вы пишете, будет работать только на ATmega328. Каждый чип ATmega328 без проблем запустит этот код.
Если вы хотите, чтобы Mega выполняла ту же задачу, что и Uno, вам придется переписать весь код и использовать функции Arduino (такие как pinMode
, digitalRead
и т. д.) или прочитать Техническое описание ATmega2560 и используйте регистры ATmega2560. Также найдите Раскладка контактов ATmega2560
, она понадобится вам, если вы хотите использовать регистры.
,
@Pararera
Смотрите также:
- Использование millis() и micros() внутри процедуры прерывания
- Подсчет импульсов с прерыванием
- Устранение дребезга кнопки с помощью прерывания
- Программа arduino выдаёт ошибку expected //primary-expression before ')' token error: //expected ';' before '}' token E
- Почему необходимо использовать ключевое слово volatile для глобальных переменных при обработке прерываний в ардуино?
- Как сгенерировать аппаратное прерывание в mpu6050 для пробуждения Arduino из режима SLEEP_MODE_PWR_DOWN?
- Использование поворотных энкодеров с прерываниями смены контактов
- Arduino непрерывно считывает значение АЦП с помощью прерывания