Da mein Codeschloss an der Garage nicht mehr richtig funktioniere hab ich mich auf die Suche nach Ersatz gemacht.
Der Pollin Bausatz hat auf Anhieb funktioniert, nur das LCD hat eine Macke (mal sehen was Pollin dazu meint).
Da der Atiny 2313 etwas klein ist, musst ich auf das LCD aber eh verzichten. Viellicht tausche ich ihn noch aus, mal sehen.
Aus der mitgelieferten Software von Pollin und einem Beispiel von Hans_Hans (veröffentliche auf mikrocontroller.net) habe ich mir ein kleines Programm zusammen gestrickt, welches bis jetzt recht gut funktioniert.
Vor die Antenne habe ich noch einen Widerstand mit 100 Ohm geschaltet, jetzt erkennt er ohne Schwierigkeiten Karte und Schlüsselanhänger auf ca 5mm Entfernung durch 2mm Kunststoff hindurch. Müsste man noch etwas experimentieren, da sind bestimmt noch 2-3 mm mehr drin.
Anforderung:
10-20 Tak's sollen gespeichert werden
Mastertak zum einlernen der Schlüssel
Nach dem Einbau soll alles ohne PC funktionieren
Was haltet Ihr davon.
Der Pollin Bausatz hat auf Anhieb funktioniert, nur das LCD hat eine Macke (mal sehen was Pollin dazu meint).
Da der Atiny 2313 etwas klein ist, musst ich auf das LCD aber eh verzichten. Viellicht tausche ich ihn noch aus, mal sehen.
Aus der mitgelieferten Software von Pollin und einem Beispiel von Hans_Hans (veröffentliche auf mikrocontroller.net) habe ich mir ein kleines Programm zusammen gestrickt, welches bis jetzt recht gut funktioniert.
Vor die Antenne habe ich noch einen Widerstand mit 100 Ohm geschaltet, jetzt erkennt er ohne Schwierigkeiten Karte und Schlüsselanhänger auf ca 5mm Entfernung durch 2mm Kunststoff hindurch. Müsste man noch etwas experimentieren, da sind bestimmt noch 2-3 mm mehr drin.
Anforderung:
10-20 Tak's sollen gespeichert werden
Mastertak zum einlernen der Schlüssel
Nach dem Einbau soll alles ohne PC funktionieren
Was haltet Ihr davon.
Code:
'-------------------------------------------------------------------------------
' RFID_Türöffner
'für den Pollin-Electronic RFID-Bausatz, ArtNr:810059
'Quellen:
'www.mcselc.de Beispielcode für Em4095 geändert von
'Pollin Electronic auf den U02240B, gibts bei Pollin und
'dem 2 Kanal Türoffner von Hans-Hans veröffentlicht bei: http://www.mikrocontroller.net/topic/110714
'------------------------------------------------------------------------------------------------------------------
$regfile = "attiny2313.dat" ' Tiny 2313
$crystal = 8000000
$hwstack = 16
$swstack = 16
$framesize = 16
Dim Found As Byte
Dim Tags(5) As Byte '"Tags" als Array mit 5 Bytes definieren bytes
Dim Zaehler As Byte '"Zähler" als Byte definieren
Dim Hilf As Byte
Dim Modus As Byte
Dim Tag_sp(100) As Eram Byte At 10
Dim Pos As Byte
Dim Pos_start As Byte
Dim Letzter_tak As Byte
Dim Ok As Byte
Dim Merkerloesch As Byte
Dim Menue_reset As Byte
Config Portb = Output 'Port B als Ausgang definieren
Led Alias Portb.6
Relai Alias Portb.7
Taster1 Alias Pind.4
Taster2 Alias Pind.5
Taster3 Alias Pind.6
Config Hitag = 64 , Type = Em4095 , Demod = Pind.3 , Int = @int1 'konfiguriert den Timer und die Variablen für HITAG
Config Watchdog = 8192 'Timeout = 2 Sekunden
'Config Lcdpin = Pin , Rs = Portb.5 , E = Portb.4 , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 'konfiguriert die LCD-Belegung
'Config Lcd = 16 * 2 'konfiguriert die Displaygröße
_cfe Alias Portd.2 '_cfe wird dem Portd.2 zugewiesen
Config _cfe = Output '_cfe wird als Ausgand definiert
_cfe = 1 '_cfe wird high
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
For Zaehler = 1 To 5
Tags(zaehler) = 255 'leeren Tag erstellen FF:FF:FF:FF:FF
Next
Pos_start = 5 'Start adresse
Gosub Pruefen 'Tag Prüfen ob gespeichert im EEprom
Letzter_tak = Pos 'erste leere Pos für Gruppe 1 im EEprom
'Master Test
Pos_start = 0
Gosub Pruefen
If Found > 0 Then Modus = 1
' - - - - - - - - - - - - -
'Tags löschen, nur in verbindung mit MasterTak
If Taster1 = 1 And Taster2 = 1 Then Merkerloesch = 10 'alle Taks werden gelöscht
'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'Master überschreiben; falls aus siecherheitsgründen unerwünscht löschen oder auskomentieren
If Taster3 = 1 And Taster2 = 1 Then ' Tastenkombination für Master löschen
Start Watchdog
Bitwait Taster2 , Reset 'warten bis beide Taster wider 0
Bitwait Taster3 , Reset
Do
Set Led 'langsames Blinken als Info für Master soll überschrieben werden
Waitms 300
Reset Led
Wait 1
If Taster2 = 1 Then 'zur Sicherheit nochmals Taster2 abfragen
Modus = 0 ' in Modus 0 -> nächster Tak wird als Master gespeichert
Exit Do
Else
If Taster1 = 1 Or Taster3 = 1 Then 'Falsche Eingabe -> weiter ohne neuen Master
Exit Do
End If
End If
Loop
End If
Start Watchdog
' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'Main
Do
If Modus = 1 And Merkerloesch <> 10 Then Reset Watchdog
If Readhitag(tags(1)) = 1 Then ' INT1 wird enabled
Set Led 'LED Blitz
Waitms 20
Reset Led
If Modus = 0 Then 'wenn modus=0 dann Master in EEprom Schreiben
For Zaehler = 1 To 5
Tag_sp(zaehler) = Tags(zaehler)
Next
Modus = 1 'nach schreiben vom Maste in Modus 1 wechseln
End If
Pos_start = 0
Gosub Pruefen 'Tag Prüfen ob gespeichert im EEprom
End If
If Modus = 2 Or Modus = 0 Then Pulseout Portb , 6 , 800 'Led Blinken <<Or Modus > 3 Then
If Merkerloesch = 10 Then Set Led
Loop
' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Checkints: ' Unterroutine "Checkints:"
Call _checkhitag ' Eine ausgelagerte Unterroutine aufrufen
Return
' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Pruefen: ' Unterroutine "Senden"
Found = 128 '128 für Tag nicht im EEprom
For Pos = Pos_start To 110 Step 5
Ok = 1
For Zaehler = 1 To 5
Hilf = Pos + Zaehler
If Tag_sp(hilf ) <> Tags(zaehler) Then Ok = 0
Next
'Next Zaehler
If Ok = 1 Then
Found = Pos / 5
Exit For ' Exit For Pos
End If
Next ' Next Pos
If Found < 128 Then
If Modus > 0 Then
If Found = 0 Then 'Master erkannt
If Merkerloesch = 10 Then Goto Loeschen 'Wurde Löchen markirt, springt zum löschen der Tak's
Modus = 2 'Neuen Tak speichern
End If
End If
If Modus = 1 Then
If Found > 0 And Found < 22 Then
Set Relai ' Led 1 Ein (Tag ist aus Gruppe 1)
Found = 128 'wieder Löschen 128 für Tag nicht im EEprom
Wait 1 'Zeit für Türöffner
Reset Relai
Wait 3 'Verzögerung damit nicht 2 mal ausgelöst wird
End If
End If 'Tag nicht im EEprom
Else
If Modus = 2 Then
If Letzter_Tak > 110 Then Letzter_Tak = 110 ' 11 Transponder schon im EEprom
For Zaehler = 1 To 5
Incr Letzter_Tak
Tag_sp(Letzter_Tak) = Tags(zaehler) 'Neue Tag in EEprom schreiben
Next
End If
Modus = 1 'zurück in Modus 1
End If
Return 'Sprunganweisung in die Hauptschleife
'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Loeschen:
'löschen des EEprom ab 6 somit bleibt der Master erhalten
'muss ja noch vorhanden sein sonst hätte man ja nich löschen konnen
For Zaehler = 6 To 115
Tag_sp(zaehler) = 255 'alle Zellen mit FF beschreiben
Next
Reset Led 'Led löschen
Return 'estwas unsauber wird hier das Return von "Pruefen:" gegeben
'zur Erinnerung: Aufruf von "Loeschen:" mit "goto"
' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
End
'(
Es können 20 Tak's + 1nen MasterTak gespeichert werden
Nach den Einschalten wird überprüft ob schon ein Mastertransponder
im Eeprom vorhanden ist , wenn nicht wird der nächste Transponder
vor dem Leser als Master ins Eprom eingespeichert (Modus0).
Wenn ein Master vorhanden ist wird in
(Modus1) gewechselt = Normallesemodus
Vor der Main Schleife wir die Möglichkeit gegeben:
-> über "Taster 1 und 2" + MaterTak, alle Taks zu löschen
-> über "Taster 2 und 3" und anschliesend "Taster 2" den Master mit neuem Tak zu überschreiben
wer dies nicht möchte, kann es ja raus nehmen.
')