Агуулгын хүснэгт:

UR кодтой AVR/Arduino RFID уншигч нь C: 4 алхамтай
UR кодтой AVR/Arduino RFID уншигч нь C: 4 алхамтай

Видео: UR кодтой AVR/Arduino RFID уншигч нь C: 4 алхамтай

Видео: UR кодтой AVR/Arduino RFID уншигч нь C: 4 алхамтай
Видео: ATtiny13 и ATtiny85. Обзор и программирование с помощью Arduino 2024, Арваннэгдүгээр
Anonim
UR кодтой AVR/Arduino RFID уншигч
UR кодтой AVR/Arduino RFID уншигч

RFID бол тооллогын системээс таних тэмдгийн ID систем хүртэл хаа сайгүй олддог галзуу зүйл юм. Хэрэв та хэзээ нэгэн цагт их дэлгүүрт орж, оролт, гаралтын цэгүүд дээр металл илрүүлэгчтэй зүйлүүдийг үзэж байсан бол та RFID-ийг үзсэн болно. RFID -ийг тохируулах талаар сайн мэдээлэл олж авах хэд хэдэн газар байдаг бөгөөд энэхүү зааварчилгаа нь цуваа оролтыг уншихад шаардлагатай C кодыг онцолж, AVR дээр Parallax RFID уншигч (Serial TTL) суулгахад чиглэгддэг. Код нь С хэл дээр байгаа бөгөөд гадны номын санг ашигладаггүй. Үнэн хэрэгтээ, энэ нь UART ашиглахгүйгээр 2400 бадыг шууд ярьдаг бөгөөд RFID уншигчийн дамжуулах хурдыг синхрончилж, холбогдсон дижитал зүүгээ уншдаг. Сэтгэл хөдөлсөн үү? Би ч бас.

Алхам 1: Бараа авах

Бараа авах
Бараа авах

Танд дараах хэсгүүдийн жагсаалт хэрэгтэй болно.

  • RFID уншигч (Parallax #28140 $ 39.99)
  • RFID хаяг (Parallax #32397 $ 0.99)
  • AVR эсвэл Arduino клон (хэрэв та хувьцааны AVR ашигладаг бол танд max232, 5 x 1uF конденсатор, DE9 холбогч хэрэгтэй болно)
  • Гагнуургүй талхны хавтан

Нэмэлт

  • 4 байрлалын толгой
  • Утас

(мөн max232 гэх мэт хаягийн мэдээллийг дамжуулах) Та RS232 -ээр хаягийн өгөгдлийг илгээхийн оронд дуртай LCD дэлгэцээ холбож болно.

Алхам 2: эд ангиудыг холбоно уу

Эд ангиудыг холбоно уу
Эд ангиудыг холбоно уу
Эд ангиудыг холбоно уу
Эд ангиудыг холбоно уу
Эд ангиудыг холбоно уу
Эд ангиудыг холбоно уу

Аливаа зүйлийн техник хангамжийн тал нь нэлээд хялбар байдаг. Би RFID уншигчийг талхны тавцан дээр шууд оруулахын оронд хурдан кабель хийхээр шийдсэн тул RFID уншигчаа арай илүү сайн хөдөлгөж чадсан юм. Үүний тулд би хэвтэж байсан эмэгтэй залгуурын толгойн туузнаас 4 байрлалыг таслаж, гурван утсаар гагнав. Цахилгаан соронзон хальсны холбогчийг холбосон RFID уншигч нь 4 холболттой.

  • Vcc
  • ИДЭВХЖҮҮЛЭХ
  • ГАРАХ
  • Gnd

Таны таамаглаж байсанчлан Vcc -ийг +5V, Gnd -ийг газардуул. RFID уншигч маш их эрчим хүч зарцуулдаг тул та ИНДЭВХ зүүг унтрааж, өөр өөр интервалтайгаар асаах боломжтой. Би үүнийг үргэлжлүүлэхийг л сонгосон. Урвуу байрлалтай тул идэвхжүүлэхийн тулд та үүнийг бага татна. Эсвэл та үүнийг газардуулгатай холбож болно. Хэрэв би шийдсэн бол идэвхжүүлэх/идэвхгүй болгох сонголтуудыг өгөхийн тулд үүнийг PIND3 -тай холбосон. OUT пин бол уншигч шошго уншсаны дараа серийн өгөгдлөө илгээдэг газар юм. Би үүнийг PIND -тэй холбосон 2. Параллаксын ертөнцөд улаан гэдэг нь явах гэсэн утгатай. Өөрөөр хэлбэл, ногоон LED нь тухайн төхөөрөмж идэвхгүй, идэвхгүй байгааг илтгэдэг бол улаан LED нь уг төхөөрөмж идэвхжсэн гэсэн үг юм. * мөрөө хавчих* Зураг руу явах.

Алхам 3: Кодыг бичнэ үү

Кодыг бичнэ үү
Кодыг бичнэ үү

RFID уншигчаас өгөгдлийг уншихын тулд та шошго хэзээ илгээгдсэнийг мэдэж, өгөгдлийг цуваа портоос татаж аваад хаа нэг газар илгээх хэрэгтэй.

RFID уншигчийн мэдээллийн формат

Parallax RFID уншигч нь өгөгдлийг тогтмол, мөстлөгийн хурдаар 2400 бодын хурдтай илгээдэг. RFID хаяг нь 10 байт юм. Алдаа илрүүлэх/залруулах боломжийг олгохын тулд уншигчийг санамсаргүй дуу чимээнээс унтраах боломжтой тул 10 байтын RFID нь илгээмжийг эхлүүлэх, зогсоох замаар хязгаарлагддаг. Эхлэх харуул нь шугамын тэжээл (0x0A), зогсолтын хамгаалалт нь тэрэг буцах (0x0D) юм. Энэ нь иймэрхүү харагдаж байна:

[Харуулын эхлэл | Байт 1 | Байт 2 | Байт 3 | Байт 4 | Байт 5 | Байт 6 | Байт 7 | Байт 8 | Байт 9 | Байт 10 | Харуул хамгаалалтыг зогсоо]Эдгээр нь үндсэн гурван алхам юм.

Шошго хэзээ ирснийг мэдэх

Би AVR дээр Pin Change Interrupt -ийг ашигласан бөгөөд энэ нь хянагдсан зүү дээр өөрчлөлт гарсан тухай firmware -д мэдээлдэг. Үүний тулд AVR -ийг тохируулах нь хялбар бөгөөд тугийг тохируулах, MCU -д аль зүүгээ хянахыг хүсч байгаагаа хэлэх, дэлхийн тасалдлын битийг тохируулах шаардлагатай. PCINT -ийг тохируулах

BSET (PCICR, PCIE2); // зүү өөрчлөх тасалдлын хяналтын бүртгэл pcie2 BSET (PCMSK2, PCINT18); // PCINT18 (PD2) BSET (SREG, 7) -д зүү солих тасалдлыг идэвхжүүлэх; // SREG I-bit-ийг тохируулна ууТа өөрийн ISR -ийг богино байлгахыг хүсч байна, ингэснээр миний тасалдлын вектор дээр би байтыг бүхэлд нь, бага багаар уншиж, дэлхийн тогтворгүй тэмдэгт массивт хадгална. Тасалдал бүрт би дараахь зүйлийг хийдэг.

  • Намайг эхлүүлж байгаа эсэхийг шалгаарай
  • Цагийг дунд импульс дээр 2400 bod (RFID уншигчийн хурд) дээр төвлөрүүл.
  • Эхлэх битийг алгасаад дараагийн битийн дунд хүртэл түр зогсооно уу
  • Бит бүрийг тэмдэггүй бүхэл тоо болгон уншина уу
  • Надад 8 бит байгаа бол байтыг тэмдэгтийн массивт оруулна уу
  • Намайг 12 байт цуглуулахад алдаа илрүүлэхийн тулд шошгыг уншсаныг MCU -д мэдэгдээрэй.

Би Дэвид Меллисийн кодыг туршилтаар тогтоосон цуврал горимд саатал гаргаснаар өөрчилсөн Микал Хартын SoftSerial кодыг өөрчилсөн.

RS232 гаралтыг задлан шинжлэх

PCINT горим нь RFID уншигчаас RS232 гаралтыг унших кодыг агуулдаг. Би 12 байт (10 байтын RFID дээр нэмэлт дохиолол) авахдаа bDataReady-ийг 1 болгож, үндсэн циклд өгөгдлийг боловсруулж, харуулах боломжийг олгодог.

// энэ бол тасалдлын зохицуулагчISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Эхлэх бит бага өгөөж өгдөг; uint8_t бит = 0; TunedDelay (CENTER_DELAY); // (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // жаахан алгасаарай, ахаа … хэрэв (BCHK (PIND, RFID_IN)) BSET (бит, x); өөр BCLR (бит, x); } TunedDelay (INTRABIT_DELAY); // алгасах зогсоох бит RFID_tag [rxIdx] = бит; ++ rxIdx; хэрэв (rxIdx == 12) bDataReady = 1;}

Өөрийн хаягийг харуулах

Main () хэсэгт for (ever) давталтын явцад би bDataReady -ийг тохируулсан эсэхийг шалгадаг бөгөөд энэ нь RFID бүтцийг бүхэлд нь илгээсэн болохыг илтгэнэ. Дараа нь энэ нь хүчинтэй шошго эсэхийг шалгаарай (өөрөөр хэлбэл эхлэх ба зогсоох тэмдэгтүүд нь 0x0A ба 0x0D байна), хэрэв тийм бол би үүнийг RS232 холболтоо илгээдэг.

for (;;) {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 ("\ nБайтыг зогсоох:"); USART_tx_S (itoa (RFID_tag [11], & ibuff [0], 16));#endif if (ValidTag ()) {USART_tx_S ("\ nRFID Tag:"); for (uint8_t x = 1; x <11; x ++) {USART_tx_S (itoa (RFID_tag [x], ibuff, 16)); хэрэв (x! = 10) USART_tx (& apos: & apos); } USART_tx_S ("\ n"); } rxIdx = 0; bDataReady = 0; }}

Алхам 4: Код ба салах ёс гүйцэтгээрэй

Энэ хуудас нь холбогдох код бүхий зип файлыг агуулдаг. Үүнийг AVR Studio 4.16 дээр бичсэн болно. Хэрэв та програмистын тэмдэглэлийн дэвтэр, хиртэлт, эсвэл vi (эсвэл өөр зүйл) ашигладаг бол итгэмжлэгдсэн Makefile файлыг директор руу хуулж, эдгээр файлуудыг эх мөрөнд нэмэх шаардлагатай болно. 16MHz MCU. Хэрэв та өөр цагийн давтамжтай ажиллаж байгаа бол туршилтын хувьд хурдны импульс дээр төвлөрүүлэх хугацааг тохируулах шаардлагатай болно. Энэ заавар танд ямар нэгэн байдлаар тусалсан гэж найдаж байна. Хэрэв танд үүнийг хэрхэн сайжруулах талаар санал байвал надад хэлэхээс бүү эргэлзээрэй!

Зөвлөмж болгож буй: