Ви не увійшли.
Дело такое: Ардуина мега2560, используем четыре внешних прерывания на входах 18,19,20,21. Режим FALLING(да и другие режимы пробовал). Прерывания ловлю от оптоэнкодеров. Значит так: три прерывания (18,19,20) ловятся как надо, а с 21 ноги почти в 2 раза меньше. Пробовал другие платы 2560. На одних как надо, на других, как описано выше. 21-й вывод на плате подписан как SCL. Не тут ли "собака порылась"? Может знает кто наверняка? Подскажите, плиз, делать то что? Завал ведь корячится. Караул!
Частота импульсов от энкодеров на всех входах примерно одинаковая.
Неактивний
Передаю бесценный опыт суточного поиска решения проблемы:
хреново я пробовал другие режимы интерраптов на этих ногах. Значит так: 18,19,20 в любом режиме считают одинаково. А вот 21-я правильно считает только LOW или HIGH. Перевел я и другие ноги в режим HIGH и, блин, песня! Проект можно считать сданным!
21-я нога хреново отрабатывает и FALLING и RISING. Я то сначала думал, что Ардуинов бутлодырь подсирает как-нить.
Залил HEX в чистый кристалл, без бутлодыря, таже хрень, ну и докопался, в итоге, что к чему. Уря-я-я-а!
Неактивний
Вернее не суточного, полусуточного.
Вообще, довольно странный этот контроллер.
Поставил на все 4-е входа прерываний режим LOW и... контроллер стал виснуть уже в setapе.
Опять ни хрена не пойму в чем дело. Стал по очереди менять на HIGH. Выяснилось, что при установке 4-го и 5-го входа прерываний в режим LOW, контроллер виснет. У меня на всех вышеописанных входах ловятся импульсы с одинаковых датчиков. Обрабатываются прерывания одинаковыми подпрограммами. Только при установке этих входов в режим HIGH все работает отлично.
Что-то разочаровала меня эта мега 2560. Erratов от Атмела не читал - некогда было. Все методом "проб и ошибок".
Да, еще скажу: состояния выходов датчиков могут быть любыми при включении устройства.
В итоге потраченного времени, в общей сложности, часов 8.
Остання редакція vicstr (2018-03-24 18:05:54)
Неактивний
21-я нога хреново отрабатывает и FALLING и RISING. Я то сначала думал, что Ардуинов бутлодырь подсирает как-нить.
Залил HEX в чистый кристалл, без бутлодыря, таже хрень, ну и докопался, в итоге,
"докопался" - это когда понятно что происходит и почему?
Неактивний
Так при всех 4-х хаях работает прекрасно. И обработчики насчитывают то, что нужно. А стоит поставить хотя бы 1 лоу, там где я говорил, и все. Почему тогда лоу на двух других входах не вешает мегу? Эти 6 внешних прерывания, я так понял, идентичны. Что скажешь? Дядя. Почему хаи не вешают мегу, хотя состояния входов прерываний непредсказуемы в момент старта проги?
Остання редакція vicstr (2018-03-24 20:41:41)
Неактивний
В Atmega2560 есть 8 внешних прерываний. Почему в среде ArduinoIDE используется только 6 ? Вот Вы пишите что писали на "чистый кристалл", извиняюсь на "чистый" это Вы понимаете без загрузчика? Не скромный вопрос а фьюзы Вы подправили? А зря даташит не читаете, знали бы какой адрес перехода по прерыванию и в какой секции он находится и причем тут загрузчик .
Неактивний
В дополнение, еще "информация к размышлению" . В мега2560, прерывания 0,1,2,3 асинхронные, все остальные синхронные, поэтому они уже не идентичны . Следовательно на синхронных входах генерация прерывания произойдет минимум через один такт. Поэтому если нужно получить прерывание по низкому уровню то его нужно удерживать до окончания выполнения текущей команды .
Неактивний
А что? Фьюзы уже за прерывания отвечают? ПисАл на чистый кристалл. Без загрузчика. Потому, что загрузчик перехватывает сигнал, например, по UARTу, чтобы прочухать, что к нему ломятся по поводу прошивания. Ну и хрен его знает, что он еще может перехватывать. Но этот вопрос уже отвалился. Да и по фиг, где и в какой секции находится переход по прерыванию. Ардуина IDE не оперирует адресами прерываний в чистом виде. Если прерывание возникло, оно запишется в регистре прерываний, т.е. там установится флаг этого прерывания и встанет в очередь обработки. И как только мы закончим обработку текущего прерывания, по выходу из обработчика мы попадаем на обработку следующего прерывания, поскольку по команде RETI, какая стоит на выходе из прерывания, автоматом разрешаются все прерывания. А под идентичностью я понимаю характер прерываний лоу, хай, перепады. Кстати, вот кусочек статьи, по прерываниям в AVR:
"Также любое прерывание имеет свой флаг прерывания. Этот флаг устанавливается в "1" в момент, когда должно произойти прерывание, даже если прерывания глобально запрещены и соответствующая программа обработки прерывания не вызывается. Можно, например, внутри какого-нибудь обработчика прерывания по этому флагу проверять было ли какое-либо прерывание или нет. Флаги внешних прерываний являются 7-м и 6-м битом регистра GIFR. Флаги прерываний сбрасываются записью в них "1"." 7-м и 6-м это про Атмегу 8.
Остання редакція vicstr (2018-03-24 23:25:15)
Неактивний
Все очень плохо , даже хуже чем я предполагал . Так, для общего развития, может в будущем пригодится , фьюзы отвечают за очень многое, в том числе за использование адресного пространства МК. Даже если и загрузчик не записан (как Вы думаете ), фьюзы которые отвечают за область загрузчика блокируют для программы это адресное пространство и делает мапинг очень многих векторов в том числе прерываний. Хотя впрочем зачем это все Вам . Вам и так все "понятно" потому что уж многое "пофиг", тем более
Ардуина IDE не оперирует адресами прерываний в чистом виде.
Ну ну...А библиотеки тоже "пофиг" как в прочем и то что в них ?
Неактивний
Nefreemen, да, как я вижу все действительно плохо. Как говорится - "слышал звон, да не знаю где он". Дальнейшую дискуссию в этой теме считаю просто нецелесообразной, когда пишут такие знатоки МК. Тема называется "Прерывания Mega2560". А уж с бутлодырем кристалл или без него - значения не имеет. Где бы вектора на обработку ни находились, они не меняют технических свойств входов прерываний. И фьюзы их тоже не изменят.
Остання редакція vicstr (2018-03-25 00:23:21)
Неактивний
Так что за сим позвольте откланяться, знатоки МК. Всем спок ночи. Пусть вам приснятся адресные пространства флэш памяти МК, где хаотично расположились вектора прерываний и заблудшая прога юзера раскорячилась в недоумении - куды пойти, шо делать?
Остання редакція vicstr (2018-03-25 00:42:19)
Неактивний
А заливку я делал в чистый кристалл, HEX файлом,программатором, через ISP, предварительно его, кристалл потерев. И как стартует прога с бутлодырем и без него прекрасно видно в Serial monitor.
Если "проффесор" и столько знаний то чего здесь пишем, нет не пишем, а спрашиваем , а? Да, спокойной ночи пусть и Вам приснятся "сериал мониторы" которые показывают откуда стартует ракета . А хаос не в программах и векторах он может быть только в голове перемешавшись с апломбом.
Неактивний
21-я нога (2-е прерывание) среди собратьев 18,19,20 нога, отрабатывает не как они. Хотя по описанию они одинаковые технически.
Чудес в природе не бывает. Или если бывают, то крайне редко.
Неактивний