Forum: Mikrocontroller und Digitale Elektronik RFID RC522 Bascom


von Maximilian K. (imazze)


Lesenswert?

Hallo Community!

Habe ein neues Projekt in den Kopf bekommen, und zwar ein 
RFID-Türschloss!

Habe heute ein "RFID-RC522" Modul geschickt bekommen.

Auslesen möchte ich nur die UID eines Tags.


Habe heute angefangen im Internet zu suchen, doch leider für Bascom 
nichts gefunden.

Wohingegen ich für arduino mehrere Projekte gefunden hab.
Da ich eh noch einen MEGA (Atmega2650) rumliegen gehabt habe, hab ich 
die software drauf gespielt und siehe da: es funktioniert!

Was ich dabei raus gefunden habe, ist dass die Kommunikation via SPI 
geschieht.


Nun möchte ich das ganze in Bascom programmieren, habe aber überhaupt 
keine Ahnung wie ich jetzt anfangen soll, um NUR die UID des Tags 
auslesen zu können.

Datenblatt:
http://www.nxp.com/documents/data_sheet/MFRC522.pdf



Ich bedanke mich im vorherein schonmal ganz Herzlich!




mfg
Maximilian K.

von Laie (Gast)


Lesenswert?

Na Du bist ja ein lustiger Vogel.
Hängst das ausführliche und gute Datenblatt noch hinten dran.
Das sind Applikationsbeispiele in Hardware und Protokollbeschreibung mit 
dran.

Sollen wir das jetzt für Dich durchlesen und vorkauen?
Danach fragst du auch noch nach Bascom Code?

Na ich hab's mal überflogen:
Das Ding kann SPI I2C und "RS232".
Also such dir was aus und fang an.

von Laie (Gast)


Lesenswert?

Und Du hast sogar noch funktionierende Arduino Programme.

Entweder Du hast überhaupt keine Ahnung von "Programmierung",
oder suchst jemanden der Dir die Hausaufgaben macht.

Beides ist schlecht.

Arduino macht Dir doch alles vor, die Portierung in eine beliebige 
Sprache sollte ein Kinderspiel sein.

Vorher wirst Du aber schon an der Hardware scheitern, das Ding ist nicht 
ohne.
In den APP Notes ( ZIP File) wird alles erklärt, bis zum Platinenlayout 
alles vorhanden.

Aber lesen kannst oder willst Du ja offenbar nicht.

TSCHÜSS

von Maximilian K. (imazze)


Lesenswert?

Warum bekommt man in diesem Forum als Anfänger, die nicht so unhilfreich 
ist wie deine?

Warum muss man seine Zeit dann "verschwenden" sowas zu schreiben?

von Ralf (Gast)


Lesenswert?

> Nun möchte ich das ganze in Bascom programmieren, habe aber überhaupt
> keine Ahnung wie ich jetzt anfangen soll, um NUR die UID des Tags
> auslesen zu können.
Ist relativ simpel: aus dem dir zur Verfügung stehenden Code ermittelst 
du die Initialisierung. Diese bildest du in BASCOM ab.

Danach schaust du nach den Codeteilen, welche nötig sind um bis zur UID 
zu kommen, also eben "search transponder", "select transponder", etc.
Wenn du die vorhandenen Codebeispiele fein genug auseinander nimmst 
kommst du automatisch auf die Umsetzung in BASCOM.
Und C<->BASCOM dürfte soo schwierig nicht sein, denke ich.
Wenn du dann eine erste BASCOM-Version hast, die zumindest in Grundzügen 
läuft, aber noch nicht das macht was du möchtest, dann beschreibe das 
Problem hier.
Wichtig ist, dass du nicht gleich drauf los programmierst, sondern dir 
eine Liste machst, was im Demoprogramm passiert, und das dann für BASCOM 
passend umsetzt.

Ralf

von Paul B. (paul_baumann)


Lesenswert?

@maximilian
>Was ich dabei raus gefunden habe, ist dass die Kommunikation via SPI
>geschieht.

Na, da hast Du ja schon mal einen Anhaltspunkt.

Guck mal in die Hilfe von Bascom zu SPIINIT, SPIIN,SPIOUT, SPIMOVE

Konkret kann ich Dir aber auch nicht helfen, weil ich kein solches
Modul besitze.

>Warum muss man seine Zeit dann "verschwenden" sowas zu schreiben?

Hinweis: Reagiere nicht auf Schwätzer und auf Laien.
Wenn sie etwas zm Thema wüßten, wären es eben keine Laien.

MfG Paul

von Laie (Gast)


Lesenswert?

Sehr gut Paul,

bitte übernehmen.....

Viel Erfolg

von Maximilian K. (imazze)


Lesenswert?

Hallo!

Hab heute den ganzen Tag versucht mich mit dem Problem außeinander zu 
setzen. Leider erfolglos!

Ich habe den Code (in C vom Arduino Skript) durchgelesen, verstehe aber 
fast nichts davon.

Da ich auch Java kann, weiß ich zumindest schon was es sich mit 
Klassen/Methoden auf sich hat.


Kann man nicht das Modul einfach so ansteuern?


Hier mal die Quelle mit dem Arduino Code:

https://github.com/miguelbalboa/rfid/tree/master/examples

.... das Example: DumpInfo



MfG

von Fingers Freund (Gast)


Lesenswert?

Ui,

was meinst Du damit, was willst Du nun konkret an Hilfestellung?
Sieht so aus, als möchtest Du ein fertiges Bascom Programm geliefert 
bekommen.

Laie und Paul haben doch schon den grundsätzlichen Weg beschrieben.
Arduino ist ja so simpel, dass selbst unbedarfte Künstler damit 
klarkommen.

Also Kupfer das einfach ab Richtung Bascom oder nutze Arduino.

Wäre nicht das erste Mal das Leute nix verstehen, aber es mit Arduino 
einfach zum Laufen bringen.

Und Versuch mal bitte konkret zu beschreiben wo dein Problem ist.
Aus deinem letzten Hilferuf wird nämlich keiner schlau....

Freddy

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Maximilian K. schrieb:
> Kann man nicht das Modul einfach so ansteuern?

Ja, das geht. Das Modul versteht RS232. Du schickst dem Modul Befehle, 
die es ausführt und darauf eine Antwort zurück gibt. Der Befehlssatz 
steht im Datenblatt.
Dazu brauchst Du keine Bibliothek, sondern nur ein Verständnis dafür, 
wie Du eine RS232-Kommunikation durchführst.


Falls Du die ID mit einem PC verarbeiten möchtest, brauchst Du garkeinen 
µC dazwischen - nur einen Pegelwandler vom +-12V (PC-Seitig) auf TTL 
(Modulseitig).

: Bearbeitet durch User
von Maximilian Klug (Gast)


Lesenswert?

Hallo! Die Idee mit dem RS232 ist denk ich mal auszuprobieren.

Ich habe einen PL2303 Wandler, Welches sind am RF522 dann die TX und RX 
Pins?

Es gibt nur: Mosi, Miso, Sck, Ss, 3.3V, GND

von Kai S. (zigzeg)


Lesenswert?

Maximilian Klug schrieb:
> Welches sind am RF522 dann die TX und RX
> Pins?

Wenn ich es richtig im Kopf habe hat der Chip zwar ein RS232 kompatibles 
interface, das ist aber nicht auf dem Modul herausgefuehrt. Essig.

Andere Idee: Es gibt USB nach SPI Adapter, ähnlich wie diese USB nach 
UART Adapter. Verwende evtl. so einen ?!

: Bearbeitet durch User
von Fingers Freund (Gast)


Lesenswert?

Kannst Du nicht einfach ins Datenblatt schauen, wie andere Menschen das 
auch tun?
Ich find es langsam etwas dreist....

Ob Controller oder nicht, auch bei de PC Ansteuerung musst Du das 
Datenblatt lesen und verstehen wie die Kommunikation abläuft.

Ich sehe da etwas schwarz für Dich ;-)

von Fingers Freund (Gast)


Lesenswert?

Seite 9 und jetzt mach gefälligst selbst die Hausaufgaben.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Kai S. schrieb:
> Wenn ich es richtig im Kopf habe hat der Chip zwar ein RS232 kompatibles
> interface, das ist aber nicht auf dem Modul herausgefuehrt. Essig.

Die Pins sind die selben. Der Chip erkennt sogar selbstständig das 
verwendete Interface.

Steht alles im Datenblatt, welches jedoch scheibar nicht lesbar ist 
(zumindest funktioniert es aber bei mir).

: Bearbeitet durch User
von Andreas G. (beastyk)


Lesenswert?

Moin Maximilian,

ich versuche die Library von Miguel Balboa für meine PICs lauffähig zu 
machen, also sitz ich da auch gerade dran ;o) .
Hier wurde aber auch gesagt das man lieber selbst den Code schreiben 
sollte anstatt auf fertigen Code zurückzugreifen, und das stimmt, ich 
bin so faul!

Um das LESEN des Datenblatts des MFRC522 wirst du nicht rumkommen.
Das die Pins mehrfach belegt sind und der Chip erkennt ob gerade I2C, 
SPI oder UART gefragt ist stimmt, ich helf dir mal insoweit das ich dir 
folgendes an die Hand gebe:

SDA/NSS/RX , SCL/MISO/TX , MOSI/MX , SCK/DTRQ gehören zusammen
(NSS ist dein SS oder oft als CS bezeichnet)

Wenn du mit MX und DTRQ nicht soviel anfangen kannst, dann nehm dir 
diesen Satz aus dem Datenblatt zu Herzen:

Remark: Signals DTRQ and MX can be disabled by clearing TestPinEnReg 
register’s
RS232LineEn bit

Wenn ich das richtig verstehe muß man um MX und DTRQ auszuschalten beim 
TestPinEnReg Register das RS232LineEn Bit auf 0 setzen.

Best regards
dat
Beast

von Phyton (Gast)


Lesenswert?

Wer Java kann, wird das verstehen,

wer nur Bascom kann, der auch...







import serial
import sys
import time
from operator import xor

# UART
ID = ""
Zeichen = 0

Checksumme = 0
Tag = 0

# Flags
Startflag = "\x02"
Endflag = "\x03"

# UART oeffnen
UART = serial.Serial("/dev/ttyAMA0", 9600)
UART.open()

while True:

    # Variablen loeschen
    Checksumme = 0
    Checksumme_Tag = 0
    ID = ""

    # Zeichen einlesen
    Zeichen = UART.read()

    # Uebertragungsstart signalisiert worden?
    if Zeichen == Startflag:

        # ID zusammen setzen
        for Counter in range(13):

            Zeichen = UART.read()
            ID = ID + str(Zeichen)

        # Endflag aus dem String loeschen
        ID = ID.replace(Endflag, "" );

        # Checksumme berechnen
        for I in range(0, 9, 2):
            Checksumme = Checksumme ^ (((int(ID[I], 16)) << 4) + 
int(ID[I+1], 16))
        Checksumme = hex(Checksumme)

        # Tag herausfiltern
        Tag = ((int(ID[1], 16)) << 8) + ((int(ID[2], 16)) << 4) + 
((int(ID[3], 16)) << 0)
        Tag = hex(Tag)

        # Ausgabe der Daten
        print "------------------------------------------"
        print "Datensatz: ", ID
        print "Tag: ", Tag
        print "ID: ", ID[4:10]
        print "Checksumme: ", Checksumme
        print "------------------------------------------"

von Johannes K. (johngun) Benutzerseite


Angehängte Dateien:

Lesenswert?

Mich nervt das dieser Beitrag bei Google ganz oben steht wenn man nach 
mfrc522 sucht.

Für den Jungen der nicht weis wies geht Code für Arduino im Anhang.

Bascom hab ich irgendwann kapiert. Aber die jungen Leute haben nie 
verstanden was ich da mache.

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.