Forum: Mikrocontroller und Digitale Elektronik Atmega32 und MFRC522 per SPI


von rfid (Gast)


Angehängte Dateien:

Lesenswert?

Hallo liebes Forum, ich hoffe ihr könnt mir irgendwie weiterhelfen.

Ich hab mir aus China ein auf dem MFRC522 [1] basierendes Board gekauft 
[2]. Hab mir das Datenblatt angeschaut, ein paar Beispiele für Arduino 
und Raspberry durchgelesen und auf diesen Beispielen basierend den 
angehängten Code geschrieben.

Leider klappt das nicht so ganz.
Das Board ist im Moment folgendermaßen (auf dem Steckbrett) 
angeschlossen:

Board            Atmega

MOSI             MOSI
MISO             MISO
SCK              SCK
SDA bzw. SS      PB4

Vcc an 3.3 Volt, die ein LM317t aus einem 5V Handynetzteil erzeugt
GND an GND
RST über 10KOhm an Vcc (Soll später an einen µC-Pin, um per Software 
einen Hardware-Reset durchführen zu können)

Der Code anbei soll eigentlich nur folgendes machen:
SPI initialisieren und das Versionsregister auslesen.
Laut Datenblatt steht in dem Versionsregister je nach Software-Version 
des ICs entweder 91h oder 92h. Falls also eine der beiden Fälle zutrifft 
soll eine LED, angeschlossen an PB0, leuchten.
Tut sie leider nicht.
Ausgelesen wird 00h.

Dass das Board kaputt ist kann ich ausschließen, da es mit einer 
fertigen Python-Bibliothek auf meinem Raspberry einwandfrei 
funktioniert.

Vielleicht hat ja schon einmal jemand hier solch ein RFID-Board benutzt 
und kann mir Tipps geben, wo mein Fehler liegen könnte.

[1] http://www.nxp.com/documents/data_sheet/MFRC522.pdf
[2] 
http://www.ebay.de/itm/MFRC-522-RC522-induktive-Modul-mit-fudan-Karte-Radiofrequenz-RFID-IC-Karte-s50-/351176715886?pt=Wissenschaftliche_Ger%C3%A4te&hash=item51c3c36e6e

von Nil (nilsnilss)


Lesenswert?

Niemand 'ne Idee? Weiß jemand, ob die SPI-Routinen wenigstens so 
stimmen?

von Nil (nilsnilss)


Lesenswert?

Vielleicht liests ja noch jemand und kann mir ne kleine Hilfe geben, hab 
es bis jetzt noch immer nicht zum Laufen bekommen. Falls jemand weitere 
Infos (Schaltplan o.Ä.) braucht - poste ich natürlich gerne.

von Thomas L. (lexarion)


Lesenswert?

Hey ich weis das es schon ne weile her ist.


ABER

Ist es nicht so das Most nach miso und miso nach mosi muss???


MOSI == Master out slave in

MISO == Master in Slave Out


Sorry für die kurze Antwort.

Bin grad selber dran ne PSOC Lib zu machen dafür.

von isidor (Gast)


Lesenswert?

Thomas Lengyel schrieb:
> Ist es nicht so das Most nach miso und miso nach mosi muss???

Nein bzw ja, es ist nicht so.

--> MISO an MISO und MOSI an MOSI.

von Thomas L. (lexarion)


Lesenswert?

JA hab nochmal nachgedacht und bin zum selben Schluss gekommen.

Sorry für die Verwirrung.

von Josef (Gast)


Lesenswert?

1
falsch:
2
uint8_t spi_transfer( uint8_t data )
3
{  
4
    SPDR = data;// Load data into the buffer  
5
          while(!(SPSR)&(1<<SPIF));// Wait until transmission complete
6
    
7
    return SPDR;// Return received 
8
}
9
10
richtig:
11
uint8_t spi_transfer( uint8_t data )
12
{  
13
    SPDR = data;// Load data into the buffer  
14
    while(!(SPSR & (1<<SPIF)));// Wait until transmission complete
15
    
16
    return SPDR;// Return received 
17
}

von Nil (nilsnilss)


Lesenswert?

Hab das Teil nochmal ausgegraben und siehe da: ES FUNKTIONIERT. Wenn 
mein C-Buch nicht falsch liegt, muss ich jedoch Josef enttäuschen : die 
Operatoren & und ! sind von der Priorität her gleich, werden aber von 
rechts nach links ausgewertet. Somit wird hier zuerst verundet und 
anschließend negiert. Dann muss der Fehler wohl damals in der 
Verkabelung oder sonst irgendwo gelegen haben...

: Bearbeitet durch User
von Blade (Gast)


Lesenswert?

Hallo Zusammen,

auch wenn der Thread schon alt ist, evtl. verirrt sich ja noch Jemand
(so wie ich) über die Google-Suche hierhin.

Hab festgestellt, das das von mir verwendete RFID-Modul RC522 auf die
Anfrage VersionReg mit 0x88 antwortet. Obwohl im Datenblatt auch die
0x91 / 0x92 genannt wird.

von rfid (Gast)


Lesenswert?

Ich habe selbes roblem wie  Blade.

Hat jemnd eine Idee was 0x88 bedeutet?

von Sonic (Gast)


Lesenswert?

Ja. Das liegt daran dass du ein China-fake Board hast. Der Chip is kein 
MFRC522 sondern ein FM17522.

von David D. (saturi)


Lesenswert?

Hallo,
nachdem ich mich die letzten Tage auch an das Thema des MFRC522 gewagt 
habe, hat es mich ebenfalls eine gefühlte Ewigkeit gekostet, das 
Versionsregister auszulesen.
ABER: vor gut einer Stunde habe ich es dann endlich geschafft.

@Nils F. vielen Dank für die Code-Beispiele.

Allerdings bekomme ich 0x92 ausgegeben, da es mittlerweile eine Version 
2.0 des Chips (oder der Software) gibt.
Bei mir war allerdings die Korrektur von Josef notwendig.

Nachdem nun auch der "Self-Test" funktioniert hat bin ich doch ganz 
euphorisch und würde jetzt gerne den nächsten Schritt wagen und, wenn 
möglich, die ID oder was auch immer eines Transponders auslesen.

Allerdings weiß ich überhaupt nicht wie ich das ganze angehen soll.
Kann mir da evtl. jemand auf die Sprünge helfen? vielen Dank!

von Bruno (Gast)


Lesenswert?

Das Thema ist zwar schon lange zurück, aber hat es jemand geschafft, den 
Reader zum Laufen zu bringen ? :/

Bin jetzt wirklich schon lange am probieren und finde einfach nicht den 
richtigen Weg.

Lg

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.