RFID
-
EEPROM-minne
Som systemet fungerar idag behöver tagg och RFID-läsare paras ihop varje gång microcontrollern körs igång. Detta för att taggens id sparas på RAM-minnet och går därmed förlorat när microcontrollern stängs av. Lösningen blir istället att koppla ett icke-flyktigt minne, ett EEPROM-minne, till microcontrollen och spara taggen id där.
Gränssnittet SPI kommer att användas i kommunikationen. Serial Peripheral Interface Bus eller SPI är ett full-duplex synkront seriellt gränssnitt som använder master/slave principen. Det innebär att en enhet kontrollerar en eller flera andra enheter. I det här fallet kommer microcontrollern att vara mastern och EEPROM-minnet att vara slaven. Då SPI är ett synkront gränssnitt innebär det att det finns en klocka som synkroniserar dataöverföringen mellan sändare och mottagare
Än så länge har vi inte fått igång kommunikationen. Microcontrollern tar bara emot nollor från minnet och det är oklart om sändningen fungerar som tänkt. Det kan vara att vi har missat att initiera en klocka eller likanade.
-
Nu går det undan
Efter att ha lyckats med att etablera kommunikationen mellan RFID och processorn och lyckats para ihop specifik tag med processorn började vi tänka på hur vi skulle göra näst, hur vi ska kommunicera med låssystemet i bilen. Efter att ha diskuterat problemet med vår handledare Henrik och Broccolis VD Björn bestämde vi att slopa tanken på att koppla in oss på CAN-bussen i fordonet och istället styra låset på annat vis, använda oss av det befintliga fjärrstyrningen av låset. Detta kommer ge en universell lösning som fungerar på olika bilmodeller och det kommer inte bli problem med konflikt med bilens elsystem.
På slutet av veckan lyckades vi lägga till ett fjärrlås till vår krets. Fjärrlåset använder frekvensen 433,92 MHz och eftersom vi inte har någon bil till nyckeln så köpte vi en mottagarmodul som kan läsa den frekvens. Med mottagarmodulen ser vi på ett oscilloskop när information mottas. Nu fungerar kretsen som så att vid kontakt med rätt tag så skickas en signal från fjärrkontrollen som kan avläsas på oscilloskopet.
Den här veckan har det hänt mycket i projektet. Vi har fått systemet att aktivera fjärrkontrollen till låset då rätt tag är inom avstånd. Med tanke på stabilitet och hysteres har vi fått det att fungera ganska bra. Det kommer dock behöva anpassas när vi får tag på en läsare med längre räckvidd.
Nedan ser ni en två bilder, den ena är en bild på kretsen som man hittar i en fjärrkontroll till bilen. Vi har tagit bort två knappar och istället lött dit kopplingar. Fjärrkontrollen får nu input från processorn istället för att någon trycker på lås/lås upp knappen.
Den andra bilden är en mottagare som tar emot signalerna från fjärrkontrollen. Via ett oscilloskop kan vi se att information har mottagits.
-
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”.
-
Första kretsen
RFID-läsare, antenn och taggar kom i tisdags. Vi testade så att RFID:n fungerar med ett oscilloskop. Den ger en signal med ett dataord när läsaren känner av taggen så det fungerar. Vi har även lött ihop ett experimentkort som man ska kunna testa RFID:n med processorn och blinka en LED vid kontakt.
Koden som körs på microcontrollern fungerar så att den loopar runt tills en viss flagga sätts och den sätts när microcontrollern har fått indata, dvs när läsaren kännt av taggen och skickat data. När denna flagga är satt hoppar den ut ur loopen. Som det fungerar nu så kör vi koden, antennen känner av taggen och det skickas information till microcontrollern. Vi har satt in en breakpoint när den hoppar ut ur loopen så vi ser att den gör det, microcontrollen får input från RFID-läsaren. Problemet nu är att det bara funkar första gången man kör koden. Förmodligen är det någon buffer som behöver rensas eller liknande. Vi ska fortsätta med det nästa vecka.