Xtal para RS232 e RTC

Software e Hardware para ATMEL

Moderadores: 51, guest2003, brasilma

Xtal para RS232 e RTC

Mensagempor dandrade » 09 Jan 2010 15:03

Estava lendo post em diversos foruns, que afirma ocorrer erros de comunicação RS232 quando o cristal do microcontrolador não é adequado.

Vou usar o ATmega8L opera ate 8Mhz. E o prescaler do temporizador divide por 8-64-256

Mas, qual a frequencia base dos circuitos RS232 ?

Portanto, qual o metodo para selecionar a frequencia do cristal para ter uma base para calendario e comunicação estaveis?

Nesta pagina existe lista das frequencias comerciais dos cristais

http://www.clacristais.hpg.ig.com.br/
dandrade
Nibble
 
Mensagens: 56
Registrado em: 14 Set 2007 15:36

Re: Xtal para RS232 e RTC

Mensagempor msamsoniuk » 09 Jan 2010 15:37

isso varia conforme o hardware da UART utilizada, mas geralmente o clock de referencia tem que ser 16x maior que a taxa que vc quer utilizar. por exemplo, para 9600 bps vc precisa de um clock de 153600Hz. para um clock de 8MHz e prescaler 8, vc teria que programar um divisor 6, porem isso na verdade dah 10416 bps e assim vc tem um desvio de +8% em relacao aos desejados 9600 bps. se usar um clock de 10MHz com prescaler 8 e dividor 8, vc obtem um clock de 156250Hz e uma taxa de 9765bps, o que eh 1% acima do desejado.

agora, para 115200 bps o prescaler divide demais o clock. para 10MHz o divisor teria que ser da ordem de 5.4 e sem prescaler, o que seria portanto 5 ou 6. mas com 5 vc teria +8% de desvio e 6 vc teria quase -10%, o q na pratica eh bastante. se usasse um clock de 8MHz, o divisor seria 4.3, de modo que usando 4 vc teria 8% de erro, tambem muito alto.

bom, vc pode calcular para outros cristais de velocidades diferentes, basicamente a ideia eh:

divisor = clock / (16*rate)

por exemplo, para um clock de 16MHz gerar 115200 bps temos:

dividor = 16000000 / (16*115200) = 8.68056

como os dividores programaveis soh aceitam valores inteiros, temos o valor 8 ou 9 no divisor, o que produz:

rate = 16000000 / (8*16) = 125000 bps
rate = 16000000 / (9*16) = 111111 bps

dae vc calcula o desvio em relacao ao esperado:

desvio = 125000*100/115200-100% = 8.5%
desvio = 111111*100/115200-100% = -3.5%

me parece que uma variacao de uns 3% jah fica bem aceitavel, ao menos eh que o eu li por ae.

nao sei exatamente como funciona, acho que ateh varia conforme o circuito da UART. imagino que durante a recepcao do start bit vc alinha uma borda de clock com a borda do start bit e entao vc usa esse alinhamento durante a recepcao da palavra inteira, que geralmente contem uns 10 bits. se o clock deslizar 16 unidades em 160, vc perde sincronismo justamente no ultimo bit.

obviamente os sistemas possuem um certo ruido e jitter nos clocks, o que faz estes 10% irem para frente e para tras, assim vc acaba chegando nos 3% de tolerancia. se vc tiver um erro menor de 3%, provavelmente nunca vai ter erros de sincronismo. se estiver entre 3 e 10%, os erros vai aparecer esporadicamente conforme o jitter no clock e nas linhas de transmissao. se for acima de 10%, provavelmente ele nunca vai conseguir sincronizar o ultimo e vc vai ter um volume grande de erros.

dandrade escreveu:Estava lendo post em diversos foruns, que afirma ocorrer erros de comunicação RS232 quando o cristal do microcontrolador não é adequado.

Vou usar o ATmega8L opera ate 8Mhz. E o prescaler do temporizador divide por 8-64-256

Mas, qual a frequencia base dos circuitos RS232 ?

Portanto, qual o metodo para selecionar a frequencia do cristal para ter uma base para calendario e comunicação estaveis?

Nesta pagina existe lista das frequencias comerciais dos cristais

http://www.clacristais.hpg.ig.com.br/
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor Milhoci » 09 Jan 2010 15:47

Nada que um RTFM básico não resolva hehe :

http://www.atmel.com/dyn/resources/prod ... oc2486.pdf
página 159 tem uma tabela completa com os valores de cristais, velocidade e taxa de erro.



Milhoci
Milhoci
Byte
 
Mensagens: 148
Registrado em: 12 Out 2006 18:46

Mensagempor tcpipchip » 09 Jan 2010 16:46

Para o AVR voce pode usar o seguinte link

http://www.wormfood.net/avrbaudcalc.php
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor dandrade » 09 Jan 2010 20:12

Grato, adorei a explicação e os links.

Mas pra confirmar..., pra fazer um relogio preciso acho que neste caso não tem haver obter 32768. O que tenho que preocupar é

Frequencia do xtal / [dividido pelo valor do prescaler do timer] = valor inteiro

Depois é somente contar o numero de ciclos, para determinar a base de tempo 1 segundo. Correto ?
dandrade
Nibble
 
Mensagens: 56
Registrado em: 14 Set 2007 15:36

Mensagempor brasilma » 10 Jan 2010 10:11

Correto, futuramente se precisar de + precisão e estabilidade usa um RTC (como o DS1307) acoplado ao MP.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Mensagempor RobL » 10 Jan 2010 12:36

Se for usar cristal para 32.768KHz para formar uma base de 1 seg, poderá usar este mesmo cristal para aferir o oscilador interno e deixá-lo com erro máximo de 1%, passando a usar este (oscilador interno) para comunicação serial com boa estabilidade.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56


Voltar para AVR

Quem está online

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

x