Прерывание не работает.
- Войдите на сайт для отправки комментариев
Пнд, 20/07/2020 - 20:11
Всем желаю здравствовать. Мне потребовалась помощь. Ситуация такая. Необходимо применить внешние прерывание INT0 на ардуино мега 2560. Казалось бы ну чего проще. Ардуиновские функции (attachInterrupt() и другие) работают прекрасно, НО, захотелось поиграться и включить и настроить прерывание через регистры и кнопочкой их потыкать чтоб светодиодик на плате горел и не работает. Код проще некуда, приведён ниже. Я уж всяко пробовал, не работает. Подскажите пожалуйста чего здесь не так, может в настройках проекта надо настроить.
ISR(INT0_vect) { digitalWrite(13, !digitalRead(13)); } void setup() { pinMode(13, OUTPUT); pinMode(2, INPUT_PULLUP);// по нажатию кнопки //включим прерывания INT0 по нисходящему фронту EICRA |= (1<<ISC01); //разрешим внешние прерывания INT0 EIMSK |= (1<<INT0); sei(); } void loop() {}
Заранее спасибо. С уважением Jara.
Есть предположение, что pin2 это INT4
(Предположение, потому, что с ардуино мега 2560 не работал.)
Я вот сейчас вот это изучаю: https://tsibrov.blogspot.com/2019/06/arduino-interrupts-part2.html
Ну и другие части, соответственно. Боле доступным языком не попадалось. Может поможет?.
интересно, а кто Bruzzer-у минус поставил?
Jara - это не вы? - если вы, то зря, он дело говорит, проверьте соответвие номера и пина и номера прерывания
интересно, а кто Bruzzer-у минус поставил?
Jara - это не вы? - если вы, то зря, он дело говорит, проверьте соответвие номера и пина и номера прерывания
v258, в любой непонятной ситуации смотри даташит. Прерывание INT0 сидит на выводе мк 43( PD0) или == арду-пин №21
А я глянул в описание на этом же сайте ))
Значит у нас на сайте неправильное описание, там int.0 на пине 2 для Mega2560.
На нашем сайте, в отличие от arduino.cc, в описании функции attachinterrupt перед табличкой соответствия номеров прерывания и пинов не хватает важной приписки:
Note that in the table below, the interrupt numbers refer to the number to be passed to
attachInterrupt()
. For historical reasons, this numbering does not always correspond directly to the interrupt numbering on the ATmega chip (e.g. int.0 corresponds to INT4 on the ATmega2560 chip).На нашем сайте, в отличие от arduino.cc, в описании функции attachinterrupt перед табличкой соответствия номеров прерывания и пинов не хватает важной приписки:
Note that in the table below, the interrupt numbers refer to the number to be passed to
attachInterrupt()
. For historical reasons, this numbering does not always correspond directly to the interrupt numbering on the ATmega chip (e.g. int.0 corresponds to INT4 on the ATmega2560 chip).Опа :) все было так просто, пока не пришел калапанга :)
Теперь уж и я стал сомневатся - так что, у ТС в первом посту номер прерывания и пин соответвуют друг другу или нет? :)
Теперь уж и я стал сомневатся - так что, у ТС в первом посту номер прерывания и пин соответвуют друг другу или нет? :)
Я так понимаю, что через регистры он включает настоящий int0 ATmega2560, который искать надо на том пине, что написал dimax.
А, используя ардуиновскую attachinterrupt и задействуя якобы int0, на ATmega2560 на самом деле задействуется его int4, который небось на 2 пине ардуины и есть, как в табличке и указано. (это проверять надо по даташиту или исходникам attachinterrupt).
Всем желаю здравствовать.
Ну что-ж, ответ dimaxa и был правильным. Я перекопал кучу информации в инете где говорится, что прерывание INT0 сидит на пине2 в ардуино и куча табличек где во едино разные ардуино сведены пересмотрел, а то, что бы глянуть в даташит ума и не хватило. DIMAX огромное спасибо, буду поменьше читать статьи и побольше даташит.
Да кстати минусы я не ставил.
Всем спасибо. Всем удачи.