Mudança de paridade na serial

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mudança de paridade na serial

Mensagempor hemasc » 29 Jun 2013 14:12

Senhores, gostaria de implementar em um equipamento (escravo) a opção do usuário escolher a paridade da comunicação serial para ímpar, par ou nenhuma.

Mas como fazer isso no meio do programa?
Eu utilizo o CCS e PIC18f87k90 (não tem paridade por hardware)

#use rs232(baud=9600, parity=N,stop=1,xmit=PIN_C6,rcv=PIN_C7,bits=8, errors) //sem paridade
#use rs232(baud=9600, parity=O,stop=1,xmit=PIN_C6,rcv=PIN_C7,bits=8, errors) //paridade ímpar
#use rs232(baud=9600, parity=E,stop=1,xmit=PIN_C6,rcv=PIN_C7,bits=8, errors) //paridade par

Se a paridade fosse um número, seria só criar uma variável e mudar seu valor, mas como é uma letra (N, O ou E), não tenho certeza do que fazer...
Estou fazendo alguns testes e caso eu venha a encontrar a solução, postarei aqui.
Fico no aguardo se alguém puder me orientar...
hemasc
Nibble
 
Mensagens: 80
Registrado em: 26 Fev 2007 08:59
Localização: Campinas - SP

Re: Mudança de paridade na serial

Mensagempor RobL » 29 Jun 2013 17:35

Tem o bit de paridade sim. Usar o nono bit.
Talvez o CCS já faça a setagem para usar o nono bit como paridade.
O problema é que paridade é algo de museu, por isso os chips novos nem perdem tempo em ter um bit exclusivo, no em um registro de controle, para tal.
O percentual de erro detetável por paridade é muito baixo. Um CRC de 8 bits ou qualquer tralha simples é melhor que paridade. Já um CRC de 16, 32 já dá pra quase tudo. O resto é para trabalho muito mais fino.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Re: Mudança de paridade na serial

Mensagempor hemasc » 29 Jun 2013 18:27

Olá RobL!

Acho que não fui claro na minha pergunta e acabei influenciando você a não responder o que questionei... rsrs

Ao invés de eu apenas fixar a paridade no início do programa conforme:

#use rs232(baud=9600, parity=O,stop=1,xmit=PIN_C6,rcv=PIN_C7,bits=8, errors) //paridade ímpar

Tem como mudar a paridade no meio do programa?

por exemplo:

if(true) paridade ímpar
else paridade par


em relação a CRC, já é feito, mas o cliente quer com escolha de paridade também...

ps: o datasheet do 18f87k90 diz não suportar paridade por hardware, mas pode usar o 9º bit para controle por software, sendo assim, não tem paridade por hardware
"Parity is not supported by the hardware but can be
implemented in software and stored as the 9th data bit."
hemasc
Nibble
 
Mensagens: 80
Registrado em: 26 Fev 2007 08:59
Localização: Campinas - SP

Re: Mudança de paridade na serial

Mensagempor KrafT » 29 Jun 2013 18:43

Concordo com o Robl, esse recurso é tão antigo (quanto eu), que atualmente praticamente não é utilizado.

Alternativas:

1- Configura a outra ponta para não usar paridade;
2- Configura o teu PIC manualmente sem usar a diretiva do CCS, aí vc muda como quiser;
3- Se precisar compilar ora com e hora sem, basta definir essa condição com #ifdef, #ifndef, etc...
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: Mudança de paridade na serial

Mensagempor hemasc » 29 Jun 2013 18:57

Olá KrafT!

...enfim, antigo ou não, poderíamos focar na solução?

1- Configura a outra ponta para não usar paridade;
o cliente quer com paridade devido ao software e equipamentos que ele possui

2- Configura o teu PIC manualmente sem usar a diretiva do CCS, aí vc muda como quiser;
confesso que não consegui fazer isso e por isso coloquei a dúvida no fórum, me propõe uma forma?

3- Se precisar compilar ora com e hora sem, basta definir essa condição com #ifdef, #ifndef, etc...
rsrsrs... sim, mas como mudar a paridade?

obrigado pelas sugestões... continuo tentando mexer no programa, mas ainda não obtive sucesso...
hemasc
Nibble
 
Mensagens: 80
Registrado em: 26 Fev 2007 08:59
Localização: Campinas - SP

Re: Mudança de paridade na serial

Mensagempor RobL » 29 Jun 2013 19:04

Agora não entendi mais. :D
Mudei umas bobagens escritas, por mim aqui.

Você não vai mudar o resultado do byte para impar ou par. O bit terá paridade impar ou par.
Suponha que foi enviado um datagrama com paridade par.
Se trabalhar com paridade par.
No outro lado o soft vai checar o conjunto de bytes e checar se o bit de paridade é igual. Se o recebido for, para par e o cálculo para paridade do conjunto recebido ( par) for o mesmo bit, está ok.
Se trabalhar com impar , o bit sera o inverso do que foi no par.
Mudar em run time ? Estranho. E a outra ponta?

Você quer saber o código para determinar a paridade ?
Editado pela última vez por RobL em 29 Jun 2013 19:27, em um total de 2 vezes.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Re: Mudança de paridade na serial

Mensagempor KrafT » 29 Jun 2013 19:22

Solução que sempre funciona e com qualquer chip, sem ter que estudar muito:

- Pega no datasheet todos os registradores envolvidos na comunicação serial;
- Compila o código com paridade e verifica o que o CCS faz com os registradores;
- Compila sem paridade e idem ao item anterior;
- Entendido como funciona, faz teu software "na mão" sem o auxilio do compilador.


Eu uso essa alternativa quando tenho preguiça de esmiuçar o chip, e não quero usar funções prontas por alguma razão qualquer.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: Mudança de paridade na serial

Mensagempor hemasc » 19 Jul 2013 10:06

Senhores, agradeço a todos pelas orientações dadas a mim, principalmente ao Kraft por passar a sacada principal...
Demorei para responder por motivos profissionais.

#locate RCSTA = 0xFAC
#locate TXSTA = 0xFAB

#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,errors,stream=COMM_1,enable=PIN_B1)

if(bit_com_paridade)
{
bit_set(TXSTA,6);
bit_set(RCSTA,6);
}
else
{
bit_clear(TXSTA,6);
bit_clear(RCSTA,6);
}

Abraço a todos e novamente muito obrigado!
hemasc
Nibble
 
Mensagens: 80
Registrado em: 26 Fev 2007 08:59
Localização: Campinas - SP


Voltar para PIC

Quem está online

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

cron

x