Forum: Compiler & IDEs Probleme mit USART im ATmega48


von Loipe (Gast)


Lesenswert?

Hallo,

ich habe einen ATmega48 gekauft. Ich habe einen IC angeschlossen, der
dann mit 19200bps Daten an den Atmel schickt. Diese leite ich dann zum
PC weiter. Nun kommen aber immer nur Hex Zahlen mit den Werten 80 oder
00 an. Wenn ich z.B. einen ATtiny2313 einbaue, funktioniert es
einwandfrei.

Kann mir mal jemand ein kleines Testprogramm für die serielle
Schnittstelle schicken das mit dem ATmega48 funktioniert.

Danke

MfG Alex

von Andreas W. (Gast)


Lesenswert?

Funktioniert denn das Senden vom µC zum PC alleine?
Möglicherweise ist der USART falsch eingestellt...Poste doch mal den
Code.

Gruß
Andreas

von Loipe (Gast)


Lesenswert?

Hallo,
das ist mein Code
der PC empfängt Hex: 80 00 80
F_CPU steht im Makefile und hat den Wert 8000000


#include <stdlib.h>
#include <avr/io.h>

#define UART_BAUD_RATE      19200

void uart_init(unsigned int baudrate)
{
    UBRR0H = ((unsigned char)(baudrate>>8))&0x80;
    UBRR0L = (unsigned char) baudrate;
    UCSR0B = _BV(RXCIE0)|(1<<RXEN0)|(1<<TXEN0);
    UCSR0C = (3<<UCSZ00);
}

void uart_putc(unsigned char data)
{
    while ( !(UCSR0A & (1<<UDRE0)))
    {
        asm("nop");
    }
    UDR0=data;
}

int main(void)
{
    uart_init(F_CPU/UART_BAUD_RATE/16-1);
    uart_putc('A');
}

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> F_CPU steht im Makefile und hat den Wert 8000000

Und mit welcher Taktfrequenz läuft dein ATmega48?

(Hinweis: guck dir die Fuses an...)

von Loipe (Gast)


Lesenswert?

Habe den Fehler gefunden

Dieses Fuse war gesetzt.
Divide clock by 8 internally

Danke für die Hilfe

MfG Alex

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.