Не могу подключить RFID PN532
- Войдите на сайт для отправки комментариев
Добрый день!
Купили на ali модуль RFID PN532 для ребенка, который слишком рано увлекся электроникой. Мне приходится помогать ему разбираться, хотя электроника и программирование - совсем не мои области. Итак, контакты я более менее припаял (это тоже не моя область), плата UNO, ревизию сказать точно не могу, похожа на 3-ю. I2C сканер находит плату по адресу 0x24. Переключатели на плате установлены на I2C. Библиотеки elechouse c github скачаны и установлены. Запускается пример из описания, например, iso14443a_uid или readMifare. Открываем монитор порта и видим либо просто набор символов (от 1 до 4), либо только Hello!, либо Hello! и сообщение, что карта не найдена. Подключение: VCC на 5 вольт, SDA и SCL к последним контактам в ряду цифровых, после AREF. Пробовал также подключение по SPI (правда, не припаивая контакты), картина такая же... Библиотеки от Adafruit тоже пробовали, все так же. Не знаю уже, что делать, очень обидно, ждали месяц, хотели с ребенком поиграть на выходных, а тут...
Собственно вопросы: если I2C сканер показывает адрес карты, значит она рабочая и контакты припаяны нормально?
Почему в библиотеках I2C адрес 0x48, а сканер показывает 0x24?
Что-то может препятствовать нормальному обмену по COM-порту?
Заранее спасибо!
https://forums.adafruit.com/viewtopic.php?f=19&t=88591
Не ваш случай?
Ну, теперь уже и не знаю. Плата в точности как эта http://iarduino.ru/shop/Expansion-payments/rfid-modul-pn532-nfc.html
Разве для ее подключения требуется level shifter? Я подключаю 4-мя проводами напрямую к UNO, как и другие датчики с I2C, с которыми мы играемся...
Не знаю, что конкретно вашей плате требуется (нужно посмотреть - есть ли на на ее I2C линиях резисторы к питанию). Насколько я понял, товарищ с форума добавил 2,2K между SDA/SCL и 3.3V, после чего у него всё зафурычило.
Я, конечно, попробую, но сомнительно, в сети куча видео с прямым подключением, вот, например https://www.youtube.com/watch?v=DKA8aTR8nDs
Больше всего смущает, что сканер показывает адрес 0x24, производитель утверждает, что адрес фиксированный 0x48. Если бы сканер его не находил, было бы ясно, что плата битая, а так не знаю, что и думать.
Ну, что я вам могу сказать... не забывайте, где вы купили плату. Там можно и не такое приобрести.
Кстати, на видео плата подключается на пины в аналоговом ряде, а не около AREF. Конечно хочется верить, что они хоть куда-то присоединены, но вот на схеме оригинальной UNO они в воздухе подвешены, как это не глупо звучит: https://www.arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf
Не забываю, но все остальное пришло рабочее, а эта штука для ребенка самоя интересная, была надежда, что я что-то не так сделал...
А насчет подключения - на предыдущих версиях UNO разъемы для I2C были в аналоговом ряду, сейчас отдельно.
Еще подскажите, если вы в курсе, RC522 существенно отличается от PN532? Что лучше для экспериментов взять?
Нет, не в курса абсолютно.
Судя по приведенной схеме Uno rev3, а она вроде как последняя, они всё там же - на A4/A5.
Схема устаревшая, у меня rev3, причем итальянская
Больше всего смущает, что сканер показывает адрес 0x24, производитель утверждает, что адрес фиксированный 0x48. Если бы сканер его не находил, было бы ясно, что плата битая, а так не знаю, что и думать.
Вполне вероятно, что это один и тот же адрес, только по-разному записанный. В I2C младший бит адреса используется для служебных целей, поэтому сам адрес семибитный, а его написание возможно двояко.
Вполне вероятно, что это один и тот же адрес, только по-разному записанный. В I2C младший бит адреса используется для служебных целей, поэтому сам адрес семибитный, а его написание возможно двояко.
Подскажите, а есть ли способ определить, жива ли плата?
Ну, собственно, со стороны программы (скетча) только задавать ей вопросы и ждать ответов. Снаружи можно посмотреть логическим анализатором или осциллографом.
Ну, собственно, со стороны программы (скетча) только задавать ей вопросы и ждать ответов.
То есть, это именно то, что делает скетч из примеров библлиотеки в начале работы? Он не получает ответа, ни по I2C, ни по SPI. Остается вариант, что я все-таки что-то напутал, но где искать уже не понимаю.
Напутать Вы могли как в программной, так и в аппаратной части. Где именно - Вы не знаете.
Т.к. отлаживать программную часть при имеющихся проблемах с аппаратной - занятие бесперспективное, начните с проверки аппаратной: проверьте наличие сигналов на I2C шине.
проверьте наличие сигналов на I2C шине.
Как именно это сделать?
Я же писал в посте №11 - осциллографим или логическим анализатором.
Я же писал в посте №11 - осциллографим или логическим анализатором.
Я биолог и помогаю ребенку сделать игрушку, у меня просто нет осциллографа, тем более таинственного логического анализатора.
Я биолог и помогаю ребенку сделать игрушку, у меня просто нет осциллографа, тем более таинственного логического анализатора.
Как научный работник вы же понимаете, что без инструментария даже лягушку не препарируешь.
Модуль вот такой, параллельно модулю его цепляете, на PC ставите программную часть и смотрите, что на шине летает: https://ru.aliexpress.com/item/new-1sets-New-Arrival-USB-Logic-Analyze-24M-8CH-MCU-ARM-FPGA-DSP-debug-tool/32246802326.html
Конечно, приобретение для одного раза логического анализатора выглядит неразумно, но если вы действительно хотите понять, где ошибка - вам нужно увидеть, что на плату уходит запрос (и какой), а обратно приходят какие-то похожие на правду циферки. В противном случае вы просто пытаетесь собирать грибы ночью. Мне приходили с алиэкспресса сетевые модули с замкнутыми выходами микросхемы (при этом по SPI ничего не было), с непропаянными выводами (модуль инициализировался через раз, выдавал странные данные).
Ну или с резисторами попробуйте - это дешевле и быстрее.
Инструментарий, конечно, нужен, но я полагал, что можно как-то программно решить вопрос. А такие штуки пускай ребенок сам покупает, когда вырастет, если они еще будут нужны к тому времени.
Пока писал, пришел ответ от производителя, fake board...
Все, вопрос снят, пойду открывать спор на али...
А зря. Попробуйте подключить на аналоговые пины - там точно есть IIC.
А зря. Попробуйте подключить на аналоговые пины - там точно есть IIC.
Я подключаю туда, где есть обозначение SDA и SCL, по ним прекрасно работают другие датчики.
Продолжение истории: поскольку насчет неисправности платы, отдающей свой адрес, были сомнения, продолжил исследования. Использовал библиотеку Adafruit и соединил контакты IRQ и RESET с цифровыми пинами 2 и 3, как указано в скетче. Удивительно, но все заработало.
Теперь и у меня таже самая проблема. Пытаюсь плату Arduino Uno Подключить к PN532. Подключаю по шине I2C. Подаю землю и питание 5в.SDA и SCL соединяю между собой. Вывод 2 Arduino соединяю с IRQ PN532. Вывод 3 соединяю с Reset PN532. В монитор выводит квадратики несколько штук (1 или 3) и больше ничего.
Строки 44 и 45 раскомментировать.
Квадратики победил.Просто неверно была настроена скорость COM порта.
Отличие платы PN-532 от RC-522 как небо и земля. Читает все.
Рабочая схема подключения платы PC-532 к Arduino UNO по SPI.
Arduino Pn-532
D2 SCK
D5 MI
D3 MO/SDA/TX
D4 NSS/SCL/RX
Не знаю, что конкретно вашей плате требуется (нужно посмотреть - есть ли на на ее I2C линиях резисторы к питанию). Насколько я понял, товарищ с форума добавил 2,2K между SDA/SCL и 3.3V, после чего у него всё зафурычило.
Поигрался с rev3 . Пользовал адафрутовские библиотеки. Видится, определяется нифига не читает.
почитал описание, подключил питание не 3.3, а 5v. И тут все заработало. Видимо для чтения карт не хватало питания.
Странно в описании говорится, что питание от 3.3 до 5v.
на i2c резисторы подтяжки не потребовались.