совместимы ли sd card модуль и RFID
- Войдите на сайт для отправки комментариев
Втр, 07/07/2015 - 06:11
Читал что на spi можно повесить два устройства, просто перед обращением нужно устанавливать в LOW потом в HIGH, и так же для другого. Но почему то не работает.
/** * Read a card using a mfrc522 reader on your SPI interface * Pin layout should be as follows (on Arduino Uno): * MOSI: Pin 11 / 51 ICSP-4 * MISO: Pin 12 / 50 ICSP-1 * SCK: Pin 13 / 52 ISCP-3 * SS: Pin 10 / 53 * RST: Pin 9 */ //#include <SD.h> #include <SPI.h> #include <MFRC522.h> #include <LiquidCrystal.h> #define SS_PIN 53 #define RST_PIN 9 int CS_pin = 10; MFRC522 mfrc522(SS_PIN, RST_PIN); MFRC522::MIFARE_Key key; //File myFile; void setup() { Serial.begin(9600); // Disable SD Card pinMode(CS_pin, OUTPUT); digitalWrite(CS_pin, HIGH); // Disable RFID pinMode(SS_PIN, OUTPUT); // digitalWrite(SS_PIN, LOW); digitalWrite(SS_PIN, LOW); SPI.begin(); mfrc522.PCD_Init(); for (byte i = 0; i < 6; i++) { key.keyByte[i] = 0xFF; } digitalWrite(SS_PIN, HIGH); // Serial.println("Initializing Card"); //digitalWrite(CS_pin, LOW); // if (!SD.begin(CS_pin)) { // Serial.println("Card Failed"); // return; // } // Serial.println("Card Ready"); // digitalWrite(CS_pin, HIGH); } void loop() { // Enable RFID digitalWrite(SS_PIN, LOW); if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) { delay(50); return; } Serial.print(F("Card UID:")); for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(mfrc522.uid.uidByte[i], HEX); } Serial.println(); // Disable RFID digitalWrite(SS_PIN, HIGH); //Enable SD Card digitalWrite(CS_pin, LOW); myFile = SD.open("sensey.txt"); if (myFile) { Serial.println("sensey.txt:"); // read from the file until there's nothing else in it: while (myFile.available()) { Serial.write(myFile.read()); } // close the file: myFile.close(); } else { // if the file didn't open, print an error: Serial.println("error opening sensey.txt"); } // Disable SD Card digitalWrite(CS_pin, HIGH); //Enable RFID // digitalWrite(SS_PIN, LOW); // Halt PICC mfrc522.PICC_HaltA(); }
На spi можно подвесить пару десятков устройств. Но наверное это не для вас. :)
знаю, читал об этом. Нужно использовать LOW для включения одного из устройств и HIGH для выключения
Если на одном из устройств вытащить пин miso, второе устройство начинает работать
Если с первого раза не получилось парашютный спорт не для вас?
Сокращения SS (slave select) и CS (chip select) - это по сути синонимы. Они обозначают пин, который отвечает за выбор устройства. Это значит, что для каждого устройства этот пин должен быть свой. Дергая за этот пин, вы выбираете активное устройство - то, с которым SPI будет работать, ибо работать эта шина может только с одним устройством.
У вас-же для обоих устройств используется пин 10.
P.S. Так-же обратите внимание, что на MEGA шина SPI заведена на другие пины, отличные от UNO, NANO, PRO MINI
#define SS_PIN 53
019
int
CS_pin = 10;
Вроде разные? SD модуль 10 пин, RFID 53. Или не так что то
Если с первого раза не получилось парашютный спорт не для вас?
Дык вы с предыдущим прыжком не разобрались.
разбираюсь, по крайней мере пытаюсь
А это значит что бы не скучно было разбираться? Нюню
Пойду за попкормом схожу. Ибо понимание как устроены библиотеки и попытки найти насколько коректно они за собой отключают это будет весело. Особенно если учесть что некоторые клиенты spi шины устроены физически так что пытаются эту шину окупировать в личный доступ.
да , кстати sd принято вешать на 4 пин. Традиция устоявшаяся.
спасибо за подсказку попробую на 4 пин повесить, а насчет того что RFID не отключается читал, в скетче ставил в HIGH после завершения операции с ним, не помогло
спасибо за подсказку попробую на 4 пин повесить, а насчет того что RFID не отключается читал, в скетче ставил в HIGH после завершения операции с ним, не помогло
Смена пина не поможет. Это просто традиция.
а вот неотключаемый клиент решается только впайкой гейта. :)
Два пина на OUT делаешь.
1 - LOW, 2 - HIGH
Инициализация первого устройства
1 - HIGH, 2 - LOW
Инициализация второго устройства.
Переключение между устройствами:
1) Все пины в HIGH
2) Нужный пин в LOW
3) Работа
4) Все пины в HIGH
Я бы еще состояние через регистры или CyberLib менялб но это уже лирика.
Ну и не путай Slave Select и Chip Enable
...
Ну и не путай Slave Select и Chip Enable
Каким боком Chip Enable (что это вообще?) к SPI?
Если это замечание мне, то:
https://en.wikipedia.org/wiki/Chip_select
#define SS_PIN 53
019
int
CS_pin = 10;
Вроде разные? SD модуль 10 пин, RFID 53. Или не так что то
У вас не указано, какая плата. Если у вас Мега - можно конечно пины 53 и 10 использовать.
#define SS_PIN 53
019
int
CS_pin = 10;
Вроде разные? SD модуль 10 пин, RFID 53. Или не так что то
У вас не указано, какая плата. Если у вас Мега - можно конечно пины 53 и 10 использовать.
Есть варианты найти 53 пин на уно?
плата mega
Gippopotam
Не льсти себе, я писал ОПу :3