Ich hab jetzt einige der billigen aber recht funktionalen Codeschlösser
mit Wiegand-Codierung gekauft, das Programm am Arduino-Atmega
funktioniert recht gut, belegt aber die Interrupt-Pins 2 und 3.
Insgesamt möchte ich 4 Codeschlösser anschließen. Es ist fast
auszuschließen, dass 2 davon gleichzeitig bedient werden. Entsprechend
dem Wiegand-Protokoll kann man die sicher parallel alle an 2 und 3
anhängen.
Die Leitung ist hier immer auf 5V, nur beim Senden immer ganz kurz auf
Masse gezogen.
Nur wie weiß ich dann, welches Codeschloss betätigt wurde?
Ich hab jetzt an eine Matrix gedacht, wenn ich einen der Pins mit einer
Diode an einen anderen Prozessoreingang zusätzlich anhänge sollte das
klappen, aber gehts nicht auch anders?
Schloss 1-----Data 0 -------|<------PIN2 (Pullup-Widerstand gesetzt)
|
|-------------PIN22 (damit erkenn ich Schloss 1)
Schloss 1-----Data 1----------------PIN3
Schloss 2-----Data 0 -------|<------PIN2 (Pullup-Widerstand gesetzt)
|
|-------------PIN23 (damit erkenn ich Schloss 2)
Schloss 2-----Data 1----------------PIN3
Hoffe, das ist halbwegs verständlich
Gibts da andere Ideen, die auch ohne Dioden funktionieren?
Danke
Welche Datenrate hat der Code denn?
Ein Link auf den Code wäre gut.
Man könnte für alle 8 Leitungen die Pin-Change Interrupts benutzen oder
sie im Timerinterrupt pollen.
Ja, super danke für die Antwort, PIN-Change Interrupts hatte ich heute
auch gegoogelt, das Timing ist ein bisserl kritisch, weil mein Ardunio
hat neben 4xWiegand auch noch als Modbus TCP/IP Gateway zu tun. Also
denk ich Interrupts sind die beste Wahl. Das mit den PIN-Change
Interrupts muss ich mir aber erst aus dem ATMEGA Datenblatt rauslesen,
also wenn hier schon jemand mal ein Beispiel hat - wär perfekt.
Datenrate ist 100 uS für einen Impuls,
Wiegand Code ist hier z.B. detailliert beschrieben:
https://docs.tibbo.com/taiko/ser_wiegand_mode
Hier mein bereits funktionierender Codeteil:
1
unsignedlongoldMillis=0;
2
uint8_toldBitCount=0;
3
uint8_tinterval=50;//Timeout
4
5
volatileuint8_tbitCount=0;
6
volatileunsignedlongcode=0;//4 bit binaer 0-9,*,# oder RFID 26 Bit
7
unsignedlongkey=0;//eingegebener Code am Keypad, max. 999.999.999
8
9
10
voidDATA0(void){//PIN 2
11
bitCount++;
12
code=code<<1;
13
}
14
15
voidDATA1(void){//PIN 3
16
bitCount++;
17
code=code<<1;
18
code|=1;
19
}
20
21
voidsetupWiegand(){//wird von void setup() aufgerufen
22
for(inti=2;i<4;i++){
23
pinMode(i,OUTPUT);
24
digitalWrite(i,HIGH);
25
digitalWrite(i,LOW);
26
pinMode(i,INPUT);
27
digitalWrite(i,HIGH);
28
}
29
attachInterrupt(0,DATA0,FALLING);
30
attachInterrupt(1,DATA1,FALLING);
31
}
32
33
voidsWiegand(unsignedlong&code){//wird aus der void loop() aufgerufen
34
if(bitCount>0)
35
if(bitCount!=oldBitCount){
36
oldBitCount=bitCount;
37
oldMillis=millis();
38
}
39
elseif(millis()-oldMillis>interval){
40
if(bitCount==4){//Taste vom Codeschloss, 4 Bit binaer
So, nach dem das vorhin nur ein eher untaugliches Codefragment war, hier
jetzt der fertige Code für den Arduino Atmega, damit sind 1, 2, 3 oder 4
Keypads abfragbar, leider hab ich nur eines (ohne RFID) da, die anderen
sind noch per Post unterwegs..
Danke noch an Peter Dannegger für seinen Hinweis an den PIN Change
Interrupt, den hatte ich zwar in einem anderen Projekt vor 2 Jahren
schon irgendwo im Einsatz nur schon wieder vergessen.. jetzt erspar ich
mir ein Diodenarray und die Anschlüsse sind einfach nebeneinander.
Es sollte sogar möglich sein, alle 4 Keypads gleichzeitig zu bedienen,
nur in dem seltenen Fall, dass 2 Impulse im gleichen uS-Bereich kommen,
könnte eine Doppeltriggerung erfolgen.. aber die Wahrscheinlichkeit
dafür geht gegen null. Also falls es jemand mal braucht, die ganze Sache
kommt ohne delay und ohne weiterer Arduino-Library aus.
Viel Spaß beim Testen und vielleicht findet jemand ja noch
Optimierungspotential.
1
#define cKeyPads 4 //Keyboards max.4, wenn nur 1, dann 1 eingeben
2
/*
3
Keypad 1: grün/Data0 auf PIN A8
4
Keypad 1: weiß/Data1 auf PIN A9, GND nicht vergessen ;-)
5
Keypad 2: grün/Data0 auf PIN A10
6
Keypad 2: weiß/Data1 auf PIN A11, GND nicht vergessen ;-)
7
Keypad 3: grün/Data0 auf PIN A12
8
Keypad 3: weiß/Data1 auf PIN A13, GND nicht vergessen ;-)
9
Keypad 4: grün/Data0 auf PIN A14
10
Keypad 4: weiß/Data1 auf PIN A15, GND nicht vergessen ;-)
11
*/
12
#define cTimeOut 70 //Timeout in mSec, einzelne Ziffern oder RFID-maximale Codeuebertragung
13
#define cTimeOutReset 3000 //ab wann sind die Eingaben, Keys ungültig, Key wird wieder 0
Hallo zusammen,
nach dem ich, "ahnungsloser Vielleicht-
Arduino-Einsteiger" einige Stunden am PC nach Lösungen für Fingerprint
an eqiva Motorschloss, sowohl über Raspi als auch über Arduino gesucht
habe, viel "spanisch" verstanden habe, und kurz vor dem Aufgeben stehe,
frage ich jetzt mal hier, wenn ich das darf(?), ob mir jemand sowas
bauen kann:
Ich möchte einen Fingerprint über das Wiegandsignal mit einem eqiva
Motorschloss, dass sich nur über Bluetooth ansteuern lässt, verbinden.
Hier sehe ich das Potenzial, dass ich nicht habe, hier gibt es, wenn ich
das richtig interpretiere, Lösungen und Leute, die sowas schreiben
können.
Ich hätte gerne einen Arduino, oder auch Raspi, mit entsprechender
Software fertig installiert, der eben das Wiegand-Protokoll auslesen
kann, und an den eqiva per Bluetooth übermittelt. Oder eben auch
Teillösungen. Wenn ich dazu weiß, an welche Pins ich die 4 Wiegand-Kabel
anschließen muss, ich weiss mit Spannungsteiler, dürfte ich den Rest
hinbekommen.
Wenn jemand Interesse hat, mir sowas zusammenzubauen, bitte ich um ein
Angebot.
Ich weiß, dass ist hier so nicht üblich, sollte ich sowas hier gar nicht
dürfen, bitte ich um Nachsicht, und Information, dann ziehe ich meine
Anfrage selbstverständlich zurück.
LG Reinhard
Reinhard Dopheide schrieb:> Ich möchte einen Fingerprint über das Wiegandsignal mit einem eqiva> Motorschloss, dass sich nur über Bluetooth ansteuern lässt, verbinden.
Und was hat das mit dem Codeschloß zu tun?
Zu neuen Fragen macht man nen eigenen Thread auf.
Und verlinke mal all die ungekannten Geräte, denn keiner kann in Deinen
Kopf schauen.
Ich befürchte aber, daß es keine Doku zu deren Internas gibt, d.h. die
sind nur mit den professionellen Komponenten verwendbar, für die sie
gedacht sind.