Isi kandungan:

Pembaca RFID AVR / Arduino Dengan Kod UART dalam Langkah C: 4
Pembaca RFID AVR / Arduino Dengan Kod UART dalam Langkah C: 4

Video: Pembaca RFID AVR / Arduino Dengan Kod UART dalam Langkah C: 4

Video: Pembaca RFID AVR / Arduino Dengan Kod UART dalam Langkah C: 4
Video: Trik Mudah Komunikasi Serial Arduino dengan Nodemcu ESP8266 2024, November
Anonim
Pembaca RFID AVR / Arduino Dengan Kod UART di C
Pembaca RFID AVR / Arduino Dengan Kod UART di C

RFID adalah kegilaan yang terdapat di mana-mana sahaja - dari sistem inventori hingga sistem ID lencana. Sekiranya anda pernah ke gedung membeli-belah dan menelusuri barang-barang yang kelihatan seperti pengesan logam di pintu masuk / pintu keluar, maka anda telah melihat RFID. Terdapat beberapa tempat untuk mendapatkan maklumat yang baik mengenai penyediaan RFID, dan arahan ini difokuskan pada pemasangan pembaca Parallax RFID (Serial TTL) pada AVR, dengan penekanan pada kod C yang diperlukan untuk membaca input bersiri. Kodnya dalam C dan tidak menggunakan perpustakaan luaran. Sebenarnya, ia berbicara 2400 baud secara langsung tanpa menggunakan UART dengan menyegerakkan dengan kadar baud pembaca RFID dan membaca pin digital yang disambungkannya. Teruja? Saya juga.

Langkah 1: Dapatkan Barang

Dapatkan Barangan
Dapatkan Barangan

Anda memerlukan senarai bahagian berikut:

  • Pembaca RFID (Parallax # 28140 $ 39.99)
  • Tanda RFID (Parallax # 32397 $ 0.99)
  • Klon AVR atau Arduino (jika anda menggunakan stok AVR, anda juga memerlukan kapasitor max232, 5 x 1uF, dan penyambung DE9)
  • Papan roti tanpa solder

Pilihan

  • Pengepala 4 kedudukan
  • Kawat

(dan max232 dll untuk komunikasi maklumat tag) Anda juga dapat menghubungkan layar LCD kegemaran anda sebagai ganti mengirim data tag melalui RS232.

Langkah 2: Sambungkan Bahagian

Sambungkan Bahagian
Sambungkan Bahagian
Sambungkan Bahagian
Sambungkan Bahagian
Sambungkan Bahagian
Sambungkan Bahagian

Bahagian perkakasan adalah sangat mudah. Daripada memetik pembaca RFID saya terus ke papan roti saya, saya memilih untuk membuat kabel cepat supaya saya dapat memindahkan pembaca RFID sedikit lebih baik. Untuk itu, saya baru sahaja memotong 4 kedudukan dari jalur header soket wanita yang telah saya letakkan dan disolder pada tiga wayar. Pita elektrik melengkapkan penyambung ghetto. Pembaca RFID mempunyai 4 sambungan:

  • Vcc
  • DIAMALKAN
  • KELUAR
  • Gnd

Seperti yang anda duga, sambungkan Vcc ke + 5V dan Gnd ke tanah. Oleh kerana pembaca RFID menggunakan begitu banyak tenaga, anda boleh menekan pin ENABLE untuk mematikan dan menghidupkannya pada pelbagai selang waktu. Saya hanya memilih untuk meneruskannya. Oleh kerana ia terbalik, anda menariknya dengan RENDAH untuk mengaktifkannya. Sebagai alternatif, anda boleh menyambungkannya ke tanah. Saya menghubungkannya ke PIND3 untuk memberi saya pilihan untuk mengaktifkan / mematikan jika saya memutuskan untuk melakukannya. Pin OUT adalah tempat pembaca menghantar data bersirinya setelah membaca teg. Saya menghubungkannya ke PIND2. Perhatikan, di Parallax Universe, merah bermaksud pergi. Maksudnya, LED hijau bermaksud unit tidak aktif dan tidak aktif, sementara LED merah bermaksud unit itu aktif. * mengangkat bahu * Pergi angka.

Langkah 3: Tulis Kod

Tuliskan Kod
Tuliskan Kod

Untuk membaca data dari pembaca RFID, Anda harus tahu kapan teg telah dikirimkan, tarik data dari port bersiri, kemudian kirimkan ke suatu tempat.

Format Data Pembaca RFID

Pembaca Parallax RFID menghantar data pada kadar glasial tetap 2400 baud. Tag RFID ialah 10 bait. Untuk membolehkan pengesanan / pembetulan ralat, kerana pembaca dapat dimatikan dari kebisingan rawak, RFID 10-byte dibatasi oleh sentinel permulaan dan penghentian. Sentinel permulaan adalah feed line (0x0A) dan sentinel stop adalah carriage return (0x0D). Ia kelihatan seperti ini:

[Mula Sentinel | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | Byte 9 | Byte 10 | Hentikan Sentinel]Ini adalah tiga langkah utama.

Ketahui bila teg telah dihantar

Saya menggunakan Pin Change Interrupt pada AVR yang memberitahu firmware bahawa perubahan telah berlaku pada pin yang dipantau. Mengkonfigurasi AVR untuk ini mudah dan memerlukan menetapkan bendera, memberitahu MCU pin mana yang ingin anda pantau, dan menetapkan bit gangguan global. Konfigurasikan PCINT

BSET (PCICR, PCIE2); // pin tukar interrupt control register pcie2 BSET (PCMSK2, PCINT18); // aktifkan gangguan perubahan pin untuk PCINT18 (PD2) BSET (SREG, 7); // Tetapkan SREG I-bitTulis rutin gangguan perkhidmatan anda Saya melakukan perkara berikut pada setiap gangguan:

  • Periksa untuk memastikan saya berada pada tahap permulaan
  • Pusatkan masa ke nadi tengah pada 2400 baud (kelajuan pembaca RFID)
  • Langkau bit permulaan dan berhenti sebentar ke tengah bit seterusnya
  • Baca setiap bit menjadi bilangan bulat yang tidak ditandatangani
  • Apabila saya mendapat 8 bit, masukkan bait ke dalam susunan watak
  • Apabila saya mengumpulkan 12 bait, beri tahu MCU bahawa tag telah dibaca untuk pengesanan ralat.

Saya mengubah suai kod SoftSerial dari Mikal Hart yang mengubah kod dari David Mellis untuk kelewatan yang ditentukan secara eksperimen dalam rutin siri.

Huraikan Keluaran RS232

Rutin PCINT mengandungi kod untuk membaca output RS232 dari pembaca RFID. Apabila saya mendapat 12 bait (10-byte RFID plus sentinels) saya menetapkan bDataReady ke 1 dan membiarkan gelung utama memproses data dan memaparkannya.

// ini adalah pengendali interruptISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Bit permulaan kembali rendah; uint8_t bit = 0; TunedDelay (CENTER_DELAY); // Pusat bit permulaan untuk (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // langkau sedikit, saudara… jika (BCHK (PIND, RFID_IN)) BSET (bit, x); lain BCLR (bit, x); } TunedDelay (INTRABIT_DELAY); // langkau bit berhenti RFID_tag [rxIdx] = bit; ++ rxIdx; jika (rxIdx == 12) bDataReady = 1;}

Paparkan Tag Anda

Di gelung utama (), selama (pernah) gelung, saya memeriksa untuk melihat apakah bDataReady telah ditetapkan, menandakan bahawa seluruh struktur RFID telah dikirim. Saya kemudian memeriksa untuk mengetahui apakah itu teg yang sah (iaitu watak mula dan berhenti masing-masing adalah 0x0A dan 0x0D), dan jika ya, saya menghantarnya melalui sambungan RS232 saya.

untuk (;;) {if (bDataReady) {#ifdef _DEBUG_ USART_tx_S ("Start byte:"); USART_tx_S (itoa (RFID_tag [0], & ibuff [0], 16)); ibuff [0] = 0; ibuff [1] = 0; USART_tx_S ("\ nHentikan bait:"); USART_tx_S (itoa (RFID_tag [11], & ibuff [0], 16)); # endif if (ValidTag ()) {USART_tx_S ("\ nRFID Tag:"); untuk (uint8_t x = 1; x <11; x ++) {USART_tx_S (itoa (RFID_tag [x], ibuff, 16)); jika (x! = 10) USART_tx (& apos: & apos); } USART_tx_S ("\ n"); } rxIdx = 0; bDataReady = 0; }}

Langkah 4: Kod dan Perpisahan

Halaman ini mengandungi fail zip dengan kod yang berkaitan. Ia ditulis di AVR Studio 4.16. Sekiranya anda menggunakan notepad, gerhana, atau vi (atau sesuatu yang lain) pengaturcara, anda perlu menyalin Makefile yang dipercayai ke dalam direktori dan menambahkan fail-fail ini ke baris sumber. Juga perhatikan, masa untuk bahagian bacaan bersiri adalah berdasarkan pada 16MHz MCU. Sekiranya anda berjalan pada frekuensi jam yang berbeza, anda perlu secara eksperimen menentukan kelewatan yang ditala untuk berpusat pada nadi kadar baud. Saya harap arahan ini dapat membantu anda dalam beberapa cara. Sekiranya anda mempunyai cadangan bagaimana ia dapat diperbaiki, jangan ragu untuk memberitahu saya!

Disyorkan: