Kommunikationen fungerar!
I slutet av förra veckan fick microcontrollen input från RFID-läsaren men det var bara en byte och vi kunde inte se vad det var för tecken. Vi hade också problem med att microcontrollern endast tog emot data en gång, första gången vi scannade taggen.
Vi började med att löda ihop ett nytt experimentkort så att vi kunde använda extern matningsspänning och inte mata in via USBn som vi hade gjort tidigare. Anledningen till det är att matningsspänningen från datorn kan vara ojämn. Vi kom också på att vår breakpoint i debuggern störde sändingen, RFID-läsaren fortsatte att sända men vi tog inte emot några fler tecken eftersom vi pausade microcontrollern. Det kan ha orsakat problemet vi hade i fredags, att microcontrollern endast tog emot data första gången vi scannade taggen.
Sedan fick vi igång debuggingen med Eclipse så att vi kunde se vad det var för tecken som skickades från RFID-läsaren till microcontrollern. Vi visste sedan tidigare att vi skulle ta emot 14 tecken och att dessa var:
- 1 ASCII-tecken, 02 = start of text
- 10 ASCII-tecken, varav 2 slumptecken och 8 tecken som anger kortets id
- 2 ASCII-tecken, Checksumman
- 1 ASCII-tecken, 03 = end of text
Efter att ha ändrat koden några gånger testade vi och det fungerade! Vi skannade taggen med numret 3481554 och tog emot fick 14 bytes: 0x02 (hexadecimalt), 6 (char), F (char), 0 (char), 0 (char), 3 (char), 5 (char), 1 (char), F (char), D (char), 2 (char), 9 (char), 7 (char), 0x03 (hexadecimalt).
Det första tecknet, 0x02, är ASCII-tecknet för “start of text”, skickas först. Sedan ett slumptal 0x6F följt åtta tecken som anger taggens id som en hexadecimal siffra, nämligen 00351FD2. Gör man om 351FD2 till ett decimalt tal så får man 3481554. Yeay! Därefter följer 0x97 som är checksumman som räknas ut genom en XOR operation. 0x6F xor 0x00 xor 0x35 xor 0x1F xor 0xD2 = 0x97. Alltså stämmer även checksumman. Det sista tecknet 0x03 är ASCII-tecknet för “stop of text”.