• 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.

senso

Penso que os A/PA já suportam 16Mhz, mas para isso só vendo na datasheet, mas se é um atmega88 sem mais nada no nome o máximo é 8Mhz.
Avr fanboy

tiagosilva510


Njay

#47
Esse mega88 corre até 20MHz, podes usar o cristal de 16MHz. Tá lá escarrapachado na 1ª página da datasheet :)

tiagosilva510

No SUT_CKSEL, carrega na seta e escolhe a opção mais parecida com isto:
Full swing crystal, startup time 65ms ou qualquer coisa assim do género.


Meto na mesma isto? com cristal de 16?

tiagosilva510

ja testei mas n da.. o que aparece na consola agora é

<0>€€€<0>€<0><0>€<0><0><0><0>€€<0>€€€€À€€<0><0><0>€€<0>€€€€À€€€€€<0><0><0>€€€<0><0><0><0>€€<0><0><0>€€<0><0><0>€<0>€

xiserre

o problema esta na divisao do clock. tira o visto do fuse ckdiv8..
O que acontece e que tens o cristal de 16mhz, mas a pll do micro divide o clock por 8, ficando a 2mhz.. retira esse fuse e tudo deve funcionar

tiagosilva510

ja fiz isso e testei, mas mais uma vez o que apareceu no terminal foi :

ÿüÿÿÿüÿüÿÿÿÿÿüüÿÿÿÿÿÿÿÿÿÿÿüÿÿþÿÿÿÿüüÿÿÿÿÿÿÿÿþüÿÿÿþÿÿÿþÿÿÿÿþÿÿÿÿüÿÿþÿÿÿûãÿÿÿÿüÿÿüüÿüÿüüÿüÿÿÿÿÿþüÿþüÿÿþÿüÿÿüÿÿÿÏðÿÿÿÿüÿÿÿÿþÿþüþÿþþüÿüÿüðÿÿÿÿÿÿÿÿüþÿþÿÿÿÿþüÿÿÿÿÿüüÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿüÿþÿÿÿþþüÿÿÿÿÿÿÿÿþðÿÿÿÿþÿÿþðÿÿÿÿüÿüÿÿÿÿÿüüÿÿÿÿÿÿðÿÿÿÿÿÿÿÿüþÿþÿ

xiserre

tou sem ideias. se tas a compilar o codigo original, nao tenho mais ideias

tiagosilva510

sim. tou a compilar o 1º código, e fiz td direito como disseram

senso

Mostra os fuses que tens agora, só para o caso de estar ainda algo errado.

E estás a meter o terminal com 8 bits de dados, sem paridade e 1 stop bit?
Avr fanboy

tiagosilva510

fica aqui tudo direito o que estou a fazer, codigo, fuses e terminal:

#define F_CPU 16000000
#include <stdio.h>
#include <avr/io.h>
#include <util/delay.h>
#define BAUDRATE 4800
#define BAUD_PRESCALLER (F_CPU/16/BAUDRATE - 1)

//declaração das funções
void USART_init(void);
unsigned char USART_receive(void);
void USART_send( unsigned char data);
void USART_putstring(char* StringPtr);

char String[]="OLA"; /*String[] que dizer que é um
array, mas ao colocar-mos o texto entre "" indicamos ao
compilador que é uma string e ele coloca automáticamente o
terminador null e temos assim uma string de texto usavel*/
int main(void){
            USART_init(); //Inicializar a usart
            while(1){ //Loop infinito
                  USART_putstring(String); //Passamos a nossa string á função que a escreve via serial
                  _delay_ms(50); //E a cada 5s re-enviamos o texto
                  }
            return 0;
            }

void USART_init(void){
                  UBRR0H = (uint8_t)(BAUD_PRESCALLER>>8);
                  UBRR0L = (uint8_t)(BAUD_PRESCALLER);
                  UCSR0B = (1<<RXEN0)|(1<<TXEN0);
                  UCSR0C = (3<<UCSZ00);
                }

unsigned char USART_receive(void){
                        while(!(UCSR0A & (1<<RXC0)));
                        return UDR0;
                         }

void USART_send( unsigned char data){
                           while(!(UCSR0A & (1<<UDRE0)));
                           UDR0 = data;
                           }

void USART_putstring(char* StringPtr){
                           while(*StringPtr != 0x00){
                                             USART_send(*StringPtr);
                                             StringPtr++;
                                               }
                             }








xiserre


senso

Isso parece ser baud-rate errada, porque estás a receber, não está é a chegar em condições.
Avr fanboy

tiagosilva510

ha qqr coisa que nao me deixa receber a string, pois eu altero o delay e demoro a receber no terminal, n estou é mesmo a receber a string.

=/

xiserre

a baudrate ta mal.. tens a 4800..