Forum: Mikrocontroller und Digitale Elektronik Atmega644 UART Problem


von MandA K. (Firma: MAMIMO STudios) (bastlomat)


Lesenswert?

Ich versuche mit einerm Atmega644 bei 20MHz mit einer Baud von 2400 bps 
einfach nur ein Zeichen an den PC zu senden.

Die initialisierung sieht so aus:
1
 UBRR0H = 520>>8;
2
  UBRR0L = 520;
3
  UCSR0B = (1 << TXEN0) | (1 << TXCIE0); 
4
  UCSR0C = (1 << USBS0) | (3 << UCSZ00);
die 520 hab ich aus dem Datenblatt den AT644. Dann in der main wird 
einmal was gesendet.
1
UDR0='a';
danach wird über eine Interruptroutine, die bei leerem Sendepuffer 
ausgelöst wird, wieder ein neues Zeichen geschrieben.
1
ISR(USART0_UDRE_vect)
2
{
3
   UDR0='b';
4
}

schau ich mir das ganze nun im Terminalprog. an, sendet er, egal was ich 
eingeben immer 00 00 80 als Hex.

Woher könnte dieser Fehler kommen?!

von Klaus2m5 (Gast)


Lesenswert?

Reihenfolge! UCSR0C muss vor UCSR0B geladen werden. Du kannst den USART 
nicht erst enablen und dann konfigurieren.

von MandA K. (Firma: MAMIMO STudios) (bastlomat)


Lesenswert?

Gut Punkt. Hab ich geändert. Das Empfangsergebnis ist trotzdem 
unverändert!

von Thomas E. (thomase)


Lesenswert?

MandA K. schrieb:
> UBRR0H = 520>>8;
>   UBRR0L = 520;

Das sind zwei 8-Bit Register oder vom Compiler zusammengesetzt ein 
16-Bit Register UBRR0 = 520. Dann klappt das auch.

mfg.

von Thomas E. (thomase)


Lesenswert?

Klaus2m5 schrieb:
> Reihenfolge! UCSR0C muss vor UCSR0B geladen werden. Du kannst den USART
> nicht erst enablen und dann konfigurieren.

Das ist vollkommen egal.

mfg.

von Oliver J. (skriptkiddy)


Lesenswert?

MandA K. schrieb:
> UCSR0B = (1 << TXEN0) | (1 << TXCIE0);
Für die implementierte ISR hast du den falschen Interrupt aktiviert.
Versuchs mal mit dem UDRIE Bit.

Gruß Skriptkiddy

von MandA K. (Firma: MAMIMO STudios) (bastlomat)


Lesenswert?

Hab ich grad auch gemerkt! Aber trotzdem, auch wenn ich ohne Interrupt 
einfach nur ein Zeichen sende und dann stoppe. sendet er immer 3 Werte!! 
nach jedem Drücken des Resetknöpfchens am stk500 werden wieder 3 Werte 
im Terminal angezeigt?!?
Hä?
Wo kommen die her?

von Oliver J. (skriptkiddy)


Lesenswert?

Zeig mal den ganzen Code her.

Edit:
Flasht du auch das richtige Hexfile?

von Stefan E. (sternst)


Lesenswert?

Sieht nach gesetzter CKDIV8-Fuse aus.

von Michael (Gast)


Lesenswert?

Guck dir die gesendeten Daten mal mit einem Oszi an und prüfe die 
Bitdauer, damit klar ist, ob die Baudrate stimmt.

von MandA K. (Firma: MAMIMO STudios) (bastlomat)


Lesenswert?

Freunde Freunde das Leben ist so ungerecht.

CKDIV8 war natürlich gesetzt!!!

Jetzt sendet er brav seine Daten. Ein halber Tag wegen einem blöden 
Häkchen! Mann das ist echt hart.


Danke an euch!!

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.