תוכן עניינים:

קורא RFID AVR/Arduino עם קוד UART ב- C: 4 שלבים
קורא RFID AVR/Arduino עם קוד UART ב- C: 4 שלבים

וִידֵאוֹ: קורא RFID AVR/Arduino עם קוד UART ב- C: 4 שלבים

וִידֵאוֹ: קורא RFID AVR/Arduino עם קוד UART ב- C: 4 שלבים
וִידֵאוֹ: 2017 04 04 По коробкам #07 #Программаторы 3 #Взлом #смарт карт, #селфчекер 68HC05, #BiDiPro+адаптеры 2024, נוֹבֶמבֶּר
Anonim
קורא RFID AVR/Arduino עם קוד UART ב- C
קורא RFID AVR/Arduino עם קוד UART ב- C

RFID הוא השיגעון, שנמצא בכל מקום - ממערכות מלאי ועד מערכות זיהוי תג. אם היית פעם בחנות כלבו ועברת בין הדברים שנראים לגלאי מתכות בנקודות הכניסה/היציאה, אז ראית RFID. ישנם מספר מקומות בהם ניתן למצוא מידע טוב על הגדרת RFID, והוראה זו מתמקדת בהתקנת קורא RFID Parallax (TTL סידורי) על AVR, בדגש על קוד C הדרוש לקריאת הקלט הטורי. הקוד נמצא ב- C ואינו משתמש בספריות חיצוניות. למעשה, הוא מדבר 2400 שידור ישירות ללא שימוש ב- UART על ידי סנכרון עם קצב השידור של קורא ה- RFID וקריאת הסיכה הדיגיטלית שאליה הוא מחובר. נִרגָשׁ? גם אני.

שלב 1: קבל את הסחורה

קבל את הסחורה
קבל את הסחורה

תזדקק לרשימת החלקים הבאה:

  • קורא RFID (Parallax #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
  • לְאַפשֵׁר
  • הַחוּצָה
  • Gnd

כפי שבטח ניחשתם, חבר את Vcc ל- +5V ו- Gnd לקרקע. מכיוון שקורא ה- RFID צורך כל כך הרבה כוח, אתה יכול ללחוץ על סיכה ENABLE כדי לכבות ולהדליק אותו במרווחי זמן שונים. פשוט בחרתי להמשיך את זה. מכיוון שהוא הפוך, אתה מושך אותו נמוך כדי להפעיל אותו. לחלופין, אתה יכול לחבר אותו לקרקע. חיברתי אותו ל- PIND3 כדי לתת לי אפשרויות הפעלה/השבתה אם החלטתי. סיכת OUT היא המקום שבו הקורא שולח את הנתונים הטוריים שלו לאחר שהוא קורא תג. חיברתי אותו ל- PIND 2. שימו לב, ביקום Parallax, אדום פירושו ללכת. כלומר, נורית LED ירוקה פירושה שהיחידה אינה פעילה ובטלה, ואילו נורית LED אדומה פירושה שהיחידה פעילה. * מושך בכתפי* לך דמות.

שלב 3: כתוב את הקוד

כתוב את הקוד
כתוב את הקוד

כדי לקרוא את הנתונים מקורא ה- RFID, עליך לדעת מתי נשלח תג, למשוך את הנתונים מהיציאה הטורית ולאחר מכן לשלוח אותם למקום כלשהו.

פורמט נתוני קורא RFID

קורא ה- RFID של Parallax שולח נתונים בקצב קבוע וקרחוני של 2400 באוד. תג RFID הוא 10 בתים. על מנת לאפשר זיהוי/תיקון שגיאות, מכיוון שניתן להפריד את הקורא מרעש אקראי, ה- RFID של 10 בתים מוגבל על ידי זקיף התחלה ועצירה. הזקיף ההתחלתי הוא הזנת קווים (0x0A) ושומר העצירה הוא החזרת כרכרה (0x0D). זה נראה כמו זה:

[התחל זקיף | בייט 1 | בייט 2 | בייט 3 | בייט 4 | בייט 5 | בייט 6 | בייט 7 | בייט 8 | בייט 9 | בייט 10 | עצור את הזקיף]אלו הם שלושת השלבים העיקריים.

דע מתי נשלח תג

השתמשתי בהפרעה לשינוי סיכה במכשיר ה- AVR המודיע לקושחה על כך שחל שינוי בסיכה המנוטרת. הגדרת ה- 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 ונתתי ללולאה הראשית לעבד את הנתונים ולהציג אותם.

// זהו ה- ISTR interrupt handlerIS (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // bit start יורד לתשואה נמוכה; uint8_t bit = 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] = bit; ++ rxIdx; if (rxIdx == 12) bDataReady = 1;}

הצג את התג שלך

בחלק הראשי (), במהלך הלולאה של (אי פעם), אני בודק אם הוגדרה bDataReady, ומסמנת כי כל מבנה ה- RFID נשלח. לאחר מכן אני בודק אם מדובר בתג תקף (כלומר תווי התחלה והעצירה הם 0x0A ו- 0x0D, בהתאמה), ואם כן, אני שולח אותו מחיבור ה- RS232 שלי.

עבור (;;) {if (bDataReady) {#ifdef _DEBUG_ USART_tx_S ("Byte start:"); 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 (או משהו אחר) יהיה עליך להעתיק קובץ Mak מהימן לתוך הספרייה ולהוסיף קבצים אלה לשורת המקור. כמו כן, שימו לב, העיתוי של קטע הקריאה הסדרתית מבוסס על 16MHz MCU. אם אתה פועל בתדר שעון אחר, יהיה עליך לקבוע בניסוי את העיכובים המכוונים למרכז את פולסי קצב השידור. אני מקווה שהמדריך הזה עזר לך בדרך כלשהי. אם יש לך הצעות כיצד לשפר אותו אל תהסס ליידע אותי!

מוּמלָץ: