comunicaçao serial sincrona

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor xultz » 24 Abr 2008 13:34

Só complementando: Rebelk, o povo aqui é grosso e mal educado, mas muito competente. É muito comum chamar o outro de viado sem um motivo aparente (sob o ponto de vista de homossexualidade) e no fim das contas todo mundo acha divertido, então, realaxa cara, entra na brincadeira, que você vai ganhar muito mais. Todo mundo aqui sabe que fazer projeto eletrônico estressa, fazer o firmware funcionar é um trauma, mas seja um pouco flexível que você vai obter as informações que necesita.

Outra dica muito importante, muito importante mesmo para obter informações precisas para te ajudar a resolver o teu problema, é dar o mpaximo de detalhes possíveis sobre tua aplicação. Por exemplo, os dois PICs estão na mesma placa, estão em placas diferentes, em equipamentos diferentes? Que meio fisíco elas se comunicam, via cabos, trilhas, RF, infravermelho? Que velocidade de comunicação você precisa, qual o fluxo de dados?

A solução que você tentou implementar não é adequada por vários motivos. Primeiro que você pode obter eco da transmissão de várias maneiras, desde interferência nas linhas de TX e RX, um curto circuito, e coisas do tipo. E você causa um excesso de comunicação desnecessário, a comunicação fica obrigatoriamente simplex, etc. A solução mais usada é implementar um byte de checksum. Uma maneira simples de fazê-lo é usar uma variável de 8 bits e somar todos os bytes transmitidos, e na recepção você deve fazê-lo também, e comparar com o checksum recebido. Se você quer garantir ainda mais a confiabilidade, usa um algoritmo de CRC e mais bits, e você tem uma garantia de que a string chegou intacta no destino, e o receptor quando recebe uma string correta ele manda um comando de aceito (ACK) ou não aceito (nACK).
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor ze » 24 Abr 2008 13:49

complementando o complemento...

Faça amigos, sempre. Mesmo que virtuais. Um dia poderão ser reais.
Oriente-se por suas experiências. Alguns são bem + velhos do que você.
Dê algo de si. Se achar a solução, compartilhe.
Ajude a quem precisa. É melhor do que ser ajudado. Experimente!
- (hifen)
Se não conseguir na primeira, tente de novo! Não desista! Afinal você ainda está aprendendo.
Enfim, se você for um mal agradecido e mal humorado, então só lhe resta o conselho vertical.


abrçs
Editado pela última vez por ze em 24 Abr 2008 13:53, em um total de 1 vez.
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor andre_luis » 24 Abr 2008 13:51

Marcelo Samsoniuk escreveu:...comunicacao serial sincrona precisa de pelo menos 3 fios: RX, TX e CLK...


Bom, até hoje pela manhã, eu achava que I2C era uma comunicação síncrona a 2 fios, nesse caso também incluindo a comunicação implementada pelo PS/2 postado em outro tópico.

Se não for, peço ajuda aos universitários...


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor xultz » 24 Abr 2008 17:45

Na verdade, é possível comunicação síncrona até com 1 fio. A codificação PWM usada pelo HT6P20B por exemplo, é síncrona porque tem o sinal de clock junto com o bit de dados, e é crucial para a comunicação funcionar, e tem 1 sinal apenas. Outro exemplo são os dados gravados em cartão magnético, eles usam codificação F+2F. Ela tem que ser sícrona porque cada um passa o cartão a uma velocidade diferente, e a velocidde inclusive varia enquanto está passando o cartão, e tem apenas 1 sinal também.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor msamsoniuk » 24 Abr 2008 23:29

depois dessa vou ateh embora! adeus =~
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor tcpipchip » 25 Abr 2008 00:05

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

Mensagempor fabim » 25 Abr 2008 08:43

:?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :arrow: :idea:

heim?

KE?

KUEO ?

KUIKUI ?

KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

................
òia gentiu, observe antes de ler o que escrevem..rsrsrs

FAbim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Comunicação Syncrona

Mensagempor mdaweb » 29 Ago 2008 14:33

Ola Pessoall,

Esse é meu primeiro post, mas andei olhando o forum até meu login ser liberado, e gostei muito, os participantes dominam muito bem os assuntos discutidos.

Espero um dia chegar ao nível de conhecimento de vocês.

Bem, eu estou precisando ler um sinal syncrono, que não é padrão, as características desse sinal estão nessa pagina:

http://www.shumatech.com/support/chinese_scales.htm

Penso que SPI resolveria o problema, mas ainda não tenho muito conhecimento de SPI.

Existe alguma outra forma de ler esse tipo de sinal (informação) sem precisar usar SPI?

Qualquer ajuda será bem vinda.


[]'

MDAWEB
mdaweb
Bit
 
Mensagens: 8
Registrado em: 28 Ago 2008 11:52

Re: Comunicação Syncrona

Mensagempor andre_luis » 29 Ago 2008 14:55

MDAWEB,

Me parece ser bastante simples. O unico detalhe é a temporização entre os blocos.

Pode usar interrupçao de I/O, módulo de captura, etc...Qual é a sua dúvida exatamente ?

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Comunicação Syncrona

Mensagempor mdaweb » 29 Ago 2008 15:11

André, todas as duvidas, não faço a minima ideia de como implementar um codigo pra ler tal informação, sou iniciante em "C", já faço alguma coisa em PicBasic Pro, mas ate agora não precisei ler nenhuma informação desse tipo.

Eu não quero nada pronto, so uma ajuda pra começar a entender como funciona isso no Mc, acho que se conseguir pegar o fio da meada, eu ando sozinho, mas pra isso preciso da ajuda de vocês.

[]'

MDA
mdaweb
Bit
 
Mensagens: 8
Registrado em: 28 Ago 2008 11:52

Mensagempor Maurício » 29 Ago 2008 16:45

Mas, que "bayte" foi de doer, isso foi! kkkkkkkkkkkkk

[]'s
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor fabim » 29 Ago 2008 16:53

mdaweb
Modinóiz judaocê.
De um exemplo do componente sincrono que você quer papear.

Pois por exemplo, Microwire, SPI, I2C, I2S.....
Tudissu é Sincrono, até Serial UART/USART pode ser sincrono.

Mais existem alguns detalhes em cada protocolo.

Como deve saber e lido por aí, sincrono é porque usa-se 1 via dados 1 via Clock, este clock informa que o nivel lógico ja foi colocado e que o dispositivo remoto ja pode le-lo..
Mas ólha que interessante, todos os datasheet´s de componentes informam uma carta de tempos, com esta carta de tempos voce descobre em que momento o clock deve acontecer e se:
O clock é sempre low, vai pra high no inicio ou meio do nivel logico depois volta para low....
O clock é sempre high, vai para low no inicio ou meio do nivel logico depois volta para high.....

E mais alguns outros formatos.

Se observar a sua pergunta e minhas colocações, vai ver que o fiofó é mais embaixo.

Por este motivo, escolha um componente "SINCRONO" que vocÊ gostaria de utilizar, informe o P/N para que o pessoal especializado em sacanagem possa lhe ajudar.

Abraços

O meio sério fabim.
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor mdaweb » 29 Ago 2008 17:37

Ok Fabin.

Eu postei um link do dispositivo que quero usar, é um paquimetro digital, esse paquimetro usa um tal de protocolo chines, porque esses paquimetros são fabricados na china heheheh, mas o protocolo usado é fora de padrão, eu já sei que:

O dispositivo não usa handshake
Os dados são enviados em periodos ~300ms continuos.
serial data stream is 48 bits longos
com uma frequencia nominal de 90 kHz
Os 48-bit seriais contem 3 palavras de 24-bit contendo as posições absoluta e relativa do instrumento em binario.
esses 24-bits, são enviados inversos LSB vem primeiro.

Voce pode ter uma visão melhor nesse link

http://www.shumatech.com/support/chinese_scales.htm

Brigadão pela ajuda.

MDAWEB
mdaweb
Bit
 
Mensagens: 8
Registrado em: 28 Ago 2008 11:52

Mensagempor Djalma Toledo Rodrigues » 29 Ago 2008 22:27

rebelk escreveu: 32 bayte de dados para o escravo , a cada bayte recebido o escravo ecoa para o mestre , se o mestre comparar o dado enviado com o dado recebido e der diferente , ele aborta a comunicação


Assim fica muito ineficiente, faça seu protocolo da seg. maneira:
Envie os 32 Bytes e o Checksum ( A soma de todos em 8 bits, despreze os vai um) O Pic escravo faz também o Cheksum e compara se igual ao Cheksum recebido Se iguais envia OK . Se diferente envia EEE


Outra forma: Env. 32 Bytes e mais um Byte cujo valor resulte Checksum igual a ZERO
O Pic escravo faz também o Cheksum e testa se deu Zero se deu Zero envia OK . Se diferente envia EEE
Esta segunda alternativa é mais prática visto existir o Flag Z no Status


Abraço e bom checsum
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Re: Comunicação Syncrona

Mensagempor andre_luis » 30 Ago 2008 22:17

Bom, são 2 questoes diferentes :

mdaweb escreveu:...não faço a minima ideia de como implementar um codigo pra ler tal informação...


Como voce mesmo indicou no site, a cada subida de clock, voce coloca o valor no Bit correspondente à posição. A grosso modo, um trcho do programa pode ser algo tipo :

Código: Selecionar todos
if ( ClockMudouParaPositivo == true )
{
ClockMudouParaPositivo = false ;
if ( Contador < 23 )
   Valor1 |= ( ( 0x0001 ) << (bool)Contador++ ) ;
else
   Valor2 |= ( ( 0x0001 ) << (bool)(24-Contador++) ) ;
}



mdaweb escreveu:...sou iniciante em "C"...


Aí voce vai ter que correr atrás do prejuízo. Tem ótimos tutoriais na web.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

AnteriorPróximo

Voltar para PIC

Quem está online

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

x