Kleinere bugs/issues

Als ich das vor ein paar Wochen zuletzt getestet habe (ich selbst nutze LPCD nicht), hat es funktioniert. Kannst ja mal versuchen, einen 10k-Widerstand am PN5180 zwischen IRQ und 3.3 V einzulöten. Vielleicht bringt das was.

LPCD funktioniert wenn Alles(!) passt:

  • Firmware 4.1 (Hast Du bestimmt schon drauf)
  • Richtige Zuordnung RFID_IRQ am Besten an einem echten GPIO (nicht am Port-Expander)
  • PN5180 Leser muss dauerhaft mit Strom (3.3/5V) versorgt sein, auch im deep-sleep Modus
  • Arduino 1.0.6 (Bei 2.x gibt es Probleme weil der Zustand nicht gehalten wird)

Pullup-Widerstand ist meiner Erinnerung nach nicht notwendig (Kann es jetzt auf die Schnelle nicht genau sagen)
Was zeigt die serielle Debugausgabe? Poste das mal hier…

Edit:
Der PN5180 wirft immer mal wieder einen IRQ, der ESP32 wacht auf, prüft auf eine vorhandene RFID-Karte. Falls nicht vorhanden legt er sich wieder schlafen. Das wäre also normal…

1 „Gefällt mir“

OK, das mit dem Port-Expander sollte passen, „Push-Button“ Eintrag wäre also OK.
Bitte mal messen on der PN5180 ständig mit Spannung versorgt wird. Als zusätziche Kontrolle kannst Du eine LED mit Vorwiderstand am PN5180 IRQ anschließen.

LPCD = Overengineering :wink:

Vielen Dank! Wenn also das aktuelle board verwendet wird und der IRQ auf den PortExpander geht, dann kann auch nicht differenziert werden, dass gerade gar kein IRQ vom Reader kam und somit startet er direkt?

Im Debug steht immer, dass er einen userbutton erkannt hat und deshalb startet.

Normalerweise solltest Du bei Falschalarm diese Meldung sehen:

ESP32 wurde vom Kartenleser aus dem Deepsleep aufgeweckt. Allerdings wurde keine ISO-14443-Karte gefunden. Gehe zurück in den Deepsleep…

Evt. kannst das hier ab hier debuggen. Poste einmal Deinen Log hier!

Das ist korrekt. Das wird über den Port-Expander erkannt wie ein normaler Tastendruck. Geht nicht anders.
Wenn du das nicht willst, dann verwende PE.115 für Power (anstelle GPIO32) und stattdessen GPIO32 für den IRQ von RFID.PN5180. JP4 musst du dafür öffnen und einen Draht von PN5180.IRQ auf ext.13 löten.
Musst dann im Settings-File halt den IRQ-Pin anpassen (im Falle von Port-Expander ist der wurscht) und auch den GPIO für Power auf 115 ändern.

=> Habe ich nicht getestet, aber müsste so klappen.

Werde es heute Abend nochmal versuchen.
Zum Verständnis aber nochmal kurz:
Wenn der IRQ auf dem portexpander liegt, dann ist der GPIO ja größer als MaxGpio und somit ist die Erkennung nicht möglich. Damit würde der IRQ vom Portexpander anschlagen aber nicht erkannt werden, dass es eigentlich der RFID-Reader war.
Somit würde er starten da ein „userbutton“ erkannt wurde obwohl es nur der falsche Alarm vom RFID-Reader war.

Oder verstehe ich hier das Konzept oder eine Einstellung noch nicht?

Und wie finde ich die Arduino-Version heraus?

Also der ESP32 besitzt GPIOs von 0 bis 39. Um das Ganze (GPIOs und Eingänge vom PE) uniform zu behandeln, habe ich jedoch festgelegt, dass innerhalb von 100 bis 115 die PE-Pins liegen. Das Übersetzen von 100 bis 115 macht Port.cpp. Wobei natürlich aber klar sein muss, dass ein Pin eines Port-Expanders bei weitem nicht so viel kann, wie ein GPIO. Aber für sowas wie Buttons (oder IRQs) ist es natürlich kein Problem.

Setzt man nun den GPIO für PN5180.IRQ auf z.B. 32, dann „sagt“ ESPuino dem ESP32: Ok, also wenn du in Deepsleep gehst, dann höre auf GPIO32 und wenn da was passiert, dann wache auf. Es gibt dann also einen GPIO zum Aufwecken per Taster (z.B. 36) und noch einen per PN5180.IRQ (32). Und im Code kann ich natürlich erkennen, ob das 32 oder 36 war. Und wenn es dann 32 ist, dann kann ich schauen, ob es ein Falschalarm war oder nicht.

Wickelt man das über den PE ab, dann ist das anders. D.h. alle Pins sind per Default Eingänge (Ausgänge muss man aktiv konfigurieren). Und ändert sich der Spannungsregler von HI auf LO, egal bei welchem Eingang, dann wirft der PE einen Interrupt, der dann von GPIO36 ausgelesen wird. Welcher Pin jedoch für den IRQ letztlich verantwortlich war, das weißt du nicht. Und das sorgt eben dafür, dass alle Eingänge gleichberechtigt den ESP32 aufwecken lassen können. Und deswegen kann man sich das Eintragen des PN5180.IRQ im Settings-File beim Port-Expander (nur dort!) auch sparen (schadet aber auch nicht), weil es wird eh nicht ausgelesen.

ESPuino verwendet, Stand jetzt, ESP32-Arduino 1.0.6. Wenn man auf v2 gehen will, dann muss man das aktiv in platformio.ini umstellen.

Vielen Dank dir.
Zusammen mit der Info von oben, dass der RFID regelmäßig falsche IRQs wirft schließt das die sinnvolle Verwendung über den Portexpander dann aus.
Also auftrennen von JP4 und auf einen anderen freien und kompatiblen GPIO umlöten (z.B. GPIO 0 von dem großen Stecker)…

Bei mir ist es beim letzten Test auf jeden Fall gelaufen.

Genau den würde ich nicht nehmen. War kein Zufall, dass ich 32 vorgeschlagen habe :slight_smile:

So, habe es jetzt so umgebaut wie du vorgeschlagen hast. Allerdings laufe ich jetzt in eine Exception beim ausschalten :frowning:

[ 82842 ] Gehe jetzt in Deep Sleep!
[ 82842 ] Lautsprecher ausgeschaltet
Guru Meditation Error: Core 0 panic’ed (Unhandled debug exception)
Debug exception reason: Stack canary watchpoint triggered (rfid)
Core 0 register dump:
PC : 0x401376e7 PS : 0x00060d36 A0 : 0x8012da49 A1 : 0x3ffbb0f0
A2 : 0x3ffbb744 A3 : 0x3ffbb430 A4 : 0x3ffbb314 A5 : 0x00000010
A6 : 0x00000005 A7 : 0x3ffbb354 A8 : 0xa0000000 A9 : 0x00000000
A10 : 0x00000000 A11 : 0x80000000 A12 : 0x00000000 A13 : 0x00000001
A14 : 0x00060f23 A15 : 0x00000000 SAR : 0x00000004 EXCCAUSE: 0x00000001
EXCVADDR: 0x00000000 LBEG : 0x400961bd LEND : 0x400961cd LCOUNT : 0xffffffff

ELF file SHA256: 0000000000000000

Backtrace: 0x401376e7:0x3ffbb0f0 0x4012da46:0x3ffbb120 0x4013522a:0x3ffbb430 0x40135266:0x3ffbb4c0 0x401094e6:0x3ffbb500 0x400d7edc:0x3ffbb5a0 0x400d87da:0x3ffbb5c0 0x400d8941:0x3ffbb5f0 0x400992ba:0x3ffbb640

Rebooting…

Wie komme ich am besten mit diesen Infos weiter?

Bedeutet das, dass der Task zu wenig Speicher hat?

Kannst dem RFID-Task ja mal 500k mehr Stack geben oder so.
Ansonsten steht in der FAQ, wie man den Exception Decoder aktiviert. Dann wird’s lesbarer.

Super, vielen Dank. Hat geholfen. Sieht jetzt so aus wie es soll glaub ich :slight_smile:

Habe jetzt mal angefangen das ganze etwas mit dem Multimeter angeschaut: Der IRQ kommt gefühlt alle 3-10 Sekunden völlig unabhängig von der Situation. Kennst du das Phänomen?

Ja. Der pn5180 wirft irqs ohne Ende.
Deswegen habe ich ihn per Default auch nicht verbunden den irq-Pin.

Ich betreibe LPCD im Batteriemodus und kann auch nach vielen Tagen mit der RFID-Karte aufwecken.

Irgendwas stimmt also noch nicht. Fehlalarm bekomme ich meist 1 Mal unmittelbar nach dem Schlafenlegen. Hier scheint es einen Moment zu dauern bis sich das RF-Feld eingeregelt hat. Doch danach ist Ruhe. Allerdings verwende ich ein anderes Board TTGO Energy T18 mit einem echten GPIO und die Firmware ist ca. 1 Jahr alt. Evt. ein Bug in der aktuellen Software…

  • 3/5V beide Anschlüsse dauerhaft am Strom?
  • PN5180 schon eingebaut? Metall/Magnet in der Nähe?

Vielen Dank für den Hinweis! Habe daraufhin mir die Lib und das Datenblatt des PN5810 mal sehr genau angeschaut und tatsächlich einige verbesserungen / korrekturen in der Parametrierung der EEPROMs, des Ablaufs und der Register gefunden, was jetzt erstmalig ziemlich vielversprechend aussieht.
Hatte auch die Autocalib am laufen, die selfcalibration scheint aber der bessere Weg zu sein, zumindest wenn man noch die Sensitivity anpasst, die Settletime erhöht und das AGC_REF_CONFIG an der richtigen Stelle konfiguriert. Was genau davon jetz den Unterschied macht muss ich noch herausfinden ^^

Werde noch bisschen weiter testen und optimieren und dann anfangen das ganze bisschen leserlicher aufzuräumen :slight_smile:
Vielen Dank euch!

:+1: Schön das es bei Dir voran geht, Du bist ja sehr tief in die Materie eingestiegen!

Wenn Du LPCD Verbesserungen hast würde ich über Pull-Request oder private Nachricht freuen. Ich pflege die PN5180-Bibliothek noch weiter:.

Ihr könnt das hier gerne auch öffentlich kommunzieren. Ich finde das interessant zu lesen, da ich den PN5180 ja selbst auch benutze. Dessen Datenblatt ist schon ziemlich komplex muss ich sagen - da kann man Tod und Teufel konfigurieren :slight_smile:

1 „Gefällt mir“