• Welcome to LusoRobótica - Robótica em Português.
 

atmega88 USART

Started by tiagosilva510, 26 de May de 2011, 11:32

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

tiagosilva510

fiz tal como disseste, alterei o baud rate e no entanto continua sem dar.. o que me aparece no terminal é : þÿÿüÿÿÿÿüÿüÿÿÿÿðüÿþÿÿþÿüÿÿüÿüüüðÿÿÿÿüÿþÿÿÿÿÿÿÿþÿøÿÿðÿÿÿüÿÿðÿÿÿÿþÿÿÿüÿÿÿÿÿÿüÿÿþüÿÿþüÿÿÿÿÿüüðüÿÿÿüÿÿÿÿüüþÿÿÿþÿðÿÿÿüüÿÿÿÿÿÿÿÿÿþüþÿãÿÿÿðÿÿÿþÿÿüüÿÿðÿÿÿÿ

cumprimentos

CBX

o baudrate tem de ser igual nos dois lados

tiagosilva510

e no terminal selecionei o mesmo

Njay

Continuas com o baudrate mal. Neste último teste pegaste no código original e só alteraste o baudrate para 4800 (e no terminal), certo?
Para clock tens que usar um cristal, não sei se é o que tás a fazer (um ressonador nem sempre funciona).

tiagosilva510

boas...

"Esse código compila?...

Baixaste o baudrate para 4800, logo não precisavas de fazer mais nada. As outras alterações eram apenas para poderes manter os 9600 bps."

segundo o q tinhas dito apenas teria de baixar o baudrate, e sim foi o q fiz, meti o terminal e o baud a 4800, nao estou a usar cristar.. tou a usar 1000000Hz do atmega88
#define F_CPU 1000000

Njay

A UART só funciona bem com cristal, não podes usar o clock interno do mega.

tiagosilva510

ah, não sabia disso.. vou por-lhe um cristal de 16 Mhz. e alem disso n tenho q fazer mais nd ao codigo? n tenho que alterar a formula
#define BAUD_PRESCALLER F_CPU/16/BAUDRATE-1

Njay

#22
O clock interno do mega tem um erro muito grande e ainda varia muito com a temperatura, por isso não serve para usar com a UART.

Quote from: tiagosilva510 on 30 de May de 2011, 22:20
(...) e alem disso n tenho q fazer mais nd ao codigo? n tenho que alterar a formula
#define BAUD_PRESCALLER F_CPU/16/BAUDRATE-1

Só precisas de alterar o F_CPU. O BAUD_PRESCALER depende automaticamente do F_CPU.
A propósito, convém envolver o cálculo entre parentesis, assim:

#define BAUD_PRESCALLER  (F_CPU/16/BAUDRATE-1)

Habituem-se a fazer isto em todas as macros para evitar serem apanhados de surpresa por problemas "estranhos", como por exemplo nesta utilização:

a = BAUD_PRESCALLER * 2;

E os argumentos das macros também devem ser envolvidos em parentesis no corpo da macro.

tiagosilva510

ja fiz isso, mudei a frequencia no programa, meti um cristal de 16 Mhz e desta vez no terminal deu:

<0><0><0><0><0><0><0><0><0><0><0><0><0><0>

xiserre

tas a complicar muito.. se compilares o programa original o que faz? tens os fuses certos?

Njay

Já agora, tás a usar um conversor RS232<->UART-TTL, certo?

tiagosilva510

compila sem erros, fuses? como assim?

tiagosilva510

sim, tou a usar um max 232

xiserre

alem de configurares a velocidade do atmega no programa, precisas de por os fuses certos para usares o cristal de 16mhz

tiagosilva510