Ir ao conteúdo

SERIAL UART - Receber e tratar dados. (Aplicação com RFID)


thiagoneves

Posts recomendados

Postado
Olá! Meu nome é Thiago e estou com dificuldade em desenvolver uma aplicação envolvendo a comunicação UART mais especificamente na recebimento de dados. Vou tentar explicar o que estou querendo fazer.

 

Tenho um leitor RFID com comunicação SERIAL (NÍVEL TTL UART) e na leitura do cartão ou chaveiro, tenho um dado com 10 caracteres, ex: "0005188247" que chegam de forma serial, correto? Fiz um curso online de comunicação serial e o professor ensinou criar um protocolo com carácter de inicialização e finalização, porém não tem como eu colocar um carácter de inicialização e finalização pois esses 10 carácter referente a leitura do cartão RFID já vem do leitor dessa forma, ou seja não tenho como colocar no leitor isso.

 

Alguém pode me dar uma luz de como manipular esses dados de forma que eu consiga na matriz colocar um carácter de inicialização no início e um carácter de finalização, tipo isso [0005188247]

 

Ou talvez não utilizar carácter de inicialização e finalização sendo que a comunicação entre o leitor e o pic é "confiável".

 

Resumindo.. preciso receber o nº do cartão Rfid e conforme o nº cartão fazer determinada ação, exemplo simples: 

 

mikroC

 

char NumCartaoRfid1 = ("0005188247").
char NumCartaoRfid2 = ("0005188250").
 
if(UART_Reader == NumCartaoRfid1)
{
faça isso
}
 
if(UART_Reader == NumCartaoRfid2)
{
faça isso
}
 
 
ou no compilador CCS 
 

Recebe = getc();
 
if(Recebe == NumCartaoRfid1)
{
faça isso
}
 
if(Recebe == NumCartaoRfid2)
{
faça isso
}

Postado

Amigo, esta manipulando errado a biblioteca de Uart, a melhor maneira de fazer isso é usando a interrupção pela uart, ai sempre que chegar um caractere você automaticamente salva na matriz... tente mais ou menos assim:

char k=0,in=0;  char dadosrecebidos[11];void interrupt ()  //quando chega o dado, ocorre a interrupção{ in=uart_read();   //Lê o dado recebido dadosrecebidos[k]=in;//salva na matriz k++;}void main(){  while(1)       //laço infinito  {   if(k>=9)      {       lcd_out(1,1,dadosrecebido); //se já recebeu os 10 caracteres exibe no display       k=0;                        //zera a variavel que define o elemento da matriz        for(k=0,k>=10,k++)            {             dadosrecebidos{k}=0;  //zera a matriz para uma nova leitura             }        }  }}

Notes que o programa acima esta todo fragmentado, então tente fazer sua incrementações próprias.

  Este código acima funcionou bem para um Leitor RDM de 125Khz,..

Mas como você não indicou o modelo do seu leitor e nem o microcontrolador que esta usando, isso o melhor que posso fazer por enquanto.

Olhe no datasheet  como ativar as interrupções e como configurar interrupção pela Uart no seu uC.

  E leia este artigo, da própria MikroEletronica, esta em inglês, mas dá para entender, ele ensina como manipular a biblioteca de uart para o MikroC, sentença a sentença:

http://www.mikroe.com/download/eng/documents/compilers/mikroc/pro/pic32/help/uart_library.htm

 

  Espero ter ajudado.

Grato Luiz Gustavo.

Postado

Olá Gustavo, muito obrigado pela dica, vou tentar o exemplo que você me deu e adaptar nessa aplicação.

 

O exemplo do código que mostrei é apenas uma demostração superficial e simplificada, em relação a interrupção isso eu já tinha entendido, minha dúvida mesmo era como manipular esses dados, especificamente os 10 carácter recebidos do leitor RFID.

 

O Microcontrolador a princípio estou usando um 16F628A e o leitor é esse: http://produto.mercadolivre.com.br/MLB-530914210-modulo-leitor-rfid-rs232-ttl-125khz-pic-arduino-atmel-id872-_JM

 

tenho hábito de usar mais o compilador CCS mas vou tentar no mikroC conforme o exemplo que você me passou.

 

Mais uma vez, muito Obrigado!

Postado

Olá Gustavo, muito obrigado pela dica, vou tentar o exemplo que você me deu e adaptar nessa aplicação.

 

O exemplo do código que mostrei é apenas uma demostração superficial e simplificada, em relação a interrupção isso eu já tinha entendido, minha dúvida mesmo era como manipular esses dados, especificamente os 10 carácter recebidos do leitor RFID.

 

O Microcontrolador a princípio estou usando um 16F628A e o leitor é esse: http://produto.mercadolivre.com.br/MLB-530914210-modulo-leitor-rfid-rs232-ttl-125khz-pic-arduino-atmel-id872-_JM

 

tenho hábito de usar mais o compilador CCS mas vou tentar no mikroC conforme o exemplo que você me passou.

 

Mais uma vez, muito Obrigado!

 

Amigo, no CCS o principio é o mesmo, para o CCS tem códigos já prontos na internet, você poderia dar uma estudada, veja só:

 

http://www.youtube.com/watch?v=2kSFDGov7SI

 

  Quanto aos leitores, ao meu ver a diferença é pouca entre eles.

 

Espero ter ajudado.

  Grato Luiz Gustavo..

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!