Преобразование кода ATTINY85 в ATMEGA2560. Прерывания смены контактов
У меня есть код, который правильно компилируется для платы ATTINY85 с использованием ARDUINO IDE, но у меня нет платы ATTINY85. У меня есть Arduino Mega ATMEGA2560, и когда я выбираю эту плату в Arduino IDE, код не компилируется и выдает это сообщение об ошибке
sketch_feb21a:216:3: error: 'GIMSK' was not declared in this scope
GIMSK |= _BV(PCIE); // Включить прерывания по смене контактов
^
sketch_feb21a:216:16: error: 'PCIE' was not declared in this scope
GIMSK |= _BV(PCIE); // Включить прерывания по смене контактов
^
sketch_feb21a:217:3: error: 'PCMSK' was not declared in this scope
PCMSK |= _BV(PCINT2); // Используем PB3 в качестве контакта прерывания
^
exit status 1
'GIMSK' was not declared in this scope
Вот фрагмент кода, который выдает ошибку
void sleep()
{
GIMSK |= _BV(PCIE); // Включить прерывания по смене контактов
PCMSK |= _BV(PCINT2); // Используем PB3 в качестве контакта прерывания
ADCSRA &= ~_BV(ADEN); // АЦП выключен
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // заменяет приведенный выше оператор
MCUCR &= ~_BV(ISC01);
MCUCR &= ~_BV(ISC00); // Прерывание по нарастающему фронту
sleep_enable(); // Устанавливает бит включения режима сна в регистре MCUCR (SE BIT)
sei(); // Разрешаем прерывания
sleep_cpu(); // спать
cli(); // Запретить прерывания
PCMSK &= ~_BV(PCINT2); // Выключаем PB3 как вывод прерывания
sleep_disable(); // Очистить бит SE
ADCSRA |= _BV(ADEN); // АЦП включен
sei(); // Разрешаем прерывания
}
ISR(PCINT0_vect) {
/*noInterrupts();
while (digitalRead(BUTTON_PIN) == LOW);
delay(50);
while (digitalRead(BUTTON_PIN) == LOW);
playTrack(1 + (curTrack++ % 2));
delay(400);
interrupts();*/
}
@flipbeatz, 👍0
Обсуждение1 ответ
Каждый процессор имеет разные регистры, которые управляют такими функциями, как прерывания, ввод и вывод. Я бы не ожидал, что код, написанный для одного процессора, особенно если он напрямую обращается к регистрам, будет работать на другом процессоре.
Вам нужно будет просмотреть таблицу данных Atmega2560 и посмотреть, как управлять прерываниями смены контактов.
Я просматривал таблицы данных для обоих, но мне просто трудно понять, что нужно изменить, чтобы все работало правильно., @flipbeatz
- Выводы прерываний Arduino Mega 2560 и отображение портов с помощью поворотного энкодера
- Как разбудить Arduino с помощью rtc?
- SPI-транзакции в Arduino
- Считать данные датчика повторно через указанное время?
- Где определен макрос digitalPinToInterrupt?
- Atmega2560 PWM на PH4
- Срабатывание ложного прерывания Arduino Mega
- Arduino mega PinChangeInterrupt с 16 битным таймером
У вас есть плата Arduino Atmega 2560? почему ты хочешь перевести его в спящий режим?, @Jot