RFID Garagentoröffner für 6 Garagen

Dieses Thema im Forum "AVR-Projekte" wurde erstellt von berfroid, 27. Oktober 2012.

  1. berfroid

    berfroid Mitglied

    Registriert seit:
    15. August 2012
    Beiträge:
    41
    Zustimmungen:
    1
    Punkte für Erfolge:
    6
    Ich möchte sechs einzelne Garagen mittels Transponder von einer zentralen Stelle aus öffnen. Abhängig vom jeweiligen Transponder soll die passende Garage öffnen.
    Basis des ganzen ist Cassios Türöffnersystem A1

    Der Weg bis hier kann an dieser Stelle verfolgt werden.

    Hier im Thread soll erstmal alles dazu gesammelt werden. Wenn alles funktioniert, wird das Projekt im Ganzen dokumentiert.
     
  2. Cassio

    Cassio Aktives Mitglied

    Registriert seit:
    29. Oktober 2008
    Beiträge:
    4.027
    Zustimmungen:
    17
    Punkte für Erfolge:
    38
    Sprachen:
    BascomAVR
    Hallo Berfroid!

    Dann geht es hier also nun los, mit dem Controllersystem zu deiner zentralen Garagentorsteuerung. :hello:

    Das "Basis-System" hast du ja schon zu meinem Beitrag verlinkt und darum muss ich dazu auch nichts mehr schreiben. :wink:
    Ich habe mir also mal ein paar Gedanken gemacht, wie deine Schlüsselverwaltung mit der Datentabelle in "Einklang" gebracht werden kann.

    Da du ja nun gern sechs Schlüssel-Gruppen mit jeweils sieben RFID-Key`s verwenden möchtest, muss die "Basis" natürlich etwas umgeschrieben werden.
    Momentan habe ich das Ganze so gelöst, dass die komplette Schlüsselnummer (z.B. 11 oder 57) lediglich so umgerechnet wird, dass am Ende eine durchgehende Byte-Tabelle im EEPROM angesprochen werden kann.

    Dies ist bei deiner Anzahl an RFID-Key`s auch gar nicht anders möglich, denn schließlich hast du 6 Gruppen x 7 Schlüssel = 42 RFID-Key`s.
    Jeder RFID-Key verwendet aktuell 12Bytes im EEPROM, was bei 42 Key`s dann 504Byte (von 512Byte im Mega8) sind.


    Damit du also später sechs Gruppen verwenden kannst, muss die Sub "Gruppe" entsprechend geändert werden:
    Code:
    Gruppe:
    Locate 1 , 1 : Lcd "Gruppe (1-6):   "
    Locate 2 , 1 : Lcd "                "
    Waitms 250
    While _key_scan > 0                                         'Keine Teste mehr gedrückt? Sonst warten!
    NOP
    Wend
    
    Waitms 100
    
    '--------------------------
    While _key_scan = 0                                         'Warten bis eine Taste gedrückt wurde
    NOP
    Wend
    
    Rfid_gruppe = Kbn
    
    
    Select Case Rfid_gruppe
       Case 1 To 6
          Locate 2 , 1 : Lcd Rfid_gruppe
          Locate 2 , 2 : Lcd ".Gruppe, OK!   "
          Waitms 500
             While _key_scan > 0                                'Keine Teste mehr gedrückt? Sonst warten!
             NOP
             Wend
       Case Else
          Locate 2 , 1 : Lcd "  ---FEHLER---  "
          Waitms 500
          Goto Gruppe
    End Select
    
    
    While _key_scan > 0                                         'Keine Teste mehr gedrückt? Sonst warten!
    NOP
    Wend
    
    
    Return
    

    Dann folgt noch die Änderung in der Sub für die sieben Schlüssel einer Gruppe:
    Code:
    Nummer:
    
    Locate 1 , 1 : Lcd "Key-Nummer (1-7)"
    Locate 2 , 1 : Lcd "                "
    Waitms 250
    While _key_scan > 0                                         'Keine Teste mehr gedrückt? Sonst warten!
    NOP
    Wend
    
    Waitms 100
    While _key_scan = 0                                         'Warten bis eine Taste gedrückt wurde
    NOP
    Wend
    
    Key_nummer = Kbn
    
    
    Select Case Key_nummer
       Case 1 To 7
          Locate 2 , 1 : Lcd Key_nummer
          Locate 2 , 2 : Lcd ".Key-Nummer,OK!"
          Waitms 500
             While _key_scan > 0                                'Keine Teste mehr gedrückt? Sonst warten!
             NOP
             Wend
       Case Else
          Locate 2 , 1 : Lcd "  ---FEHLER---  "
          Waitms 500
          Goto Nummer
    End Select
    
    
    While _key_scan > 0                                         'Keine Teste mehr gedrückt? Sonst warten!
    NOP
    Wend
    
    
    
    Return
    


    Damit passend zu den neuen Schlüsselnummern auch die Tabellenplätze errechnet werden können, muss die Sub "Tab_platz" um einige Zeilen erweitert werden:
    Code:
    Tab_platz:
    
    Select Case Rfid_schluessel
       Case 11 To 17
          Tab_nr = Rfid_schluessel - 11
       Case 21 To 27
          Tab_nr = Rfid_schluessel - 14
       Case 31 To 37
          Tab_nr = Rfid_schluessel - 17
       Case 41 To 47
          Tab_nr = Rfid_schluessel - 20
       Case 51 To 57
          Tab_nr = Rfid_schluessel - 23
       Case 61 To 67
          Tab_nr = Rfid_schluessel - 26
    End Select
    
    Tab_nr = Tab_nr * 12
    
    Return
    


    Nun werden die einzelnen Bytes eines RFID-Key`s schon in die passenden Speicherbereiche des EEPROM`s abgelegt.
    Allerdings benötigt das System an einigen Stellen das genaue Gegenteil.....
    Sobald ein RFID-Tag eingelesen wurde wird geprüft, ob es diesen Tag schon als Key im Speicher gibt.
    Diese Aufgabe erledigt eine Subroutine, die natürlich auch noch angepasst werden muss, damit hinterher auch wieder die richtige Schlüsselnummer mit Gruppe und Schlüssel angezeigt wird. :wink:
    Die neue Sub muss also wieder um einige Zeilen ergänzt werden und sieht dann so aus:
    Code:
    Reverse_key:
    Finder = 0
    Finder_pos = 0
    Ie = 1
    Tab_nr = 0
    Old_fund = 0
    
    While Tab_nr < 468
    
    Readeeprom Lrfid(ie) , Tab_nr
    
    If Lrfid(ie) = Rfid0(ie) Then
       Finder_pos = Tab_nr
       Incr Ie
       Incr Finder
       Incr Tab_nr
       Old_fund = 1
    Else
       If Old_fund = 1 Then
          Tab_nr = Finder_pos
          Tab_nr = Tab_nr - Finder
          Tab_nr = Tab_nr + 13
          Old_fund = 0
          Finder = 0
          Ie = 1
       Else
          Tab_nr = Tab_nr + 12
       End If
    End If
    
    
    If Finder = 12 Then
       Finder_pos = Finder_pos - 11
       Finder_pos = Finder_pos / 12
    
    Select Case Finder_pos
       Case 0 To 6                                              '11-17
          Rfid_schluessel = Finder_pos + 11
       Case 7 To 13                                             '21-27
          Rfid_schluessel = Finder_pos + 14
       Case 14 To 20                                            '31-37
          Rfid_schluessel = Finder_pos + 17
       Case 21 To 27                                            '41-47
          Rfid_schluessel = Finder_pos + 20
       Case 28 To 34                                            '51-57
          Rfid_schluessel = Finder_pos + 23
       Case 35 To 41                                            '61-67
          Rfid_schluessel = Finder_pos + 26
    End Select
    
       Exit While
    End If
    
    
    Wend
    
    Return
    


    Zu guter Letzt kann man die EEPROM-Tabelle noch etwas anpassen, die sich ganz am Ende des Programms befindet.
    Die Anpassung ist aber nicht zwingend notwendig und dient nur der besseren Übersicht. :cool:
    Code:
    $eeprom
    
    'Rfid_data:
    ' ---------------------------------------------------
    'Key 11-17
    '0
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '12
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '24
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '36
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '48
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '60
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '72
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    
    'Key 21-27
    '84
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '96
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '108
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '120
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '132
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '144
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '156
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    
    'Key 31-37
    '168
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '180
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '192
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '204
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '216
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '228
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '240
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    
    'Key 41-47
    '252
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '264
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '276
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '288
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '300
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '312
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '324
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    
    'Key 51-57
    '336
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '348
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '360
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '372
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '384
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '396
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '408
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    
    'Key 61-67
    '420
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '432
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '444
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '456
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '468
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '480
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    '492
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    
    'freier Restspeicher im EEPROM
    '504-511
    Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
    
    $data
    

    Abschließend muss ich nun noch sagen, dass ich alle Programmänderungen NICHT geprüft habe!
    Den ersten Beta-Test musst du also selbst durchführen. :D


    Nun ist für mich aktuell nur noch die Frage offen, wie du die sechs Garagenausgänge realisieren möchtest? :hmmmm:
    Wie ich schon einmal erwähnt habe, würde ich das persönlich per TWI mit einer zusätzlichen PCF8574-Platine machen. :wink:


    Grüße,
    Cassio
     
  3. berfroid

    berfroid Mitglied

    Registriert seit:
    15. August 2012
    Beiträge:
    41
    Zustimmungen:
    1
    Punkte für Erfolge:
    6
    Guten Morgen,

    die Codeschnipsel sind übernommen und getestet. Allerdings wurden die Keys 65-67 nicht erkannt. Nachdem ich

    Code:
    While Tab_nr < 468
    auf 504 geändert habe funktionierte es.

    Muss mal gucken wieviele Ausgänge ich zur Verfügung habe. Wenn sie ausreichen, baue ich keinen zusätzlichen PCF8574 ein.

    Eine Bitte habe ich:

    Kann mir mal bitte jemand den Abschnitt hier erläutern, denn wirklich verstehen tue ich das nicht :)

    Code:
    Readeeprom Lrfid(ie) , Tab_nr
    
    If Lrfid(ie) = Rfid0(ie) Then
       Finder_pos = Tab_nr
       Incr Ie
       Incr Finder
       Incr Tab_nr
       Old_fund = 1
    Else
       If Old_fund = 1 Then
          Tab_nr = Finder_pos
          Tab_nr = Tab_nr - Finder
          Tab_nr = Tab_nr + 13
          Old_fund = 0
          Finder = 0
          Ie = 1
       Else
          Tab_nr = Tab_nr + 12
       End If
    End If
    
    
    If Finder = 12 Then
       Finder_pos = Finder_pos - 11
       Finder_pos = Finder_pos / 12
    
    Select Case Finder_pos
       Case 0 To 6                                              '11-17
          Rfid_schluessel = Finder_pos + 11
       Case 7 To 13                                             '21-27
          Rfid_schluessel = Finder_pos + 14
       Case 14 To 20                                            '31-37
          Rfid_schluessel = Finder_pos + 17
       Case 21 To 27                                            '41-47
          Rfid_schluessel = Finder_pos + 20
       Case 28 To 34                                            '51-57
          Rfid_schluessel = Finder_pos + 23
       Case 35 To 41                                            '61-67
          Rfid_schluessel = Finder_pos + 26
    End Select
    Warum +11, +14, +17 usw?
     
  4. Cassio

    Cassio Aktives Mitglied

    Registriert seit:
    29. Oktober 2008
    Beiträge:
    4.027
    Zustimmungen:
    17
    Punkte für Erfolge:
    38
    Sprachen:
    BascomAVR

    Hallo Berfroid!

    Ja natürlich, ich Trottel! :banghead:
    Das hatte ich doch glatt übersehen! :cool:

    Es muss ja nun auch das EEPROM bis zum 504. Byte "gescannt" werden..... und nicht nur bis zum 468. Byte! :wink:



    Die "Reverse_Key"-Routine kann ich dir ja später noch mal genauer erläutern........
    jetzt aber nur erst mal soviel:

    Das +14 und +17 und so weiter kommt daher, weil du immer nur Schlüssel von 1 bis 7 hast.
    Es fehlt also 8, 9 und 0 !
    Bei der Berechnung des Schlüssels vom Tabellenplatz müssen diese drei Werte aber rechnerisch mit berücksichtigt werden. :wink:


    Grüße,
    Cassio
     
  5. Cassio

    Cassio Aktives Mitglied

    Registriert seit:
    29. Oktober 2008
    Beiträge:
    4.027
    Zustimmungen:
    17
    Punkte für Erfolge:
    38
    Sprachen:
    BascomAVR
    Hallo Berfroid!

    Nun noch kurz zum Prinzip der Reverse_Key-Routine.

    Wie schon bekannt, benötigt jeder RFID-Key 12 Byte im EEPROM.
    Die einzelnen Key`s werden dort auch einfach nur der Reihe nach abgelegt.

    Speicherplatz 00d bis 11d ist also Key mit Nummer 11 (1.Gruppe, 1.Schlüssel).
    Speicherplatz 12d bis 23d ist demnach Key mit Nummer 12!
    Das Ganze geht so weiter, bis zum Key mit der Nummer 67!


    In der Reverse_Key-Routine müssen nun aber nicht die Daten eines RFID-Tag`s im Speicher abgelegt werden, sondern es liegen ja schon die kompletten Daten eines RFID-Tag`s vor.
    Diese Daten müssen nun also mit allen abgespeicherten Key`s verglichen werden.

    In der Subroutine passiert also folgendes:
    Es wird der gesamte Speicher im EEPROM durchsucht.
    Da jeder Key aus 12 Bytes besteht, wird immer nur jedes zwölfte Byte mit dem ersten Byte des RFID-Tags verglichen.
    Sobald es hier eine Übereinstimmung gibt, geht das Programm nur noch in einzelnen Byte-Schritten weiter und vergleicht die Daten.

    Sobald eine Position der Daten nicht übereinstimmt, wird wieder mit dem ersten Byte des RFID-Tags begonnen und gleichzeitigt die nächste "erste" Position eines Key`s im EEPROM errechnet..... und die Suche geht weiter. :wink:

    Sobald aber alle zwölf Bytes übereinstimmen wird die Suche abgebrochen und aus den Daten des Tabellenplatzes nun noch die Schlüsselnummer errechnet.
    Fertig!

    So einfach ist das. :wink:


    Grüße,
    Cassio
     
  6. dino03

    dino03 Aktives Mitglied

    Registriert seit:
    27. Oktober 2008
    Beiträge:
    6.697
    Zustimmungen:
    14
    Punkte für Erfolge:
    38
    Sprachen:
    BascomAVR, Assembler
    Hi Cassio,

    da gibts Optimierungsmöglichkeiten.

    Da ja meißt bei der Herstellung fortlaufende Nummern der Keys erzeugt werden würde ich beim hintersten Byte des Keys anfangen. Das sollte dann weniger Vergleichsoperationen ergeben.

    Gruß
    Dino
     
  7. Cassio

    Cassio Aktives Mitglied

    Registriert seit:
    29. Oktober 2008
    Beiträge:
    4.027
    Zustimmungen:
    17
    Punkte für Erfolge:
    38
    Sprachen:
    BascomAVR

    Hallo Dino!

    Stimmt!
    Das könnte man natürlich auch machen.
    Gerade wenn man viele Transponder von einem Hersteller hat. :wink:

    Letztlich wird der Geschwindigkeitsunterschied für einen Menschen aber kaum spürbar sein. :cool:


    Grüße,
    Cassio
     
  8. berfroid

    berfroid Mitglied

    Registriert seit:
    15. August 2012
    Beiträge:
    41
    Zustimmungen:
    1
    Punkte für Erfolge:
    6
    Will nur mal kurzes Lebenszeichen abgeben.
    Die Platine ist inzwischen fertig und im Testbetrieb auf meinem Schreibtisch. Ich bin nur bisher noch nicht dazu gekommen alles in schön aufzuarbeiten und hier zu posten. Kommt aber noch ;)
     
  9. Cassio

    Cassio Aktives Mitglied

    Registriert seit:
    29. Oktober 2008
    Beiträge:
    4.027
    Zustimmungen:
    17
    Punkte für Erfolge:
    38
    Sprachen:
    BascomAVR
    Hallo!

    Na, dass ist aber mal etwas nettes.......
    so eine Zwinscheninfo zum Projektstand.

    Dann mal weiterhin gutes Gelingen! :)
    Freue mich schon auf die Bilder, Schaltplan und Programmauszüge.


    Grüße,
    Cassio
     
  10. berfroid

    berfroid Mitglied

    Registriert seit:
    15. August 2012
    Beiträge:
    41
    Zustimmungen:
    1
    Punkte für Erfolge:
    6
    Soo, dann will ich mich jetzt mal ordentlich schämen. Im November hab ich mir fest vorgenommen, mein Versprechen in der besinnlichen Weihnachtszeit einzulösen. Und urplötzlich ist der Januar fast rum. Ihr wisst ja sicher wie das ist. Die Steuerung ist nun seit ein paar Tagen *hust* im Einsatz und funktioniert auch ganz gut. Lediglich ab und zu gibt es mal einen Hänger, der einen Reset braucht. Ich hatte zum Glück noch Reservedrähte an der Antenne :)
    Mal ne Frage an Cassio: In Deinen Schaltplänen hast Du als Beschaltung des LM2574N jeweils 470µF Elkos eingezeichnet. Im Datenblatt sind es aber 220 und 100µF. Kann es sein, dass meine Elkos zu klein gewählt sind und es durch dadurch zu gelegentlichen Hängern kommt, oder muss ich die Lötstellen nochmal kontrollieren? Spannungsquelle ist übrigens ein Siedle Netzteil.

    Zuerst mal ein Bild der fertigen Platine:
    2013-01-28 20.07.10.jpg

    Als µC hatte ich noch einen Mega8515 übrig. Unten sind die Anschlüsse für die 6 Garagenkontakte mit den Relais zu sehen. Ich hatte noch Relais mit 500Ohm Spulenwiderstand und dachte ich probier mal, ob das hinhaut die ohne Transistoren direkt an die Ausgänge zu verbinden. Bei nem Strom von knapp 10mA sollte es ja eigentlich kein Problem sein. Eine Löschdiode haben die Teile intern.

    Rechts das weisse ist die Buchse für die Serviceeinheit, darunter der ISP. Für eventuelle Erweiterungen habe ich noch Ein-/Ausgänge aus Klemmleisten gelegt.

    Der Schaltplan:
    Garagen.jpg

    Der Code:
    Cassios Code von weiter oben im Thread funktioniert ja schonmal ganz gut zum lesen und schreiben der Schlüssel. Aber es sollen sich ja Garagentor bewegen. Also habe ich noch die folgenden Änderunge bzw. Ergänzungen eingefügt:

    Code:
    Dim Zutritt As Byte                                         'Zutritt dient als Config-Byte
    Zutritt = &H00
    '(
    Zutritt.0=--frei--
    Zutritt.1=--frei--
    Zutritt.2=wenn 1, dann öffnet Tor 1
    Zutritt.3=wenn 1, dann öffnet Tor 2
    Zutritt.4=wenn 1, dann öffnet Tor 3
    Zutritt.5=wenn 1, dann öffnet Tor 4
    Zutritt.6=wenn 1, dann öffnet Tor 5
    Zutritt.7=wenn 1, dann öffnet Tor 6
    
    ')
    
    Dim Toeffzeit As Byte                                  'Wartezeit zur Türöffnung
    Toeffzeit = 2                                               'Öffnungszeit in Sekunden
    
    'Aliasnamen
    Tuer Alias Pinb.0                                          'Rückmeldekontakt des Türöffners
    Sonderfg Alias Pinc.5                                    'Taster für Umkehr Tor1 <-> Tor6
    
    Tor1 Alias Portb.0                                          'Ausgang für den Türöffner Tor1
    Tor2 Alias Portb.1                                          'Ausgang für den Türöffner Tor2
    Tor3 Alias Portb.2                                          'Ausgang für den Türöffner Tor3
    Tor4 Alias Portd.5                                          'Ausgang für den Türöffner Tor4
    Tor5 Alias Portd.6                                          'Ausgang für den Türöffner Tor5
    Tor6 Alias Portd.7                                          'Ausgang für den Türöffner Tor6
    
    Der Taster für die Umkehr von Tor 1 und 6 wird benötigt, weil die Schlüssel der Gruppen 1 und 6 beide jeweils eins der Tor öffnen soll.

    In der Arbeitsschleife wird die Variable Zutritt abgefragt und das dazugehörende Tor geöffnet

    Code:
    If Zutritt.2 = 1 And Sonderfg = 1 Then                      'Key Grp 1 gefunden, Kein Taster gedr¸ckt
       Duoled = 1
       Tor1 = 1                                                 'Tor 1 ˆffnen
       Wait Toeffzeit
       Zutritt.2 = 0
       Duoled = 0
       Tor1 = 0
       Gosub Sys_start
    
    Elseif Zutritt.2 = 1 And Sonderfg = 0 Then                  'Key Grp 1 gefunden, Taster ist gedr¸ckt
       Duoled = 1
       Tor6 = 1                                                 'Tor 6 ˆffnen
       Wait Toeffzeit
       Zutritt.2 = 0
       Duoled = 0
       Tor6 = 0
       Gosub Sys_start
    
    Elseif Zutritt.3 = 1 Then
       Duoled = 1
       Tor2 = 1
       Wait Toeffzeit
       Zutritt.3 = 0
       Duoled = 0
       Tor2 = 0
       Gosub Sys_start
    
    Elseif Zutritt.4 = 1 Then
       Duoled = 1
       Tor3 = 1
       Wait Toeffzeit
       Zutritt.4 = 0
       Duoled = 0
       Tor3 = 0
       Gosub Sys_start
    
    Elseif Zutritt.5 = 1 Then
       Duoled = 1
       'Buzzer = 1
       Tor4 = 1
       Wait Toeffzeit
       Zutritt.5 = 0
       Duoled = 0
       'Buzzer = 0
       Tor4 = 0
       Gosub Sys_start
    
    Elseif Zutritt.6 = 1 Then
       Duoled = 1
       Tor5 = 1
       Wait Toeffzeit
       Zutritt.6 = 0
       Duoled = 0
       Tor5 = 0
       Gosub Sys_start
    
    Elseif Zutritt.7 = 1 And Sonderfg = 1 Then
       Duoled = 1
       Tor6 = 1
       Wait Toeffzeit
       Zutritt.7 = 0
       Duoled = 0
       Tor6 = 0
       Gosub Sys_start
    
    Elseif Zutritt.7 = 1 And Sonderfg = 0 Then
       Duoled = 1
       Tor1 = 1
       Wait Toeffzeit
       Zutritt.7 = 0
       Duoled = 0
       Tor1 = 0
       Gosub Sys_start
    
    Das SUB Zutritt prüfen:

    Code:
    Zutritt_pruefen:
    
    If Zutritt.7 = 1 And Sonderfg = 1 Then
       'Zutritt.1 = 1
       Locate 1 , 1 : Lcd "Key gefunden:" ; Rfid_schluessel
       Locate 2 , 1 : Lcd "Zutritt Tor 6!  "
    '      Led_ws = 0
    '      Timer1 = Timer_ladewert : Start Timer1
    Elseif Zutritt.7 = 1 And Sonderfg = 0 Then
       'Zutritt.1 = 1
       Locate 1 , 1 : Lcd "Key: " ; Rfid_schluessel ; " + Taste"
       Locate 2 , 1 : Lcd "Zutritt Tor 1!  "
    Elseif Zutritt.6 = 1 Then
       'Zutritt.1 = 1
       Locate 1 , 1 : Lcd "Key gefunden:" ; Rfid_schluessel
       Locate 2 , 1 : Lcd "Zutritt Tor 5!  "
    '      Led_ws = 0
    '      Timer1 = Timer_ladewert : Start Timer1
    Elseif Zutritt.5 = 1 Then
       'Zutritt.1 = 1
       Locate 1 , 1 : Lcd "Key gefunden:" ; Rfid_schluessel
       Locate 2 , 1 : Lcd "Zutritt Tor 4!  "
    '      Led_ws = 0
    '      Timer1 = Timer_ladewert : Start Timer1
    Elseif Zutritt.4 = 1 Then
       'Zutritt.1 = 1
       Locate 1 , 1 : Lcd "Key gefunden:" ; Rfid_schluessel
       Locate 2 , 1 : Lcd "Zutritt Tor 3!  "
    '      Led_ws = 0
    '      Timer1 = Timer_ladewert : Start Timer1
    Elseif Zutritt.3 = 1 Then
       'Zutritt.1 = 1
       Locate 1 , 1 : Lcd "Key gefunden:" ; Rfid_schluessel
       Locate 2 , 1 : Lcd "Zutritt Tor 2!  "
    '      Led_ws = 0
    '      Timer1 = Timer_ladewert : Start Timer1
    Elseif Zutritt.2 = 1 And Sonderfg = 1 Then
       'Zutritt.1 = 1
       Locate 1 , 1 : Lcd "Key gefunden:" ; Rfid_schluessel
       Locate 2 , 1 : Lcd "Zutritt Tor 1!  "
    Elseif Zutritt.2 = 1 And Sonderfg = 0 Then
       'Zutritt.1 = 1
       Locate 1 , 1 : Lcd "Key: " ; Rfid_schluessel ; " + Taste"
       Locate 2 , 1 : Lcd "Zutritt Tor 6!  "
    
    '      Led_ws = 0
    '      Timer1 = Timer_ladewert : Start Timer1
    End If
    
    Return
    
    Das war es jetzt erstmal. Wenn jemand Fehler sieht, immer nur drauf hinweisen.

    An dieser Stelle nochmal 1000 Danke an Cassio für seine Hilfestellung. Ohne Dich hätte ich das nicht hinbekommen!

    EDIT: Könnte mal bitte einer der Mods das kleine Bild da unten (Miniaturansicht) entfernen? Das war ein falsches und ich bekomme es nicht gelöscht
     
  11. dino03

    dino03 Aktives Mitglied

    Registriert seit:
    27. Oktober 2008
    Beiträge:
    6.697
    Zustimmungen:
    14
    Punkte für Erfolge:
    38
    Sprachen:
    BascomAVR, Assembler
    Hi,

    Och ... da bin ich glaub ich drüber :eek: So 2 Jahre Verzug hab ich wohl schon :p :rolleyes:
    Ich weiß genau wie das ist. :flute: Aber bei mir gehts grade auch mal wieder weiter :cool:

    Gruß
    Dino
     
  12. Cassio

    Cassio Aktives Mitglied

    Registriert seit:
    29. Oktober 2008
    Beiträge:
    4.027
    Zustimmungen:
    17
    Punkte für Erfolge:
    38
    Sprachen:
    BascomAVR
    Hallo Berfroid!

    Na, das ist ja eine Überraschung! :)

    Ich hatte ja schon gar nicht mehr damit gerechnet, dass du dein Projekt hier auch noch schriftlich abschließen würdest. :hmmmm:
    Aus dem Grunde freut es mich um so mehr, dass du dein Versprechen nun doch noch wahr gemacht hast.


    Warum musst du den AVR denn zwischendurch mal resetten?
    Bist du sicher, dass es von der Spannungsversorgung kommt?
    Ich würde da erst einmal die Software in Verdacht haben.
    Nicht das da ein Speicherbereich voll- oder überläuft. :hmmmm:


    Der Elko am LM2574 passt schon.
    Ich rechne immer mit der Faustformel:
    1000µF je Ampere
    Bei max 500mA sind es bei mir dann 470µF..... oder je nach erwarteter Belastung. :wink:



    Ach so, deinen Anhang kannst du auch selber entfernen.....
    Du musst nur den Beitrag editieren,
    dann auf "Erweitert" klicken,
    danach auf die "Büroklammer" für die Anhänge klicken und dann
    nur noch die Maus auf das Bild halten, welches entfernt werden soll.
    Oben rechts erscheint dann ein kleines "Kreuz", mit dem du das Bild löschen kannst (siehe Anhang).
    Anhang_loeschen.gif


    Grüße,
    Cassio
     
  13. berfroid

    berfroid Mitglied

    Registriert seit:
    15. August 2012
    Beiträge:
    41
    Zustimmungen:
    1
    Punkte für Erfolge:
    6
    Da würde mich mein Gewissen zerfressen ;)


    Dochdoch, normal halte ich was ich verspreche. Wie heisst es so schön?
    "Liebe Frauen, wenn ein Mann sagt er repariert das, dann repariert er das. Man muss ihn nicht alle 6 Monate daran erinnern".

    Manchmal brauche ich nur etwas länger ;)

    Wenn ich das nur wüsste. Die Spannungsversorgung ist mal einfach ins Blaue geraten. Von Software habe ich doch noch weniger Ahnung als von Hardware :/
    Es ist jetzt aber auch nicht sooo störend. Wenns täglich wäre, wäre es doof. So kommt es grob geschätzt vielleicht 1x pro Woche vor.
     
  14. Cassio

    Cassio Aktives Mitglied

    Registriert seit:
    29. Oktober 2008
    Beiträge:
    4.027
    Zustimmungen:
    17
    Punkte für Erfolge:
    38
    Sprachen:
    BascomAVR
    Hallo Berfroid!


    Ist auch schon nervig.
    Was ist denn, wenn du plötzlich mal zwei Wochen verreist bist? :hmmmm:

    Irgendwas kann da nicht stimmen.
    Ich würde jetzt mal aus dem Bauch heraus an einen falschen Speicherzugriff denken.

    Wie hoch sind denn deine Stack- und Frame-Werte?


    Grüße,
    Cassio
     
  15. berfroid

    berfroid Mitglied

    Registriert seit:
    15. August 2012
    Beiträge:
    41
    Zustimmungen:
    1
    Punkte für Erfolge:
    6
    Verreisen ist kein Problem. Der Resettaster befindet sich verdeckt bei der Antenne.

    Stack und Frame sind jeweils bei 64
     
  16. Cassio

    Cassio Aktives Mitglied

    Registriert seit:
    29. Oktober 2008
    Beiträge:
    4.027
    Zustimmungen:
    17
    Punkte für Erfolge:
    38
    Sprachen:
    BascomAVR
    Hallo Berfroid!

    Hm, könnte vielleicht bei deiner Variante ein wenig knapp werden.

    Du kannst ja erst mal die Frame-Size erhöhen.
    Jenachdem wieviel Speicher du noch frei hast auf 96 oder 128.


    Es könnte aber auch innerhalb des Programmes liegen.....
    Dafür müsste ich aber dein ganze Programm erst durcharbeiten.

    Probiere es erst mal mit dem Erhöhen von Framesize und ggf. Stackwerten.


    Grüße,
    Cassio
     
  17. berfroid

    berfroid Mitglied

    Registriert seit:
    15. August 2012
    Beiträge:
    41
    Zustimmungen:
    1
    Punkte für Erfolge:
    6
    Ok, probiere ich. Ein Ergebnis kann aber etwas dauern, da es ja nicht sooo oft vorkommt. Danke Dir.
     
  18. Cassio

    Cassio Aktives Mitglied

    Registriert seit:
    29. Oktober 2008
    Beiträge:
    4.027
    Zustimmungen:
    17
    Punkte für Erfolge:
    38
    Sprachen:
    BascomAVR
    Hallo Berfroid!

    Nun ja.....
    hoffen wir mal, dass es danach gar nicht mehr vorkommt. :D

    Wäre aber trotzdem schön, wenn es dann irgendwann mal einen Hinweis dazu von dir geben würde. :wink:


    Grüße,
    Cassio
     
  19. berfroid

    berfroid Mitglied

    Registriert seit:
    15. August 2012
    Beiträge:
    41
    Zustimmungen:
    1
    Punkte für Erfolge:
    6
    Kleiner Zwischenbericht: Bisher noch kein Ausfall. Wird weiter beobachtet :)
     
  20. Cassio

    Cassio Aktives Mitglied

    Registriert seit:
    29. Oktober 2008
    Beiträge:
    4.027
    Zustimmungen:
    17
    Punkte für Erfolge:
    38
    Sprachen:
    BascomAVR
    Hallo Berfroid!

    Klingt doch eigentlich ganz gut und genau auf diese Nachricht habe ich doch gewartet. :D


    Du hast den "Reset-Taster" aber doch stillgelegt?
    Nicht das jemand zwischendurch mal schnell auf den Taster gedrückt hat? :wink:


    Dann mal weiterhin eine unterbrechungsfreie Zeit.

    Cassio :ciao:
     
  • Über uns

    Unsere immer weiter wachsende Community beschäftigt sich mit Themenbereichen rund um Mikrocontroller- und Kleinstrechnersysteme. Neben den Themen Design von Schaltungen, Layout und Software, beschäftigen wir uns auch mit der herkömmlichen Elektrotechnik.

    Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  • Coffee Time

    Unser makerconnect-Team arbeitet hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und unser eigener makerconnekt-Server regelmäßig gewartet wird. Wir nehmen das Thema Datensicherung und Datenschutz sehr ernst und sind hier sehr aktiv, auch sorgen wir uns darum, dass alles Drumherum stimmt!

    Dir gefällt das Forum und die Arbeit unseres Teams und du möchtest es unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft, unser Team freut sich auch über eine Spende für die Kaffeekasse :-)
    Vielen Dank!
    Dein makerconnect-Team

    Spende uns! (Paypal)
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren und die Seite optimal für dich anzupassen. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden