RFID Garagentoröffner für 6 Garagen

berfroid

Mitglied
15 Aug 2012
41
1
6
63667
Sprachen
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.
 

Cassio

Aktives Mitglied
29 Okt 2008
4.027
17
38
Region Hannover
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
 

berfroid

Mitglied
15 Aug 2012
41
1
6
63667
Sprachen
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?
 

Cassio

Aktives Mitglied
29 Okt 2008
4.027
17
38
Region Hannover
Sprachen
BascomAVR
Allerdings wurden die Keys 65-67 nicht erkannt. Nachdem ich

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

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:



Warum +11, +14, +17 usw?
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
 

Cassio

Aktives Mitglied
29 Okt 2008
4.027
17
38
Region Hannover
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
 

dino03

Aktives Mitglied
27 Okt 2008
6.717
16
38
Sprachen
BascomAVR, Assembler
Hi Cassio,

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!
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
 

Cassio

Aktives Mitglied
29 Okt 2008
4.027
17
38
Region Hannover
Sprachen
BascomAVR
würde ich beim hintersten Byte des Keys anfangen.

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
 

berfroid

Mitglied
15 Aug 2012
41
1
6
63667
Sprachen
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 ;)
 

Cassio

Aktives Mitglied
29 Okt 2008
4.027
17
38
Region Hannover
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
 

berfroid

Mitglied
15 Aug 2012
41
1
6
63667
Sprachen
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
 

dino03

Aktives Mitglied
27 Okt 2008
6.717
16
38
Sprachen
BascomAVR, Assembler
Hi,

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.
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
 

Cassio

Aktives Mitglied
29 Okt 2008
4.027
17
38
Region Hannover
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
 

berfroid

Mitglied
15 Aug 2012
41
1
6
63667
Sprachen
Och ... da bin ich glaub ich drüber :eek: So 2 Jahre Verzug hab ich wohl schon :p :rolleyes:
Da würde mich mein Gewissen zerfressen ;)


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.
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 ;)

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:
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.
 

Cassio

Aktives Mitglied
29 Okt 2008
4.027
17
38
Region Hannover
Sprachen
BascomAVR
Hallo Berfroid!


So kommt es grob geschätzt vielleicht 1x pro Woche vor.
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
 

berfroid

Mitglied
15 Aug 2012
41
1
6
63667
Sprachen
Verreisen ist kein Problem. Der Resettaster befindet sich verdeckt bei der Antenne.

Stack und Frame sind jeweils bei 64
 

Cassio

Aktives Mitglied
29 Okt 2008
4.027
17
38
Region Hannover
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
 

berfroid

Mitglied
15 Aug 2012
41
1
6
63667
Sprachen
Ok, probiere ich. Ein Ergebnis kann aber etwas dauern, da es ja nicht sooo oft vorkommt. Danke Dir.
 

Cassio

Aktives Mitglied
29 Okt 2008
4.027
17
38
Region Hannover
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
 

berfroid

Mitglied
15 Aug 2012
41
1
6
63667
Sprachen
Kleiner Zwischenbericht: Bisher noch kein Ausfall. Wird weiter beobachtet :)
 

Cassio

Aktives Mitglied
29 Okt 2008
4.027
17
38
Region Hannover
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

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