UART1_Read_Text MikroC Pro Pic

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

UART1_Read_Text MikroC Pro Pic

Mensagempor SoMeWhErE » 26 Ago 2009 14:50

Bom dia.

Então, tô usando esse compilador novo, mas ta me dando uma dor de cabeça, gostaria de saber se alguem tá usando e tem alguma dica?

Estou usando um PIC18F452 à 8MHz e Baud Rate 9600.

Código: Selecionar todos
UART1_Read_Text(RecvBuf, 0xF2, 10); // Lê Texto até que ETX seja encontrado


Descrição do HELP
void UART1_Read_Text(char *Output, char *Delimiter, char Attempts);

Reads characters received via UART until the delimiter sequence is detected. The read sequence is stored in the parameter output; delimiter sequence is stored in the parameter delimiter.

This is a blocking call: the delimiter sequence is expected, otherwise the procedure exits (if the delimiter is not found).

Parameters :

Output: received text
Delimiter: sequence of characters that identifies the end of a received string
Attempts: defines number of received characters in which Delimiter sequence is expected. If Attempts is set to 255, this routine will continuously try to detect the Delimiter sequence.

Ele lê o que vem da serial até encontrar 0xF2 ou até receber 10 caracteres, pelo que entendi.

O Comando UART1_Write_Text está funcionando perfeitamente, o problema é com o Read.
Primeiramente meu buffer RecvBuf não está recebendo nada dessa função.
Seguinte, quando envio para o uC 10 caracteres com o 0xF2 no meio, ele não sai fora da função, qdo envio novamente os mesmos 10 caracteres ele sai e o buffer fica vazio.
Qdo envio por exemplo, 2 caracteres entra não função e não sai, dae vou enviando +2, e mais, até qdo completa os 10 caracteres ae sai mas o buffer continua vazio, mesmo colocando nesses 2 caracteres o delimitador.

Exemplo do que está acontecendo, nessa caso o delimitador é "OK", e attemps é 10:
Sent: 1245OK - Enviei e não retornou nada
Sent: 1245OK - Enviei novamente...
Received: 121245 - Ae me retornou isso aqui.

Código: Selecionar todos
if (UART1_Data_Ready() == 1 && Processo == 1)
      {
          UART1_Read_Text(RecvBuf, "OK", 10); // reads text until 'OK' is found
         delay_ms(100);
         UART1_Write_Text(RecvBuf);


alguem tem uma ideia, ou um outro modo sem usar essa função pra receber uma string pela serial.

Obrigado
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada

Mensagempor tcpipchip » 26 Ago 2009 15:57

Ola
Aqui um exemplo em MIKROC que fiz para ser um painel de mensagens serial...vai te ajudar...foi para o 18F452...
Se tiverem interesse, fiz o mesmo programa em MIKROBASIC e MIKROPASCAL

www.inf.furb.br/~maw/asm51/painel_serial.pbas

T+

TCPIPCHIP
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor SoMeWhErE » 26 Ago 2009 16:43

VAlew tcp.....vou dar uma olhada, mas esse link que vc passou eh BASIC, não C.
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada

Mensagempor tcpipchip » 26 Ago 2009 17:00

Putz...
Desculpe...
Segue a mesma versao em C
http://www.inf.furb.br/~maw/asm51/painel.c
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor Jorge_Francisco » 26 Ago 2009 18:15

Só para lembrar que "OK" tem 3 caracteres: 'O'+'K'+'/0'.

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

Mensagempor SoMeWhErE » 26 Ago 2009 22:20

tcpipchip

amanhã vou dar uma conferida no link. qualquer coisa vou a tirar duvidas...

Jorge_Francisco
valew.....

então, meu uC vai conversar com um leitor biométrico, q o Start dele é um byte 0xF1 e o End é 0xF2.
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada

Mensagempor SoMeWhErE » 27 Ago 2009 09:30

Então tcp, valew, mas não era bem o q eu procuro...

o seguinte, o leitor que com vai comunicar manda a seguinte string, essa é uma delas:

0xF1 '0' '0' '0' '7' ',' 'O' 'K' ',' 'T' 'B' 'M' '1' '9' '3' 0xF2

0xF1 - Start Transmission
'0''0' - Comando Leitura/Escrita
'0''7' - Comando a ser Executado
'O''K' - Sinalizador de que recebeu o que foi enviado e está respondendo
'T''B''M''1' - Resposta do comando que foi pedido
'9''3' - Checksum
0xF2 - End Transmission

Porém o leitor me envia essa string tudo de uma vez.

VAlewssss
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada

Mensagempor fabim » 27 Ago 2009 09:43

[quote="SoMeWhErE"]
0xF1 '0' '0' '0' '7' ',' 'O' 'K' ',' 'T' 'B' 'M' '1' '9' '3' 0xF2
VAlewssss[/quote]

somewhere.
Ja pensou na possibilidade de trabalhar com interrupção ?
Tipo imagin the seguinte.

/****************************************************/
short start, capturado;

void interrupt(void){

foi(serial?){

se(capturado=false){
se(dado_da_Serial ==0xf1 | start==true){
start=true;
*ponteiro_dados++= dado_da_Serial;
se(dado_serial == 0xF2){
start=true;////editando, tem que apagar ele na rotina de tratamento
capturado = true;
}}

}

}

fica legal assim, pode montar uma sub rotina desta forma e fica dedicado igual ao da mikroC, só que não tem um while.
Editado pela última vez por fabim em 27 Ago 2009 11:26, em um total de 1 vez.
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor SoMeWhErE » 27 Ago 2009 11:00

fabim

VAlewsss....cara....vou implementar aki.......certeza q dará certo...

ABRAÇUSSSS a todos
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada

Mensagempor SoMeWhErE » 27 Ago 2009 11:36

Aew fabim

acabei de testar aki.....putz....funcionou perfeitamente.....

mais uma vez, vc ajudando......BRIGADAUM....

valews....tb tcpipchip e Jorge_Francisco

VALEWsssss.....ABRAÇUSSSSSSS
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada


Voltar para PIC

Quem está online

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

cron

x