This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| en:examples:communication:rfid [2009/11/05 13:31] – external edit 127.0.0.1 | en:examples:communication:rfid [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== RFID sensor | + | ====== RFID moodulid |
| + | <note important> | ||
| + | RFID on tehnoloogia andmevahetuseks raadiolainete kaudu lugeja ja elektroonilise identiteedi vahel, mis on paigaldatud mõne objekti külge identifitseerimise ja jälgimise eesmärgil. RFID võimaldab iga objektiga siduda unikaalse ID-numbri. Passiivsed identiteedid, | ||
| - | ===== Ühendusskeem | + | ===== Mifare SL031 RFID moodul |
| + | Mifare RFID moodul on kõrgsageduslik RFID lugeja, mis töötab sagedusel 13,56 MHz. | ||
| + | Samal sagedusel töötvad ka mitmed Eesti koolides ja ettevõtetes kasutatavad id-kaardid ning RFID-nööbid. | ||
| + | Moodul SL031 ühendatakse kontrolleriplaadiga järgmiselt: | ||
| + | VCC – toide + 3.3 V (sideplaadi Xbee liidesest või kontrolleriplaadi ühendusribast), | ||
| + | IN – energia säästmiseks saab RFID-mooduli saata uinunud olekusse. Selleks saadetakse talle käsk 0x50. RFID-moodul ärkab üles langeva frondi peale IN sisendis. | ||
| + | TXD – ühendada kontrolleri RXD viiguga (nt. PE0 USART0 kasutamisel suhtlemiseks) | ||
| + | RXD – ühendada kontrolleri TXD viiguga (nt. PE1) | ||
| + | OUT – see väljund näitab, et mõni ID on detekteeritav (kaart mooduli ligidal, väljund all) või mitte (kaarti pole, väljund üleval) | ||
| + | GND – maaühendus | ||
| + | |||
| + | USART0 kasutamisel RFID mooduliga suhtlemiseks ei tohi RFID mooduli TXD/RXD viigud ISP programmeerimise ajal olla sideplaadiga ühendatud, sest siis tekib konflikt ja programmeerimine ei õnnestu. | ||
| + | |||
| + | USART seaded SL031 puhul on vaikimise 115200-8-N-1-N. Arvutiga ühendamise puhul, kui RFID-mooduliga suhtlemiseks kasutatakse USART0 liidest, siis jumperid parempoolsel piikribapaaril tuleb tõsta Xbee pealt RS232_2 peale ja arvuti COM port ühendada sideplaadi RS232_2 pistikusse. | ||
| + | |||
| + | Andmevahetuse formaat kontrolleri ja RFID-mooduli vahel koosneb mitmest baidist, mis on kindlas järjekorras. Esimene bait on alati sama (kontrollerist saatmise puhul 0xBA). Teine bait näitab, mitu baiti veel pärast seda saadetakse ja seda on näiteks võimalik kasutada andmevahetuse jälgimiseks, | ||
| + | |||
| + | Näiteprogramm saadab iga sekundi järel käsu RFID moodulile, et teada, kas sellel on mõni ID kaart avastataval ligidusel. Kui on, siis kuvab kaardi unikaalset ID-d tablool. Andmevahetuse iga bait on 16-süsteemis arv/kood, mis tuleb ekraanil kuvamiseks teisendada ASCII tähemärkideks. | ||
| + | |||
| + | ===== Mifare SL031 näitekood ===== | ||
| + | |||
| + | <code c> | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | usart port = USART(1); | ||
| + | |||
| + | // Käsk moodulile - kaardi valimine | ||
| + | // preamble, len, command, data, checksum | ||
| + | char SL031CMD_SelectCard[] = {0xBA, | ||
| + | |||
| + | void hex_to_ascii(char *mass, char byte); | ||
| + | |||
| + | int main (void) | ||
| + | { | ||
| + | char resp[14]; | ||
| + | char str[4]; | ||
| + | int a = 0; | ||
| + | int bnr = 4; | ||
| + | |||
| + | // USART1 setup | ||
| + | usart_init_async(port, | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | // LCD ekraani algseadistamine | ||
| + | lcd_gfx_init(); | ||
| + | |||
| + | // Taustavalgustuse tööle lülitamine | ||
| + | lcd_gfx_backlight(true); | ||
| + | |||
| + | // Ekraanile teksti kirjutamine | ||
| + | lcd_gfx_goto_char_xy(3, | ||
| + | lcd_gfx_write_string(" | ||
| + | lcd_gfx_goto_char_xy(0, | ||
| + | lcd_gfx_write_string(" | ||
| + | |||
| + | while (1) // | ||
| + | { | ||
| + | // Saada käsk RFID moodulile | ||
| + | usart_send_string(port, | ||
| + | |||
| + | // kuni vastuse andmebaidid kohal | ||
| + | while (a < bnr) | ||
| + | { | ||
| + | // loeb USART-ist andmeid ja salvestab | ||
| + | if (usart_try_read_char(port, | ||
| + | { | ||
| + | // järgmine bait | ||
| + | | ||
| + | // II bait näitab, mitu baiti veel tulemas on | ||
| + | if (a == 2) bnr = resp[1] + 2; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // kui ID puudub - "no tag" vastus | ||
| + | if (resp[3] == 0x01) | ||
| + | { | ||
| + | // kirjuta seda | ||
| + | lcd_gfx_goto_char_xy(4, | ||
| + | lcd_gfx_write_string(" | ||
| + | } | ||
| + | // ID on olemas ja loetav | ||
| + | else | ||
| + | { | ||
| + | // vaata ainult ID baite | ||
| + | for (a=4; a< | ||
| + | { | ||
| + | // teisendab loetud andmed stringiks | ||
| + | hex_to_ascii(str, | ||
| + | // kirjuta ekraanile | ||
| + | lcd_gfx_goto_char_xy((a-2)*2, | ||
| + | lcd_gfx_write_string(str); | ||
| + | } | ||
| + | } | ||
| + | // loendurid algusesse | ||
| + | a = 0; | ||
| + | bnr = 4; | ||
| + | // viide uuendamiseks | ||
| + | hw_delay_ms(1000); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // Teisendab hex kujul arvu ASCII märkideks ja salvestab stringi | ||
| + | void hex_to_ascii(char *mass, char byte) | ||
| + | { | ||
| + | unsigned int high = 0; | ||
| + | |||
| + | // leiab esimese numbrikoha hex arvust | ||
| + | while (byte > 0x0F) | ||
| + | { | ||
| + | high++; | ||
| + | byte -= 0x10; | ||
| + | } | ||
| + | // esimene numbrikoht, hex teisendada ASCII-ks | ||
| + | mass[0] = high + 0x30; | ||
| + | // kui tähemärk | ||
| + | if (mass[0] >= 0x3A) mass[0] += 0x07; | ||
| + | // teine numbrikoht, hex teisendada ASCII-ks | ||
| + | mass[1] = byte + 0x30; | ||
| + | if (mass[1] >= 0x3A) mass[1] += 0x07; | ||
| + | // stringi terminaator | ||
| + | mass[2] = 0x00; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Parallax RFID moodul ===== | ||
| + | |||
| + | Parallaxi RFID moodul on madalsageduslik RFID lugeja, mis töötab sagedusel ~170 kHz. | ||
| {{: | {{: | ||
| - | ===== Näitekood | + | ===== Parallax RFID näitekood |
| Järgnev kood kasutab RFID lugejat ja LCD ekraani. | Järgnev kood kasutab RFID lugejat ja LCD ekraani. | ||