Բովանդակություն:

AVR/Arduino RFID ընթերցող UART կոդով C: 4 քայլով
AVR/Arduino RFID ընթերցող UART կոդով C: 4 քայլով

Video: AVR/Arduino RFID ընթերցող UART կոդով C: 4 քայլով

Video: AVR/Arduino RFID ընթերցող UART կոդով C: 4 քայլով
Video: RFID Reader Interface with AVR ATmega32 2024, Նոյեմբեր
Anonim
AVR/Arduino RFID ընթերցող ՝ UART կոդով C- ում
AVR/Arduino RFID ընթերցող ՝ UART կոդով C- ում

RFID- ը մոլություն է, որը հանդիպում է ամենուր `գույքագրման համակարգերից մինչև կրծքանշանի ID համակարգեր: Եթե երբևէ եղել եք հանրախանութ և մուտքի/ելքի կետերում անցել եք մետաղադետեկտորի տեսք ունեցող իրերով, ապա տեսել եք RFID: Կան մի քանի վայրեր, որտեղ կարելի է գտնել լավ տեղեկատվություն RFID- ի ստեղծման վերաբերյալ, և այս հրահանգը կենտրոնանում է Parallax RFID ընթերցողի (Serial TTL) AVR- ի վրա `շեշտը դնելով C կոդի վրա, որն անհրաժեշտ է սերիական մուտքագրումը կարդալու համար: Կոդը C է և չի օգտագործում որևէ արտաքին գրադարան: Իրականում, այն խոսում է 2400 բաուդ ուղղակիորեն առանց UART- ի օգտագործման ՝ համաժամեցնելով RFID ընթերցողի բաուդ արագությանը և կարդալով թվային կապը, որին միացված է: Հուզված? Ես նույնպես.

Քայլ 1: Ստացեք ապրանքները

Ստացեք ապրանքները
Ստացեք ապրանքները

Ձեզ հարկավոր կլինի մասերի հետևյալ ցուցակը.

  • RFID ընթերցող (Պարալաքս #28140 39,99 դոլար)
  • RFID պիտակ (Parallax #32397 $ 0.99)
  • AVR կամ Arduino կլոն (եթե օգտագործում եք պահեստային AVR, ձեզ նույնպես անհրաժեշտ կլինեն max232, 5 x 1uF կոնդենսատորներ և DE9 միակցիչ)
  • Առանց զոդման տախտակ

Ըստ ցանկության

  • 4 դիրքի վերնագիր
  • Մետաղալար

(և պիտակի տեղեկատվության հաղորդման համար max232 և այլն) Դուք կարող եք նաև միացնել ձեր նախընտրած LCD էկրանը ՝ RS232- ի միջոցով պիտակի տվյալների ուղարկման փոխարեն:

Քայլ 2: Միացրեք մասերը

Միացրեք մասերը
Միացրեք մասերը
Միացրեք մասերը
Միացրեք մասերը
Միացրեք մասերը
Միացրեք մասերը

Իրերի ապարատային կողմը բավականին հեշտ է: RFID ընթերցողին անմիջապես իմ տախտակի մեջ դնելու փոխարեն ես նախընտրեցի արագ մալուխ պատրաստել, որպեսզի կարողանամ RFID ընթերցողը մի փոքր ավելի լավ տեղաշարժել: Դրա համար ես պարզապես կտրեցի 4 դիրքեր, որոնցից ես պառկած էի և կպցրեցի երեք լարերի վրա: Էլեկտրական ժապավենը ավարտեց գետտոյի միակցիչը: RFID ընթերցողն ունի 4 միացում.

  • Vcc
  • ԱՌԱԱՐԿԵԼ
  • ԴՈ OՐՍ
  • Գնդ

Ինչպես հավանաբար կռահեցիք, միացրեք Vcc +5V- ին, իսկ Gnd- ը ՝ գետնին: Քանի որ RFID ընթերցողը շատ էներգիա է սպառում, դուք կարող եք հարվածել ԱՆNAՆԵԼ քորոցին ՝ այն անջատելու և միացնելու համար տարբեր ընդմիջումներով: Ես պարզապես ընտրեցի շարունակել այն: Քանի որ այն շրջված է, դուք այն ձգում եք OWԱOWՐ ՝ ակտիվացնելու համար: Այլապես, կարող եք այն միացնել գետնին: Ես այն միացրեցի PIND3- ին ՝ որոշելու դեպքում ինձ միացնելու/անջատելու տարբերակներ տալու համար: OUT պինն այն վայրն է, որտեղ ընթերցողը ուղարկում է իր սերիական տվյալները պիտակը կարդալուց հետո: Ես այն կապեցի PIND2- ի հետ: Ուշադրություն դարձրեք, Պարալաքսի տիեզերքում կարմիրը նշանակում է գնալ: Այսինքն, կանաչ LED- ը նշանակում է, որ միավորը անգործուն է և անգործուն, իսկ կարմիր LED- ը նշանակում է, որ միավորը ակտիվ է: * ուսերը թոթել* Գնալ գործիչ:

Քայլ 3: Գրեք ծածկագիրը

Գրեք ծածկագիրը
Գրեք ծածկագիրը

RFID ընթերցողից տվյալները կարդալու համար պետք է իմանալ, թե երբ է պիտակը ներկայացվել, սերիական պորտից հանել տվյալները, այնուհետև ինչ -որ տեղ ուղարկել:

RFID ընթերցողի տվյալների ձևաչափ

Parallax RFID ընթերցողը տվյալներ է ուղարկում 2400 baud ֆիքսված, սառցադաշտային արագությամբ: RFID պիտակը 10 բայթ է: Սխալների հայտնաբերում/ուղղում թույլ տալու համար, քանի որ ընթերցողը կարող է անջատվել պատահական աղմուկից, 10 բայթ RFID- ը սահմանափակվում է սկզբնական և դադարեցնող պահակակետով: Մեկնարկային պահակախումբը գծային հոսք է (0x0A), իսկ կանգառ պահակակը ՝ վագոնի վերադարձ (0x0D): Կարծես այսպիսին է.

[Սկսել Sentinel | Բայթ 1 | Բայթ 2 | Բայթ 3 | Բայթ 4 | Բայտ 5 | Բայթ 6 | Բայթ 7 | Բայթ 8 | Բայթ 9 | Բայթ 10 | Stop Sentinel]Սրանք երեք հիմնական քայլերն են:

Իմացեք, թե երբ է պիտակը ներկայացվել

Ես AVR- ում օգտագործել եմ Pin Change Interrupt- ը, որը ծանուցում է որոնվածը, որ փոփոխություն է տեղի ունեցել վերահսկվող քորոցում: Դրա համար AVR- ի կազմաձևումը հեշտ է և պահանջում է դրոշի տեղադրում, MCU- ին ասելով, թե որ քորոցն եք ցանկանում վերահսկել և գլոբալ ընդհատման բիթը սահմանելը: Կարգավորել PCINT- ը

BSET (PCICR, PCIE2); // կապի փոփոխման ընդհատման հսկիչ գրանցամատյան pcie2 BSET (PCMSK2, PCINT18); // միացնել կապի փոփոխման ընդհատումը PCINT18 (PD2) BSET (SREG, 7) համար; // Սահմանել SREG I-bitԳրեք ձեր ընդհատման ծառայության ռեժիմը: Դուք ցանկանում եք կարճ պահել ձեր ISR- ն, այնպես որ իմ ընդհատման վեկտորում ես ամբողջ բայթը կարդում եմ բիթ -բիթ և պահում եմ բայթը գլոբալ անկայուն բնույթի զանգվածում: Յուրաքանչյուր ընդհատման ժամանակ ես անում եմ հետևյալը.

  • Ստուգեք, որպեսզի համոզվեմ, որ ես սկզբնական շրջանում եմ
  • Կենտրոնացրեք ժամանակը միջին զարկերակի վրա 2400 baud (RFID ընթերցողի արագություն)
  • Բաց թողեք մեկնարկի բիթը և դադար տվեք հաջորդ բիթերի կեսին
  • Յուրաքանչյուր հատված կարդացեք անստորագիր ամբողջ թվով
  • Երբ ես ստանում եմ 8 բիթ, բայտը տեղադրեք բնույթի զանգվածի մեջ
  • Երբ ես հավաքեմ 12 բայթ, տեղեկացրեք MCU- ին, որ պիտակը կարդացվել է սխալի հայտնաբերման համար:

Ես փոփոխեցի SoftSerial ծածկագիրը Mikal Hart- ից, ով փոփոխեց կոդը David Mellis- ից ՝ սերիական առօրյաների փորձնականորեն որոշված ուշացումների համար:

Վերլուծել RS232 ելքը

PCINT ռեժիմը պարունակում է RFID ընթերցողից RS232 ելքը կարդալու ծածկագիր: Երբ ես ստանում եմ 12 բայթ (10 բայթ RFID գումարած պահապաններ) bDataReady- ը դնում եմ 1-ի և թույլ եմ տալիս, որ հիմնական հանգույցը մշակի տվյալները և ցուցադրի դրանք:

// սա ընդհատումների մշակողն է ՝ ISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Start bit- ը ցածր եկամտաբերությամբ է անցնում; uint8_t բիթ = 0; TunedDelay (CENTER_DELAY); // Մեկնարկային բիթ կենտրոնի համար (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // մի փոքր բաց թող, եղբայր… եթե (BCHK (PIND, RFID_IN)) BSET (bit, x); այլ BCLR (բիթ, x); } TunedDelay (INTRABIT_DELAY); // բաց թողնել կանգառի բիթ RFID_tag [rxIdx] = բիթ; ++ rxIdx; եթե (rxIdx == 12) bDataReady = 1;}

Displayուցադրել ձեր պիտակը

Հիմնական (), հավերժական օղակի ընթացքում ես ստուգում եմ ՝ արդյոք 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:"); (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: Կոդ և հրաժեշտ

Այս էջը պարունակում է համապատասխան կոդով zip ֆայլ: Այն գրվել է AVR Studio 4.16 -ում: Եթե դուք օգտագործում եք ծրագրավորողի նոթատետր, խավարում կամ vi (կամ այլ բան), ապա ձեզ հարկավոր է պատճենել վստահելի Makefile- ը գրացուցակում և ավելացնել այդ ֆայլերը աղբյուրի տողում: Բացի այդ, նշեք, որ սերիական ընթերցման բաժնի ժամանակը հիմնված է 16 ՄՀց MCU: Եթե դուք աշխատում եք ժամացույցի այլ հաճախականությամբ, ապա ձեզ հարկավոր է փորձնականորեն որոշել արագացված արագության իմպուլսների վրա կենտրոնացված կարգավորված ուշացումները: Հուսով եմ, որ այս հրահանգը ձեզ ինչ -որ կերպ օգնեց: Եթե ունեք որևէ առաջարկ, թե ինչպես կարելի է բարելավել այն, մի հապաղեք ինձ տեղյակ պահել:

Խորհուրդ ենք տալիս: