Arduino Micro Невозможно заставить прерывание 6 работать на PIN 7
Узнав о ситуации с pin7 из этого руководства:
https://forum.sparkfun.com/viewtopic.php?f=32&t=35847
void setup(){
EICRB |= (1<<ISC60)|(0<<ISC61); // устанавливает тип прерывания для EICRB (INT6).
// EICRA устанавливает тип прерывания для INT0...3
/*
ISCn0 ISCn1 Where n is the interrupt. 0 for 0, etc
0 0 Triggers on low level
1 0 Triggers on edge
0 1 Triggers on falling edge
1 1 Triggers on rising edge
*/
EIMSK |= (1<<INT6); // активирует прерывание. 6 для 6 и т.д.
void loop(){
//заниматься другими делами здесь
}
ISR(INT6_vect) {
// код прерывания идет здесь
}
Я установил:
EICRB |= (0<<ISC60)|(0<<ISC61);
Потому что мне нужно, чтобы он срабатывал на НИЗКОМ уровне.
Я все еще не могу заставить его работать на микроконтроллере. ЕСЛИ я использую этот вывод как обычный входной вывод, то я могу четко видеть LOW/HIGH на выводе 7 с помощью цифрового чтения.
У меня там установлен датчик, который в случае срабатывания переключается на НИЗКИЙ уровень.
Интересно, знает ли кто-нибудь, что еще я могу попробовать, чтобы это заработало. Я уже все жестко подключил к своей плате, больше нет свободных прерываний и нет возможности их изменить.
@munin24, 👍1
Обсуждение1 ответ
Я использовал следующий код и петлю от контакта 8 до контакта 7:
// петля: контакт 8 -> контакт 7
void setup() {
pinMode(7, INPUT_PULLUP);
pinMode(8, OUTPUT);
pinMode(LED_BUILTIN_TX, OUTPUT); // чтобы увидеть логический уровень контакта 8 на светодиоде TX
pinMode(LED_BUILTIN, OUTPUT); // переключается ISR
EICRB |= _BV(ISC60); // Срабатывает по фронту
EIMSK |= _BV(INT6); // активирует прерывание
}
ISR(INT6_vect) {
PINC = _BV(PC7); // переключение светодиода 13 (@ PC7)
}
void loop() {
digitalWrite(8, HIGH);
digitalWrite(LED_BUILTIN_TX, HIGH);
delay(500);
digitalWrite(8, LOW);
digitalWrite(LED_BUILTIN_TX, LOW);
delay(500);
}
И это работает отлично. Единственная проблема, которую я могу себе представить, это правильно выяснить, какой пин на самом деле 7, поскольку метка находится справа от пина (не снизу и не слева).
- Arduino Micro против Pro Micro
- Arduino Pro Micro не распознается компьютером и не отображается в портах
- Какая клавиша — KEY_LEFT_GUI?
- Программирование Arduino Micro через RX/TX
- TCCR1A и TCCR2A на Леонардо
- 433 МГц отправка не принимается
- Arduino : отправка данных через спутник (или другие решения ? без GSM)
- Arduino Micro 5V Vin и контакты 3v3
Операция ИЛИ с 0 ничего не даёт., @Ignacio Vazquez-Abrams
А вы определили ISR?, @Ignacio Vazquez-Abrams