This RFID reader works with 125 kHz tags in credit card size shape cards and with 125 kHz key fobs (Figure 1). The EM4100 protocol is used. When you approach an RFID Tag close enough (4-5 cm) to the reader's coil (L1) the reader will read the 10-digit unique ID of the Tag and transmit it as ASCII characters trough the serial output with 2400 bits per second.
The circuit includes a buzzer that beeps when a Tag is read successfully (Figure 2).
Schematic of the circuit (Figure 3).
I will try to explain with simple words how the RFID works. The Atmel ATtiny13 uses the PWM function to produce an 125 kHz square wave signal. This signal comes out from PB0 pin. On the falling edge of the PB0 (Logic '0'), the T1 does not conduct.So the L1 is energized from R1 (100 ohm) with +5V. When PB0 pin is rising (Logic '1') the T1 is conducting and one side of L1 goes to GND. The L1 goes in parallel with C2 creating an LC oscillator (Figure 4). These transitions of L1 to logic '1' and logic '0' are made 125000 times in one second (125 kHz).
The RFID reader provides energy to the transponder (Tag) by creating an electromagnetic field. The energy transmission between the RFID reader and the Tag is the same as transformers convert the voltage from the 220V AC power network to 12V AC, based on the magnetic field that creates the primary coil. In our case the primary coil is the RFID reader and the secondary coil is the RFID tag. The only difference is that on RFID circuits there is no iron core between the two coils (one coil is on the reader side and the other coil is in to the RFID tag). The D1 ,C3 and R5 components constitute an AM signal demodulator (AM = Amplitude Modulation) .
Data communication between Tags and reader.
How Tags communicate with the reader? The idea is simple, but very clever! When the Tag wants to send a logic '0' to the reader it puts a "load" to its power supply line to request more power from the reader. That will make a small voltage drop on the RFID reader side. That voltage level is logic '0' (picture 4). Simultaneously, as long as the reader transmits the 125 kHz signal it reads the voltage of the transmitted signal trough the filters D1, C3 and R5, C1. When the Tag drops the voltage as we said before, the reader reads this voltage drop as logic '0'. When the Tag doesn't require any additional power, it doesn't make a voltage drop. That is logic '1' (picture 4). The 'Ones' or 'Zeros' length depends on the serial transmission data rate. For example, for 125 kHz carrier frequency we don't have 125000 bits per second data transmission! The data transmission from Tag to the reader varies from 500 bits per second up to 8000 bits per second.
The RFID tag content (Figure 6).
The 125kHz RFID tag transmits 64 bits.
The data verification is been done from ATtiny13 by calculating the Even parity bit of each line and each column with the parity bits that had been received form the RFID Tag transmitted data.
Constructing the coil
The coil has 120 mm diameter and 58 turns. Just in case leave more copper wire for additional 2-3 turns (60-61 turns total). To achieve maximum distance between the RFID Tag and reader (between Tag and reader's antenna-coil) you need to calibrate the coil. If you connect an oscilloscope to the point that R1 and L1 are connected you will see the red marked spot of noising on the left picture. That is a sign that L1 must be calibrated (Figure 7).
How can you calibrate the L1 ?
Power on the RFID reader and:
Try the same by removing turns (cooper wire) from the L1. Finally you will achieve the maximum range between your Tags and the L1.
I made the (L1) 120 mm diameter and 58 turns but afterward I wanted to make it in smaller size. So, I folded the coil to the half to make it as a "figure eight" (the shape seems like the 8 number ) and I did again the calibration. That's why the coil L1 on the pictures seems smaller than 120 mm.
Programming the ATtiny13.
You have to set the ATtiny13 fuses to: High Fuse: 0x1F and Low Fuse: 0x7A .These settings set the ATtiny13 to work with the internal 9.6 MHz oscillator. The System clock divided by 8 function is disabled.
The firmware v1.00 is 1024 bytes and it occupies the 100% of the Flash program memory of ATtiny13.
Maybe a migration to any other 8-pin AVR such as ATtiny85 it would be a good idea if you want to add more functions to the source code.
Source code, hex file, schematic and pictures of 125 kHz RFID reader - download
News on theme: