Внутренние прерывания
- Войдите на сайт для отправки комментариев
Пт, 24/06/2011 - 10:18
Ребята подскажите пожалуйста, естть в Ардуине внутренние прерывания. В своеих источниках их не обнаружил, и коммант для их обработки тоже не нашел
спасибо. Уже нашел статью по этому поводу
Я здесь оставлю на всякий случай http://arduino.ru/Tutorial/Arduino_Interrupts
спасибо. Уже нашел статью по этому поводу
Подскажи пожалуйста, как? или ссылку на статью...
Я здесь оставлю на всякий случай http://arduino.ru/Tutorial/Arduino_Interrupts
там нет нислова про внутренние прерывания
там нет нислова про внутренние прерывания
Не говорите ерунды. С самой же первой строки речь о прерываниях по таймеру - это и есть те самые "внутренние прерывания", которые вы ищете
там нет нислова про внутренние прерывания
Не говорите ерунды. С самой же первой строки речь о прерываниях по таймеру - это и есть те самые "внутренние прерывания", которые вы ищете
там нет примеров как это сделать... всё сухо для новичка
а на второй странице внешние прерывания только рассмотрены в примере
подскажите кусок кода плиз?
вот например:
unsigned char temp;
void setup()
{
pinMode(13, OUTPUT);
pinMode(9, INPUT);
digitalWrite(9, HIGH); // под. резистор
}
void loop()
{
if ( digitalRead(9) == HIGH )
{ temp = temp+1;
delay(100);
}
if (temp >10 )
{digitalWrite(13, HIGH);
temp = 0;
}
}
нужно чтоб переменная темп, сбрасывалась в 0 каждые две секунды.
Как это сделать?
нужно чтоб переменная темп, сбрасывалась в 0 каждые две секунды.
Как это сделать?
Изучайте, там и примеры есть - https://playground.arduino.cc/Main/MsTimer2
вот например:
unsigned char temp;
void setup()
{
pinMode(13, OUTPUT);
pinMode(9, INPUT);
.....
Изучите
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
Как сделать, чтобы переменная темп обнулялось каждые 2 секунды?
т.е. чтобы выполнялось команда
каждые 2 секунды?
нужно чтоб переменная темп, сбрасывалась в 0 каждые две секунды.
Как это сделать?
Изучайте, там и примеры есть - https://playground.arduino.cc/Main/MsTimer2
там внешнию библиотеку ещё подлючают...
Как сделать, чтобы переменная темп обнулялось каждые 2 секунды?
т.е. чтобы выполнялось команда
каждые 2 секунды?
Чувствую. что вам еще рано прерывания изучать. тем более что для такой ерунды они и не нужны совсем. Почитайте, как сделать блинк без делей http://arduino.ru/tutorials/BlinkWithoutDelay
Как сделать, чтобы переменная темп обнулялось каждые 2 секунды?
т.е. чтобы выполнялось команда
каждые 2 секунды?
Чувствую. что вам еще рано прерывания изучать. тем более что для такой ерунды они и не нужны совсем. Почитайте, как сделать блинк без делей http://arduino.ru/tutorials/BlinkWithoutDelay
да мне не для этих целей. это я просто как пример привел.
Если точнее, мне нужно в коде IR приемника, чтобы при нажатии кнопки пульта происходил счёт, если за две секунды кнопка нажата N раз, выполнить действие. Если кнопка на пульте нажата менее N раз за 2 секунды, сбросить отсчет и ничего не делать (ждать новых нажатий и считать их)
В Ардуино, специально для чайников, уже сделали ОДНО прерывание по таймеру, в котором считается время. Во всех задачах привязанных ко времени никакие прерывания не нужны, если точность в несколько миллисекунд устраивает.
там внешнию библиотеку ещё подлючают...
А что, Ваша религия этого не позволяет? Ну, тогда изучите, что делает эта библиотека, и пишите этот же код сами.
Большое Вам спасибо!
ставлю обычный ардуиновский пример и работает. делают вот этот свой и какой то затык. что я забыл ?
1. А что Вы делаете-то? Вернее, пытаетесь делать?
2. Что за "обычный пример". Обычным только стиральный порошой бывает. Показывайте.
И, кстати, кто Вам сказал, что строка 16 инвертирует там что-то? Не верьте, Вас обманули.
alexbmd, в 7 и 16 строке у вас разные пины.
Да точно :) но теперь другая проблема
после бутлоадера сразу загорается лед (ну допустим наводки float state хотя страно у меня же там пул-ап) но вот потом от простого замыкания пина на землю ничего не происходит. не срабатывает прерывание. пытаюсь добиться такого же результата как тут. тут я просто замыкаю пин на землю и инвертируется led state
Евгений непонял насчёт 16строчки , вы хотели сказать что XOR не инвертирует??
Смотря что понимать под внутренними. Внутренние программные или внутренние аппаратные? Программных в АVR нет, но иногда хочется.) И тогда приходится жертвовать ногой.(
Евгений непонял насчёт 16строчки , вы хотели сказать что XOR не инвертирует??
Каментарий дописать надо
PORTC^=(1<<7);
//инвертируем состояние 7 бита и обнуляем остальные
Нет, просто писать нужно по нормальному, а не с магическими цифрами. Тогда таких дурных ошибок бы небыло.
PORTC^=(1<<7);
//инвертируем состояние 7 бита и обнуляем остальные
почему ?
Каментарий дописать надо)
PORTC^=(1<<7);
//инвертируем состояние несуществующего 7 бита PORTC
что я забыл в этом коде? почему не срабатывает как ардуиновский?
//инвертируем состояние несуществующего 7 бита PORTC
почему не существующего?
Чукча писатель.( Потому, что коль вы адресуете порты напрямую, нужно перед этим изучить архитектуру этого МК. Кстати, плата какая?
А вообще, жаль что нет как у большого брата, типа INT 13h).
И того же приоритета прерываний, как у какого то x51.(
PORTC^=(1<<7);
//инвертируем состояние 7 бита
почему ?
Да, ты прав, я стормозил спрасони
Кстати, плата какая?
atmega32u4
так почему не существуещего ? порта С нет у а атмеги?
[off]я уже на XOR три разных ответа тут услышал теперь про несуществующий порт С
0x3A29[/off]
порт С есть, PC6 и PC7 нет.
Port C (PC5:0)
Port C is a 7-bit bi-directional I/O port with internal pull-up resistors (selected for each bit). The PC5...0 output buffers have symmetrical drive characteristics with both high sink and source capability. As inputs, Port C pins that are externally pulled low will source current if the pull-up resistors are activated. The Port C pins are tri-stated whеn a reset condition becomes active, even if the clock is not running.
Не удивительно, что три разных .. на разных камнях Атмела - разная конфигурация портов, где-то есть и даже порт K а где-то и порт С неполон.. :)
Про 32u4 ничего не скажу, не смотрел ни разу..
порт С есть, PC6 и PC7 нет.
https://www.arduino.cc/en/Hacking/PinMapping32u4
а D13 это что ?
atmega32u4
так почему не существуещего ? порта С нет у а атмеги?
[off]я уже на XOR три разных ответа тут услышал теперь про несуществующий порт С
0x3A29[/off]
Ну, так с этого надо было бы и начинать. У 32u4, в отличие от 328, как раз выведены только PC6 и PC7.
А вообще, непонятен смысл прямого обращения к портам. Ардуино и как раз для того что бы не сушить мозг с ними.
И что бы D13 был и в Африке D13!
Про 32u4 ничего не скажу, не смотрел ни разу..
да там практически тоже самое. лед тоже на D13 но PC7 а не B5 как у мега328. регистры теже (или почти теже). но не суть, пускай код будет для мега 328 он всеравно не обрабатывает прерывания через регистры. гдето чтото я упустил. но что?!
Коллеги, в микре PC7 есть, мало того, на нём уже висит штатный светдиод :) Ему соответствует 13й арду-пин.
мне кажется, в коде #26 сообщения reti() не нужно. Не уверен, что оно мешает, но необходимости в нем не вижу
А что касается вопроса "Почему не работает" - по-моему. ответ очевидный. Никогда не надо забегать вперед в обучении.
alexbmd - если вы не знаете даже, как вычислить остаток от деления на 2000 - то куда вам прерывания? Кто знает. что за косяки вы допустили в начальном конфигурировании регистров при таком общем уровне знаний? - начните с мигания диодами. освоения миллис и прочих простых вещей - вам для обучения на полгода хватит
[off]вопрос не про led :) давайте вообщем забудем этот лед. вопрос почему не срабатывает прерывание[/off]
чукчи, три разных XOR, несуществующие порты и millis в регистре внешнео прерывания уже были. что дальше :)
по делу ктото может ответить - почему не срабатывает прерывание?
reti() и sei() не мешает. особенно если учесть что глобальные прерывания изначально включены в камнях. так для подстраховки.
код что на экране это весь код. никаких дополнительных регистров нету. а надо?
reti() - точно не нужен, но конкретно в этом контексте мешать не должен. Там сохранять нечего, она практически naked и так. Врядли там стек плывет куда-то.. если честно, то смотрю на код и нифига не могу понять чего оно не работает .. может у 32u4 какие-то ещё регистры по работе с прерываниями не включены тут? Блин, куда уж проще-то..
Ну, а почему не написать по людски? Хотя бы так.
На 32U4 INT0 на другой ноге
Ну вот. Хотел было посмотреть, но лень.)
В моём примере должно работать, потому как 2 это INT1.
вот я и говорю - никто не знает что там наконфигурил автор, разобрался ли он с ногами и прерываниями ... Получается, надо самому лезть в описание платы и делать эту работу за него. А с какой стати?
Во, во. Зато "по делу ктото может ответить - почему не срабатывает прерывание?")
Боюсь, что даже спасибо не услышим.(
Ну, а почему не написать по людски? Хотя бы так.
потому что так работает. я же это написал выше :)
так работает а через регистры нет. в даташите пишут надо EIMSK вначале обнулить единицей. но мы и так когда его активируем пишем в него единицу , еще раз записать в него единицу перед установкой EICRA не думаю что поможет :)
[off] Green b707 да неважно на какой ноге 2, 3 я не бездумно копирую код я исправляю если надо. вы можете писать хоть 10. суть в другом. не работает через регистры итить колотить[/off]
что там наконфигурил автор
вы видите на экране еще какието конфигураторы? потому что их нет. что вы видите в скетче то и на конфигурировал автор. может уже хватит все шишки на автора валить :)
делаю все одинаково. через attach (мой пример выше) работает
через регистры (мой пример выше) не работает
что там наконфигурил автор
вы видите на экране еще какието конфигураторы? потому что их нет. что вы видите в скетче то и на конфигурировал автор. может уже хватит все шишки на автора валить :)
делаю все одинаково. через attach (мой пример выше) работает
через регистры (мой пример выше) не работает
значит что-то неправильно, DIMAX да и Евгений Петрович однозначно знают в чём косяк )))
Вы заинтриговали уже совсем. У меня нет Леонардо (она?) на 32u4, поэтому могу попробовать проверить Ваш пример только на Мега (и та нестандарт) или НАНО .. но боюсь что он заработает после перестановки ножек согласно даташиту.
через регистры (мой пример выше) не работает
Ну так делайте по частям. Уберите аттач сначала. Вместо него поставьте
Затем уже играйтесь LED и кнопкой.