PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RFID Zugangskontrolle



xythobuz
20.01.2009, 21:42
Hallo.
Ich lege euch erst einmal meine Problemstellung dar:

Bei uns im Tauchclub gibt es für die Flaschen eine Füllstation. Diese verfügt über ein elektronisches Schloss. Nun sollen alle Mitglieder z.B. einen RFID Chip
bekommen, um die Füllstation zu öffnen. Nun muss allerdings die Möglichkeit bestehen, einzelne Personen aus dem System auszuschliessen.

Also habe ich mir Gedanken gemacht, wie das zu realisieren wäre. Dabei bin ich auf die Idee gekommen, eine C-Control zu benutzen.
Diese (http://www.conrad.de/goto.php?artikel=124079) besitze ich bereits. An besagte würde ich z.B. diese (http://www.conrad.de/goto.php?artikel=191553) Antenne hängen.

Im Quellcode könnte das ganze z.B. so aussehen:



#loop
'Hier könnte man einen Gebrauchshinweis auf einem LCD anzeigen...
gosub LCD_Hinweis

#max
if karte = maxmustermann then goto öffnen else goto marianne

#marianne
if karte = mariannemustermann then goto öffnen else goto christian

#christian
if karte = christianmüller then goto öffnen else goto max


Und wenn man eine Person nicht mehr reinlassen will, löscht man einfach den betreffenden Codeteil und passt die "goto" Anweisung an.

Nun braucht man natürlich passende Transponder, z.B. diese (http://www.conrad.de/goto.php?artikel=191214).

Natürlich muss ich auch die Namen auf die Transponder kriegen. Funktioniert das z.B. damit (http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&item=200272266373&cguid=f5f3177d11e0a0e202d55585ffe75466)?
Oder geht das überhaupt nicht?

Eventuell wisst ihr auch eine Möglichkeit, das alles besser zu realisieren.

Vielen Dank schon jetzt für eure Bemühungen.

Mit freundlichen Grüßen

xythobuz

P.s.1: Im Club sind im moment ca. 60 Mitglieder, aber das System sollte auch mit 100 oder mehr klar kommen.

P.s.2: Falls das der falsche Breich ist, bitte Verschieben, aber ich denke, das passt hier besser wie bei den C-Controls...

BastelWastel
20.01.2009, 23:18
Hy xy,
auf normalen RFID Karten speicherst du keine Namen.
Jede Karte hat eine eigene einzigartige ID.
Du koentest in deiner CC eine Teaching funktion schreiben, in der Art.

Admin meldet sich mit seiner Karte am System an
Admin waehlt Teaching Funktion
ID der neuen Karte wird gelesen und zusammen mit dem Namen des Benutzers und dessen Rechten in einer Datenbank hinterlegt

In der selben weise kannst du eine Funktion anlegen mit der der Admin bestimmten Usern Rechte nimmt, oder diesen User incl. ID (z.b. bei Kartenverlust) ganz Loescht.

Bei anderen Funktionen liegen die Grenzen lediglich bei deiner Phantasie.. z.B. koenntest du Zugriffe in einem Log speichern und am PC auswerten oder die Benutzer ueber PC verwalten...etc..
Das ist alles nur eine Frage wieviel Zeit du an der Software verbringen willst.

Cheers, BastelWastel

the_Ghost666
21.01.2009, 01:00
Schau dir das mal an, ich finde das ist ne gute Lösung, echt hübsch und alles in einem Modul, der Quellcode schließt praktisch deine Funktionen ein, nur das Interface ist nicht so bequem. Dazu noch einen elektromagnetischen Türöffner und fertig.

Achja, der link..
http://www.mikrocontroller.net/articles/RFID_T%C3%BCrmodul

grumpf
21.01.2009, 07:25
Hai,

also eine günstige Leseeinheit gibts bei Pollin, einfach mal "RFID" suchen. Das Teil ist mit LCD, Leseeinheit und serieller Schnittstelle bestückt. Über diese wird bei erkanntem Tag dessen Nummer ausgegeben. Die kannst du dann entweder mit einer eigenen kleinen Schaltung lesen und entscheiden ob du die Tür öffnest oder nicht, oder du hängst das Teil direkt an den PC. Das wäre die komfortable Lösung. Allerdings müsste dann der PC wohl ständig mitlaufen. Ich hab mir den Leser von Pollin vor ein paar Tagen selber bestellt und hab was ähnliches vor wie du. Mal sehen wann ich Zeit finde.....

Gruß
Stefan

xythobuz
21.01.2009, 20:28
Hi.

Also, mit einem PC kann ich nicht arbeiten. Das würde einfach zu viel Kosten, wenn der immer läuft.

Aber ich hab mich selbst nochmal Schlau-gemacht.

Auf der C-Control stehen mir ja 8 KB zur Verfügung. Wenn mein Programm etwa 1 KB belegt, kann ich immer noch über 1000 von den 40 Bit RFID Codes speichern.

Aber...
Bei der C-Control gilt ja folgendes:


Bei

define a byte
define b word

kann a nur ganzzahlige Werte zwischen 0 bis 255 annehmen
und b -32768 bis 32767


Wie kann ich da also die RFID Codes (dauerhaft) unterbringen?

Und nun zu meiner nächsten Frage:
Wie bekomme ich die RFID-Codes, die von der Antenne oder dem Pollin-Gerät kommen, in die C-Control?

Vielen Dank auch an alle bisherigen Antworten.

MfG
xythobuz

grumpf
21.01.2009, 21:26
Hai,

also den gelesenen Code von dem Pollin-Teil bekommst du "frei Haus" über die serielle Schnittstelle. Zitat von der Pollin-Seite "Ein Beispielprogramm, welches den gelesenen HF-Tag über die RS232-Schnittstelle sendet, ist bereits vorprogrammiert." Du kannst den Tag also über die serielle Schnittstelle des C-Control einlesen und verarbeiten. Wenn das Teil einen nicht flüchtigen Speicher hat, solltest du die Codes da rein schreiben. Ansosnten wären die Codes eben nur so lange verfügbar, wie das Teil unter Strom steht. Man müsste sich also "nur" noch Gedanken über eine praktikable Benutzerverwaltung machen. Zum programmieren eines neuen Benutzers wäre ein "Master-Tag" denkbar. Erst den dranhalten und direkt danach den neuen Tag und schwupps ist dieser gespeichert. Bleibt die Frage wie man einen Benutzer wieder löscht. Der gleiche Weg nur rückwärts klappt nur wenn der Tag noch verfügbar ist, nicht jedoch wenn er verloren gegangen ist. Tja, dafür hab ich auch noch nicht so die richtige Idee......Vielleicht zum Benutzerverwalten den PC an die C-Control über die serielle und im Normalbetrieb die C-Control mit dem Leser über die serielle verbinden ?! Müsste man sich ein Protokoll ausdenken und wohl auch etwas PC-Software schreiben. Wenn jemand eine Idee hat.....
Die Tags zu speichern sollte nicht das Problem sein. Wie du schon herausgefunden hast, besteht so ein Tag aus 40 Bit - geteilt durch 8 macht 5 Byte. Bleibt nur die Frage ob die C-Control einen nicht flüchtigen Speicher hat ?!

Gruß
Stefan

BastelWastel
22.01.2009, 01:25
also eine günstige Leseeinheit gibts bei Pollin, einfach mal "RFID" suchen. Das Teil ist mit LCD, Leseeinheit und serieller Schnittstelle bestückt.

Schnittstelle - Ja
Leseeinheit - Jein...Draht zum wickeln der Spuhle liegt bei ;)
LCD - Nein, muss als Option mitbestellt werden
(hab das Modul selbst)

Der Vorteil am Pollin Modul ist, dass du die Firmware direkt nach deinen wuenschen aendern kannst. Mit einer externen Relaiskarte kannst du das Modul dann auch standalone betreiben, ohne PC oder CC.

Cheers, BastelWastel

grumpf
22.01.2009, 07:39
@BastelWastel

mea culpa, du hast natürlich recht, das LCD ist nicht im Lieferumfang enthalten und die Firmware kannst du auch auf der Kiste ändern. War nicht ganz exakt formuliert. :-b
Hast du denn mit dem Ding schon was aufgebaut oder liegt es, wie bei mir, in der Kiste mit "noch zu erledigende Projekte" ?

Gruß
Stefan

xythobuz
22.01.2009, 12:49
Also, ich weiß, dass die C-Control einen nichtflüchtigen Speicher hat.
Siehe dazu Hier (http://groups.uni-paderborn.de/physik/studieninfos/praktika/versuche_anleitungen/datenblaetter/mc_ccbasic.pdf) auf Seite 11.

Allerdings hab ich keine Ahnung, wie ich da die Daten ändern soll, wenn ich doch den RFID-Tag gar nicht kenne...

Und zum Thema der Übertragung:
würde das einfach mit dem Input befehl gehen?
Beispiel:


define tag word

input tag


MfG
xythobuz

grumpf
22.01.2009, 14:33
Hai xythobuz,

erstmal glückwunsch zum Geburtstag....
Na, wenn dein CC doch nicht flüchtigen Speicher hat, kannst du das Teil doch wunderbar nehmen. Schreib ein Programm, welches diesen Speicher nach dem Start nach eingetragenen Tags durchsucht. Findest es keine nimmt es den ersten Tag, den es einliest als Administrator-Tag und speichert in ab. Wenn du jetzt weitete Tags anlernen willst, hälst du diesen vor das Lesegerät und innerhalb einer festen Zeitspanne den neuen Tag. Dieser wird dann ebenfalls in den Speicher geschrieben. Bleibt nach wievor das Problem verlorene Tags löschen und ordentlich verwalten zu können.
Gruß
Stefan

xythobuz
22.01.2009, 20:51
Bleibt nach wievor das Problem verlorene Tags löschen und ordentlich verwalten zu können.

Hmmm. Genau da liegt das Problem. Mir fällt leider auch keine andere Möglichkeit ein, dieses zu lösen.

Ich kenn mich auf dem Gebiet der Mikrocontroller leider nicht gut aus, aber gibt es vielleicht einen, der da mehr auf dem Kasten hat?

MfG
xythobuz

grumpf
22.01.2009, 21:50
N'Abend,

das ist kein Problem des Controllers, die haben allemal genug auf dem Kasten für diese Aufgabe. Es ist eher eine Frage der richtigen Idee und der Software. Wie wäre es mit zwei Programmteilen. Zum Tag-verwalten wird die serielle des CC an den PC angeschlossen, über den Leser die ID des Tags lesen, am LCD anzeigen lassen und über ein einfaches Hyperterminal in den CC schieben (entsprechende Software im CC vorausgesetzt). Danach die serielle wieder mit dem Leser verbinden und das ganze autark laufen lassen?! Oder man bräuchte ein LCD am CC und eine rudimentäre Tastatur. Das wird dann aber eine ziemlich hakelige Bedienung und eher ein Bitschubsen denn eine komfortable Verwaltung. Eine Liste mit den ausgegebenen IDs der Tags verbunden mit den jeweiligen Namen brauchst du eh. Also drängt sich Hyperterminal zum verwalten auf. Man bräuchte keine extra Software auf dem PC zu schreiben. Denke da an sowas wie 2-3 Befehle die man über die serielle an den CC schickt. sowas wie
show - zeigt alle gespeicherten Tags als durchnummerierte Liste
kill xx - lösche Tag Nummer xx
könnte ja schon reichen.

gute Nacht, werd mal darüber schlafen.....
Stefan

the_Ghost666
23.01.2009, 21:22
Ich glaube xythobuz meint eher eine Person, die mehr auf dem Kasten hat, oder? ;)

So wild ist das nicht, der härteste Teil ist wirklich das RFID Signal zu erkennen und den Code zu extrahieren, aber das macht die Pollinplatine z.B. ganz allein.
Wenn du wenig Hardwareaufwand haben möchtest, rate ich dir auch das Verwalten über die serielle Schnittstelle zu machen, dann brauchst du nur n mobilen Rechner in der Nähe, wenn du die Daten verwaltest.
Standalone mit einem Display und z.B. 4 Tasten ist auch nicht so schwer, da es für die Grundschaltung viele Beispiele gibt.
Eine Kombination wäre sicher auch nicht schlecht. Display für die Zugangskontrolle und Anzeige z.B. wessen Tag benutzt wurde ist sicher auch nicht schlecht, LEDs würden das aber auch einfach machen können (zumindest, dass der Zugang erkannt wurde).
Das genialste wäre, wenn über eine interne Uhr jeder Zugang mit Uhrzeit, Datum und benutzter ID geloggt werden könnte, dann hättest du sogar einen Überblick über die Statistik.
Ich persönlich mag die CControl nicht, aber sie sollte das auch können.
Ein Atmega88 und ein externes EEPROM oder Atmega32(wegen dem internen, großen EEPROM) könnte da eine gute Grundlage bilden.
Kannst du Platinen herstellen? Da könnte man sicher was nettes machen.

xythobuz
25.01.2009, 12:54
Ja, Platinen könnte ich herstellen.
Ich hab mir jetzt auf alle Fälle das Teil bei Pollin bestellt, und denke ich werd es recht einfach mit der C-control machen. Also:



if tag = 123456789 then goto open
if tag = 987654321 then goto open

Und so weiter.
Dabei muss ich halt einfach eine Liste am PC führen, wer welchen Tag hat.

Das einzige Problem für mich ist leider noch, wie ich den Tag vom Lesegerät in einer Variable Speichern kann, denn die C-Control ünterstützt keine so großen Variablen.

MfG
xythobuz

the_Ghost666
25.01.2009, 21:18
Na, du brauchst ja nicht eine Variable, es reichen ja 8Bytes für die Geschichte. Das kannst du als zweidimensionales Array machen,
char ID_TAGS[100][8];
Und schwupps hast du 100 Variablen in denen ein Tag abgelegt werden kann.
Wie muss man so eine CControl eigentlich programmieren, ich hatte nur mal was mit der CControl2 zu tun, das war ein C-Dialekt (größter Bockmist).

grumpf
26.01.2009, 07:11
Hai,

guten morgen, freut mich zu lesen, dass sich für das Projekt noch andere interessiert. Du hast sicher recht, dass es Leute gibt die mehr auf dem Kasten haben als ich, ich bin nicht vollkommen (leider :cry: ). Ich werd die Sache trotzdem weiter interessiert mitlesen und hoffe ihr veröffentlicht eure Lösung auch nach Abschluss des Projekts.....

Gruß
Stefan

Vitis
26.01.2009, 09:32
der für mich einfachste weg wäre:

man nehme den Bausatz von Pollin
und nen Programmer hier aus RN, sowie
n fertiges RN-Board mit nem Mega32 drauf.
Dann holt man sich gleich mal ne Ladung der
RFID-Dongle oder wie die Teile für den
Schlüsselbund heißen.
Dann schreibt man sich n Progrämmchen,
dass bei Tastendruck die ankommende ID
(vom Pollinleser) in das EEPROM vom AVR schreibt
und nen Zähler erhöht.
Dann liest man einfach die ganzen RF-Dingens ein und
legt deren ID im EEPROM ab und macht sich natürlich ne
Liste in welcher Reihenfolge die IDs eingelesen wurden
natürlich auch ne Liste wer welchen Dongle bekommen hat.
eventuell hilfts ne Markierung drauf zu gravieren, z.B. mit nem
Lötkolben die Nummer drauf brennen.
Dann im Progrämmchen einfach ne Suchfunktion generieren
ob die ankommende ID im EEPROM vorhanden ist, wenn ja,
dann Tür auf.
Will man nun einen Eintrag löschen überschreibt man auf Tastendruck
einfach die EEPROM Stelle mit 00000 und schon wird die ID nicht
mehr gefunden.
Ganz komfortabel wärs wenn ein Mitglied seinen ID, den er eh schon z.B.
fürs Auto oder die Alarmanlage hat einlesen lassen kann und so nicht noch
n Ding mitschleppen muss. Erhöht auch die Betriebssicherheit,
es kann nämlich mit dem Auslesen probleme geben wenn einer 2 der Teile
am Schlüsselbund hat.

Arbeitsaufwand ca. 2 Tage Schaltung zusammenfrickeln und nochmal
2-3 Tage Programmieren für einigermaßen geübte.

xythobuz
30.01.2009, 17:03
Hallo zusammen.
Ich habe nun den Bausatz von Pollin zum laufen bekommen, allerdings stellt sich mir nun ein weiteres Problem in den Weg.
Die C-Control verarbeitet als Variablen nur Zahlen, und RFID Tags bestehen halt leider aus Zahlen und Buchstaben. Gibt es da eine möglichkeit, sich trotzdem durchzumogeln, oder geht das mit einem anderen Controller wirklich einfacher?

Ich kenn mich mit anderen Controllern leider nicht aus, erst recht, was die Programmierung angeht.

MfG
xythobuz

Vitis
01.02.2009, 21:17
stell mal hier ne Zeile die der Bausatz ausgibt dar,
dann kann man Dir eher helfen wie Du damit verfahren kannst.

xythobuz
01.02.2009, 21:19
Hi.
Dies sind die Tags, die der Pollin Bausatz bei meinen 5 Karten ausspuckt:

1F0044E882
1F0044C1A9
1F0044C04B
1F0044C281
1F0044C561

Mit freundlichen Grüßen
xythobuz

Vitis
01.02.2009, 21:27
das sind hexwerte, also zahlenwerte

1f 00 44 e8 82 sind die blöcke, das sind dann dezimal:
31 0 68 232 130 musste in der C-Control mal schaun
obs da ne funktion der umwandlung von hex in dez gibt.
dann zerlegste den Tag in Blöcke von 2 Zeichen und rechnest die
in Dezimal um und kannst den Tag in 5 Bytes speichern

xythobuz
02.02.2009, 12:44
Okay, ich habs jetzt so gelöst:
<code>
#loop

GET r1
if r1 = &H31 then goto 2 else goto falsch ' &H31 gleich 49 gleich "1"
'naechstes Zeichen
#2
GET r1
if r1 = &H46 then goto 3 else goto falsch '&H46 gleich 70 gleich "F"
#3
GET r1
if r1 = &H30 then goto 4 else goto falsch
#4
GET r1
if r1 = &H30 then goto 5 else goto falsch
#5
GET r1
if r1 = &H34 then goto 6 else goto falsch
#6
GET r1
if r1 = &H34 then goto 7 else goto falsch
#7
GET r1
if r1 = &H45 then goto 8 else goto falsch
#8
GET r1
if r1 = &H38 then goto 9 else goto falsch
#9
GET r1
if r1 = &H38 then goto 10 else goto falsch
#10
GET r1
if r1 = &H32 then goto open else goto falsch
'----------------------------------------------------------------------
' UNTERPROGRAMME:
#falsch
gosub LCD_CLS
print "Falsch"
lcd_param = &H80
lcd_buf = OFF
gosub LCD_WRITE
gosub Nachricht2
goto loop

#open
gosub LCD_CLS
print "Relais macht uff"
lcd_param = &H80
lcd_buf = OFF
gosub LCD_WRITE
gosub Nachricht1
goto loop
</code>

Das funktioniert auch bei einer Karte, aber wie löse ich das mit ca. 60?

xythobuz
03.02.2009, 17:12
Hi nochmal.
Also, jetzt klappt alles bestens, es gibt nur noch ein Problem.
Hier der Code:


define Datenbus byteport[1]
define RS port[9]
define RW port[10]
define E port[11]
define Daten byte ' Pufferbyte
define r1 byte
'---------------------------------------------------------
gosub Init 'Display Initialisieren
Daten = 0 'Den Cursor des Displays...
gosub Cursor '... Auf Position 0 stellen!
'---------------------------------------------------------
#loop
GET r1
if r1 = &H31 then goto 2 else goto falsch ' &H31 gleich 49 gleich "1"
#2
GET r1
if r1 = &H46 then goto 3 else goto falsch '&H46 gleich 70 gleich "F"
#3
GET r1
if r1 = &H30 then goto 4 else goto falsch 'Admin und 2. Test Karte
#4
GET r1
if r1 = &H30 then goto 5 else goto falsch 'Admin und 2. Test Karte
#5
GET r1
if r1 = &H34 then goto 6 else goto falsch 'Admin und 2. Test Karte
#6
GET r1
if r1 = &H34 then goto 7 else goto falsch 'Admin und 2. Test Karte
#7
GET r1
if r1 = &H45 then goto 8 'Admin
if r1 = &H43 then goto 8 else goto falsch '2. Test Karte
#8
GET r1
if r1 = &H38 then goto 9 'Admin
if r1 = &H31 then goto 9 else goto falsch '2. Test Karte
#9
GET r1
if r1 = &H38 then goto 10 'Admin
if r1 = &H41 then goto 10 else goto falsch '2. Test Karte
#10
GET r1
if r1 = &H32 then goto open 'Admin
if r1 = &H39 then goto open else goto falsch '2. Test Karte
'----------------------------------------------------------------------
' UNTERPROGRAMME:
#falsch
r1 = 0
Daten = &H46 'F
gosub Zeichen
Daten = &H45 'E
gosub Zeichen
Daten = &H48 'H
gosub Zeichen
Daten = &H4C 'L
gosub Zeichen
Daten = &H45 'E
gosub Zeichen
Daten = &H52 'R
gosub Zeichen
pause 100
gosub cls
goto loop

#open
r1 = 0
Daten = &H4F 'O
gosub Zeichen
Daten = &H45 'E
gosub Zeichen
Daten = &H46 'F
gosub Zeichen
Daten = &H46 'F
gosub Zeichen
Daten = &H4E 'N
gosub Zeichen
Daten = &H45 'E
gosub Zeichen
pause 100
gosub cls
goto loop

'###################LCD Routinen##################
#Init
E=0
Daten = &H38 'Initialisierung
gosub Kommando
Daten = &H0E 'Display einschalten
gosub Kommando
Daten = &H01
gosub Kommando
return

#Kommando
RW = 0
RS = 0
Datenbus = Daten
pulse E
return

#Zeichen
RW = 0
RS = 1
Datenbus = Daten
pulse E
return

#Cursor
RW = 0
RS = 0
Datenbus = Daten + &H80
pulse E
return

#cls ' Display loeschen
Daten = &H02
gosub Kommando
return

'#Ausgabe 'zweistellige Zahl
'Daten = (Zahl / 10) + 48
'gosub Zeichen
'Daten = (Zahl mod 10) + 48
'gosub Zeichen
'return
'end

Und wenn ich eine Karte an den Leser halte kommt auf dem Display "OEFFNE". Aber kurz danach erscheint auf dem Display "FALSCH". Und das bleibt da auch. Manchmal kommt noch kurz OEFFNE, aber direkt danach wieder Falsch.
Wo liegt denn jetzt hier wieder der Fehler? :-k
MfG
xythobuz

grumpf
25.02.2009, 08:00
Hai,

wie stehen die Dinge ? Ich schaue hier immer mal rein. Habt ihr das Projekt inzwischen abgeschlossen? Wie ist der aktuelle Stand?
Internette Grüße
Stefan

xythobuz
25.02.2009, 14:22
Tja, also im Moment bin ich mit dem Code soweit:



define Datenbus byteport[1]
define RS port[9]
define RW port[10]
define E port[11]
define Daten byte ' Pufferbyte
define r1 byte
define neuer_code byte
'---------------------------------------------------------
gosub Init 'Display Initialisieren
Daten = 0 'Den Cursor des Displays...
gosub Cursor '... Auf Position 0 stellen!
'---------------------------------------------------------
neuer_code = 0
#loop
if neuer_code = 0 then goto receive_one_byte
if neuer_code > 0 then goto receive


#receive
GET r1
if r1 = &H31 then goto 2 else goto falsch ' &H31 gleich 49 gleich "1"
#2
GET r1
if r1 = &H46 then goto 3 else goto falsch '&H46 gleich 70 gleich "F"
#3
GET r1
if r1 = &H30 then goto 4 else goto falsch 'Admin und 2. Test Karte
#4
GET r1
if r1 = &H30 then goto 5 else goto falsch 'Admin und 2. Test Karte
#5
GET r1
if r1 = &H34 then goto 6 else goto falsch 'Admin und 2. Test Karte
#6
GET r1
if r1 = &H34 then goto 7 else goto falsch 'Admin und 2. Test Karte
#7
GET r1
if r1 = &H45 then goto 8 'Admin
if r1 = &H43 then goto 8 else goto falsch '2. Test Karte
#8
GET r1
if r1 = &H38 then goto 9 'Admin
if r1 = &H31 then goto 9 else goto falsch '2. Test Karte
#9
GET r1
if r1 = &H38 then goto 10 'Admin
if r1 = &H41 then goto 10 else goto falsch '2. Test Karte
#10
GET r1
if r1 = &H32 then goto open 'Admin
if r1 = &H39 then goto open else goto falsch '2. Test Karte


#receive_one_byte
GET r1
if r1 = &H31 then neuer_code = 1
'---------------------------------------------------------------------
' UNTERPROGRAMME:
#falsch
r1 = 0
Daten = &H46 'F
gosub Zeichen
Daten = &H45 'E
gosub Zeichen
Daten = &H48 'H
gosub Zeichen
Daten = &H4C 'L
gosub Zeichen
Daten = &H45 'E
gosub Zeichen
Daten = &H52 'R
gosub Zeichen
pause 100
gosub cls
goto loop

#open
r1 = 0
Daten = &H4F 'O
gosub Zeichen
Daten = &H45 'E
gosub Zeichen
Daten = &H46 'F
gosub Zeichen
Daten = &H46 'F
gosub Zeichen
Daten = &H4E 'N
gosub Zeichen
Daten = &H45 'E
gosub Zeichen
pause 100
gosub cls
goto loop

'###################LCD Routinen##################
#Init
E=0
Daten = &H38 'Initialisierung
gosub Kommando
Daten = &H0E 'Display einschalten
gosub Kommando
Daten = &H01
gosub Kommando
return

#Kommando
RW = 0
RS = 0
Datenbus = Daten
pulse E
return

#Zeichen
RW = 0
RS = 1
Datenbus = Daten
pulse E
return

#Cursor
RW = 0
RS = 0
Datenbus = Daten + &H80
pulse E
return

#cls ' Display loeschen
Daten = &H02
gosub Kommando
return


Allerdings, kurz nachdem ich den RFID-Chip hinhalte, meldet das Display öffnen, dann aber FEHLER und das wars dann.

MfG
xythobuz

sast
25.02.2009, 16:36
"also den gelesenen Code von dem Pollin-Teil bekommst du "frei Haus" über die serielle Schnittstelle. Zitat von der Pollin-Seite "Ein Beispielprogramm, welches den gelesenen HF-Tag über die RS232-Schnittstelle sendet, ist bereits vorprogrammiert." Du kannst den Tag also über die serielle Schnittstelle des C-Control einlesen und verarbeiten."

Warum änderst du dann nicht in diesem Beispielprogramm die Ausgabe?

sast

Edit: sorry hatte nicht mitbekommen, dass es schon eine 2. Seite gibt

Dein LOOP endet erst nach der Ausgabe von Fehler (wenn ich das Bascom soweit richtig verstehe) vielleicht solltest du da mal ein Loopende vor dem #FALSCH einfügen.

xythobuz
25.02.2009, 20:57
Hi.
Einen riesen Dank an dich, sast, ich bin ja so blöd... ](*,)
Das ist übrigens nicht Bascom sondern CCBasic.

Hier der neue Code:



define Datenbus byteport[1]
define RS port[9]
define RW port[10]
define E port[11]
define Daten byte ' Pufferbyte
define r1 byte
'---------------------------------------------------------
gosub Init 'Display Initialisieren
Daten = 0 'Den Cursor des Displays...
gosub Cursor '... Auf Position 0 stellen!
'---------------------------------------------------------
#loop
gosub willkommen
goto receive

#receive
GET r1
if r1 = &H31 then goto 2 else goto receive ' &H31 gleich 49 gleich "1"
#2
GET r1
if r1 = &H46 then goto 3 else goto falsch '&H46 gleich 70 gleich "F"
#3
GET r1
if r1 = &H30 then goto 4 else goto falsch 'Admin und 2. Test Karte und 3.
#4
GET r1
if r1 = &H30 then goto 5 else goto falsch 'Admin und 2. Test Karte und 3.
#5
GET r1
if r1 = &H34 then goto 6 else goto falsch 'Admin und 2. Test Karte und 3.
#6
GET r1
if r1 = &H34 then goto 7 else goto falsch 'Admin und 2. Test Karte und 3.
#7
GET r1
if r1 = &H45 then goto 8 'Admin
if r1 = &H43 then goto 8 else goto falsch '2. Test Karte und 3.
#8
GET r1
if r1 = &H38 then goto 9 'Admin
if r1 = &H31 then goto 9 '2. Test Karte
if r1 = &H32 then goto 9 else goto falsch '3. Test Karte
#9
GET r1
if r1 = &H38 then goto 10 'Admin und 3. Karte
if r1 = &H41 then goto 10 else goto falsch '2. Test Karte
#10
GET r1
if r1 = &H32 then goto open 'Admin
if r1 = &H39 then goto open '2. Test Karte
if r1 = &H31 then goto open else goto falsch '3. Test Karte
goto loop

'#receive_one_byte
'GET r1
'if r1 = &H31 then neuer_code = 1
'goto loop
'---------------------------------------------------------------------
' UNTERPROGRAMME:
#falsch
r1 = 0
gosub cls
Daten = &H46 'F
gosub Zeichen
Daten = &H45 'E
gosub Zeichen
Daten = &H48 'H
gosub Zeichen
Daten = &H4C 'L
gosub Zeichen
Daten = &H45 'E
gosub Zeichen
Daten = &H52 'R
gosub Zeichen
Daten = 2 'Auf Zeile 2 Umschalten
gosub LCD_GOTOLINE
Daten = &H54 'T
gosub Zeichen
Daten = &H52 'R
gosub Zeichen
Daten = &H59 'Y
gosub Zeichen
Daten = &H20 '
gosub Zeichen
Daten = &H41 'A
gosub Zeichen
Daten = &H47 'G
gosub Zeichen
Daten = &H41 'A
gosub Zeichen
Daten = &H49 'I
gosub Zeichen
Daten = &H4E 'N
gosub Zeichen
pause 150
goto loop

#open
r1 = 0
gosub cls
Daten = &H4F 'O
gosub Zeichen
Daten = &H45 'E
gosub Zeichen
Daten = &H46 'F
gosub Zeichen
Daten = &H46 'F
gosub Zeichen
Daten = &H4E 'N
gosub Zeichen
Daten = &H45 'E
gosub Zeichen
pause 150
goto loop

#willkommen
gosub cls
Daten = &H53 'S
gosub Zeichen
Daten = &H43 'C
gosub Zeichen
Daten = &H55 'U
gosub Zeichen
Daten = &H42 'B
gosub Zeichen
Daten = &H41 'A
gosub Zeichen
Daten = &H20 '
gosub Zeichen
Daten = &H53 'S
gosub Zeichen
Daten = &H45 'E
gosub Zeichen
Daten = &H43 'C
gosub Zeichen
Daten = &H55 'U
gosub Zeichen
Daten = &H52 'R
gosub Zeichen
Daten = &H49 'I
gosub Zeichen
Daten = &H54 'T
gosub Zeichen
Daten = &H59 'Y
gosub Zeichen
Daten = &H20 '
gosub Zeichen
Daten = &H43 'C
gosub Zeichen
Daten = &H48 'H
gosub Zeichen
Daten = &H45 'E
gosub Zeichen
Daten = &H43 'C
gosub Zeichen
Daten = &H4B 'K
gosub Zeichen
Daten = 2 'Zu Zeile 2 wechseln
gosub LCD_GOTOLINE
Daten = &H56 'V
gosub Zeichen
Daten = &H20 '
gosub Zeichen
Daten = &H31 '1
gosub Zeichen
Daten = &H2E '.
gosub Zeichen
Daten = &H35 '5
gosub Zeichen
return
'###################LCD Routinen##################
#Init
E=0
Daten = &H38 'Initialisierung
gosub Kommando
Daten = &H0E 'Display einschalten
gosub Kommando
Daten = &H01
gosub Kommando
return

#Kommando
RW = 0
RS = 0
Datenbus = Daten
pulse E
return

#Zeichen
RW = 0
RS = 1
Datenbus = Daten
pulse E
return

#Cursor
RW = 0
RS = 0
Datenbus = Daten + &H80
pulse E
return

#cls ' Display loeschen
Daten = &H02
gosub Kommando
Daten = &H01
gosub Kommando
return

#LCD_GOTOLINE
if Daten = 1 then Daten = &H80
if Daten = 2 then Daten = &HC0
goto Kommando

Alles hinter einem ' ist auskommentiert.
Jetzt klappt alles.
Nochmals vielen Dank.

MfG
xythobuz

xythobuz
04.07.2009, 22:46
Guten Abend.
Tut mir leid, dass ich mich so lange nicht mehr gemeldet habe, aber das Projekt RFID Zugangs Kontrolle macht schon langsam fortschritte O:)
Der Code findet sich mittlerweile HIER (http://code.google.com/p/rfidaccesscontrol/source/browse/stable/stable_4-01.bas).
Die Beschreibung findet sich im Code.

Auch die C-Control wurde zur M-Unit 2.0.

Allerdings treten bei mir neue Probleme auf, und ich hoffe bei euch auf Hilfe.
Zur M-Unit habe ich den USB-Programmer genommen, zwecks Programmieren am Einsatzort mit dem Laptop, wobei die Kommunikation mit der Ausleseeinheit immer noch per RS232 abläuft.
Darum habe ich eine kleine Schaltung mit einem MAX232N aufgebaut. Einen Schaltplan für Eagle habe ich im Anhang (ja, murks).
Nun funktioniert die Kommunikation über RS232 gar nicht, und die Kommunikation über USB funktioniert bei eingestecktem MAX232N zwar, aber wird immer nur 1 Byte übertragen, dann empfängt die C-Control nichts mehr, bis ich auf Reset und wieder auf Start drücke.

Nun finde ich im Internet auch kein Datenblatt für den MAX232N, weshalb ich nicht sicher bin, ob meine Kondensatorwerte stimmen.

Mit Hoffnung auf Hilfe von euch Profis :mrgreen:
xythobuz

sast
05.07.2009, 16:57
http://www.alldatasheet.com/datasheet-pdf/pdf/27230/TI/MAX232N.html

Wenn du an JP2 eine Brücke zwischen 9 und 10 machst, sollte jedes Zeichen, das über die RS232 zum MAX geschickt wird auch wieder zurückkommen. Es darf aber dann auch nichts anderes an 9 und 10 hängen außer der MAX232! Wenn da schon mal nichts kommt, dann ist wahrscheinlich die Verbindung vom Max zum PC oder was auch immer an der RS232 hängt verkehrt. In dem Fall tauschst du einfach mal 7 und 8.

Es gibt im Bezug auf die Kondensatoren an Pin 2 unterschiedliche Datenblätter. Bei TI wird der Kondensator gegen Masse geschaltet. Die andere Variante geht gegen VCC. Finde leide jetzt nicht die Quelle wo das andere Datenblatt her ist.

Was du als erstes Testen kannst, ist ob dein RS232 überhaupt an 7 und 8 vom RS232 ankommt, indem du dort eine Drahtbrücke einbaust anstelle des MAX. Hat der an 15 und 16 auch seine Versorgungsspannung anliegen? Manchmal hat man da einfach eine Verbindung vergessen.

sast

xythobuz
05.07.2009, 17:42
Howdy.
Vielen Dank für deine Hilfe, allerdings ist das noch gar nicht mein Problem.
Die C-Control M-Unit kann auch per USB Programmiert werden. Dafür gibt es oben auf der C-Control einen Anschluss.
Das funktioniert bei meiner Schaltung aber nur, wenn der MAX232 nicht eingesteckt ist.
Ob die RS232 Kommunikation funktioniert, habe ich bis jetzt noch gar nicht getestet.

MfG
xythobuz

sast
05.07.2009, 17:55
Dann liegen wohl die Pins vom usb zu UART auch auf JP2 9 und 10?
In dem Fall steiten sich der Max und der USB Konverter um den TX Pegel

sast

xythobuz
05.07.2009, 17:57
Ah. Würde es dann reichen, dem MAX für die Zeit der Programmierung den Strom zu nehmen?

sast
05.07.2009, 18:10
Habe ich noch nie probiert, aber wenn du 2 Dioden und einen Widerstand spendierst, kann alles immer dran bleiben. Du darfst nur nie gleichzeitig vom USB und vom RS232 senden

Wie das geht, hatte ich Willa schon mal beschrieben.
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=39761&highlight=

sast

xythobuz
05.07.2009, 18:32
Hi.
Ich denke, du meinst diesen (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=39761) Thread. Aber ich bin da jetzt ein bisschen Durcheinander.
Bei mir schaut die Kommunikation aus, wie im Bild im Anhang. Wie funktionierts denn da?

sast
05.07.2009, 18:37
Das mit den Dioden ist nur relevant, wenn du die TTL Seite vom USB Programmer und vom MAX232 auf die selben Pins vom µC schaltest. Nach deinem Blockschaltbild sieht es eher nach zwei getrennten Pinpaaren aus. Das müsstest du jetzt mal etwas genauer spezifizieren

sast

xythobuz
05.07.2009, 18:45
Oh, das hab ich dann etwas ungenau dargestellt.
Sowohl der MAX als auch der Programmer teilen sich RXD und TXD.
Vielleicht sollte ich noch anmerken, dass beim Programmer in beide Seiten kommuniziert wird, beim MAX232 müssen allerdings nur Daten in die C-Control.

sast
05.07.2009, 19:13
ok, dann ist es so wie bei dem anderen Thread.
der TX vom USB muss über eine Diode und der TX vom MAX über die andere Diode mit dem RX des Controllers verbunden werden. Den RX vom Controller ziehst du mit einem Widerstand von 4k7 bis 10k auf VCC +5V. Den TX vom Controller kannst du direkt auf den MAX und den USB Converter legen. Es spielt dann auch keine Rolle ob du den MAX nur zum Senden, oder auch zum Empfangen brauchst

sast

xythobuz
05.07.2009, 19:16
Ok, das werde ich dann gleich mal ausprobieren.
Ich schreib meine Ergebnisse dann morgen nach der Schule.

Vielen Dank für dein Hilfe
xythobut

xythobuz
06.07.2009, 12:41
Also, ich hab jetzt alles so geschaltet, wie im Anhang. Wenn ich nun mit eingestecktem MAX über USB Kommunizieren will, kommen viele Buchstaben falsch an (aber nicht alle), und nach kurzer Zeit stürzt die C-Control ab.
Wenn ich den MAX ausstecke, funktioniert alles. Wenn ich ihn aber nur vom Strom nehme, geht es trotzdem nicht.
Ist denn jetzt meine Dioden Widerstand Geschichte falsch??

MfG
Thomas

sast
06.07.2009, 13:03
Du brauchst nur einen Widerstand am RX des µC. Dort (RX µC) zeigen die beiden Anoden der Dioden hin. An die Katoden schließt du einmal das TX vom USB Dingens und einmal den MAX an. Wie schon oben geschrieben, geht der TX vom µC direkt auf RX vom MAX und auf RX vom USB.

Es geht darum, dass sich die beiden Sender MAX und USB nicht gegenseitig in die Quere kommen.

sast

xythobuz
06.07.2009, 13:16
Ah. Ich (hoffe) glaube, jetzt ist der Groschen gefallen.
Das muss also so aussehen, wie das:

http://www.xythobuz.org/sodele.jpg

MfG
xythobuz

edit: Die Dioden dann noch anderstrum?!

sast
06.07.2009, 13:28
VCC
|
| | R
|_|
_________ TX | TX ________
|MAX232 |-----------|<|-----+----------|>|------------|USB |
| | |RX | |
| | ____|______ | |
| | RX TX| µC | RX | |
|________|-------+------|___________| ----------|_______|
|___________________________|


sast

xythobuz
06.07.2009, 13:37
Ah. So, bei mir braucht der Groschen halt manchmal länger zum Fallen :)

Werde dann berichten, obs klappt.
Vielen Dank,
Thomas

xythobuz
06.07.2009, 14:43
So. Ich hab das ganze jetzt nach deinem Schaltbild aufgebaut. Die Kommunikation über den MAX232 funktioniert nun aber leider gar nicht, und die Kommunikation über USB nur noch von der C-Control zum PC, ich kann also keine Daten senden.

Langsam bin ich mit meinem Latein am Ende :(

In Hoffnung auf deine Hilfe
Thomas

sast
07.07.2009, 07:28
Was für Dioden und was für einen Widerstand hast du denn genommen?
Kannst du mal noch angeben welche Pins du mit welchen verbunden hast.

Hast du schon die obligatorischen Brückentests durchgeführt? Du musst wenn du an JP2 9 und 10 kurzschließt ein Echo auf der RS232 und auf dem USB bekommen.

Ich hatte noch nie Probleme mit der Schaltung.

sast

xythobuz
21.07.2009, 23:18
Hi.
Sorry das ich so lange nicht geantwortet habe, hier nun die aktuellsten Entwicklungen.

Ich habe mich dafür entschieden, den USB Programmer wegzulassen, da ich auch per RS232 programmieren kann.
Die Schaltung mit dem MAX232N funktioniert jetzt super, liegt vielleicht aber auch daran, dass ich jetzt 1µF elkos nehme, vorher hatte ich nur 22µF 8-[

Aber, nicht das es langweilig wird, treten natürlich neue Probleme auf:
Die C-Control M-Unit 2.0 bietet mir nur 10kB an Speicher. Dies reicht bei meinem derzeitigen Programmaufbau aber nur für etwa 45 RFID-Karten.
Aber es müssen von Beginn an 70 Leute ins System, es sollte auch noch Platz für bis zu 100 Personen sein.
Die eine Möglichkeit wäre, auf die C-Control M-Unit Advanced "upzugraden", aber eigentlich möchte ich nicht noch mehr Probleme mit C-Controls, jetzt, da endlich welche funktionieren (Habe bereits etwa 10 Stück wieder umtauschen dürfen). Bei der C-Control Station kann man jetzt einfach den SpeicherIC austauschen. Aber bei der M-Unit ist der Speicher ja bereits in dem einen IC mit drin.
Nun habe ich aber noch einige 24C256 rumliegen, die direkt per I2C angesteuert werden. So wäre es das geringste Problem, diesen anzusteuern, allerdings kann ich mir nicht vorstellen, wie ich da den internen Speicherplatz sparen kann, da ich nicht weiß, wie ich auf dem IC ein Basic Programm ablegen kann.

Jetzt wäre es sehr nett, wenn ihr mit helfen könntet. Entweder man macht es wie bei der C-Control Main Unit, und speichert das eigentliche Programm direkt auf dem IC, was aber ein ändern des OS nötigt macht (das kann isch nit :-s ), oder man legt sämtliche RFID Nummern auf dem IC ab, allerdings weiß ich nicht, wie ich diese platzsparend auslesen könnte.

Was soll ich tun?

Mit Hoffnung auf Hilfe
Thomas

P.s.: Den jetzigen Code gibts HIER (http://www.xythobuz.org/RFID.BAS).

xythobuz
22.07.2009, 23:11
Hallöle.
So, aufgrund eigener Recherchen habe ich nun herausgefunden, dass es bereits eine Speichererweiterung von Conrad gibt.
Diese Basiert auf den gleichen ICs, wie ich sie verwenden will.
So kann ich auch einfach meine eigenen anschliessen.
Ausführliche Beispielprogramme haben mir bereits geholfen, so kann ich nun wahrscheinlich sämtliche RFID Codes auf den 24C256 speichern.

Das nächste Update mit Code poste ich natürlich hier.

MfG
Thomas

Jakobius
01.01.2010, 10:30
mit dem pollin rfid ding hab ich mir ne zugangskontrolle für mein zimmer gebaut :-)

google mal nach: pollin rfid zugangskontrolle
weis leider webseite nich mehr :(
du musst dann nur mehr das löschen von benutzern implementieren.
als ausgänge wurden die zwei leds benutzt(mann kann mit der masterkarte chips so programmieren, dass sie die 1.led, die 2. oder beide leds schalten).

xythobuz
01.01.2010, 11:26
Hätt ich das mal gewusst... Naja, ich bin ja jetzt glücklicherweise fertig mit meiner Zugangskontrolle. Falls jemand den Code und Schaltplan haben will, gibts den auf meiner Homepage (http://www.xythobuz.org/xythobuz.org/RFID_Access_Control.html).

MfG
Thomas

müto23
17.10.2016, 22:20
5,49€ für eine 125khz Transponder? Schau mal in diesem RFID-Shop (https://www.identible.de/rfid-transponder/rfid-keyfobs/). Es geht auch günstig, wenn man nicht Conrad heisst :)

Der andere Link ist leider tot. Für die Zugangskontrolle würde ich auch keine 125khz (EM oder TK) Transponder benutzen, auf Grund der Sicherheit...Für Zugangskontrollen haben wir sogar schon im Innenbereich Legic Transponder (https://www.identible.de/legic-atc1024-rfid-karte.html) im Einsatz. Kosten zwar 'ne hübsche Stange Geld, bieten aber auf Grund der verwendeten Verschlüsselung weitaus mehr Sicherheit als die TK oder EM Transponder...