Помогите пожалуйста. Можно ли переназначить прерывания на портах 2,3 на другие порты ?

sever
Offline
Зарегистрирован: 25.06.2018

Цифровые порты 2,3 используются для генерации прерываний (arduino uno). Те же самые порты 2,3 используются в схеме подключения LCD к ардуине, что делает невозможным использования внешних прерываний на этих ногах. Можно ли переназначить прерывания на портах 2,3 на другие порты, если можно то как это сделать? (Менять схему подключения LCD на I2C не хочу, так как адаптера ждать долго). Спасибо.

Efim
Offline
Зарегистрирован: 04.05.2018

sever

А зачем переназначять? Используйте совместно.

sever
Offline
Зарегистрирован: 25.06.2018

Хм... но эти порты учавствуют в передаче данных на  LCD разве данные не пострадают, если я буду "коротить" эти порты на землю энкодером, например?

Efim
Offline
Зарегистрирован: 04.05.2018

sever

Не пострадает если все правильно напишите, просто не выводите данные на экран когда энкодер коротит на землю, а все остальное время пожалуйста. Для глаза это будет не заметно ибо код выполняется очень быстро.

 

sever
Offline
Зарегистрирован: 25.06.2018

Спасибо, попробую.

Efim
Offline
Зарегистрирован: 04.05.2018

sever

Желательно для энкодера сделать аппаратный антидребезг.

sever
Offline
Зарегистрирован: 25.06.2018

Подскажите, Вы предлогаете подключить энкодер  к тем же портам, что и линии для LCD. Но по типовой схеме энкодера, его выхода подтянуты к +Vcc. Таким образом, на портах 2,3 постоянно будет+Vcc, что явно помешает передачи данных на LCD или я недопонимаю что-то?

Efim
Offline
Зарегистрирован: 04.05.2018

sever

Так вы подтяжку энкодеру делайте а не пинам, пины после фильтра соеденяйте через резистор ~10 кОм. Но если это трудно для вас то можно и программный антидребезг сделать.

sever
Offline
Зарегистрирован: 25.06.2018

Чет не понимаю. Подтяжка итак на энкодере. Через энкодер +5v прямиком попадает на пины. Вот схемка с фильтром и энкодером.

https://cdn1.savepice.ru/uploads/2018/6/25/ca777d18f9c209a487909b5fc93d9c7c-full.jpg

Может если через тригер сделать антидребезг, тогда выйдет.

Efim
Offline
Зарегистрирован: 04.05.2018

Да, но RC фильт вешаем на энкодер, а пин подключаем через сопротивление R. То есть сопротивление "R на схеме" включаем между контроллером и энкодером. 

sever
Offline
Зарегистрирован: 25.06.2018

Все равно не понимаю. На портах всегда будет+5, как не переставляй резистор. Или не вкуриваю?

https://cdn1.savepice.ru/uploads/2018/6/25/5434ebf7bf26fe5d45688c9acddc6...

Efim
Offline
Зарегистрирован: 04.05.2018

Вот все верно нарисовали. А что это для вас принципиально что там будет +Vcc? Можно изменить полярность подтяжки, тогда энкодер будет выдавать импульсы положительной полярности. Вообще это дело вкуса)

sadman41
Offline
Зарегистрирован: 19.10.2016

Сдается мне, что проще пересадить LCD с D2/D3, чем городить всякие workaround'ы

Efim
Offline
Зарегистрирован: 04.05.2018

sadman41

Зачем? Все и так будет отлично работать.

sadman41
Offline
Зарегистрирован: 19.10.2016

А я ленивый на пайку, к примеру.

Efim
Offline
Зарегистрирован: 04.05.2018

sadman41

Аппаратные решения экономят время для написания программы)

sever
Offline
Зарегистрирован: 25.06.2018

"А что это для вас принципиально что там будет +Vcc" Мне нет, просто я не знаю, как будет вести себя LCD, если на этих двух портах если постоянно будет +5 с энкодера. Это первый вопрос и вот второй. Если я активирую прерывания по этим портам, то они, должны  генерится по изменению уровня напряжения на данных портах. В процессе передачи данных на LCD на этих портах итак происходит изменение напряжения (единицы/нули идут на LCD). Не вызовет ли это ложного прерывания по данным портам. Получается, что источником изменения напряжения на портах будет не только энкодер?

"Сдается мне, что проще пересадить LCD с D2/D3, чем городить всякие workaround'ы"  А как их поменять?

 

sadman41
Offline
Зарегистрирован: 19.10.2016

sever пишет:

"Сдается мне, что проще пересадить LCD с D2/D3, чем городить всякие workaround'ы"  А как их поменять?

Подумайте, чего еще не хватает в вашем вопросе.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sever,

не ведитесь. Вешать на одни пины и энкодер, и экран можно только через Альпы. Сделать, чтобы это работала надёжно, невозможно. Вы голову-то включайте. Вот Вам говорят "не выводите на экран, когда юзер крутит энкодер", а откуда Вам знать когда ему приспичит его крутить начать? 

Прерывания есть на всех пинах (если у Вас uno/nano и т.п.) - на всех. Правда у других пинов эти прерывания несколько иные и attachInterrupt на них не работает, но использовать их можно. Библиотек куча. Поищите по словам "pin change interrupt arduino library" - берите библиотеку, запускайте пример из неё и радуйтесь прерываниям на любом пине.

 

Efim
Offline
Зарегистрирован: 04.05.2018

ЕвгенийП пишет:

Вешать на одни пины и энкодер, и экран можно только через Альпы. Сделать, чтобы это работала надёжно, невозможно. 

Если вы не знаете как то это не значит что это невозможно. А насчет прерываний согласен)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Это невозможно независимо от того знаю я что-то или нет.

sever
Offline
Зарегистрирован: 25.06.2018

"Подумайте, чего еще не хватает в вашем вопросе."

Я понял, слова пожалуйста?)) Пожалуйста, подскажите , как поменять)

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

sever, на UNO 19 ног, сажайте LCD дисплей на любые свободные, в чём проблема то?

sever
Offline
Зарегистрирован: 25.06.2018

dimax пишет:

sever, на UNO 19 ног, сажайте LCD дисплей на любые свободные, в чём проблема то?

 

Спасибо, dimax! 

Инерция мышления, наверно. В примерах подключения LCD в нете, используют пины 2,3 и я, как обезьяна слизал и парюсь))). Сейчас инициализировал вместо 2,3- 6,7. Все работает, 2,3 свободны.

sadman41
Offline
Зарегистрирован: 19.10.2016

Кино и немцы

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:

Кино и немцы

Во-во! Итическая сила! "Ну, не придёшь, тогда вычёркиваю!" :)))