Официальный сайт компании Arduino по адресу arduino.cc
Не работает INPUT на расширителе портов MCP23S17
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ср, 23/01/2019 - 12:29
Добрый день. Прошу помощи.
Не могу считать данные с расширителя портов Expander Shield на микросхеме MCP23S17
(два 16-разрядных расширителя портов ввода/вывода с SPI),
Использую библиотеку MCP23S17-master,
Порты отлично устанавливаются как выходы, могу подать высокий или низкий уровень, тут все ОК.
Но как вход ( INPUT или INPUT_PULLUP)- ни хрена не работают.
Ардуинка такая. (http://freeduino.ru/arduino/freeduino-mega-2560.html), переключатьель установлен в положение std( что соответствует 10/11/12/13 пину SS, MISO, MOSI и SCK)
В чем может быть проблема?. Я грешу либо на библиотеку, либо на - линия для передачи данных MISO.
Библиотеку могу выложить.
Вот мой скетч.
#include <MCP23S17.h> #ifdef __PIC32MX__ // chipKIT uses the DSPI library instead of the SPI library as it's better #include <DSPI.h> DSPI0 SPI; #else // Everytying else uses the SPI library #include <SPI.h> #endif const uint8_t chipSelect = 10; // Create an object for each chip // Bank 0 is address 0 // Bank 1 is address 1. // Increase the addresses by 2 for each BA value. MCP23S17 Bank1(&SPI, chipSelect, 0); MCP23S17 Bank2(&SPI, chipSelect, 1); void setup() { Serial.begin(9600); Bank1.begin(); Bank2.begin(); //Bank2.pinMode(1, INPUT_PULLUP); for (int i = 0; i < 16; i++) { Bank1.pinMode(i, INPUT_PULLUP); Bank2.pinMode(i, INPUT_PULLUP); //Bank2.digitalWrite(1, HIGH); pinMode(14, INPUT); } } void loop() { int value=Bank2.digitalRead(1); int value1=Bank1.digitalRead(1); int value2=digitalRead(14); Serial.println(); Serial.print("SIGNAL= "); Serial.print(value); Serial.print(" SIGNAL 2 = "); Serial.print(value1); Serial.print(" SIGNAL 3(14) = "); Serial.print(value2); //delay(10); }
PS. Пробывал как INPUT с подтягивающим резистором так и INPUT_PULLUP - не помогает. Также кучу других библиотек - ни одна не подошла.
У меня есть такая микросхема и я могу вечером попробовать, но без шилда и без библиотеки. Вам это поможет? Впрочем, с библиотекой тоже могу, если Вы ссылку на неё дадите, а вот шилда у меня нет (и не будет).
ЕвгенийП, Спасибо. Давайте попробуем. Буду рад любой помощи. 2дня уже убил, я в тупике. Ссылку сброшу
https://github.com/MajenkoLibraries/MCP23S17
Вот ссылка на библиотеку
Хорошо, я постараюсь вечером запустить и посмотреть.
На Уно точно 10-13 SPI пины, а на Меге другие. Напутали вы что-то, ни на вход ни на выход на Меге без правильного подключение не поедет.
Согласен с предыдущим оратором. У меги SPI на перпендикулярном торцевом пинхидере и на ICSP-разъеме. Данный шилд ни к одному из них не коннектится.
У меня не ардуино, а фредуиномега. По сути таже самая ардуинамега, но 86 портов. Там есть джампер который переключает SPI либо как у меги (51-53 пин) либо как UNO (10-13). У меня стоит на UNO.
Порты выставляются выходами. Устанавливаю 1. (digitalWrite(i, HIGH);) - появляется напряжение 4,6 в. (то же самое с INPUT_PULLUP. Т.е делаю вывод, что подключено верно. (10-13 пин)
НО прочетать не могу. digitalRead(i) - не работает. Пробывал по разному как с подтягивающим резистором так и с INPUT_PULLUP. - ничего
У меня не ардуино, а фредуиномега. По сути таже самая ардуинамега, но 86 портов. Там есть джампер который переключает SPI либо как у меги (51-53 пин) либо как UNO (10-13). У меня стоит на UNO.
Допустим, что Вы на какой-то там плате что-то переключили. Давайте теперь заглянем в библиотеку SPI.h:
Посему сделаем на фридуине вот так, к примеру: Serial.println(MOSI) и посмотрим - действительно ли среда Arduino почуяла, что вы там джамперами нащёлкали.
Ну если джамперы, тогда трудно сказать. Контакты? А SPI через джамперы на той плате уже ипользовалась, ну с каким-нить другим устройством? Она точно работает?
А библиотеку другую если, я как то проверял свои MCP23S08 с этой:
https://github.com/sumotoy/gpio_MCP23SXX
И вход и выход на ура читались.
Посему сделаем на фридуине вот так, к примеру: Serial.println(MOSI) и посмотрим - действительно ли среда Arduino почуяла, что вы там джамперами нащёлкали.
Сделал как сказали, блин получилось 51 - как у меги, подумаю как исправить.
Спасибо
Переставление перемычки ни чего не меняет. Может кто подскажет, как подключить этот шильд
(http://www.freeduino.ru/arduino/expander-shield.html)
к этому контроллеру
(http://www.freeduino.ru/arduino/freeduino-mega-2560.html)
и, блин получилось 51 - как у меги, подумаю как исправить.
Спасибо
А я как раз только собрался запускаться.
Значит, пока не буду :)
А я как раз только собрался запускаться.
Значит, пока не буду :)
Все равно спасибо, но еще не вечер)
Переставление перемычки ни чего не меняет. Может кто подскажет, как подключить этот шильд
Если умеете, то накатываете freeduino.ru_patch_arduino_1.6.3.zip и в pins_arduino.h правите на нужные
Если умеете, то накатываете freeduino.ru_patch_arduino_1.6.3.zip и в pins_arduino.h правите на нужные
Сделал вроде бы получилось. Mosi - стало 11, но появилась проблема с выводом в COM порт. Сначала начинает выводить, потом все... тишина
Разбираемся дальше)
Думаю что тут что то надо изменить.
Хотя, знаете, по схеме вроде как действительно перекидывается реальный D52 на D13 пинхидера (и остальные тоже). Что-то пельмени на соображалку плохо повлияли.
Но тогда вопрос, конечно, почему тогда не работало, а сейчас работает. Мультиметр имеется ли в хозяйстве? Потыкайте с установленными джамперами на фридуине - действительно ли весь SPI появляется на шилде (D50 фиридуины звонится с D12 шилда и т.п. см нижний левый угол схемы).
Подскажите как найти библиотеку SPI.h, в C:\Program Files (x86)\Arduino\libraries -нет
Есть только в WIFI
Но скетч при загрузке не ругается, значит она есть.
Но тогда вопрос, конечно, почему тогда не работало, а сейчас работает. Мультиметр имеется ли в хозяйстве? Потыкайте с установленными джамперами на фридуине - действительно ли весь SPI появляется на шилде (D50 фиридуины звонится с D12 шилда и т.п. см нижний левый угол схемы).
На работе мультиметр, приеду прозвоню.
Снес библиотеку SPI.h - загруженной мною с гигхаба, *(кривой имхо).
Но скетч все равно запускается, хотяя там
есть эта библиотека и он запускается. В папке библиотеки, больше SPI.h нет (только в папке WIFI)
Подскажите как его найти?
Подскажите как найти библиотеку SPI.h, в C:\Program Files (x86)\Arduino\libraries -нет
Ну, уж потыкали бы там вокруг, ну чего ж сразу постить-то?
C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SPI
Нашел))
Вообщем решил проблему, которую сам и создал. Дело оказалось в том, что к 53-50 пинам я распаял витую пару . (планировал изначально использвать как выходы, а PSI у меня будет на 10-13 пине.). Когда сообразил что пины не те, а проводов у меня "уева туча" (портов 86+32) и практически все припаены, и всё это жестко связано и прикручено в коробку, разбирать и выпаивать было лень. (есть небольшой запас по пинам). Думаю, что эти порты при подключении находилсь в высокоимпедансном состоянии и при считывании сигнало 0, менялся на 1 и обратно. Все отключил - сразу заработало. Буду завтра заново паять).
Всем спасибо за помощь.