RFID Türöffner System-A1 (komplett neue Software mit 36 RFID-Keys)

Cassio

Aktives Mitglied
29. Okt. 2008
4.027
17
38
Region Hannover
Sprachen
  1. BascomAVR
Hallo zusammen!

Ich hatte ja schon ab Januar 2011 mal meine ersten RFID-Türöffnersysteme hier vorgestellt....
(Die Beiträge zum System-I und System-A2 können HIER ggf. noch mal eingesehen werden)

Da ich bei der Entwicklung der anderen Systeme leider nicht so viel Zeit hatte, habe ich damals einfach eine "Quick and Dirty" Lösung erstellt. :cool:

Inzwischen ist über ein Jahr vergangen und vor eingen Tagen habe ich dann endlich mal mit dem System-A1 begonnen, dass ich immer noch herstellen musste.
Tja und weil ich diesmal mehr Ruhe zum Entwickeln hatte ist nun auch endlich das System entstanden, welches es eigentlich mal werden sollte. :D


Aus diesem Grunde habe ich das gesamte System nun Hardware- und Softwaretechnisch überarbeitet.
Speziell die Software hat dabei eine Rundumerneuerung erfahren. :wink:

Hier mal die Highlights der neuen Software:
  • Möglichkeit der Speicherung von 36 RFID-Tag`s
  • alle RFID-Tag`s werden nur im EEPROM gespeichert
  • 4 Gruppen für die RFID-Key`s auswählbar
  • 9 RFID-Key`s je Gruppe speicherbar
  • Gruppensperre aktivierbar
  • Dauer-Auf Funktion zuschaltbar
  • Prüfung auf freien Speicherplatz vor dem Speichern
  • Doppler-Check: jeder RFID-Key kann nur einmal gespeichert werden
  • Info-Anzeige jedes 125kHz RFID-Tags
  • RFID-Tag Anzeige für jeden einzelnen Speicherplatz
  • Info-Anzeige der letzten 9 gescannten RFID-Tags (ggf. mit Anzeige des Speicherplatzes)
  • einfaches Löschen aller gespeicherten RFID-Key`s im EEPROM


Was mir besonders am Herzen gelegen hatte, waren die Prüfungen vor dem Speichern eines neuen RFID-Key`s.
Jetzt wird also vorher einmal geprüft, ob der ausgewählte Speicherplatz überhaupt noch frei ist!
Sollte der Speicherplatz bereits belegt sein, erfolgt eine Warnung und der Vorgang kann abgebrochen werden.
Auf diese Weise kann kein Speicherplatz versehentlich überschrieben werden.

Nach dem Scannen des RFID-Tag`s beim Speichern wird jetzt auch sofort geprüft, ob dieser schon als Key im Speicher vorhanden ist.
Sollte der RFID-Tag bereits vorhanden sein, wird ein erneutes Speichern grundsätzlich abgelehnt!
Zur Info wird auch gleich der Speicherplatz mit angezeigt, in dem der RFID-Tag schon als Key gespeichert wurde.
Diese Funktion wird dann besonders wichtig, wenn ein RFID-Transponder einmal verloren geht.
Löscht man dann den RFID-Key aus dem notierten Speicherplatz kann man sicher sein, dass es den selben RFID-Tag im Speicher nicht noch einmal gibt..... und damit der Finder definitv keinen "zufälligen" Zutritt erlangen kann.


Ebenfalls nützlich finde ich die nun integrierten Info-Anzeigen.
Ich kann jetzt jeden einzelnen Speicherplatz aufrufen und mir den RFID-Tag anzeigen lassen, oder einfach nur einen 125kHz-RFID-Transponder zur Info scannen.
Zusätzlich habe ich auch noch eine "Last-Visit" Funktion mit eingebaut.
Damit kann man sich die letzten 9 gescannten RFID-Tag`s anzeigen lassen. :wink:
Sollte ein gescannter RFID-Tag auch als Key im Speicher vorhanden sein, wird ebenfalls die Speicherplatznummer ermittelt und gleich mit angezeigt.
Damit das EEPROM aber nicht ständig neu beschrieben werden muss, werden die "Last-Visit"-RFID-Tag`s nur im Flash-Speicher des AVR`s abgelegt!
Dadurch ist nach einem Stromausfall, oder nach einem Neustart, die "Last-Visit"-Liste natürlich leer.


Alle anderen Key`s werden aber direkt im EEPROM gespeichert und damit dauerhaft erhalten.
Da ich den Speicher im EEPROM jetzt wie eine "Tabelle" aufgebaut habe, kann ich nun auch im Vorfeld schon Daten von RFID-Tag`s in den passenden Tabellen-Bereichen ablegen.
Auf diese Weise erspare ich mir das Einlesen aller RFID-Transponder bei jeder Türöffnereinheit.
Ich brauche nun bloß die fertige EEPROM-Tabelle in jeden AVR kopieren. :D



Nun aber mal zur Hardware.......
Die neue Controller-Platine ist etwas kompakter geworden und als AVR verwende ich wieder mal den Mega8, als SMD-Version.
Dank dem extrem kleinen 8MHz Resonator (3mm x 1mm) und einiger 0603-SMD Bauteile, ist die Platine jetzt nur noch 54mm x 60mm groß und trotzdem noch sehr übersichtlich.
Hier mal ein Foto, von der aktuellen Einheit:
A1-Platinenaufbau.jpg


Der RFID-Scanner (ID20 von ID-Innovations) sitzt in einem separaten Gehäuse.
Zur optischen Signalisierung des Scanns/Zutritts dient eine Duo-LED (grün/rot).
Hier mal zwei Bilder der fertigen Einheit:
RFID-rot.jpg RFID-gruen.jpg

und der Blick nach Innen, auf die Leiterbahnseite und SMD-Bauteile:
RFID-hinten.jpg


Damit war die Hardware nun zum Testen fertig und der gesamte Testaufbau, mit meiner ISE, sah dann so aus:
Test-Aufbau.jpg



Soweit erst mal zum neuen System-A1 !
Schaltplan, Bilder und Auszüge vom Programmcode folgen dann bald, denn die Einheit ist schon fix und fertig montiert und verrichtet seit einigen Tagen zuverlässig seinen Dienst. :cool:

Grüße,
Cassio
 
Hi Cassio,

schön, schön, ... :cool:
Ebenfalls nützlich finde ich die nun integrierten Info-Anzeigen.
Ich kann jetzt jeden einzelnen Speicherplatz aufrufen und mir den RFID-Tag anzeigen lassen, oder einfach nur einen 125kHz-RFID-Transponder zur Info scannen.
wär natürlich Klasse wenn man gleich sehen könnte wem das Ding gehört.
- Onkel Egon
- Tante Gertrud
- Göttergatte :rolleyes:
- Hausdrache :p

Damit das EEPROM aber nicht ständig neu beschrieben werden muss, werden die "Last-Visit"-RFID-Tag`s nur im Flash-Speicher des AVR`s abgelegt!
Dadurch ist nach einem Stromausfall, oder nach einem Neustart, die "Last-Visit"-Liste natürlich leer.
Du meinst wohl SRAM und nicht Flash-Speicher ;)

Gruß
Dino
 
Hallo Dino!

Nun ja, Besucher des letzten Stammtisches haben die Einheit ja schon funktionstüchtig, Live und in Farbe gesehen. :wink:


wär natürlich Klasse wenn man gleich sehen könnte wem das Ding gehört.
- Onkel Egon
- Tante Gertrud
- Göttergatte :rolleyes:
- Hausdrache :p


Jepp, dass habe ich auch schon überlegt.
Wäre ganz praktisch, dann müsste man keine separate Papierliste mehr führen. :wink:

Allerdings ginge das dann zu Lasten des EEPROM-Speichers.
Momentan sieht es wie folgt aus:
9 Nummern je Gruppe, in 4 Gruppen = 36 RFID-Key`s
Jeder Key verwendet 12Bytes.
36 Keys x 12Bytes = 432Byte

EEPROM-Speicher im Mega8 = 512 Byte
Differenz für "andere Ideen" = 80 Bytes

In den verbleibenden 80 Bytes passen dann leider nicht die 36 Namen. :wink:

Ich müsste dann also die Speicherverwaltung ändern.....
Wäre aber ggf. trotzdem eine Überlegung wert. :hmmmm:


Grüße,
Cassio
 
Hallo!

Kurz noch ein paar Worte zur RFID-Leseeinheit.....

Generell bräuchte man ja nur eine simple Platine, um die 2mm Kontakte auf Standard 2,54mm-Steckerkontakte zu adaptieren.
Da ich aber eine Duo-LED zur optischen Signalisierung mit einbauen wollte.... und nur vier Drähte zum Anschluss der Einheit eingeplant hatte .....habe ich gleich eine Umschaltung mittels PNP-Transitor auf der Platine realisiert.

Standardmäßig leuchtet die LED nun rot, bis ein RFID-Transponder vor den Scanner gehalten wird.
Wenn mein Programm nun feststellt, dass der ermittelte RFID-Tag ein gültiger Key ist, wird nicht nur der Türöffner angesteuert sondern auch ein zusätzlicher AVR-Ausgang.
Dieser Ausgang steuert die PNP-Schaltstufe in der RFID-Leseeinheit an und die Duo-LED leuchtet nun grün. :D

Wenn der ermittelte RFID-Tag kein Key im Speicher ist, flackert die Duo-LED kurz und bleibt danach rot!
Das Flackern soll dem Anwender nur zeigen, dass der RFID-Tag gelesen wurde..... ihm aber kein Zugang gewährt wird. :wink:


Bevor ich aber den ganzen Programmablauf schriftlich erkläre, folgt nun erst mal der Anschlussplan und Bilder von der fertigen Einheit. :cool:

Hier nun der komplette Verdrahtungsplan der Einheit:
System_A1_Plan_neu.gif
EDIT:
Fehler im Plan beseitigt!


Dann noch die montierte RFID-Leseeinheit:
RFID-Leser_montiert_gruen.jpg


Die Controllerplatine passt auf Grund ihrer geringen Abmaße wunderbar in den Standard-Siedle Sprechapparat (HT611):
Sprechapparat_gruen.jpg


Da ich ja auch innen eine Rückmeldung über eine Duo-LED bekomme und zusätzlich auch noch Bedien-Taster wie Dauer-Auf, Gruppen-Sperre und "Nachtlicht" (dazu später mehr) habe, sind diese natürlich auch im Sprechapparat integriert:
Sprechapparat_Detail.jpg Sprechapparat_Taster.jpg



Soweit dann erst mal zur fertigen Hardware!
In den nächsten Beiträgen wird es dann wohl noch etwas um die Software gehen. :)

Grüße,
Cassio
 
Hallo!

Wie im Beitrag davor schon geschrieben, kommen wir nun mal zum Softwareteil!

Das gesamte Programm ist in diversen Subroutinen unterteilt, die alle via GOSUB aufgerufen und abgearbeitet werden.
Aus dem Grunde werden also zu Beginn keine Subroutinen deklariert!

Nun aber mal der Reihe nach.....

Zu Beginn des Programms werden erst einmal alle wichtigen Grunddaten eingestellt.
Dazu gehören natürlich Hard- & Softwarestack, Systemquarz, aber auch die Ein- und Ausgänge des Mega8:
Programmcode --> Bascom_Ein-Ausgänge.gif


Gleich im Anschluss erfolgt das Aktivieren der Interrupts, des Timers und die Config der I2C-Schnittstelle.
Ich habe hier jetzt mal wieder die I2C-Lib`s von Kent Andersson verwendet, um meine ISE zu betreiben.
Programmcode --> Bascom_INTs+I2C_config.gif
Der Timer1 wird zum Verzögerten Ausschalten der weißen LED`s verwendet.
Die beiden weißen LED`s dienen einmal über einen Taster als Nachtlicht, aber auch als Eingangslicht!
Sobald die Controllereinheit den Türöffner ansteuert, leuchten auch die weißen LED`s für 16 Sekunden.
Dies dient dazu, nach dem Eintreten im Dunkeln gleich etwas Licht zu haben und den Lichttaster für das Flurlicht besser zu finden. :wink:


Da der RFID-Scanner mehrer Möglichkeiten der Datenübergabe bietet, habe ich mich für das serielle Format entschieden.
Um die seriellen Daten an einem beliebigen Pin einlesen zu können, verwende ich die Softwarevariante des USART-Input.
Programmcode --> Bascom_SOFT-USARTs.gif
Der kommentierte Bereich des USART-Outputs diente mir zu Debugzwecke bei der Programmentwicklung.
Das Signal stand dann am AVR-Pin für die "rote" LED zur Verfügung.
Aktuell ist aber alles deaktiviert und daher nicht im Programm kompiliert!



Kommen wir nun zu den Variablen, die im Programm verwendet werden.
Durch die Anwendung einiger Overlays kann die Variablenanzahl sehr klein gehalten werden.
Gleichzeitig werden verschiedene Variablen im Programm doppelt verwendet.
Das spart doch einiges an Platz im Speicher und macht das Programm teilweise sogar übersichtlicher.
Programmcode --> Bascom_Variablen-Deklaration.gif


Aporpos Übersichtlicher....
Damit das Programm einfacher lesbar (und einfacher zu schreiben) ist, habe ich natürlich auch einige Alias-Namen verwendet!
Programmcode --> Bascom_Alias-Namen.gif



Damit wären die Vorbereitungen zum Programm auch schon abgeschlossen.
Als nächstest geht es dann mit der Haupt-Arbeitsschleife (Do-Loop) und die ganzen Subroutinen weiter. :D

Grüße,
Cassio
 
Hallo!

Nun geht es mit der Haupt-Arbeitsschleife weiter.....

Bevor aber das Programm bei einem Neustart in die Endlos-Schleife gelangt,
gibt es noch den sogenannten "System-Start", bei dem einmalig bestimmte Variablen, Ausgänge oder Anzeigen vordefineirt werden.
Diesen Abschnitt habe ich mir irgendwann mal angewöhnt, um zum eigentlichen Programmablauf fest definierte Bedingungen vorzuhalten.
System-Start: Bascom_System-Start.gif


Im Programm selbst gibt es dann noch eine zusätzliche Subroutine, die sich "Sys_start" nennt.
Diese Sub dient eigentlich nur dazu, dass LCD eine Standardanzeige ausgeben zu lassen und ein Variablen-Flag zurückzusetzen.
Sie wird immer dann aufgerufen wenn ein Bearbeitungsvorgang abgeschlossen wurde (z.B. ein Menüpunkt) und das LCD einmalig wieder die Standardmeldung des laufenden Systems anzeigen soll.
Sub Sys_start: Bascom_Sub_Sys-Start.gif


Nun kommen wir aber mal zur eigentlichen "Arbeitsschleife" des Programms, welche permanent durchlaufen wird.
Do-Loop: Bascom_Do-Loop-Schleife.gif
In der Haupt-Arbeitsschleife werden folgende Punkte überwacht:
  • Soll das Nachtlicht (zwei weiße LED`s am Gehäuse) ein- oder ausgeschaltet werden?
  • Soll die Tür dauerhaft geöffnet sein?
  • Soll die Gruppen-Sperre aktiv sein?
  • Soll in einen Menüpunkt verzweigt werden?
  • Ermitteln eines RFID-Tag`s
  • Steuerung der Duo-LED`s (innen und außen)

Je nach Ereignis, wird natürlich sofort darauf reagiert, oder nur eine entsprechende Variable manipuliert, die dann in den Subroutinen berücksichtigt wird.
Manchmal passiert sogar beides, wie man z.B. beim Taster "Licht" sehen kann.
Wenn der Taster "Licht" gedrückt ist, wird das Bit 4 in der Config-Variable "Zutritt" manipuliert und gleich darauf auch reagiert.
Dieser Vermerk über den Schaltzustand des weißen LED`s ist deshalb wichtig, weil die LED`s nach dem Türöffnen automatisch für 16 Sekunden leuchten sollen und danach automatisch wieder abgeschaltet werden.
Wurden die weißen LED`s aber als Nachtlicht manuell aktiviert, darf die 16-Sekunden-Automatik die LED`s natürlich nicht mehr abschalten.
Dies verhindert dann eine Abfrage des Bit 4 in der Variable "Zutritt", die in der Timer-ISR getätigt wird.

Ähnliches passiert bei den anderen Tastern auch, weshalb die Taster selbst immer nur ein Config-Bit toggeln und keine Ausgangs-Ports direkt schalten.


Hier nun mal zwei bildliche Ablaufbespiele für das Programm:

1) RFID-Scan und Zurtitt gestattet: Scan_Zutritt.jpg

2) Scan bei aktiver Gruppen-Sperre: Gruppen_Sperre.jpg


In den nächsten Beiträgen geht es dann mit den Subroutinen und den Menüpunkten weiter. :)

Grüße,
Cassio
 
Hallo!

Bevor ich nun mit dem Programmcode weiter mache, möchte ich noch mal schnell auf das Nachtlicht eingehen.

Die Idee mit dem Eingangs- und Nachtlicht ist mir eines Abends ganz spontan gekommen, als der Flur mal wieder stockdunkel war.
Damit man mitten in der Nacht ein wenig Licht hat, falls man mal ein stilles Örtchen aufsuchen muss, hatte ich vor Monaten schon ein altes Kinderzimmer-Nachtlicht von Glimmlampen- auf LED-Betrieb umgebaut.
Die beiden hellweißen LED`s haben in dem kleinen Gehäuse auch wirklich gute Dienste geleistet und die Lichtstärke war mitten in der Nacht auch völlig ausreichend.

Aus dieser Erfahrung heraus habe ich nun an der abgeschrägten Unterseite des HT611-Sprechapparategehäuses zwei weiße LED`s so schräg eingebaut, dass ihr Licht rechts und links vom Gehäuse aus die Wand entlang leuchten.
Im Dunkeln sieht das dann so aus:
Sprechapparat_Nachtlich.jpg

....und hier noch mal ein Foto im Hellen:
Sprechapparat_weiss.jpg

Die Helligkeit der beiden weißen LED`s (5mm Standardtype) ist dabei so hoch, dass in der Nacht tatsächlich der ganze Flur "beleuchtet" ist und keiner mehr im Dunkeln steht. :wink:

Das Nachtlicht wird aber nur per Taster von Hand ein- oder ausgeschaltet!

Die einzige automatische Ansteuerung der weißen LED`s geschieht nur beim Öffnen der Tür.
Mit dem Türöffner werden also zeitgleich die LED`s angesteurt, falls man mal im Dunkeln nach Hause kommen sollte.
So hat man gleich etwas Licht, um den richtigen Flurlichttaster zu finden. :cool:

Während der Türöffner aber nach 2 Sekunden wieder abschaltet (geräuschloser 24V Gelichstromöffner),
bleibt das automatische Eingangslicht dann 16 Sekunden aktiv, bevor es dann auch wieder abgeschaltet wird...... natürlich nur, wenn das Nachtlich nicht von Hand aktiviert wurde. :wink:


Das war es dann auch schon zum Eingangs- und Nachtlicht.
Die nächsten Beiträge befassen sich dann aber wieder mit dem Programmcode.

Grüße,
Cassio
 
Hallo !

Nun geht es also mit den Subroutinen weiter....


Eine der wohl wichtigsten Subroutinen im Programm ist die Routine zum Auslesen des RFID-Tags.
Schließlich bauen alle anderen Programmoptionen auf die Daten des RFID-Tag`s auf. :wink:
Hier also nun die Subroutine:
Sub Read_rfid: Bascom_Sub_RFID-Read.gif


Damit man später jederzeit im laufenden System auch flexibel verschiedene RFID-Transponder speichern und löschen kann, gibt es das sogenannte Service-Menü.
Die Sub für das Servicemenü ist aber letztlich nur ein Auswahlmenü für weitere Subroutinen, die dann eigenständig RFID-Tag`s als Key`s speichern, löschen, oder den gesamten EEPROM-Speicher zurücksetzen.
Sub Service: Bascom_Sub_Service.gif


Zum Speichern der RFID-Tag`s wird also die "Unterroutine" zum Key_speichern ausgeführt.
Sub Key_add: Bascom_Sub_Key-add.gif


Zum Löschen eines gespeicherten Key`s wird einfach die "Unterroutine" Key_löschen ausgeführt.
Sub Key_del: Bascom_Sub_Key-del.gif


Eine verdeckte Option, die im LCD extra nicht angezeigt wird, ist die Möglichkeit das EEPROM komplett (alle 512Byte) zu löschen bzw. auf "NULL" zurück zu setzen.
Hierfür wird die separate "Unterroutine" Key_löschen_alle ausgeführt.
Sub Key_del_all: Bascom_Sub_Key-del-all.gif


Damit hätten wir nun einige der wichtigsten Subroutinen betrachtet.
Zum vollständigen Betrieb fehlen aber natürlich noch einige Weitere, die ich in den nächsten Beiträgen hier noch einstellen werde.

Grüße,
Cassio
 
Hallo !

Dann geht es jetzt erst mal mit den nächsten Routinen und ein paar bildlichen Erklärungen weiter. :wink:


Damit man im Service-Bereich die Key`s auch speichern und löschen kann, muss man vor dem Einlesen eines neuen RFID-Tag`s eine Speicherplatznummer eingeben.
Die Nummer des Speicherplatzes ergibt sich aus der Gruppenzugehörigkeit und der Schlüsselposition.
Insgesamt gibt es 4 Gruppen, denen jeweils eine Key-Nummer von 1 bis 9 zugewiesen werden kann.
Der erste Key hat demnach die Nummer 11 ........und der Letzte die Nummer 49.

Da die Routinen zur Eingabe der Gruppe und der Nummer immer wieder gleich benötigt werden, sind diese beiden "Funktionen" in jeweils einer eignen Subroutine untergebracht.
Die Subroutinen werden dann an den entsprechenden Stellen im Programm einfach aufgerufen.
Sub Gruppe: Bascom_Sub_Gruppe.gif


Sub Nummer: Bascom_Sub_Nummer.gif



Damit die Daten eines RFID-Transponders aber überhaupt an der richtigen Stelle im EEPROM abgelegt, oder auch wieder ausgelesen werden können, muss passend zur Speicherplatznummer (die eher dem Anwender eine Hilfe sein soll) noch der echte "Start-Platz" in der EEPROM-Tabelle ermittelt werden!
Diese Arbeit wird natürlich auch von einer separaten Subroutine übernommen..... der Tab_platz (Tabellen_platz).

Sub Tab_platz: Bascom_Sub_Tab-Platz.gif



Der Ablauf zum Speichern eines RFID-Tag`s könnte dann für den Anwender so aus sehen:
Servicemenue_Ablauf_speichern.jpg




....und das Löschen eines RFID-Key´s so:
Servicemenue_Ablauf_loeschen.jpg


Wer nun meint das müsste es ja bald gewesen sein, den muss ich leider enttäuschen. :wink:
Es fehlen jetzt noch gut 13 Routinen plus EEPROM-Tabelle, damit das Programm komplett ist. :cool:

Es gibt also noch einiges zu berichten.....
und das folgt dann hier auch bald.

Grüße,
Cassio
 
Hallo!

Weiter geht es mit den Subroutinen für das Programm.....


Wie im ersten Beitrag schon erwähnt wurde, werden vor dem Speichern eines neuen RFID-Transponders zwei Prüfungen ausgeführt!
Die erste Prüfung betrifft den Speicherplatz, der per Tastatur ausgewählt wurde.
Sollte der Speicherplatz bereits mit Daten belegt sein, erfolgt eine Warnmeldung.
Danach kann man entscheiden ob man den Speicherplatz überschreiben möchte, oder den gesamten Vorgang abricht.

Sollter der Speicherplatz frei sein, wartet das Programm auf den ermittelten RFID-Tag.
Gleich nach dem Einlesen der Daten erfolgt dann die wichtige zweite Prüfung!
Es wird sofort der gesamte Speicherbereich durchsucht und geprüft, ob der RFID-Tag schon einmal als Key gespeichert wurde.
Wenn dies der Fall sein sollte, wird die Speicherplatznummer angezeigt und das Programm bricht den Speichervrgang ab!
Nur wenn sich der RFID-Tag noch nicht im Speicher befindet, wird er an der angegebenen Position im EEPROM gespeichert.

Diese beiden Prüfungen werden natürlich von zwei einzelnen Subroutinen ausgeführt.

Sub Speicher_pruefen: Bascom_Sub_Speicher-prüfen.gif


Sub Doppel_pruefung: Bascom_Sub_Doppelprüfung.gif


Die Dopplerprüfung nutzt zum Beispiel auch beim Fund eines identischen RFID-Tag`s die Subroutine "Reverse_key", um den Speicherplatz zu ermitteln.

Sub Reverse_key: Bascom_Sub_Reverse-Key.gif


Zum eigentlichen Speichern des RFID-Tag`s im EEPROM wird eine eigene Routine verwendet:

Sub Key_sppeichern: Bascom_Sub_Key-speichern.gif



Damit sind wir nun auch dem vollständigen Programm einen guten Schritt weiter. :D
Fehlt jetzt nur noch die eigentliche "Zutrittskontrolle", die Zusatzfunktionen im Programm und der Rest. :wink:


Grüße,
Cassio
 
Hallo!

Auf geht es zum Endspurt. :wink:


Bis auf ein paar kleine Subroutinen ist das Programm ja eigentlich schon fertig.
Fehlt also nur noch das Prüfen eines RFID-Tag, wenn ein Transponder vor den Scanner gehalten wird.

Dies ist dann auch der normale Progammablauf bzw. genau das, was das Programm eigentlich permanent macht.
Es wartet auf die Daten vom ID20-Leser. :wink:
Wenn nun ein Transponder vor die Leseeinheit gehalten wird, werden die Daten sofort an den Controller geschickt.
Der bemerkt die eigehenden Daten und speichert diese ab.
Anschließend wird geprüft, ob der RFID-Tag als Key vorhanden ist.
Diese Aufgabe übernimmt wieder eine Subroutine:
Sub Gefunden: Bascom_Sub_Gefunden.gif

Wurde ein Key gefunden wird danach sofort geprüft, ob dieser Key auch Zutritt erhalten darf.
Es könnte ja sein, dass zum Zeitpunkt des Scans die Gruppen-Sperre aktiv war.
Die Zutrittsprüfung erfolgt dann wieder in einer "Unterroutine":
Sub Zutritt_pruefen: Bascom_Sub_Zutritt-prüfen.gif


Wenn alles in Ordnung ist, wird der Türöffner dann auch für 2 Sekunden bestromt und die Person kann die Tür öffnen.
Im anderen Fall bleibt die LED an der Außeneinheit rot..... und die Tür verschlossen. :cool:



Das ist aber noch nicht alles, was im Programm passiert! :wink:
Ich habe eine "Last-Visit" Funktion für die letzten 9 RFID-Tag`s im Programm integriert.
Aus dem Grunde wird bei JEDEM RFID-Tag, der vor die Leseeinheit gehalten wird, auch der Tag gespeichert!
Sub Last_visit: Bascom_Sub_Last-Visit.gif
Nach dem Speichern des RFID-Tag`s wird dann auch noch gleich geprüft, ob es sich um einen Key im Speicher handelte.
Wenn das der Fall sein sollte, wird die zugehörige Speicherplatznummer ebenfalls mit vermerkt und später auch mit angezeigt! ;)


Apropos Speicherplatz....
Wenn man wissen möchte, welcher RFID-Tag sich "hinter" einem bestimmten Speicherplatz verbirgt, habe ich dafür gleich noch eine weitere "Service-Routine" vorgesehen.
Sub Speicheranzeige: Bascom_Sub_Speicheranzeige.gif
Nach Eingabe der Gruppen- und Schlüsselnummer wird dann der gespeicherte RFID-Tag auf dem LCD angezeigt.



Damit aber noch nicht genug....
Es gibt noch eine weitere "Service-Routine".
Manchmal kann es ja ganz interessant sein, wenn man einen Transponder in der Hand hält, ob es ein 125kHz RFID-Transponder ist und welchen RFID-Tag dieser besitzt.
Genau dafür habe ich die RFID-Info Subroutine in das Programm mit eingebaut!
Es passiert also nichts weiter, außer das der RFID-Tag eingelesen und auf dem LCD zur Information angezeigt wird.
Sub Rfid-info: Bascom_Sub_RFID-Info.gif



Damit wären nun eigentlich alle Subroutinen vorgestellt, die direkt etwas mit dem Scannen und Verarbeiten der RFID-Tag`s zu tun haben.
Was nun noch fehlt sind die "globalen" Routinen wie z.B. für die Matrix-Tastatur, oder auch die EEPROM-Tabelle.


Grüße,
Cassio
 
Hallo !

Nun folgt also der letzte Beitrag zum Programm....

Wie im Beitrag zuvor schon geschrieben, fehlen jetzt nur noch ein paar wenige Subroutinen zum vollständigen Betrieb.
Zum Beispiel gibt es noch den TIMER1, der im Overflow-Modus arbeitet und alle 2 Sekunden eine ISR aufruft.
In dieser ISR wird lediglich eine Variable hochgezählt, die für das Nachleuchten der weißen LED`s benötigt wird.
Sub Timer_isr: Bascom_Sub_Timer-ISR.gif


Da ich zur Eingabe und Steuerung des Programms eine 4x4 Matrix-Tastatur verwende, die via I2C angebunden ist, wird bei jedem Tastendruck ein Interrupt-Signal ausgelöst.
Sobald also der externe Interrupt ausgelöst wird, verzweigt das Programm in die zugehörige ISR und ermittelt die Nummer der gedrückten Taste.
Sub Matrix_scan: Bascom_Sub_Matrix-Scan.gif
Damit auf dem LCD dann auch der richtige Wert der Taste erscheint (und nicht nur die Nummer der Taste), gibt es eine kleine Tabelle.
Diese Tabelle wird per LOOKUPSTR() noch innerhalb der ISR abgefragt und die Variable "KB" bekommt auch gleich den passenden Wert zugewiesen.
Zusätzlich wird noch eine zweite Variable "KBN" gefüllt.
In dieser Variablen steht dann der nummerische Wert als binäre Zahl.
Damit entfällt ein späteres Umwandeln im Programm, wenn man auf dem Display nicht nur eine "2" sehen, sondern auch die binäre 2 gleich weiter verarbeiten möchte. :wink:
Sub Matrix_wert: Bascom_Sub_Matrix-Wert.gif



Für Debugzwecke habe ich noch eine weitere Service-Routine eingebaut.....
die aber jetzt (nach Fertigstellung) aus Sicherheitsgründen deaktiviert ist. :cool:
Die Routine dient dazu, alle 512Bytes des EEPROM´s der Reihe nach auszulesen und per RS232 zum PC zu senden.
Sub Rs232: Bascom_Sub_RS232.gif


Nun fehlt nur noch die EEPROM-Tabelle, in der die RFID-Tag`s später als Key`s abgespeichert werden.
Diese Tabelle wird allerdings nur dann benötigt, wenn man vorher schon bekannte RFID-Tag`s fertig im EEPROM-Speicher ablegen möchte.
So erspart man sich das spätere erneute Einlesen jedes einzelnen RFID-Transponders an jeder weiteren Zutrittskontrolle. :wink:
EEPROM-Tabelle (Auszug): Bascom_EEPROM-Tabellenteil.gif


Nun ist es also vollbracht!
Das ist das ganze Programm! :D




Aktuell arbeite ich gerade an den Anpassungen für die Systeme A2 und I !
Die Programmierung ist aber inzwischen soweit abgeschlossen und das "alte" A2-System läuft nun auch schon mit der neuen Software. :cool:


Wenn nun jemand Interesse an dem Programme hat und selbst nicht alles (ab)schreiben möchte, der kann sich per PN an mich wenden.
Für eine kleine Spende gibt es dann auch das Programm als Datei. :D


Grüße,
Cassio
 
  • Like
Reaktionen: uwe-ftechnik

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)