• Nenhum resultado encontrado

Leitor RFID

N/A
N/A
Protected

Academic year: 2021

Share "Leitor RFID"

Copied!
30
0
0

Texto

(1)

Leitor RFID

Leitor RFID

Cartões RFID são normalmente usados para controle de acesso e tickets de ônibus e metrôs. Eles são Cartões RFID são normalmente usados para controle de acesso e tickets de ônibus e metrôs. Eles são convenientes porque não precisam de contato direto para transferir informações depara o cartão. Como convenientes porque não precisam de contato direto para transferir informações depara o cartão. Como estes cartões são alimentados pelos pr!prios leitores" dispensam o uso de baterias que precisariam ser estes cartões são alimentados pelos pr!prios leitores" dispensam o uso de baterias que precisariam ser recarre#adas.

recarre#adas.

$ara os meus e%perimentos estou usando catrões da &ID I'$ro%. Estes cartões são os mais simples de toda $ara os meus e%perimentos estou usando catrões da &ID I'$ro%. Estes cartões são os mais simples de toda a lin(a de cartões RFID" que somente arma)enam um n*mero de s+rie e não usam cripto#rafia. ,

a lin(a de cartões RFID" que somente arma)enam um n*mero de s+rie e não usam cripto#rafia. , frequ-ncia da portadora + de /0k&).

frequ-ncia da portadora + de /0k&).

1 primeiro passo + descobrir como desenvolver um leitor simples. 2!s sabemos que o cartões RFID + 1 primeiro passo + descobrir como desenvolver um leitor simples. 2!s sabemos que o cartões RFID + alimentado pelo campo ma#n+tico emitido pelo leitos. ,s

alimentado pelo campo ma#n+tico emitido pelo leitos. ,s tagstags3 RFID transferem informação de volta ao3 RFID transferem informação de volta ao

leitor consumindo este campo ma#n+tico" que + detectado pelo leitor como uma variação no campo. leitor consumindo este campo ma#n+tico" que + detectado pelo leitor como uma variação no campo.

3 'ão c(amados de 4

3 'ão c(amados de 4tagstags5 RFID todos os elementos que arma)enam informações e são m!veis" como o5 RFID todos os elementos que arma)enam informações e são m!veis" como o

cartão" neste caso espec6fico. cartão" neste caso espec6fico.

1 pro7eto mais comum de um leitor RFID fa) uso de um circuito ressonante s+rie. Ele consiste de um 1 pro7eto mais comum de um leitor RFID fa) uso de um circuito ressonante s+rie. Ele consiste de um indutorsimples e um capacitor" e%citados por uma fonte de tensão de bai%a imped8ncia. 'e o 9 do circuito indutorsimples e um capacitor" e%citados por uma fonte de tensão de bai%a imped8ncia. 'e o 9 do circuito for alto o suficiente" a tensão no ponto de amostra#em :;sample< vai e%ceder a tensão de alimentação. for alto o suficiente" a tensão no ponto de amostra#em :;sample< vai e%ceder a tensão de alimentação. 9uando o RFID + alimentado por este campo ma#n+tico o 9 do circuito cai. 1 resultado + uma pequena 9uando o RFID + alimentado por este campo ma#n+tico o 9 do circuito cai. 1 resultado + uma pequena alteração na tensão de amostra#em :;sample no circuito mostrado<.

(2)
(3)

Eu criei um leitor simples com componentes encontrados em min(a sucata. =sando um #erador de função Eu criei um leitor simples com componentes encontrados em min(a sucata. =sando um #erador de função como fonte de sinal e um oscilosc!pio no ponto de amostra#em" eu pude sintoni)ar a frequ-ncia at+

como fonte de sinal e um oscilosc!pio no ponto de amostra#em" eu pude sintoni)ar a frequ-ncia at+ encontrar o ponto ressonante do circuito. Eu continuei substituindo os capacitores neste circuito at+ encontrar o ponto ressonante do circuito. Eu continuei substituindo os capacitores neste circuito at+ encontrar a frequ-ncia que eu estava procurando. 1 c>lculo da frequ-ncia + este?

encontrar a frequ-ncia que eu estava procurando. 1 c>lculo da frequ-ncia + este?

$or al#uma ra)ão eu me confundi e iniciei o pro7eto tendo em mente a frequ-ncia de 0@k&) ao inv+s de $or al#uma ra)ão eu me confundi e iniciei o pro7eto tendo em mente a frequ-ncia de 0@k&) ao inv+s de /0k&). ,s

/0k&). ,s tagstags RFID respondem bem a uma frequ-ncia mais alta" então eu mantive assim para evitar RFID respondem bem a uma frequ-ncia mais alta" então eu mantive assim para evitar

voltar a tr>s e redesen(ar todo o circuito. voltar a tr>s e redesen(ar todo o circuito.

Com um a7uste simples eu verifiquei quais alterações aconteciam quando a ta# RFID era submetida a A ou Com um a7uste simples eu verifiquei quais alterações aconteciam quando a ta# RFID era submetida a A ou 0 ciclos de frequ-ncia da portadora. =ma ve) que o sinal precisa ser ,C e não DC" eu assumi que a

0 ciclos de frequ-ncia da portadora. =ma ve) que o sinal precisa ser ,C e não DC" eu assumi que a frequ-ncia de transmissão seria 0@k&B  B.0k&) ou 0@k&)@  0k&). Este detal(e eu encontrei frequ-ncia de transmissão seria 0@k&B  B.0k&) ou 0@k&)@  0k&). Este detal(e eu encontrei em um site que foi realmente *til por conter boas informações sobre

em um site que foi realmente *til por conter boas informações sobre RFID?

RFID?(ttp?instruct.cit.cornell.educourseseeAFinal$ro7ectss/@@c7rGebsiteinde%.(tm(ttp?instruct.cit.cornell.educourseseeAFinal$ro7ectss/@@c7rGebsiteinde%.(tm..

,

, tag tag  aparentemente codifica o dado usando F'H. ,s duas frequ-ncias representam o @ e  l!#icos. aparentemente codifica o dado usando F'H. ,s duas frequ-ncias representam o @ e  l!#icos.

Com esta informações em mãos" eu avancei e iniciei o pro7eto do meu pr!prio indutorantena. =ma ve) Com esta informações em mãos" eu avancei e iniciei o pro7eto do meu pr!prio indutorantena. =ma ve) que eu mantive a id+ia de usar 0@k&) como frequ-ncia da portadora" eu fi) o c>lculo e fiquei com uma que eu mantive a id+ia de usar 0@k&) como frequ-ncia da portadora" eu fi) o c>lculo e fiquei com uma indut8ncia de @u& e um capacitor de @nF. Eu utili)ei a se#uinte equação para estimar o n*mero de indut8ncia de @u& e um capacitor de @nF. Eu utili)ei a se#uinte equação para estimar o n*mero de

(4)

voltas que precisaria em min(a bobina? voltas que precisaria em min(a bobina?

1nde %" J são o comprimento e a lar#ura da bobina" ( + a altura e b + a espessura da parte condutora. Eu 1nde %" J são o comprimento e a lar#ura da bobina" ( + a altura e b + a espessura da parte condutora. Eu utili)er %Jcm" (cm e b@.cm. 1 n*mero encontrado foi A. Eu enrolei a bobina em uma cai%a de utili)er %Jcm" (cm e b@.cm. 1 n*mero encontrado foi A. Eu enrolei a bobina em uma cai%a de  papel que encontrei" de onde eu e%trai o % e J

 papel que encontrei" de onde eu e%trai o % e J. Depois de enrolada" a bobina foi e%tra6da e presa com fita. Depois de enrolada" a bobina foi e%tra6da e presa com fita adesiva.

adesiva.

$ara um a7uste fino da frequ-ncia ressonante do sistema todo eu decidi brincar com o valor da $ara um a7uste fino da frequ-ncia ressonante do sistema todo eu decidi brincar com o valor da

capacit8ncia. =sando o #erador de função para variar a frequ-ncia e visuali)ando o pico da sa6da com um capacit8ncia. =sando o #erador de função para variar a frequ-ncia e visuali)ando o pico da sa6da com um oscilosc!pio" eu variei os valores dos capacitores at+ que o pico da resposta ressonante fosse a 0@k&). 1 oscilosc!pio" eu variei os valores dos capacitores at+ que o pico da resposta ressonante fosse a 0@k&). 1 capacitor final foi de @.@0uF. =ma ve) que o meu capacitor precisa ser um valor de mercado" a bobina capacitor final foi de @.@0uF. =ma ve) que o meu capacitor precisa ser um valor de mercado" a bobina que eu constru6 precisa ter uma indut8ncia maior que @u&.

que eu constru6 precisa ter uma indut8ncia maior que @u&.

1 pr!%imo est>#io era

1 pr!%imo est>#io era pro7etar o circuito pro7etar o circuito anal!#ico. Eu usei o canal!#ico. Eu usei o confi>vel ,K$1$ onfi>vel ,K$1$ LM@/ :eu 7> possuiaLM@/ :eu 7> possuia v>rios desses em casa<. ,s frequ-ncias envolvidas neste circuito são relativamente bai%as" então a bai%a v>rios desses em casa<. ,s frequ-ncias envolvidas neste circuito são relativamente bai%as" então a bai%a

(5)

 peformace em frequ-ncia deste ,K$1$ não + problema. Eu (avia decidido evitar um circuito comple%o" então ele#i o circuito mais simples que poderia ser usado.

Então" a id+ia + usar um simples diodo detector. Este detector de tensão passar por um primeiro ,K$1$ confi#urado como amplificador inversor com uma resposta em frequ-ncia passa bai%a. Isso remover> uma  boa parte do volume da portadora. 1 pr!%imo est>#io do circuito anal!#ico + e%trair o sinal F'H. 1

circuito mais simples que me veio a mente foi um filtro ressonante passa banda com frequ-ncia central em torno de k&). Isso s! me custaria um ,K$1$. Este circuito foi desen(ado no '$ICE e o #r>fico da frequ-ncia de resposta + mostrado no final desta p>#ina.

, sa6da do passa banda + um sinal que pode ser diretamente conectado N um microcontrolador $IC. Eu escol(i para este pro7eto o bom e vel(o microcontrolador $ICF/B,. Com o comparador interno eu  posso receber o sinal diretamente do ,K$1$ e e%trair o sinal di#ital.

, decodificação do sinal F'H + feita por softOare" o que realmente + interessante para não aumentar a nossa lista de componentes.

$ara decodificar o sinal F'H eu implementei tr-s subrotinas que usam o LKR@ para marcar o tempo  passado entre as mudanças detectadas na sa6da do comparador. 2en(uma interrupção + usada. ,o inv+s

disso" as rotinas foram colocadas em loop at+ que um estado de mudança + detectado. 1 loop que fa) a detecção leva em torno de tr-s ciclos de C$= para rodarP assim" dependendo de quando a mudança ocorre" o erro m>%imo + de  ciclos.

,l#u+m que con(ece como o (ardOare do $IC funciona poderia me per#untar porque eu não usei o m!dulo CC$ :Compare and Capture<. Infelismente eu utili)ei o m!dulo $GK para #erar a portadora de 0@k&). Como o CC$ compartil(a recursos com o m!dulo $GK" apenas um deles pode ser ativado por ve).

$ara ter uma id+ia #eral de como o sinal F'H aparece depois de di#itali)ado" eu adicionei um modo debu# onde ele ir> capturar um n*mero de ciclos de C$= ocorridos entre cada mudança no sinal de entrada.

Devido Ns limitações da mem!ria onc(ip" somente B@QA pontos de dados foram capturados. Isso não + #rande o sufuciente para decodificar o dado" mas + suficiente para n!s desen(armos uma visão #eral de como o sinal se parece.

(6)

 2este #r>fico" os n*meros no ei%o  representam o tempo :em ciclos de C$=< entre cada mudança de estado no sinal de entrada. Eu decidi que B0 era um n*mero bom para saber se o sinal de entrada era )ero ou um. 2o futuro eu acabei decidindo alterar a rotina de decodificação para contar o tempo #asto entre cada borda de subida do sinal :uma ve) que o sinal não possui componente DC" isto economi)aria

mem!ria 7> que eu s! #uardaria um bit ao inv+s de dois<. ,ssim" a constante utili)ada no firmOare do $IC cresceu e eu estou usando @ :/% B0<.

, sequ-ncia decodificada dos dados se parece com?

0000000000000000000000001111111111111111000001111110000001111100000011111000000111111 ... ...

1111110000011111100000011111000000111111111100000000000011111111111000000111110000000 00000 ...

0000001111110000001111111111000000111111000000000000000000000000111111111111111100000

;oc- pode ver que o dado inicia com v>rios )eros" se#uidos de al#uns n*meros  que são o dado atual. , sequ-ncia inteira continua a se repetir.

Eu con(eço o sinal codificado em Kanc(ester" então" a partir do sinal" eu posso c(e#ar N se#uinte conclusão?

. , sinal inicia com uma sequencia de )eros" superior a vinte )eros.

/. , se#unda sequ-ncia tamb+m + sempre uma sequ-ncia de  com pelo menos 0 bits. . $ara cada bit e%istem entre @ e / n*meros )ero ou um.

A. 1 bit + )ero se não e%iste nen(uma mudança no sinal durante o tempo de um bit.

(7)

1111110000011111100000011111000000111111111100000000000011111111111000000111110000000 00000 ---|---|---|_________|___________| __________|---|___________ 1 1 1 0 0 0 1 0

Com essas re#ras em mente" eu adicionei a função para decodificar o dado. Como um resumo de todo o sistema eu adicionei os se#uintes dia#ramas?

Diagrama de blocos

Esquemáticos:

nalógico

(8)
(9)
(10)

'onclus#o

,tualmente eu a7ustei o ;cc para @;. , tensão se Q0; + e%tra6da a partir de um re#ulador de tensão BM@0. 1 ;ref + setado pata a metade da tensão de alimentação" /"0;. Isso + feito utili)ando um simples divisor resistivo de A"k o(m.

1 c!di#o fonte pode ser bai%ado lo#o abai%o. E%istem duas versões?

Revisão ? S de Kaio de /@@ T Mançamento inicial

Revisão /? 0 de Kaio de /@@ T Revisão /

Recursos adicionados?

,uto start" iniciado quando o pino $U + colocado em n6vel altoP 'uporte a um bu))er" sa6da no pino A

(11)

Desenvolvido por Rick &uan#.

,daptado para o portu#u-s por Eletronica.or#" com autori)ação do autor.

,ne%os

• FirmOare Meitor RFID Revisão / • FirmOare Meitor RFID Revisão 

(12)

PVV

PVV RFID reader section" #enerate 0@H&) carrier frequencJ PVV and decode t(e basic data stream

PVV

PVV Gritten bJ Rick &uan#" CopJri#(t :C< /@@ PVV Revision KKDD

PVV Rev . /@@@A/W  Initial release

PVV Rev /. /@@@0@0  ,dd automatic card detect PVV

PVV Command Functions

PVV XX Uasic decode" binarJ data output PVV X/X Debu# capture" Bbit data output PVV XX Full capture and decode

PVV XAX &e% test  ec(o anJ (e% input PVV XX ,uto card detect mode PVV XX

PVV PVV

PVV L(is pro#ram is free softOareP Jou can redistribute it andor modifJ PVV it under t(e terms of t(e Y2= Yeneral $ublic Micense as publis(ed bJ PVV t(e Free 'oftOare FoundationP eit(er version / of t(e Micense" or  PVV :at Jour option< anJ later version.

PVV

PVV L(is pro#ram is distributed in t(e (ope t(at it Oill be useful"

PVV but GIL&1=L ,2 G,RR,2LP Oit(out even t(e implied OarrantJ of 

PVV KERC&,2L,UIMIL or FIL2E'' F1R , $,RLIC=M,R $=R$1'E. 'ee t(e PVV Y2= Yeneral $ublic Micense for more details.

PVV

PVV ou s(ould (ave received a copJ of t(e Y2= Yeneral $ublic Micense PVV alon# Oit( t(is pro#ramP if not" Orite to t(e Free 'oftOare

PVV Foundation" Inc." 0W Lemple $lace" 'uite @" Uoston" K, @/@ =',

PVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV

PVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV PVV 21LE? Disable t(e GDL O(en debu##in# t(e code" (oOever" make sure

PVV t(e GDL is enabled O(en puttin# t(e sJstem into lift time test PVV L(e timeout for GDL is about / seconds Oit( /B? prescaler 

PVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV

include Zpf/B.inc[

 \\confi# \&'\1'C ] \GDL\12 ] \M;$\1FF ] \U1DE2\12 ] \KCMRE\12 ]  \$GRLE\12 PVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV PVV ;ariables LempG E9= @( P UitMocation E9= ( CounterU E9= /(  2e%tF'R E9= ( P

(13)

UitCount E9= 0( MastUit;al E9= (

Data@ E9= ( P Final data output

Data E9= B(

Data/ E9= W(

Data E9= a(

DataA E9= /(

^ero E9= b( P ^erois @%@@

'erData E9= c(

Lemp E9= d(

1utput E9= e(

Counter E9= f(

LKRsample E9= @(

UinCnt E9= (

Lo##le E9= (

L(reeLrJ E9= A(

FCData@ E9= 0( P First data captured

FCData E9= (

FCData/ E9= (

FCData E9= B(

FCDataA E9= W(

GrittenUit E9= a(

_define \$1,' $1RLU"  P $oOer 12 ,uto 'tart

_define \D1=L $1RLU"  P

_define \HE $1RLU" 0 P HeJ #ood output _define \UEE$$1RLU" A P Ueeper output

_define \$GK\1 $1RLU"  P $GK  0@k&) _define \L`D $1RLU" / P =,RL

_define \R`D $1RLU"  P =,RL

_define \=2= $1RLU" @ P =nused

_define Decision;al dX@X P&ard decision" @  0W cJcle"   WB cJcle

PVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV PVV $ro#ram code (ere

#oto 'tart

1RY A POaitin# for Z@@@A[

Pinterrupt vector  P#oto Interrupt 1RY 0 PVVVVVVVVVVVVVVVVVVVVVVVVVVVVV D,L, 'trin#'tart? $GelcomeKs#? addOf $CM" F DL Gelcome

DL &X@dX" &X@aX" &X@@X $CommandKs#?

(14)

DL &X@dX" &X@aX" &X@@X $$arameterKs#?

DL $arameter Error DL &X@dX" &X@aX" &X@@X $2o,ckKs#?

DL Kissin# ,ck DL &X@dX" &X@aX" &X@@X 'trin#End?

GelcomeKs# E9= @

CommandKs# E9= $CommandKs#    0 P 0 is t(e offset O(ere t(e $arameterKs#E9= $$arameterKs#    0 P 'trin#s start

 2o,ckKs# E9= $2o,ckKs#    0

&e%Lable?

addOf $CM" F

DL @/A0BW,UCDEF

PVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV PVVVVVVVVVVVVVVVVVVVV $ro#ram 'tarts (ere

'tart?

PVVVVVVVVVVVVVVVVVVVVV 'etup GDL

PVVVVVVVVVVVVVVVVVVVVVV 'ettin# up LKR@" used to decode F'H 

 bcf \UEE$ clrOdt  bsf 'L,L='" R$@ movlO bX@@@@X P$rescaler to GDL" ?/B movOf 1$LI12\REY clrOdt PVVVVVVVVVVVVVVVVVVVVV 'ettin# up environment movlO bX@@@@@@X P'erial port in too

movOf LRI'U P'et port U I1 movlO bX@@@@@X

movOf LRI', P'et port , I1  bcf 'L,L='" R$@

clrf $1RL,

PVVVVVVVVVVVVVVVVVVVVVV Disable f/B specific features movlO bX@@@@@@X P'etup comparator

movOf CKC12

PVVVVVVVVVVVVVVVVVVVVVV 'ettin# up $GK module for 0@H&) si#nal movlO bX@@@@@@X PEnable $GK module" dutJ  /

movOf CC$C12

movlO bX@@@@@@@X P=sin# source frequencJ  /K&) movOf CC$RM

movlO bX@@@@@@X P'ettin# up LKR/" $rescale  ?A movOf L/C12

 bsf 'L,L='" R$@ movlO bX@@@@@@@X

(15)

 bcf 'L,L='" R$@

PVVVVVVVVVVVVVVVVVVVVVV 'etup =,RL  bsf 'L,L='" R$@

movlO dX/X P0@@ for /K&) Clock" &i#( speed movOf '$URY PL(e onlJ rate Oit( loO mismatc( movlO bX@@@X P,sJnc Bbit  &i#( speed

movOf L`'L,

 bcf 'L,L='" R$@

movlO bX@@@@@X PEnable serial port movOf RC'L,

clrf ^ero

movlO GelcomeKs# PDisplaJ Oelcome strin# on startup call 'end'trin# P Debu# insert #oto 'kipDebu# movlO @a@( movOf F'R  movlO bX@@@@@@X movOf I2DF incf F'R" F movlO bXX movOf I2DF incf F'R" F movlO bX@@X movOf I2DF incf F'R" F movlO bX@@@X movOf I2DF incf F'R" F movlO bX@@@@@@X movOf I2DF incf F'R" F movlO bX@@@@X movOf I2DF incf F'R" F movlO bX@@@X movOf I2DF incf F'R" F movlO bX@@@@@X movOf I2DF incf F'R" F #oto FD\DecodeEntrJ 'kipDebu#?

P Gait for command GaitKore?

 btfsc \$1,' #oto ,utoDecode clrOdt

(16)

#oto ClearError   btfss $IR" RCIF

#oto GaitKore movfORCREY movOf 'erData

movOf L`REY P'end it back out call ''pace

movlO XX PDecode command

%orOf 'erData" G  btfsc 'L,L='" ^

#oto ,ttempt'ample P'tart a RFID sample movlO X/X

%orOf 'erData" G  btfsc 'L,L='" ^

#oto Debu#'ample PDebu# run" output sampled data movlO XX

%orOf 'erData" G  btfsc 'L,L='" ^

#oto FullDecode PFullJ capture and decode data movlO XAX

%orOf 'erData" G  btfsc 'L,L='" ^

#oto &e%Lest PLestin# &E` routine movlO X0X

%orOf 'erData" G  btfsc 'L,L='" ^

#oto UinLest PLestin# Uin dump routine movlO XX

%orOf 'erData" G  btfsc 'L,L='" ^

#oto ,utoDecode P2o Debu# messa#e" auto card detection movlO XX %orOf 'erData" G  btfsc 'L,L='" ^ #oto LestUeep movlO XBX %orOf 'erData" G  btfsc 'L,L='" ^ #oto DummJ2oO

DummJ2oO? PFor all command not in use movlO CommandKs#

call 'end'trin# P'end error command messa#e #oto GaitKore

PVVVVVVVVVVVVVVVVVVVVV Clear recevin# overrun error  ClearError?

movfORCREY movfORCREY

(17)

 bcf RC'L," CRE2  bsf RC'L," CRE2

#oto GaitKore

P Commands e%ecution PVVVVVVVVVVVVVVVVVVVVVV Command ?

,ttempt'ample? PCommand ? 'ample RFID data" do @/A bits call CompC(eck PDummJ read once to setup condition

movlO @a@(

movOf F'R P=se F'R to store data movlO dXB@X PDo t(is for B@ bJtes

movOf Counter 

'ampleMoop?

call CaptureUJte

incf F'R" F P, bJte is full" move to t(e ne%t one decfs) Counter" F

#oto 'ampleMoop

P 'Oitc( memorJ bank  movlO @/@(

movOf F'R P=se F'R to store data movlO dXAX PDo t(is for A bJtes

movOf Counter 

'ampleMoop/?

call CaptureUJte

incf F'R" F P, bJte is full" move to t(e ne%t one decfs) Counter" F

#oto 'ampleMoop/

P Data is full" noO dump t(e data out movlO dXB@X PDo t(is for B@ bJtes

movOf Counter  movlO @a@(

movOf F'R P=se F'R to access data

'ampleMoop@? movfOI2DF call 'endUin incf F'R" F decfs) Counter" F #oto 'ampleMoop@ P 'Oitc( bank 

movlO dXAX PDo t(is for A bJtes movOf Counter 

movlO @/@(

movOf F'R P=se F'R to access data

'ampleMoop? movfOI2DF

(18)

call 'endUin incf F'R" F decfs) Counter" F #oto 'ampleMoop call 2eOMine #oto GaitKore

PVVVVVVVVVVVVVVVVVVVVVVV Command / Debu# mode

Debu#'ample? PCommand /? 'ample RFID data" debu# mode call CompC(eck PDummJ read once to setup condition

movlO @a@(

movOf F'R P=se F'R to store data movlO dXB@X PDo t(is for B@ bJtes

movOf Counter 

Debu#'Moop?   call CompC(eck 

movfO LKRsample movOf I2DF

incf F'R" F P, bJte is full" move to t(e ne%t one decfs) Counter" F

#oto Debu#'Moop

P 'Oitc( memorJ bank  movlO @/@(

movOf F'R P=se F'R to store data movlO dXAX PDo t(is for A bJtes

movOf Counter 

Debu#'Moop/?

call CompC(eck   movfO LKRsample movOf I2DF

incf F'R" F P, bJte is full" move to t(e ne%t one decfs) Counter" F

#oto Debu#'Moop/

P Data is full" noO dump t(e data out movlO dXB@X PDo t(is for B@ bJtes

movOf Counter  movlO @a@(

movOf F'R P=se F'R to access data

Debu#'Moop@? movfOI2DF call 'end&e% call 2eOMine

(19)

incf F'R" F decfs) Counter" F #oto Debu#'Moop@

P 'Oitc( bank 

movlO dXAX PDo t(is for A bJtes movOf Counter 

movlO @/@(

movOf F'R P=se F'R to access data

Debu#'Moop? movfOI2DF call 'end&e% call 2eOMine incf F'R" F decfs) Counter" F #oto Debu#'Moop call 2eOMine #oto GaitKore

PVVVVVVVVVVVVVVVVVVVVVVV Command  Full capture and decode

FullDecode? PGait for start sequence" t(an start capture call CompC(eck PDummJ read once to setup condition

call GaitLill'tart PGait for start

movlO @a@(

movOf F'R P=se F'R to store data movlO dXB@X PDo t(is for B@ bJtes

movOf Counter 

FDMoop?

call CaptureUJte

incf F'R" F P, bJte is full" move to t(e ne%t one decfs) Counter" F

#oto FDMoop

P Data is full" noO dump t(e data out movlO dXB@X PDo t(is for B@ bJtes

movOf Counter  movlO @a@(

movOf F'R P=se F'R to access data

FDMoop@? movfOI2DF call 'endUin incf F'R" F decfs) Counter" F #oto FDMoop@

(20)

call 2eOMine FD\DecodeEntrJ?

P Collaspe data bits

movlO dXBX P'et up for bit read movOf UitMocation

movlO @a@( movOf 2e%tF'R 

P 'tart e%traction

clrf Data@ PClear data (older   clrf Data clrf Data/ clrf Data clrf DataA clrf Lo##le FD\UitMoop^? call YetUitCount movfO UitCount movlO dX/@X subOf UitCount" G  btfsc 'L,L='" C

#oto FD\DoneDecode P Uitcount  0  $ositive" Mooped alreadJ" 'L1$

movlO dXX

subOf UitCount" G  btfss 'L,L='" C

#oto FD\'end/bit P2e#ative"  bits movlO XVX P$ositive" / bit call 'endC(ar   call 'endC(ar    bsf 'L,L='" C call Mon#'(ift call Mon#'(ift #oto FD\2e%tUit FD\'end/bit? movlO X\X call 'endC(ar    bcf 'L,L='" C call Mon#'(ift FD\2e%tUit? movlO @ef(

subOf 2e%tF'R" G P2e%tF'R  G  btfss 'L,L='" C

#oto FD\UitMoop^ P2e#ative" keep loopin#

call 2eOMine P$ositive" 2e%tF'R [ @%ef  

P Final data output FD\DoneDecode?

(21)

call 2eOMine movfODataA call 'end&e% movfOData call 'end&e% movfOData/ call 'end&e% movfOData call 'end&e% movfOData@ call 'end&e% call 2eOMine #oto GaitKore

PVVVVVVVVVVVVVVVVVVVVVVV Command ? ,uto detection of card ,utoDecode? clrOdt movlO @( PL(ree trJs movOf L(reeLrJ ,D\Capture,#ain? clrf GrittenUit clrOdt

call CompC(eck PDummJ read once to setup condition call GaitLill'tart PGait for start condition

movlO @a@(

movOf F'R P=se F'R to store data movlO dXB@X PDo t(is for B@ bJtes

movOf Counter 

,DMoop?

call CaptureUJte

incf F'R" F P, bJte is full" move to t(e ne%t one decfs) Counter" F

#oto ,DMoop

,D\DecodeEntrJ?

P Collaspe data bits

movlO dXBX P'et up for bit read movOf UitMocation

movlO @a@( movOf 2e%tF'R 

P 'tart e%traction

clrf Data@ PClear data (older   clrf Data

clrf Data/ clrf Data

(22)

clrf DataA clrf Lo##le ,D\UitMoop^? call YetUitCount movlO dX/@X subOf UitCount" G  btfsc 'L,L='" C

#oto ,D\DoneDecode P Uitcount  0  $ositive" 'tart condition a#ain" 'L1$ movlO dXX

subOf UitCount" G  btfss 'L,L='" C

#oto ,D\'end/bit P2e#ative"  bits  bsf 'L,L='" C P$ositive" / bit call Mon#'(ift call Mon#'(ift #oto ,D\2e%tUit ,D\'end/bit?  bcf 'L,L='" C call Mon#'(ift ,D\2e%tUit? incf GrittenUit" F movlO @ef(

subOf 2e%tF'R" G P2e%tF'R  G  btfss 'L,L='" C

#oto ,D\UitMoop^ P2e#ative" keep loopin#

P$ositive" 2e%tF'R [ @%ef" error  #oto ,utoDecode PRestart...

P C(eck data is t(e same for t(ree times ,D\DoneDecode?

movlO dX@X PError c(eck" if too manJ )ero bits" restart subOf UitCount" G

 btfsc 'L,L='" C

#oto ,utoDecode PLoo manJ bits

movlO (XAX PC(eck number of bit Oritten" too little" restart subOf GrittenUit" G

 btfss 'L,L='" C #oto ,utoDecode

movlO (X00X PC(eck number of bit Oritten" too manJ" restart subOf GrittenUit" G  btfsc 'L,L='" C #oto ,utoDecode movlO dXX %orOf L(reeLrJ" G  btfss 'L,L='" ^ PFirst trJ indicator 

(23)

#oto ,D\2otFirstLrJ movfOData@ movOf FCData@ movfOData movOf FCData movfOData/ movOf FCData/ movfOData movOf FCData movfODataA movOf FCDataA decf L(reeLrJ" F #oto ,D\Capture,#ain ,D\2otFirstLrJ? movfOData@ %orOf FCData@" G  btfss 'L,L='" ^

#oto ,utoDecode P2ot matc(ed" restart movfOData

%orOf FCData" G  btfss 'L,L='" ^

#oto ,utoDecode P2ot matc(ed" restart movfOData/

%orOf FCData/" G  btfss 'L,L='" ^

#oto ,utoDecode P2ot matc(ed" restart movfOData

%orOf FCData" G  btfss 'L,L='" ^

#oto ,utoDecode P2ot matc(ed" restart movfODataA

%orOf FCDataA" G  btfss 'L,L='" ^

#oto ,utoDecode P2ot matc(ed" restart decfs) L(reeLrJ" F

#oto ,D\Capture,#ain

P Final data output call 2eOMine movfODataA call 'end&e% movfOData call 'end&e% movfOData/ call 'end&e% movfOData call 'end&e% movfOData@ call 'end&e% call 2eOMine

(24)

call Ueep #oto GaitKore

PVVVVVVVVVVVVVVVVVVVVVVV Command A"0 'erial debu#

&e%Lest?

call Rcv&e% PCommand A? &e% test movfO 1utput

call 'end&e% call 2eOMine #oto GaitKore

UinLest?

call Rcv&e% PCommand 0? Uin test movfO 1utput

call 'endUin call 2eOMine #oto GaitKore

LestUeep?

call Ueep PCommand ? Lest beep call 2eOMine

#oto GaitKore

PVVVVVVVVVVVVVVVVVVVVVVVVVVVVV '=UR1=LI2E P P Mon#'(ift" '(ift  bit of t(e data into Data@?A re#ister  P '(ift onlJ  bit per tOo calls

P Input? C Mon#'(ift?  btfss Lo##le" @ #oto Lo##le2ot'et rlf Data@" F rlf Data" F rlf Data/" F rlf Data" F rlf DataA" F  bcf Lo##le" @ return Lo##le2ot'et?  bsf Lo##le" @ return P P CaptureUJte" Capture a sin#le bJte of data

P 1utput? I2DF CaptureUJte?

(25)

  call CompC(eck 

movlO Decision;al P&ard decision" @  0W cJcle"   WB cJcle subOf LKRsample" G

rlf I2DF" F P'tore t(e data into pointed address

call CompC(eck PDo t(is for B times to fill up a bJte movlO Decision;al subOf LKRsample" G rlf I2DF" F   call CompC(eck  movlO Decision;al subOf LKRsample" G rlf I2DF" F   call CompC(eck  movlO Decision;al subOf LKRsample" G rlf I2DF" F   call CompC(eck  movlO Decision;al subOf LKRsample" G rlf I2DF" F   call CompC(eck  movlO Decision;al subOf LKRsample" G rlf I2DF" F   call CompC(eck  movlO Decision;al subOf LKRsample" G rlf I2DF" F   call CompC(eck  movlO Decision;al subOf LKRsample" G rlf I2DF" F return P P GaitLill'tart" Gait until t(e start sequence is detected P L(is is marked bJ /@ or more )eros

GaitLill'tart?

movlO dX/@X

(26)

GL'\ne%t? clrOdt

call CompC(eck   movlO Decision;al subOf LKRsample" G

 btfsc 'L,L='" C PC(eck for a @ value #oto GaitLill'tart PIf " restart

decfs) CounterG" F

#oto GL'\ne%t PMoop until done return

P

P CompC(eck" C(eck t(e comparator output and store t(e informtion in P 1utput? LKRsample

CompC(eck?

P$rocess? Moop until a transition" clear LKR@" POait till ne%t @ transition

'C'ampleM?

 btfsc CKC12" C1=L #oto 'C'ampleM

'C'ampleM/? PGas a loO" Oait for a (i#(  btfss CKC12" C1=L

#oto 'C'ampleM/

movfOLKR@

movOf LKRsample P'tore t(e result in LKRsample clrf LKR@ PClear LKR@ for t(e ne%t bit return

P P YetUitCount" Count number of bits until t(e ne%t c(an#e P 1utput? UitCount

P ,ddress? UitMocation" 2e%tF'R 

P =se? MastUit;al" UitCount" 2e%tF'R" UitMocation" LempG YetUitCount?

clrf UitCount  btfss MastUit;al" @

#oto YUC\lastbit@

P #oto YUC\lastbit PMast bit is a  YUC\loop?

call Yet2e%tUit  btfss 'L,L='" ^ #oto YUC\done

incf UitCount" F PContinue if value is a )ero #oto YUC\loop

YUC\done? PDone if bit c(an#e to one  bcf MastUit;al" @

(27)

YUC\lastbit@? PMast bit is a @ YUC\loop@?

call Yet2e%tUit  btfsc 'L,L='" ^ #oto YUC\done@

incf UitCount" F PContinue if value is a one #oto YUC\loop@

YUC\done@? PDone if bit c(an#e to one  bsf MastUit;al" @

return

P P Yet2e%tUit" Yet a bit from t(e buffer 

P 1utput? ^

P ,ddress? UitMocation" 2e%tF'R" UitMocation   for M'U Yet2e%tUit?

movfO 2e%tF'R  movOf F'R 

movfO UitMocation movOf CounterU

decfs) UitMocation" FPYo to t(e ne%t bit #oto Y2U\ne%t'tep

movlO dXBX

movOf UitMocation

incf 2e%tF'R" F PRollover for t(e ne%t read Y2U\ne%t'tep?

clrf LempG

 bsf 'L,L='" C Y2U\loop?

rlf LempG" F PLempG contain bit mask   decfs) CounterU" F

#oto Y2U\loop movfO LempG

andOf I2DF" G PResult in ^ return

PVVVVVVVVVVVVVVVVVVVVVVVVVVVVV '=UR1=LI2E P P 'end&e%" 'end a sin#le bJte out of serial port" (e% format P Input? data stored in G

'end&e%? movOf Lemp sOapf Lemp" G andlO @@f( call &e%Lable &e%GaitMoop?

 btfss $IR" L`IF PGait till buffer is emptJ #oto &e%GaitMoop

(28)

movf Lemp" G andlO @@f( call &e%Lable &e%GaitMoop/?

 btfss $IR" L`IF PGait till buffer is emptJ #oto &e%GaitMoop/

movOf L`REY return

P

P 'endUin" 'end a sin#le bJte out of serial port" binarJ format P Input? data stored in G

'endUin?

movOf Lemp movlO B( movOf UinCnt

UinGaitMoop?

 btfss $IR" L`IF PGait till buffer is emptJ #oto UinGaitMoop movlO X@X  btfsc Lemp"  movlO XX movOf L`REY rlf Lemp" F decfs) UinCnt" F #oto UinGaitMoop return P

P Rcv&e%" Receive a sin#le bJte from serial port in (e% format P 1utput? data stored in 1utput

Rcv&e%?

 btfss $IR" RCIF #oto Rcv&e% movfORCREY movOf 'erData

movOf L`REY P 'end it back out

movlO @(

subOf 'erData" F movlO @(

subOf 'erData" G P F  G

 btfsc 'L,L='" C P $ositive means letter input #oto Metter

(29)

sOapf 'erData" G movOf 1utput Rcv&e%Moop?  btfss $IR" RCIF #oto Rcv&e%Moop movfORCREY movOf 'erData

movOf L`REY P 'end it back out

movlO @(

subOf 'erData" F movlO @(

subOf 'erData" G P F  G

 btfsc 'L,L='" C P $ositive means letter input #oto Metter/ RtnMetter/? movfO'erData iorOf 1utput" F call ''pace return Metter? movlO @( subOf 'erData" F movlO @( subOf 'erData" G

 btfsc 'L,L='" C P $ositive means bad input #oto MetterE #oto RtnMetter MetterE? movlO dX/X subOf 'erData" F #oto RtnMetter Metter/? movlO @( subOf 'erData" F movlO @( subOf 'erData" G

 btfsc 'L,L='" C P $ositive means bad input #oto Metter/E #oto RtnMetter/ Metter/E? movlO dX/X subOf 'erData" F #oto RtnMetter/ P P Mon#DelaJ" 0 cJcles" inscJcle //.0u' for BK() clock  lon#\delaJ?

movlO dX0X movOf Counter 

(30)

lon#\delaJ\M?

decfs) Counter" F #oto lon#\delaJ\M return

P P 'end'trin#" send t(e strin# out to serial port

P Input? 'trin# location in G 'end'trin#?

movOf Counter  'endMoop?

 btfss $IR" L`IF PGait till buffer is emptJ #oto 'endMoop

call 'trin#'tart iorOf ^ero" G

 btfsc 'L,L='" ^ P^ero is t(e end of strin# return movOf L`REY incf Counter" F movfO Counter  #oto 'endMoop P P 2eOMine" send s neOline c(aracter into serial port P Input? 2one

 2eOMine?

 btfss $IR" L`IF PGait till buffer is emptJ #oto 2eOMine

movlO @d( movOf L`REY movlO @a(  2eOMineMoop?

 btfss $IR" L`IF PGait till buffer is emptJ #oto 2eOMineMoop

movOf L`REY return

P P 'pace" send a space c(aracter into serial port

P Input? 2one ''pace?

 btfss $IR" L`IF PGait till buffer is emptJ #oto ''pace

movlO X X

movOf L`REY return

P P 'endC(ar" send a c(aracter into serial port

Referências

Documentos relacionados

Para os empregados que tenham mais de 5 (cinco) anos de serviço ininterrupto na mesma empresa, e tenham mais de 45 (quarenta e cinco) anos de idade, o aviso prévio a ser

(iii) Carteira de crédito a receber de titulares de cartões: Carteira de crédito a receber de titulares de cartões são ativos financeiros que não são cotados no mercado Ativo,

The positivity of stress echocardiography tests was quantitatively determined by a significant (P&lt;0.05) reduction of or failure to increase absolute and percent systolic

Considerando o impacto econômico decorrente da incorporação do tratamento com AUDC, a SBH sugere que o mesmo seja incorporado como medicamento de primeira linha para

A cidade do Guarujá está localizada a 137 Km 2 de São Paulo e é uma importante cidade turística do litoral, além de apresentar belezas naturais como praias

Criada em 1987 – anteriormente à exigência de prévia autorização legislativa determinada pelo inciso XX do art. 237 da Lei nº 6.404/1976, que faculta às instituições

A pesquisa de Mestrado As configurações do trabalho do web designer e sua relação com o capitalismo flexível, tem por objeto a análise do trabalho do web designer, sua

Um sistema de alagados construídos foi desenvolvido, em 2004, para tratar o volume de água pluvial gerado sobre um complexo industrial carboquímico com objetivo