Სარჩევი:

AVR/Arduino RFID მკითხველი UART კოდით C: 4 საფეხურზე
AVR/Arduino RFID მკითხველი UART კოდით C: 4 საფეხურზე

ვიდეო: AVR/Arduino RFID მკითხველი UART კოდით C: 4 საფეხურზე

ვიდეო: AVR/Arduino RFID მკითხველი UART კოდით C: 4 საფეხურზე
ვიდეო: How To Interface Rfid Module With Arduino || Tomson Electronics 2024, ნოემბერი
Anonim
AVR/Arduino RFID მკითხველი UART კოდით C- ში
AVR/Arduino RFID მკითხველი UART კოდით C- ში

RFID არის სიგიჟე, რომელიც ყველგან გვხვდება - ინვენტარიზაციის სისტემებიდან დაწყებული სამკერდე ID სისტემებით. თუ ოდესმე ყოფილხართ უნივერმაღში და გადიხართ იმ ლითონის დეტექტორების საგნებს შესასვლელ/გასასვლელ წერტილებში, მაშინ გინახავთ RFID. რამოდენიმე ადგილია კარგი ინფორმაციის მოსაძებნად RFID– ის დაყენების შესახებ და ეს ინსტრუქცია ორიენტირებულია Parallax RFID მკითხველის (სერიული TTL) AVR– ზე დაყენებაზე, სერიული შეყვანის წასაკითხად საჭირო C კოდზე ხაზგასმით. კოდი არის C და არ იყენებს გარე ბიბლიოთეკებს. ფაქტობრივად, ის საუბრობს 2400 baud პირდაპირ UART– ის გამოყენების გარეშე RFID მკითხველის baud განაკვეთის სინქრონიზაციით და ციფრული პინის კითხვით, რომელსაც ის უკავშირდება. აღფრთოვანებული? Მეც.

ნაბიჯი 1: მიიღეთ საქონელი

მიიღეთ საქონელი
მიიღეთ საქონელი

თქვენ დაგჭირდებათ ნაწილების შემდეგი სია:

  • RFID მკითხველი (პარალექსი #28140 $ 39.99)
  • RFID ტეგი (პარალექსი #32397 $ 0.99)
  • AVR ან Arduino კლონი (თუ იყენებთ საწყობ AVR– ს, ასევე დაგჭირდებათ max232, 5 x 1uF კონდენსატორები და DE9 კონექტორი)
  • შედუღების გარეშე დაფა

სურვილისამებრ

  • 4 პოზიციის სათაური
  • მავთული

(და tag232 და ა.შ. ტეგების ინფორმაციის გადასაცემად) თქვენ ასევე შეგიძლიათ დაუკავშიროთ თქვენი საყვარელი LCD ეკრანი RS232- ის საშუალებით ტეგის მონაცემების გაგზავნის ნაცვლად.

ნაბიჯი 2: დააკავშირეთ ნაწილები

დააკავშირეთ ნაწილები
დააკავშირეთ ნაწილები
დააკავშირეთ ნაწილები
დააკავშირეთ ნაწილები
დააკავშირეთ ნაწილები
დააკავშირეთ ნაწილები

ტექნიკის მხარე საკმაოდ მარტივია. იმის ნაცვლად, რომ ჩემი RFID მკითხველი პირდაპირ ჩემს დაფაზე შევიდე, მე შევარჩიე სწრაფი კაბელის გაკეთება, რათა შემეძლო RFID მკითხველი ოდნავ უკეთ გადამეტანა. ამისთვის, მე მხოლოდ 4 პოზიცია შეწყვიტე ქალის ბუდეის სათაურის ზოლიდან, რომელზედაც მე ვიწექი და სამ მავთულზე შევაერთე. ელექტრო ფირმა დაასრულა გეტოს კონექტორი. RFID მკითხველს აქვს 4 კავშირი:

  • Vcc
  • ჩართვა
  • გარეთ
  • Gnd

როგორც თქვენ ალბათ მიხვდით, დაუკავშირეთ Vcc +5V და Gnd მიწას. იმის გამო, რომ RFID მკითხველი მოიხმარს ამდენ ენერგიას, შეგიძლიათ ჩართოთ ჩართული პინი, რომ გამორთოთ და ჩართოთ იგი სხვადასხვა ინტერვალებით. მე უბრალოდ მისი გაგრძელება ვარჩიე. იმის გამო, რომ ის ინვერსიულია, თქვენ ააქტიურებთ მას LOW გასააქტიურებლად. გარდა ამისა, შეგიძლიათ დააკავშიროთ იგი მიწასთან. მე დავუკავშირდი მას PIND3– ს, რომ გადამეწყვიტა ჩართვის/გამორთვის ვარიანტები. OUT პინი არის ადგილი, სადაც მკითხველი აგზავნის თავის სერიულ მონაცემებს ტეგის წაკითხვის შემდეგ. მე დავუკავშირდი მას PIND2. შენიშვნა, პარალაქსის სამყაროში წითელი ნიშნავს წასვლას. ანუ, მწვანე LED ნიშნავს, რომ მოწყობილობა არააქტიური და უმოქმედოა, ხოლო წითელი LED ნიშნავს, რომ მოწყობილობა აქტიურია. * მხრები აიჩეჩა* ფიგურა.

ნაბიჯი 3: ჩაწერეთ კოდი

დაწერე კოდი
დაწერე კოდი

RFID მკითხველის მონაცემების წასაკითხად, თქვენ უნდა იცოდეთ როდის არის წარდგენილი წარწერა, ამოიღეთ მონაცემები სერიული პორტიდან, შემდეგ გაგზავნეთ სადმე.

RFID Reader მონაცემთა ფორმატი

Parallax RFID მკითხველი აგზავნის მონაცემებს ფიქსირებული, მყინვარული ტემპით 2400 baud. RFID ტეგი არის 10 ბაიტი. შეცდომის გამოვლენის/შესწორების საშუალებას, რადგან მკითხველს შეეძლება შემთხვევითი ხმაურისგან გათიშვა, 10-ბაიტიანი RFID შემოსაზღვრულია საწყისი და გაჩერების სენტინელით. საწყისი სენტინელი არის ხაზის კვება (0x0A) და გაჩერების სენტინელი არის ვაგონის დაბრუნება (0x0D). ასე გამოიყურება:

[დაწყება სენტინელი | ბაიტი 1 | ბაიტი 2 | ბაიტი 3 | ბაიტი 4 | ბაიტი 5 | ბაიტი 6 | ბაიტი 7 | ბაიტი 8 | ბაიტი 9 | ბაიტი 10 | შეაჩერე სენტინელი]ეს არის სამი ძირითადი ნაბიჯი.

იცოდეთ როდის არის წარდგენილი წარწერა

მე გამოვიყენე Pin Change Interrupt AVR– ზე, რომელიც აცნობებს firmware– ს, რომ ცვლილება მოხდა მონიტორინგის პინზე. ამისთვის AVR- ის კონფიგურაცია ადვილია და მოითხოვს დროშის დაყენებას, MCU- ს თქმას, თუ რომელ პინზე გსურთ მონიტორინგი და გლობალური შეწყვეტის ბიტის დაყენება. PCINT- ის კონფიგურაცია

BSET (PCICR, PCIE2); // პინის შეცვლა შეწყვეტის კონტროლის რეესტრი pcie2 BSET (PCMSK2, PCINT18); // ჩართეთ პინის შეცვლის შეწყვეტა PCINT18 (PD2) BSET (SREG, 7); // დააყენეთ SREG I-bitჩაწერეთ თქვენი შეწყვეტის სერვისი რუტინული გსურთ შეინარჩუნოთ თქვენი ISR მოკლე, ასე რომ ჩემს შეწყვეტის ვექტორში წავიკითხე მთელი ბაიტი, ბიტი ბიტი და შევინახე ბაიტი გლობალური არასტაბილური სიმბოლოების მასივში. თითოეულ შეფერხებაზე ვაკეთებ შემდეგს:

  • შეამოწმეთ, რომ დარწმუნებული ვარ, რომ დასაწყისში ვარ
  • ცენტრი გაუკეთეთ დრო შუა პულსზე 2400 ბაუდზე (RFID წამკითხველის სიჩქარე)
  • გამოტოვეთ დაწყების ბიტი და გააჩერეთ მომდევნო ბიტის შუაზე
  • წაიკითხეთ თითოეული ნაწილი ხელმოუწერელ რიცხვში
  • როდესაც მე მივიღე 8 ბიტი, ჩადეთ ბაიტი სიმბოლოთა მასივში
  • როდესაც მე შევაგროვე 12 ბაიტი, შეატყობინეთ MCU– ს, რომ წარწერა წაკითხულია შეცდომის გამოვლენის მიზნით.

მე შევცვალე SoftSerial კოდი მიკალ ჰარტისგან, რომელმაც შეცვალა კოდი დევიდ მელისისგან სერიული რუტინის ექსპერიმენტულად განსაზღვრული დაგვიანებით.

გაანალიზეთ RS232 გამომავალი

PCINT რუტინა შეიცავს კოდს RS232 გამომავალი RFID მკითხველიდან. როდესაც მე მივიღე 12 ბაიტი (10-ბაიტიანი RFID პლუს სენტინელი) მე დავაყენე bDataReady 1-ზე და გავუშვი ძირითადი მარყუჟი მონაცემებს ამუშავებს და აჩვენებს მას.

// ეს არის შეწყვეტის დამმუშავებელი uint8_t bit = 0; დარეგულირებული დაგვიანებით (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;}

თქვენი ტეგის ჩვენება

ძირითად () მარყუჟის განმავლობაში (ყოველთვის), მე ვამოწმებ, არის თუ არა bDataReady დადგენილი, რაც მიანიშნებს, რომ გაიგზავნა მთელი RFID სტრუქტურა. შემდეგ ვამოწმებ, არის თუ არა ეს სწორი ტეგი (ანუ დაწყებული და გაჩერების სიმბოლოები შესაბამისად 0x0A და 0x0D), და თუ ასეა, მე მას გამოვგზავნი ჩემი RS232 კავშირით.

for (;;) {if (bDataReady) {#ifdef _DEBUG_ USART_tx_S ("დაწყება ბაიტი:"); 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: კოდი და გამოსამშვიდობებელი

ეს გვერდი შეიცავს zip ფაილს შესაბამისი კოდით. იგი დაიწერა AVR Studio 4.16 -ში. თუ იყენებთ პროგრამისტის ბლოკნოტს, დაბნელებას ან vi (ან სხვა რამეს) თქვენ უნდა დააკოპიროთ სანდო Makefile დირექტორიაში და დაამატოთ ეს ფაილები წყაროს ხაზზე. ასევე გაითვალისწინეთ, რომ სერიული კითხვის განყოფილების დრო ემყარება 16 MHz MCU. თუ თქვენ მუშაობთ საათის სხვა სიხშირეზე, თქვენ უნდა ექსპერიმენტულად განსაზღვროთ დაგეგმილი შეფერხებები ცენტრში baud განაკვეთის იმპულსებზე. ვიმედოვნებ, რომ ეს ინსტრუქცია გარკვეულწილად დაგეხმარა. თუ თქვენ გაქვთ რაიმე შემოთავაზება, თუ როგორ შეიძლება მისი გაუმჯობესება, ნუ დააყოვნებთ შემატყობინოთ!

გირჩევთ: