The question is: Is there any direct method that a BX-24 running
BasicX can read the Wiegand data stream from a HID 125kHz RFID (radio
frequency identification) reader.
First let me say that I am possiblely the most "EE" ignorant
individual to have ever have touched a microprocessor. Second let me
say that I have failed miserablely in this quest. Here is my
tail of woes =85.
We want to record clockin and clockout times using the same RFID cards
that are used by our entry control system. The idea is to read the
cards and transmit the data to a central PC. We also want to employee
to be able to see that the time event was actually recorded via a LCD
display.
The Wiegand Protocol facts (as best I can figure out). The hardware
uses five wires: Power (+5VDC), Data1, Data2, Ground, LED control. The
latter is being ignored. Both data lines are normally held at +5
Volts. One data line pulses zeros the other pulses ones by driving
the line to zero volts for somewhere between 20 to 50 microseconds
(1/1000000). There is a period of around 20 milliseconds (1/1000)
between pulses. The exact timing varies by device (nothing like
consistency). The standard data packet is 26 bits including leading
and trailing parity bits. A later standard uses 36 bits and it is
possible to have up to around 60 bits.
Plan A:
Hang a Intel based PC running Windows XP on the wall with a 15 inch
LED display and use a PCPROX reader. Way overkill.
Plan B:
Get a parallax basic stamp and beat the heck out of two pins reading
the current levels =85. Not nearly fast enough.
Plan C:
Get a parallax SX and beat the heck out of two pins reading the
current levels or better yet use the pin interrupts. This might work
if I had a year to figure out how to write the assembly language and
work out the timing.
Plan D:
Get a NewMedia BX-24 and beat the heck out of two pins reading the
current levels =85. Not nearly fast enough.
Plan E:
Use the BX-24 interrupt PIN to get some basic data about this
particular RFID reader.
(1)Using WaitForInterrupt and PulseIn I get durations of 36 for the
pulse and 1900 for the period. (2) Using WaitForInterrupt and
CountTransitions I get 14 on Data1 and 36 on Data2. Assume I have lost
a transition or two between the lines and that looks like 26 bits.
Plan F:
The WaitForInterrupt works. Problem is there is only one interrupt and
two data lines. If I had an AND gate I might be able to use the
interrupt to know when to read the data pins. I do not have an AND
gate but maybe I could rig one with parts from the local electronics
shop (Radio Shack is the only thing handy):
"AND Gate" from Diodes:
http://en.wikipedia.org/wiki/Diode_logic
http://hyperphysics.phy-astr.gsu.edu/hbase/electronic/and.html
Well I totally shot another day trying get these and a few other
approaches to work to no avail.=20
Question: If I could get a single Interrupt would the BX-24 be fast
enough to read the two pins and determine if it was a one or zero ?
`-----------------------------------------------------------
Public Sub ReadRFID ()
Dim A as Byte
Dim B as Byte
Dim C as Byte
Call WaitForInterrupt (24) ' falling edge
C=3DGetPin(11)
A=3DgetPin(14)
B=3DGetPin(13)
Debug.Print "ABC, ";CStr(A);CStr(B);Cstr(C)
End Sub
`-----------------------------------------------------------
Output: ABC, 111
`-----------------------------------------------------------
Answer: No.
Plan G:
Plan "A" is beginning to look better. I am building a fine collection
of microcontrollers. I may add a ZX-24a with Pin Change Interrupts on
all I/O lines.
OK, people feel free to take a shot at me, impune my character, call
me to a senile old fool (I will admit that one) and tell me I am not
smarter that a 5th grader =85 but please tell me if I have missed
something. Can this be done with a BX-24 ?
SIDE NOTE:
A positive thing to come out of this is I managed to put together a
BasicX API for the parallax LCD displays. I have placed a copy of the
sources files in the files section for anyone who might be interested.=20
LASTLY: Have a nice day.
=20
=20

(You need to be a member of basicx -- send a blank email to basicx-subscribe@yahoogroups.com )
Lewis-
I have interfaced a number of uPs to weigand inputs in my time......always =
found it best to put a bit of hardware between the inputs and the uP to cat=
ch and stretch the very short pulses....needs a very short ISR latency to r=
espond and see the pulse before it goes away.
I usually NAND the two lines to generate a common clock/interrupt line, and=
use that to clock either a D flip/flop or a serial shift register, with on=
e of the data lines in the D input.
With a single D flip/flop, you will need to capture the data in the ISR bef=
ore the next pulse, with a 26 bit shift register you can wait unti lthe bi=
t stream is complete before reading into the uP.
Cheers,
Stuart Parker
www.sparxfly.co.nz
----- Original Message ----
From: Lewis
To: b...@yahoogroups.com
Sent: Sunday, 21 October, 2007 3:56:25 PM
Subject: [BasicX] Wiegand Protocol and BX-24
The question is: Is there any direct method that a BX-24 running
BasicX can read the Wiegand data stream from a HID 125kHz RFID (radio
frequency identification) reader.
First let me say that I am possiblely the most "EE" ignorant
individual to have ever have touched a microprocessor. Second let me
say that I have failed miserablely in this quest. Here is my
tail of woes =85.
We want to record clockin and clockout times using the same RFID cards
that are used by our entry control system. The idea is to read the
cards and transmit the data to a central PC. We also want to employee
to be able to see that the time event was actually recorded via a LCD
display.
The Wiegand Protocol facts (as best I can figure out). The hardware
uses five wires: Power (+5VDC), Data1, Data2, Ground, LED control. The
latter is being ignored. Both data lines are normally held at +5
Volts. One data line pulses zeros the other pulses ones by driving
the line to zero volts for somewhere between 20 to 50 microseconds
(1/1000000). There is a period of around 20 milliseconds (1/1000)
between pulses. The exact timing varies by device (nothing like
consistency) . The standard data packet is 26 bits including leading
and trailing parity bits. A later standard uses 36 bits and it is
possible to have up to around 60 bits.
Plan A:
Hang a Intel based PC running Windows XP on the wall with a 15 inch
LED display and use a PCPROX reader. Way overkill.
Plan B:
Get a parallax basic stamp and beat the heck out of two pins reading
the current levels =85. Not nearly fast enough.
Plan C:
Get a parallax SX and beat the heck out of two pins reading the
current levels or better yet use the pin interrupts. This might work
if I had a year to figure out how to write the assembly language and
work out the timing.
Plan D:
Get a NewMedia BX-24 and beat the heck out of two pins reading the
current levels =85. Not nearly fast enough.
Plan E:
Use the BX-24 interrupt PIN to get some basic data about this
particular RFID reader.
(1)Using WaitForInterrupt and PulseIn I get durations of 36 for the
pulse and 1900 for the period. (2) Using WaitForInterrupt and
CountTransitions I get 14 on Data1 and 36 on Data2. Assume I have lost
a transition or two between the lines and that looks like 26 bits.
Plan F:
The WaitForInterrupt works. Problem is there is only one interrupt and
two data lines. If I had an AND gate I might be able to use the
interrupt to know when to read the data pins. I do not have an AND
gate but maybe I could rig one with parts from the local electronics
shop (Radio Shack is the only thing handy):
"AND Gate" from Diodes:
http://en.wikipedia .org/wiki/ Diode_logic
http://hyperphysics .phy-astr. gsu.edu/hbase/ electronic/ and.html
Well I totally shot another day trying get these and a few other
approaches to work to no avail.=20
Question: If I could get a single Interrupt would the BX-24 be fast
enough to read the two pins and determine if it was a one or zero ?
`----------- --------- --------- --------- --------- --------- --
Public Sub ReadRFID ()
Dim A as Byte
Dim B as Byte
Dim C as Byte
Call WaitForInterrupt (24) ' falling edge
C=3DGetPin(11)
A=3DgetPin(14)
B=3DGetPin(13)
Debug.Print "ABC, ";CStr(A);CStr( B);Cstr(C)
End Sub
`----------- --------- --------- --------- --------- --------- --
Output: ABC, 111
`----------- --------- --------- --------- --------- --------- --
Answer: No.
Plan G:
Plan "A" is beginning to look better. I am building a fine collection
of microcontrollers. I may add a ZX-24a with Pin Change Interrupts on
all I/O lines.
OK, people feel free to take a shot at me, impune my character, call
me to a senile old fool (I will admit that one) and tell me I am not
smarter that a 5th grader =85 but please tell me if I have missed
something. Can this be done with a BX-24 ?
SIDE NOTE:
A positive thing to come out of this is I managed to put together a
BasicX API for the parallax LCD displays. I have placed a copy of the
sources files in the files section for anyone who might be interested.=20
LASTLY: Have a nice day.
[Non-text portions of this message have been removed]
=20
=20

(You need to be a member of basicx -- send a blank email to basicx-subscribe@yahoogroups.com )