Hallo,
ich habe einen Arduino Mega 2560 R3 board und möchte das PN532 von
Adafruit über I2C kommunizieren lassen.
Folgende Pins habe ich zwischen board und shield jeweils miteinander
verbunden: 5v,gnd,sda,scl.
Die "busy" und "pwr" LED leuchten die ganze zeit. Eigentlich sollte es
einer der LED's flakern wenn man eine Milfare Card aber es passiert nix.
Ich habe die Beispiele in "Adafreuit_NFCShield_I2C" alle einzelnd
upgeloadet und probiert aber bekomme immer folgende Message im
Serial Monitor:
"Hello"
"Didn't find PN53x board"
Bin mir nicht sicher ob ich noch zusätzliche Pins brauche oder habe ich
etwas falsch gemacht ?
Ich habe Bilder von den Verbindungstellen gemacht und hoffe jemand kann
mir da weiterhelfen, ist das Erste mal das ich was mit uC etwas mache
und wäre echt dankbar für jede Hilfe...
Bild 1: Das PN532 von Adafruit
Bild 2: Das PN532 von Adafruit: 5V und GND
Bild 3: Das PN532 von Adafruit: SDA und SCL
Bild 4: Arduino Mega 2560 R3 board: SDA und SCL
Bild 5: Arduino Mega 2560 R3 board: GND und 5V
Sam schrieb:> Bild 1: Das PN532 von Adafruit> Bild 2: Das PN532 von Adafruit: 5V und GND> Bild 3: Das PN532 von Adafruit: SDA und SCL>> Bild 4: Arduino Mega 2560 R3 board: SDA und SCL> Bild 5: Arduino Mega 2560 R3 board: GND und 5V
Ich hör sie schon schreien:BILDFORMATE!!
SNCR
Hallo,
PN532 Board oder Shield? Ich tippe auf Shield.
Jetzt mal ehrlich, so verwirrt ein S h i e l d falsch anzuschließen
kann man doch fast gar nicht sein! Ich bin zwar Arduino-Befürworter,
aber sowas ist echt ein heftiger Tiefschlag.
Also: Zeig doch bitte mal eine Quelle, wo steht, dass man das Ding so
anschließen soll, wie Du es gemacht hast! Was lässt Dich vermuten, dass
bei einem halbwegs professionellen Board irgendwas anderes als ein
ISP-Programmer an den ISP_Header angeschlossen wird? Gerade bei einem
Arduino?
Und dann erklär mir noch kurz, warum Du es nicht einfach so machst, wie
es im Video, im Sketch oder auf der Homepage von Adafruit überall steht.
RTFM!
beste Grüße
Timm
Hallo Timm,
Shield habe ich ja schon oben erwähnt...
Naja wie du vielleicht weisst, ist es nicht so , das man das shield
einfach dransteckt und fertig ist das ganze. Die SDA und SCL Pins vom
Arduino 2560 R3 board sind leider nicht günstig plaziert ,von dem her
kann man das also doch falsch anschließen.
Hier ist die Quelle:
http://learn.adafruit.com/adafruit-pn532-rfid-nfc/shield-wiring
leider ist das Beispiel nur auf ein Arduino UNO beschränkt und man
bekommt nicht gerader sehr viel Auskunft welche PIN's benötigt
werden....
Die Infos, dass die PIN's 5v,gnd,sda,scl benötigt werden habe ich aus
einem Supportforum :http://forums.adafruit.com/viewforum.php?f=31
MfG,
Sam
Sam schrieb:> Naja wie du vielleicht weisst, ist es nicht so , das man das shield> einfach dransteckt und fertig ist das ganze. Die SDA und SCL Pins vom> Arduino 2560 R3 board sind leider nicht günstig plaziert ,von dem her> kann man das also doch falsch anschließen.
Echt?
http://arduino.cc/de/uploads/Main/ArduinoMega2560_R3_Front.jpg
Schau ich mir die Platine an, dann steht beim Digital Pin 20 bzw. 21
eindeutig SDA und SCL dabei.
Drunter steht auch noch mal ganz groß "Communication".
Du bist am völlig falschen Anschluss
Sam schrieb:> Hmm das ist komisch....>> http://arduino.cc/en/uploads/Main/ArduinoMega2560_R3_Back.jpg>> da sind auch SDA und SCL
Ja, das ist der ISP anschluss. Über den wird der Prozessor programmiert,
wenn man mit einem ISP Programmer direkt an den Prozessor geht.
Und wenn ich das richtig sehe, dann ist das sogar der ISP Anschluss vom
Hilfs-AVR, der die USB Kommunikation übernimmt.
Diese beiden Pins sind also nicht nur nicht richtig, die sind nicht
einmal falsch. Du bist am falschen µC.
Ist dir den gar nicht aufgefallen, dass die Leitungen von diesem
Anschluss gar nicht zum Haupt-µC gehen, sondern zu einem kleinen
Hilfs-µC auf dem auch Atmel draufsteht? Ein bischen mitdenken muss man
schon, wenn man µC programmieren will.
Danke Karl,
allerding bekomme ich noch keinen Interrupt...
Ich habe gelesen man braucht den digital Pin 2 dafür...
An welchen Anschluss am board muss ich das verbinden ? kann ich beim
board beim PWM oder Digital einen PIN aussuchen ?
Sam schrieb:> Danke Karl,>>> allerding bekomme ich noch keinen Interrupt...>> Ich habe gelesen man braucht den digital Pin 2 dafür...
bei welchem Pin steht denn "2" dabei.
Da würde ich mal anstecken.
Wenn nicht, dann muss man halt mal die Schaltpläne ein wenig studieren.
An welchen Pin beim Uno geht die Leitung, welches die der
korrespondierende Pin auf deinem Mega. Und wo geht der an der
Buchsenleiste hin.
@Karl-Heinz
ich bewundere es, wie gut Du immer die Nerven behältst und mit welcher
Disziplin Du Dich auf hilfreiche Antworten konzentrierst!
@Sam
ich würde sagen, bei digital Pin 2 dürfte es ich um den in der PWM Bank
handeln. Der sollte an INT4 hängen. Aber eigtl. dürfte AttachInterrupt
das automatisch ummodeln.
Am Uno hängt digital pin 2 an INT0
Vlg
Timm
Guest schrieb:> Ich hör sie schon schreien: BILDFORMATE!!
Nee, tolle Fotos vom Adafruit PN532 NFC/RFID Controller Shield. Die
besten, die ich mit der Google-Bildersuche gefunden habe. :-)
Danke, Sam. :-)
Ich habe ein PN532 Breakout-Board problemlos über I²C am Arduino Mega
2560
zum laufen gebracht. Aber alle Beispiele gehen immer nur über
Endlos-Loops.
Für mich ist aber ein Interrupt-Aufruf von PN532 wichtig.
Ich habe den PN532 IRQ an Pin2 (=Int0) angeschlossen, der Interrupt wird
aber nicht ausgelöst, wenn ich eine NFC-Karte an das Board halte.
Schaltung:
Arduino_Mega PN532
GND GND
3V3 VCC
SDA (Pin 20) SDA
SCL (Pin 21) SCL
Int0(Pin 2) IRQ
Hier der nicht funktionierende Code:
#include "nfc.h"
NFC_Module nfc;
void setup(void)
{
Serial.begin(9600);
nfc.begin();
uint32_t versiondata = nfc.get_version();
if (! versiondata) {
Serial.print("Didn't find PN53x board");
while (1); // halt
}
// Got ok data, print it out!
Serial.print("Found chip PN5"); Serial.println((versiondata>>24) &
0xFF, HEX);
Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF,
DEC);
Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
/** Set normal mode, and disable SAM */
nfc.SAMConfiguration();
//Attach Interrupt to Int0 (Pin2)
attachInterrupt(0, inter, CHANGE);
}
void loop(void)
{
}
void inter(){
Serial.print("inter start");
u8 buf[32],sta;
if(nfc.InListPassiveTarget(buf) && buf[0]== 4){
/** the card may be Mifare Classic card, try to read the block */
Serial.print("UUID length:");
Serial.print(buf[0], DEC);
Serial.println();
Serial.print("UUID:");
nfc.puthex(buf+1, buf[0]);
Serial.println();
}
}
Ich habe schon die Ursache gefunden: Der IRQ-Pin steht immer auf HIGH
(3V),
egal ob ich mit einer Karte in die Nähe komme oder nicht.
Lt. Spec sollte der IRQ aber auslösen wenn eine Karte in die Nähe kommt.
Dann ist es klar, dass der Interrupt nicht ausgelöst wird.
Hat jemand eine Idee dazu? Ansonsten wäre der PN532 optimal.
Moritz Schnell schrieb:> Nachtrag: ich habe gerade die PN532 Spec gelesen. Der Wakeup-Puls> am IRQ> dauert nur 12 ms. Da ich kein Oszi, etc habe, kann ich das Signal nicht> prüfen.