RFID-Alarmanlage
Bei Pollin gibt es einen RFID-Reader-Bausatz für
125-kHz-Transponder. Jeder Schlüssel meldet eine eindeutige
ID-Nummer, die es kein zweites mal auf der Welt gibt. Eine Spule sendet
ein 125-kHz-Signal und empfängt die Daten vom
Schlüssel. Bezugsquelle: www.pollin.de/shop/dt/MDQ5OTgxOTk-/Bausaetze_Module/Bausaetze/Bausatz_RFID_125kHz_Empfaenger.html
Die Spule wurde zusammen mit einer RGB-LED an der Tür
befestigt. Außerdem gibt es einen Magnetkontakt und eine
Sirene.
Auf der Platine arbeitet ein ATtiny2313. Das Beispielprogramm von
Pollin ist in Bascom geschrieben. Die Anpassung war einfach. Im
Programm steht nun der Schlüssel (Wert =
"F2010586D9") als Konstante. Wenn dieser Schlüssel ausgelesen
wird, wird die LED auf grün geschaltet und der Alarm
deaktiviert. Achtung, die Konstante wurde als
Vorsichtsmaßnahme gegen Einbrecher geändert. Wer die
Anlage nachbauen will, muss zuerst seinen eigenen Schlüssel
auslesen.
'-------------------------------------------------------------------------------
' Beispielprogramm für den Pollin-Electronic RFID-Bausatz, ArtNr:810059
' Es dient zum Auslesen einer HITAG RFID-Karte mittels eines Atmel U2270B.
' Âusschnitte des Codes wurden von der Beispielsoftware für den Em4095 von
' www.mcselec.de übernommen und für den U2270B abgeändert
' Als Controller wird ein AT-Tiny 2313 verwendet.
' Sie handeln auf eigene Gefahr!
' Bei diesen Daten handelt es sich um Beispielanwendungen die nicht für den produktiven
' Einsatz geacht sind.
' Pollin Electronic gibt keine Garantien irgendeiner Art , weder ausdrücklich
' noch implizit , einschließlich unbegrenzt aller Garantien der Verwendbarkeit
' dieser Daten für einen bezeichneten oder nicht bezeichneten Zweck.
' Pollin Electronic ist nicht haftbar für jedwede Folgeschäden die aufgrund
' der Benutzung dieser Daten entstehen. Dies gilt auch dann, wenn
' Pollin Electronic von der Möglichkeit eines solchen Schadens unterrichtet worden ist.
' Firma: Pollin-Electronic-GmbH
' Autor: Christian Schmailzl
' Anpassung: Fabian Kainka
'------------------------------------------------------------------------------------
$regfile = "2313def.dat" ' Controller : Tiny 2313
$baud = 9600 ' Übertragungsrate der UART-Schnittstelle
$crystal = 8000000 ' Taktfrequenz des Controllers
Dim Tags(5) As Byte '"Tags" als Array mit 5 Bytes definieren bytes
Dim Zaehler As Byte '"Zähler" als Byte definieren
Dim Wert As String * 5 '"Wert" als String mit 5 Hexwerten definieren
Config Portb = Output 'Port B als Ausgang definieren
Config Hitag = 64 , Type = Em4095 , Demod = Pind.3 , Int = @int1 'konfiguriert den Timer und die Variablen für HITAG
_cfe Alias Portd.2 '_cfe wird dem Portd.2 zugewiesen
Config _cfe = Output '_cfe wird als Ausgand definiert
_cfe = 1 '_cfe wird high
Config Debounce = 30 'Tastenentprellung = 30ms
On Int1 Checkints Nosave 'Int1 wird als Eingang für HITAG verwendet
Mcucr.isc10 = 1 ' entspricht: config INT1 = changing ( der Befehl wird vom MC unterstützt,
Mcucr.isc11 = 0 ' beim 2313 aber nicht von Bascom)
Enable Interrupts 'Enable all interrupts
' Set Portb.6 ' Led 1 einschalten
' Set Portb.7 ' Led 2 einschalten
Main:
' Portb.1 grüm
' Portb.3 blau
' Portb.4 rot
' ab hier beginnt das Hauptprogramm
Set Portb.0
Do
Set Portb.3 'rot ' Do-Schleife
If Readhitag(tags(1)) = 1 Then ' INT1 wird enabled
For Zaehler = 5 To 1 Step -1 ' For-Schleife beginnend von 5 nach 1; rückwärts zählend
Wert = Wert + Hex(tags(zaehler)) ' "Wert" = bestehender inhalt in der Variable + gerade gelesenen
' Tag an Position vom Zähler
Next
If Wert = "F2010586D9" Then
Set Portb.6
Reset Portb.3
Set Portb.1 'grün ' Ende For-Schleife
Reset Portb.0
Wait 10
Reset Portb.1
Set Portb.3
Set Portb.0
Else
Reset Portb.6
Set Portb.0
End If
Gosub Senden ' gehe zu Unterroutine
End If ' Ende der If-Abfrage
Debounce Pind.4 , 1 , Taste1 , Sub ' Taste 1 entprellen; wenn gerdückt, zur Unterroutine "Taste1" springen
Debounce Pind.5 , 1 , Taste2 , Sub ' Taste 2 entprellen; wenn gerdückt, zur Unterroutine "Taste2" springen
Debounce Pind.6 , 1 , Taste3 , Sub ' Taste 3 entprellen; wenn gerdückt, zur Unterroutine "Taste3" springen
Waitms 500 ' Warte 500 ms
Loop ' Sprunganweisung zum Anfang Do-Schleife
Taste2:
Return
Taste1: ' Unterroutine "Taste1"
If _cfe = 1 Then ' If-Abfrage
Print "ausgeschaltet" ' Text über UART ausgeben
_cfe = 0 ' _cfe auf low setzen -> Treiberstufen des U2270b abschalten
Bitwait Pind.4 , Reset ' Warte bis Pind.4 = low
Waitms 30 ' Warte 30ms ( Entprellung)
Bitwait Pind.4 , Set 'Warte bis Pind.4 = high
Print "eingeschaltet" ' Text über UART ausgeben
_cfe = 1 ' _cfe auf high setzen -> Treiberstufen des U2270b einschalten
Gosub Main ' Sprunganweisung zum Anfang der Hauptschleife
End If ' Ende der If-Anweisung
Return ' Sprunganweisung in die Hauptschleife
Taste3: ' Unterroutine "Taste3"
Toggle Portb.7 ' Led 2 Zustand wechseln
Wert = "T3" ' Wert = "T3"
Gosub Senden ' Sprungbefehl zur Unterroutine "Senden"
Bitwait Pind.6 , Reset ' Led 2 Zustand wechseln
Return ' Sprunganweisung in die Hauptschleife
Checkints: ' Unterroutine "Checkints:"
Call _checkhitag ' Eine ausgelagerte Unterroutine aufrufen
Return ' Sprunganweisung in die Hauptschleife
Senden: ' Unterroutine "Senden"
Print Wert ' Variable "Wert" über Uart ausgeben
Wert = "" ' Inhalt von Variable "Wert" = ""
Return 'Sprunganweisung in die Hauptschleife
End
Elektronik-Labor Projekte AVR