Использование пинов SPI параллельно для личных нужд
- Войдите на сайт для отправки комментариев
Вс, 15/04/2018 - 20:47
У гугла спрашивал, не помогло.
Дано: arduino pro mini 328p. Все пины заняты. Пины 11, 12 и 13 задействованы для прошивки через USBasp v2.
Найти: пины для подключения трёх кнопок.
Вопрос: можно ли параллельно на 11, 12 и 13 пины повесить кнопки?
Мои рассуждения: прошивка по SPI идёт после ресета, так что, по идее, кнопки подключить можно. Но при этом при нажатии на кнопки будут идти высокие уровни в USBasp. Не убью ли программатор? Или просто не нажимать кнопки при подключенном программаторе?
Если нельзя - буду использовать сдвиговый регистр.
1. Нет ничего, что нельзя было бы спалить.
2. По идее ри нажатии на кнопки, на присоединенных к ним пинах должны быть низкие уровни, а не высокие.
3. А Вы всерьез не можжете не нажимать кнопки в процессе прошивки контроллера?
PS. Лично я ничего плохого в подключении кнопок к пинам SPI, если SPI используетс я только для программирования, не вижу. Но всегда находятся умельцы см.п.1.
Мои рассуждения: прошивка по SPI идёт после ресета, так что, по идее, кнопки подключить можно. Но при этом при нажатии на кнопки будут идти высокие уровни в USBasp. Не убью ли программатор? Или просто не нажимать кнопки при подключенном программаторе?
Вы-же сами ответили, что можно, только осторожно. Кроме того питание можно на вход подавать не напрямую с кнопки , а через резистор 5-10 кОм. Возможное ограничение - нельзя использовать подавление дребезга конденсатором.
2. По идее ри нажатии на кнопки, на присоединенных к ним пинах должны быть низкие уровни, а не высокие.
Эм... Почему? И какая разница в прерывании по высокому или низкому?
3. А Вы всерьез не можжете не нажимать кнопки в процессе прошивки контроллера?
Не в процессе прошивки, а после. Ну вот обновил я прошивку, программатор не отключил. Проверяю работу кнопок.
Вообще логика подсказывает, что программатору должно быть пофиг. Ну идёт по линиям обмена данными сигнал. По линии тактирования тем более.
Подключить к I2C PCF*, к ней - хоть 8 кнопок. Это как вариант.
2. По идее ри нажатии на кнопки, на присоединенных к ним пинах должны быть низкие уровни, а не высокие.
Эм... Почему? И какая разница в прерывании по высокому или низкому?
Общепринято, что кнопка замыкает контакт на землю. При этом формируется именно низкий уровень. Ну и встроенные подтягивающие резисторы поэтому подключены к питанию. Никто не мешает, конечно, сделать и наоборото, но во-первых - нестандартно, а во вторых - понадобится внешний подтягивающий резистор.
Подключить к I2C PCF*, к ней - хоть 8 кнопок. Это как вариант.
а будут работать прерывания?
Подключить к I2C PCF*, к ней - хоть 8 кнопок. Это как вариант.
а будут работать прерывания?
Какие прерывания, ВНЕЗАПНО?
Подключить к I2C PCF*, к ней - хоть 8 кнопок. Это как вариант.
а будут работать прерывания?
У этого экстендера есть INT, который дергает МК, если состояние входов изменилось. Ловите его, потом сразу читайте из него состояние ног. Для кнопок пойдет.
Подключить к I2C PCF*, к ней - хоть 8 кнопок. Это как вариант.
а будут работать прерывания?
У этого экстендера есть INT, который дергает МК, если состояние входов изменилось. Ловите его, потом сразу читайте из него состояние ног. Для кнопок пойдет.
Да это-то ясно, я просто сильно удивился: сначала речь шла про совместное использование пинов SPI, чтобы туда кнопки вкорячить, потом, после совета про PCF, ВНЕЗАПНО, вопрос про прерывания. Как это связано - я так и не понял, учитывая тот факт, что на 328-м камне внешние прерывания на пинах 2 и 3, которые никаким боком к SPI.
Как это связано - я так и не понял, учитывая тот факт, что на 328-м камне внешние прерывания на пинах 2 и 3, которые никаким боком к SPI.
Кроме INT0 и INT1 есть ещё "Pin Change Interrupt". Хотя если бы ТС догадался взглянуть в апноуты, то не пришлось бы создавать эту тему.
Кроме INT0 и INT1 есть ещё "Pin Change Interrupt".
КЭП! Спасибо, чтоб я без тебя делал. Думаешь, что ТС юзает PCINT* вектора? Шой-то я ооочень в этом сомневаюсь, вот терзают такие сомнения, иначе не было бы и темы про скрещивание ужа с ежом.
Повторюсь: удивлён, откуда вообще выплыл вопрос про работу прерываний, если изначально речь шла совсем не об этом. Ферштейн?
Спасибо за ответы. Да, я забыл, что внешние прерывания на определенных портах. Тогда можно, действительно, повесить сдвиговый регистр, а кнопки на один пин с RC цепочками разных емкостей
Ничего не сдохнет, не переживайте. Не так страшно выход в high состоянии коротнуть на массу. Гораздо хуже подать питание на выход в low состоянии.
Да зачем тебе кнопки на один пин? Бери PCF8574, туда подключишь свои кнопки, а ногу INT микрухи, если надо - повесишь на пин 2 или 3 (ну или PCINT* заюзать), по прерыванию с него будешь читать с микрухи, чего там поменялось на её ногах. Профитов - масса, надо будет ещё кнопок - повесишь ещё одну PCF8574 на ту же шину. И никаких головняков, собственно.
Или сразу PCF8575
Ежели по теме, то достаточно глянуть на 6 страницу 42 апноута(AVR042) и вопрос решен. Но тогда форум закиснет. :)
Ничего не сдохнет, не переживайте. Не так страшно выход в high состоянии коротнуть на массу. Гораздо хуже подать питание на выход в low состоянии.
Зря Вы так безаппеляционно. Сопротивление верхнего открытого ключа- 19 Ом, нижнего - 22 Ома. Согласно закону Ома ток при 5 вольтах питания, будет 0.27 и 0,23 А соответственно. Что в любом случае должно быть смертельно для выхода. Если проводники соединяющие элементы МС не выгорят, то при длительном воздействии сдохнет от перегрева. Если потяет блок питания.
Подключил дисплей по SPI вот так http://playground.arduino.cc/Main/LiquidCrystal параллельно с программатором.
Команды на сдвиговый регистр идут по линии MOSI. Линия MISO свободна. По разводке платы очень удобно было бы повесить защелку на пин MISO.
При попытке объявить пин MISO защелкой дисплей пуст.
Cкетч тестовый, HelloWorld_SPI. 12 пин - MISO.
Подскажите, пожалуйста, как использовать 12 пин?
"Защелка" - это что? Для какого устройства используется?
Сдвиговый регистр по линии MOSI заполняется данными, а при изменении на защелке сигнала с LOW на HIGH данные передаются на выходы регистра. На любых других пинах работает. На 12 нет.
pinmode(12, OUTPUT) результата также не даёт.
Так и должно быть.
- Вы умеете играть на скрипке?
- Да, умею.
- А на рояле?
- и на рояле тоже умею.
- Тогда сыграйте на том и на другом одновременно!
Вы можете использовать 12 пин для других нужд ТОЛЬКО тогда, когда не используете SPI. В SPI изменить назначение пина 12 (как и любого другого, имеющего аппаратную функцию) нельзя.
Это ясно, но в данном случае линия MISO (12 пин) не используется, так как сдвиговый регистр выходной. Только MOSI, тактовая и защелка.
Если он лично Вам не нужен, это не значит, что он не используется.
Еще раз: во время работы SPI его аппаратные пины ни для чего другого использовать нельзя. Можно использовать только тогда, когда SPI не работает. Если Вас это не устраивает, пользуйтесь вместо аппаратного SPI софтверным shiftOut().