Leitor didático de RFID

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Leitor didático de RFID

Mensagempor ivair » 19 Mai 2009 17:20

Srs especialistas. Sou orientador de um Trabalho de Conclusão de Curso e estamos tentando desenvolver um leitor didático de RFID utilizando um 16F628A com base no link http://memweb.newsguy.com/~rhuang/RFID/rfid.html

Não conseguimos fazer funcionar o código original, mas foi a base para gerar nosso código e avançar até aqui. Quase tudo funciona perfeitamente o PIC gera, por PWM, a freqüência de 125 KHz e alimenta o cartão HID, o qual responde com uma sequência de pulsos modulados em freqüência. Utilizando o módulo comparador analógico e o TMR0 medimos a largura desse pulsos, detectamos se é '0' ou '1' e armazenamos por endereçamento indireto 8 dígitos em cada byte da memória. Até aqui conseguimos chegar, fizemos uma rotina que envia pela serial o conteúdo da memória e exibe no PC a string. O problema é que não conseguimos decodificar e string e obter o código
escrito no cartão. Por exemplo: o cartão nº 45759 envia o código:
1111111111111100000011111111110000000000001111110000001111111111000000
0000001111111111100000000000011111111110000000000001111111000011111110
0000111110000001111100000011111100000111111000000111110000001111100000
0111111000001111110000001111100000011111000000011111111111000000000001
1111000000111110000001111111111100000000000011111111110000000000001111
1111111000001111110000001111100000000000011111111111000000000000111111
1111000000111110000000000001111110000001111111111000000111110000001111
1100000111111000000000000111110000000000000000000111111111111111000000
1111111111000000000000111111000000111111111100000000000011111111111000
00
Achamos que é Manchester ou Manchester Diferencial mas não conseguimos nenhuma relação com o número gravado no cartão. Gostaríamos de saber se alguém pode “clarear” alguma coisa e reforçamos que trata-se de um projeto didático, sem fins lucrativos.
ivair
Bit
 
Mensagens: 15
Registrado em: 07 Jun 2007 22:24

Mensagempor MOR_AL » 19 Mai 2009 19:41

Ivair.
Procure no Google por:
"Controlo de Acessos, RFID, tag, reader, Ethernet, EEPROM, Tibbo,
Base de Dados
"
... e por:
"rfid data protocol"
Você vai achar muita coisa interessante.
[]'s
MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor ivair » 20 Mai 2009 00:10

Obrigado MOR_AL, :D
Vamos buscar mais como -rfid data protocol-, mas eu e os alunos já estamos tentando o "oráculo" desde Agosto/08, com as mais diversas combinações possíveis. Encontramos vários e-books, dezenas de artigos científicos, exemplos com circuitos integrados dedicados, alguns exemplos com a freqüência de 13,56, e muito, muito material que fala de como aplicar, porém implementar usando um PIC com a freqüência de 125 Khz FSK está difícil. O pior é que estamos muito perto do final considero que a parte mais difícil já está pronta, decodificar e armazenar uma string com 632 bits vária vezes sem erro não foi fácil.
Acho que a solução será uma “saída estratégica pela direita” com uma implementação de um algoritmo que decodifique a string (Manchester) de qualquer cartão, grave e permita a comparação para controle de acesso.
Depois de pronto postamos o código, que pode servir para TCCs futuros.
ivair
Bit
 
Mensagens: 15
Registrado em: 07 Jun 2007 22:24

Mensagempor MOR_AL » 20 Mai 2009 18:05

Ivair.
Com a primeira carreira de palavras no Google você tem acesso a um trabalho (pdf) sobre o assunto.
Nele você encontra:
1 - Os diversos protocolos existentes. Há um para cada tipo de aplicação.
2 - A modulação neste caso é ASK, mas no artigo encontra-se: "Podemos assim distinguir as modulações Amplitude Shift-Keying (ASK), Frequency
Shift-Keying (FSK) e Phase Shift-Keying (PSK), respectivamente.
"
3 - No caso deles, a resposta da tag é formada por 12 sequências de bits, sendo que um start byte com o código 0xA0, 10 bytes ASCII, que constitui o código, e um stop bit, com o código 0x0D.

Acho que você tem que, a partir da identificação do fabricante da tag, conhecer de antemão:

1 - Qual é o código que o cartão responde?
2 - Se este código é igual ao número impresso do cartão. Por exemplo o número de seu cartão é 45759. Será que o código é o próprio número?
3 - Qual é a modulação que o tag usa para responder? FSK, ASK ou PSK.
4 - Quais são as características do padrão da resposta? Os códigos para o bit '1' e '0'. Os tempos correspondentes aos bits '1' e '0'.

Outro detalhe.
Analisei apenas as duas primeiras linhas. Obtive a seguinte sequência (número de bits/ estado lógico; u - um e z - zero): se considerarmos que cada bit seja codificado por cerca de 10 a 12 bits, que o bit um seja algo como 6 bits em um estado e 6 em outro, e que os dois primeiros bits sejam usados para "trigar o leitor, então:
14u, 6z, 10u, 12z, 6u, 6z, 10u, 12z, 11u, 12z, 10u, 12z, 7u, 4z, 9u... ou, separando o primeiro bit...
10u, 4u, 6z, 10u, 12z, 6u, 6z, 10u, 12z, 11u, 12z, 10u, 12z, 7u, 4z, 9u
.....,..........1...,...0..,..0..,.....1...,..0..,...0..,..0..,..0..,...0..,...0.,.....1..., ?
trigger......,.............A...............,..........0...............,............................
Este código A0 é o código do Start Bit.
Se realmente for isso, então a demodulação deve ser melhorada.
Sugiro que você tente ler o código, com o auxílio de um osciloscópio com memória, na parte ANTES DA DEMODULAÇÃO. Aí ficará mais claro, pois como está, você mede os tempos, converte em uma sequência de uns e zeros, que por sua vez vai interpretá-los (agrupar uns e zeros) e decodificá-los.
Preliminarmente, para saber o que está sendo enviado pela tag, LEIA DIRETAMENTE O SINAL MODULADO NO OSCILOSCÓPIO. Fica mais fácil de visualizar. Inclusive você poderá identificar qual é a modulação empregada.
O assunto é interessante. Caso seja possível, mostre o resultado desta observação, na forma de uma foto do sinal modulado na tela do osciloscópio.
MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor ivair » 25 Mai 2009 16:26

Olá MOR_AL,
eu e os alunos agradecemos imensamente a sua ajuda. Peço desculpas pois não notei as aspas na primeira carreira de
palavras e procurei-as isoladamente.

Um dos nossos problemas é justamente a falta de documentação do fabricante. Estamos pegando TAGs “disponíveis” e
tentando ler. Temos tags em quantidade utilizada no antigo controle de acesso da faculdade, mas achamos que elas são
moduladas em amplitude e nosso leitor não funciona. Um dos alunos tem uma tag gravada no plástico: HID e essa sim
funciona corretamente emitindo a string apresentada no primeiro e-mail. Conseguimos mais 2 cartões HID e todos
funcionam enviando números diferentes (somente o início é igual, talvez seja o start bit).
O primeiro código gravamos (por endereçamento indireto) todos os bits do cartão até encher a memória, à partir da análise
desse código e das informações de um site vimos que primeiramente é enviada uma sequência de +/-20 zeros, após isso
+/-15 uns e depois os bits de dados que conforme você disso compostos por 10 a 12 bits.
Conseguimos “afinar” os filtros e as temporizações no PIC para receber toda a sequência de cada cartão repetidas vezes
sem erro em um único bit.
Estamos enroscados tentando decodificar a sequência de 0s e 1s recebida. Com a sua informação sobre o protocolo
(start, 10 bits e stop) uma nova possibilidade surgiu, mas ainda não conseguimos “ver” a lógica que você utilizou
para obter o A0 do código: 10u, 4u, 6z, 10u, 12z, 6u, 6z, 10u, 12z, 11u, 12z, 10u, 12z, 7u, 4z, 9u.

Infelizmente não dispomos de um osciloscópio com memória, tentei gravar o código em um osciloscópio virtual no
notebook mas não ajudou muito.

http://br.geocities.com/ivairt/leitor/

Nesse link postei algumas fotos e dois vídeos do projeto, se puder dar uma olhada agradecemos. Foi devido ao formato
de onda exibido no osciloscópio que achamos se tratar de FSK. A cada beep de reconhecimento a string do 1º email é
armazenada em memória e depois enviada ao PC.

Muito Grato.

Ivair/Gustavo/Luciana.
ivair
Bit
 
Mensagens: 15
Registrado em: 07 Jun 2007 22:24

Mensagempor MOR_AL » 25 Mai 2009 21:59

Olá Ivair.

Há mais de uma imagem na mesma tela do osciloscópio, não dando para tirar nenhuma conclusão a respeito delas.
mas ainda não conseguimos “ver” a lógica que você utilizou
para obter o A0 do código: 10u, 4u, 6z, 10u, 12z, 6u, 6z, 10u, 12z, 11u, 12z, 10u, 12z, 7u, 4z, 9u.

Na caixa de edição do texto do fórum, fiz as duas linhas sincronizadas, porém ao aparecerem na postagem o sincronismo some. :cry:
A minha lógica foi a seguinte.
Considerei os 10 "uns" (10u) no início, como algo como um informativo de "início de resposta" pela tag.
Depois separei os grupos de '1s' e '0s', em dois: O que durava de 4 a 7 unidades (tanto de uns, como de zeros) e o que durava entre 9 e 12 unidades (também como uns e zeros).
Assim, os dois grupos seguintes ao 10u, os 4u e 6z, pertenciam ao primeiro grupo, que considerei o bit '1', então, ficou:
4u6z - '1'
10u - '0'
12z - '0'
6u6z - '1' . Até aqui tem-se o código hexadecimal "A"
10u - '0'
12z - '0'
11u - '0'
12z - '0' . Estes outros quatro bits formam o "0"
MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor ivair » 26 Mai 2009 18:00

Olá MOR_AL

Então, na tela do osciloscópio, quando utilizamos o cartão HID a amplitude dos sinais é constante e medindo o período do pulso com o TMR0 vimos que a frequência muda, assim assumimos que a modulação é FSK.
O sinal é obtido após os filtros passa baixa e passa banda que elimina o 125 khz, mas mesmo assim há mais de um sinal.
O A0 não seria 10100000 e não 10010000? Vamos rodar o seu "algoritmo" e ver se obtemos alguma associação com o número gravado no cartão, isso se esse número realmente for o que o cartão emite (como você questionou em e-mail anterior). Depois posto os resultados.
Obrigado mais uma vez.
ivair
Bit
 
Mensagens: 15
Registrado em: 07 Jun 2007 22:24

Mensagempor MOR_AL » 26 Mai 2009 21:00

Olá Ivair.
O A0 não seria 10100000 e não 10010000?

Tem razão. Na espectativa de descobrir o "A0", me equivoquei.

Se o sinal for FSK, imagino que a portadora seja os 125kHz e a modulante tenha alguns kHz. Porque você não usa um PLL, ,para demodular o sinal, centrado em 125kHz?
Há detetores de tom (tone decoders) que fazem o serviço. É claro que necessita de mais um CI. O LM567 faz esse trabalho. Fica mais simples que colocar os dois filtros. Aliás, o PLL possui, intrinsecamente, um filtro Passa-baixa. O VCO dele oscila na frequência da portadora.
MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor ivair » 27 Mai 2009 16:06

Olá MOR_AL.

Legal, mais uma possibilidade com o LM567. Acho que a demodulação esta correta, pois a saída (111111111111110000001111111111000000000000111111000000...) parece conter uma informação lógica, os três cartões geram 541 bits, sendo que todos os cartões enviam a sequência:
19 bits zero (0000000000000000000 sincronização/start)
14 bits um (11111111111111 sincronização/start)
249 bits gerando o mesmo valor (0000001111111111000000000000111111. . . 11111000000011111 igual ao código de barras, quase todos se iniciam com 789...)
259 bits gerando um valor distinto (111111000000000001111100000011 . . . 0000000001111111111100000 número do cartão) e a sequência parece muito com a codificação Manchester, ou Manchester diferencial com o pulso de sincronismo, intervalo do bit, etc.
Pena não ter mais tempo, os alunos ainda tem que escrever o artigo científico para ser entregue em breve relatando tudo o que foi aprendido com a teoria (onde se aplica RFID, os tipos e freqüências) e a prática (sintonizar a bobina com o gerador de sinal e o osciloscópio, filtro para eliminar a portadora, descrever a lógica em assembly para capturar a largura do pulso, endereçamento indireto, comunicação serial com o PC para “ver” o que estava acontecendo, etc).
Acho que será um ótimo trabalho de pesquisa científica, realizado por alunos do curso de Ciência da Computação (um aula semestral de microprogramação), mas com complexidade superior a vários trabalhos do curso de engenharia (leciono nos dois cursos)
Sua ajuda nos indicou o trabalho “Controlo de acesso a sala de alunos” um ótimo material que será utilizado como trabalho correlato e que nos mostrou o protocolo (start, dados, stop) com valores em hexadecimal, sobre o qual continuaremos a tentativa de decodificação.
Se possível gostaria que me enviasse um e-mail (labhardware.fav@unianhanguera.edu.br) com seu nome para citarmos no capítulo de agradecimento.
Se “clarear” mais alguma coisa por gentileza entre em contado que até setembro estamos nesse barco e o mar está muito bravo... :(
No final da página a seguir vou colocar um TXT com as strings dos três cartões. http://br.geocities.com/ivairt/leitor/
Muito grato
Ivair/Gustavo/Luciana.
ivair
Bit
 
Mensagens: 15
Registrado em: 07 Jun 2007 22:24

Mensagempor MOR_AL » 27 Mai 2009 22:54

Como mencionei antes, acho o assunto interessante.
Não sei porque os fabricantes criam tantas barreiras para se conseguir informações.
Caso o seu trabalho seja aberto ao público, gostaria de possuir uma cópia.
Grande abraço a todos.
MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor albertorcneto » 28 Mai 2009 04:52

Ficou realmente muito bom, Ivair. Uma pena nao poder chegar ate o fim.

Parabens pelo projeto e pelos resultados.

ivair escreveu:Olá MOR_AL.

Legal, mais uma possibilidade com o LM567. Acho que a demodulação esta correta, pois a saída (111111111111110000001111111111000000000000111111000000...) parece conter uma informação lógica, os três cartões geram 541 bits, sendo que todos os cartões enviam a sequência:
19 bits zero (0000000000000000000 sincronização/start)
14 bits um (11111111111111 sincronização/start)
249 bits gerando o mesmo valor (0000001111111111000000000000111111. . . 11111000000011111 igual ao código de barras, quase todos se iniciam com 789...)
259 bits gerando um valor distinto (111111000000000001111100000011 . . . 0000000001111111111100000 número do cartão) e a sequência parece muito com a codificação Manchester, ou Manchester diferencial com o pulso de sincronismo, intervalo do bit, etc.
Pena não ter mais tempo, os alunos ainda tem que escrever o artigo científico para ser entregue em breve relatando tudo o que foi aprendido com a teoria (onde se aplica RFID, os tipos e freqüências) e a prática (sintonizar a bobina com o gerador de sinal e o osciloscópio, filtro para eliminar a portadora, descrever a lógica em assembly para capturar a largura do pulso, endereçamento indireto, comunicação serial com o PC para “ver” o que estava acontecendo, etc).
Acho que será um ótimo trabalho de pesquisa científica, realizado por alunos do curso de Ciência da Computação (um aula semestral de microprogramação), mas com complexidade superior a vários trabalhos do curso de engenharia (leciono nos dois cursos)
Sua ajuda nos indicou o trabalho “Controlo de acesso a sala de alunos” um ótimo material que será utilizado como trabalho correlato e que nos mostrou o protocolo (start, dados, stop) com valores em hexadecimal, sobre o qual continuaremos a tentativa de decodificação.
Se possível gostaria que me enviasse um e-mail (labhardware.fav@unianhanguera.edu.br) com seu nome para citarmos no capítulo de agradecimento.
Se “clarear” mais alguma coisa por gentileza entre em contado que até setembro estamos nesse barco e o mar está muito bravo... :(
No final da página a seguir vou colocar um TXT com as strings dos três cartões. http://br.geocities.com/ivairt/leitor/
Muito grato
Ivair/Gustavo/Luciana.
"Nothing travels faster than the speed of light, with the possible exception of bad news, which obeys its own set of laws" ~ Douglas Adams
albertorcneto
Byte
 
Mensagens: 269
Registrado em: 28 Mar 2007 14:08

Mensagempor ivair » 28 Mai 2009 13:30

Obrigado MOR_AL e albertocneto.

Quando estiver pronto posto um link com o trabalho completo, esquema, código fonte e artigo científico. Acho que será uma ótima opção para trabalho futuros ou até mesmo implementação para uso prático. Imagine desligar o alarme do carro, abrir o portão e a porta da sua residência com um único cartão de custo baixíssimo.
Sem falar na parte do aprendizado de microcontroladores, olha só:
Uso do comparador de tensão interno com tensão de referência externa.
Medição de largura de pulso com o TIMER0.
Comunicação serial a 115 kpbs com o PC.
Várias mensagens utilizando a diretiva DT, você chama a rotina mandando um número e é transmitida a respectiva frase.
Uma lógica muito interessante que armazena o ASCII ‘0’ ou ‘1’ em um único bit de memória, ou seja, a memória de 224 bytes e expandida para 1.972 bits ASCII (0 ou 1).
Acesso indireto a memória.
PWM de 125 kHz por hardware.
E ai vai... :D :D :D

Até mais

Ivair/Gustavo/Luciana.
ivair
Bit
 
Mensagens: 15
Registrado em: 07 Jun 2007 22:24

Mensagempor Jorge_Francisco » 28 Mai 2009 14:23

Estava lendo este tópico e resolvi dar meu palpite também, separando os bits aqui, notei que há uma sequencia de 6 zeros(0) e 5 uns(1). Só que algumas vezes a lógica não dá certo, quando a lógica não deu certo NÃO SEPAREI.

11111111111111
000000
11111
11111
000000
000000
111111
000000
11111
11111
000000
000000
11111
111111
000000
000000
11111
11111
000000
000000
1111111000011111110
0000
11111
000000
11111
000000
11111100000111111
000000
11111
000000
11111
000000
11111100000111111
000000
11111
000000
11111
00000001111111111100000000000
11111
000000
11111
000000
11111111111000000000000
11111
11111
000000
000000
1111111111100000111111
000000
11111
000000
000000
11111111111
000000
000000
11111
11111
000000
11111
000000
000000
111111
000000
11111
11111
000000
11111
000000
11111100000111111
000000
000000
11111
000000
000000
0000000
11111
11111
11111
000000
11111
11111
000000
000000
111111
000000
11111
11111
000000
000000
11111
11111100000

Vou ver se não tem um bit de separação.

vlw
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor Jorge_Francisco » 28 Mai 2009 15:26

Qual string deveria ter no cartão?
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor Jorge_Francisco » 28 Mai 2009 16:26

Não consigo chegar a uma conclusão, tentei agrupar de 11 bits(6 zeros e 5 uns) e 1 bit em outra linha para separar uma mudança assim:

00000011111
1
11111000000
1
00000011111

Mas não consegui. Se tem certeza que esta tudo chegando certo, então não sei mais.
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x