RFID Türoffner mit Pollin Bausatz

adelinde

Mitglied
21. Feb. 2009
60
3
8
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.

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.


')
 
Hallo Dino,

danke für den Tip,
muss mir bei Gelegenheit das nochmal genauer ansehen.
Meine 5 mm sind aber auch schon ganz OK

Gruß Siggi
 

Ü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)