RFID Reader - Arduino Ethernet RC522
Einklappen
X
-
Wenn ich den W5100 und den RC522 gleichzeitig miteinander verbinde, funktioniert der RC522 nicht und der W5100 startet sich ständig neu. Als Ergebnis erhält der W5100 keine IP-Adresse. Ich habe dieses Setup mit einem anderen einfachen Programm getestet.
Wenn ich den W5100 alleine anschließe, ohne den RC522, bekommt der W5100 ordentlich eine IP-Adresse. Sobald ich den RC522 daran anschließe, bootet sich der W5100 jedes Mal neu. Wenn ich den RC522 ohne den W5100 anschließe, funktioniert der RC522 einwandfrei. Sobald ich den W5100 anschließe funktioniert es nicht mehr.
W5100 SS ist Pin 10, RC522 SS ist Pin 9.
Kann mir bitte jemand dabei helfen? Ich habe keine Ahnung, was ich tun soll, um beide Geräte mit dem SPI-Bus zu verbinden.Kommentar
-
Eventuell ist es dieses Problem:
https://arduinodiy.wordpress.com/201...the-w5100-bug/
Also ein etwas falsch designtes W5100 Modul wo man erst selbst noch das SS Signal mit einem zusätzlichen inverter IC invertieren muss damit es mit mehreren Slaves auf dem SPI Bus funktioniert.
Nur so ne ganz blöde Idee falls es das Problem sein sollte: ;-)
Ich hab mir das noch nicht näher angeschaut aber eventuell könnte man in der Library für den W5100 den SS Pegel einfach umdrehen. Damit würde man sich das rumlöten am W510 Board sparen.
Bei deinen installierten Arduino Librarys schaust du mal nach "\Arduino\libraries\Ethernet\src\utility\w5100 .h"
und öffnest die mit einem Texteditor (vorher Kopie davon anlegen)
Irgendwo müsste eine Sektion anfangen die etwa so aussieht:
...
private:
#if defined(__AVR__)
static volatile uint8_t *ss_pin_reg;
static uint8_t ss_pin_mask;
inline static void initSS() {
ss_pin_reg = portOutputRegister(digitalPinToPort(ss_pin));
ss_pin_mask = digitalPinToBitMask(ss_pin);
pinMode(ss_pin, OUTPUT);
}
inline static void setSS() {
*(ss_pin_reg) &= ~ss_pin_mask;
}
inline static void resetSS() {
*(ss_pin_reg) |= ss_pin_mask;
}
#elif defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MK66FX1M0__) || defined(__MK64FX512__)
static volatile uint8_t *ss_pin_reg;
inline static void initSS() {
ss_pin_reg = portOutputRegister(ss_pin);
pinMode(ss_pin, OUTPUT);
...
Wenn du mit einem Arduino Nano arbeitest, dann wäre gleich der oberste Teil also nach "#if defined(__AVR__)" und vor dem nächsten "#elif defined(_...."
die richtige Sektion. Bei einem anderen Board müsstest du die passenden Sektion selbst raussuchen.
In jeder Sektion gibt es jedenfalls die inline Statements um den SS Pin zum setzen und zurück zu setzen.
Diese müsstest du einfach umdrehen.
Am einfachsten "setSS()" umbenenne zu "resetSS()" und umgekehrt.
Dann alles neu kompilieren und testen.
Das ganz unten auf der Seite
https://arduinodiy.wordpress.com/201...the-w5100-bug/
beschrieben Problem bezüglich des Resets, sollte man bei einem entsprechenden Board auch nicht unbeachtet lassen.
Also das RST Signal nicht verbinden und einen Delay einbauen.
Zuletzt geändert von Labmaster; 11.09.2022, 11:47.Kommentar
-
Sehr geehrter Labormeister,
Gestern habe ich Set und Reset in der Bibliothek an den angegebenen Stellen getauscht. Ich habe auch den Timer in den Code eingefügt. Der W5100 funktioniert jetzt einwandfrei, wenn ich ein OK-UDP Signal auf Loxone sende, antwortet der Nano darauf. Aber der RC522 funktioniert noch nicht. Auch nicht auf dem seriellen Monitor. Wenn ich meinen Testcode auf das Arduino Nano herunterlade, funktioniert es auch nicht, es sei denn, ich trenne die +5 V vom W5100. In dem Moment, in dem ich +5 V trenne, funktioniert der RC522 perfekt. Kennen Sie eine mögliche Lösung?
Ich habe bereits in der RC522-Bibliothek nachgesehen, kann aber keinen ähnlichen Set-Reset-Code finden.
P.S.: verzeiht meine Deutsche Übersetzung, ich benutze Google Translate. Ich komme aus den Niederlanden und spreche schlecht Deutsch.Kommentar
-
Sehr geehrter Labmaster,
Ich habe tatsächlich Pin 9 als SS für den RC522 angeschlossen und es steht im Code.
Könnte es eine Lösung sein, MISO und MOSI nur für den RC522 auf andere Pins zu programmieren? wie in diesem Beitrag: https://forum.arduino.cc/t/is-the-sp...hield/100119/5
Auf jeden Fall will ich es versuchen, die Ergebnisse teile ich euch hier mit.
Wenn dies nicht funktioniert, möchte ich vorübergehend einen zweiten Nano in meiner Steuerung einbauen. Ein nano kommuniziert dann über den PSI-Bus mit dem RC522, der über einen Offline-Code verfügt, um die erlaubten Tags zu prüfen. Ich habe dieses System derzeit an 2 Türen. Dieser Nano verwendet dann 1 Eingang und 1 Ausgang mit den Pins, um ein Signal an den anderen Nano zu geben, der dann die W5100-UDP-Pakete auf seinem eigenen SPI-Bus sendet. Dass die Kommunikation zwischen den beiden Arduinos natürlich auch über die RX-TX-Pins möglich sein sollte, kann ich aber selbst noch nicht gut genug programmieren. Es würde zu viel Zeit in Anspruch nehmen, und ich warte auf einen Nano 33 IoT mit integriertem WiFi-Adapter.
Der Vorteil eines lokal auf dem Arduino laufenden Codes, der die Tags selbst prüft, ist, dass die Türen auch geöffnet werden können, wenn das Netzwerk ausgefallen ist. Und der Nano 33 IoT kann über WLAN programmiert werden, sodass neue Tags einfach hinzugefügt werden können.
Wenn jemand den eigenständigen Tag-Reader benötigt, ich upload es gern.Kommentar
-
Sehr geehrter Labmeister,
Bisher war es noch nicht möglich, den RC522 und den W5100 zum Laufen zu bringen.
Ich habe es jetzt so gelöst:
Wenn ein Tag präsentiert wird, prüft der Arduino, ob diese Nummer im Code vorkommt. Wenn der Code nicht erscheint, schaltet das Arduino die rote LED und den Summer mit einem Fehlerton ein. Wenn das richtige Tag gefunden wird, sendet das Arduino für 130 ms. ein Ausgang. Dieser Ausgang ist mit einem zweiten Arduino verbunden, der loxone per udp mitteilt, dass die Tür offen ist. Loxone steuert nun das Licht im Schuppen so lange, bis der Bewegungsmelder im Schuppen 5 Minuten lang keine Bewegung mehr gesehen hat.
In der Lokone-Config habe ich nun einen udp-Befehl erstellt, der per udp ein Signal an das Arduino sendet. Dieses Arduino sendet dann eine Ausgabe an den Eingang des Zugangskontroll-Arduinos, das dann die Tür wieder öffnet (und ein Signal zurück an Loxone sendet, um anzuzeigen, dass die Tür offen ist).
Sollte das loxone aus irgendeinem Grund ausfallen, dann funktioniert zumindest die Zutrittskontrolle noch im Akkubetrieb und ich kann den Schuppen trotzdem betreten.
Der Vorteil ist, dass ich das Arduino auch mit der W5100-Netzwerkkarte verwenden kann, um den Port zu öffnen, indem ich einen Eingang und einen Ausgang auf die gleiche Weise verbinde. Also verwende ich 1 Arduino mit W5100 darauf, um 2 Arduinos mit beiden RC522 darauf zu steuern, die aber immer noch eigenständig funktionieren können.Kommentar
-
Moin
ich habe überlegt einen esp32 mit RDM630 zu benutzen um mir die ID des tags per UDP anzeigen zulassen das funktioniert auch.
aber wenn ich den Virtuelle Eingang an den Berechtigungsbaustein auflege nimmt dieser die werte nicht an (Eid)
hat einer schon mal so etwas umgesetzt.
Danke schon mal für die Hilfe
Kommentar
Kommentar