Probleme mit ATMega128 UART

Gast #1956543
Lesenswert?
• ▲
▼
Guten Morgen liebe Gemeinde,

ich bin neu hier im Forum und hoffe mir kann hier geholfen werden.

Ich versuche eine einfache USB Verbindung zwischen PC und 
Mikrocontroller herzustellen. Ich verwende dafür ein MEGA128-USB-Board 
mit CP2102 Silab USB-USART-Bridge.

Meine Initialisierung:

#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)

void InitUART1(void)
{
  UBRR1H = UBRR_VAL >> 8;
    UBRR1L = UBRR_VAL & 0xFF;

  // enable receiver and trasmitter
  UCSR1B = (1<<RXEN)|(1<<TXEN);

  // set frame format: 1stop bit, 8data
  UCSR1C = (0<<USBS)|(2<<UCSZ0);
}

Die berechnete Baudrate habe ich über ein Display ausgeben lassen, die 
stimmt.

Wenn ich nun ein Zeichen sende empfängt das Terminal am PC leider ein 
anderes. Ich sende mit dieser Funktion:

void TestSend(void)
{
  while (!(UCSR1A & (1<<UDRE)))  // warten bis Senden moeglich
  ;
  UDR1 = 'T';
}

Nun hab ich in dem Forum gelesen, dass beim ATMega128 der ATmega103 
Compatibility Mode standardmäßig aktiviert ist.
Ich hab versucht den zu deaktivieren, leider zeigt mir aber AVR Studio 
nur die Fuses von einem ATMega32 an.

Vielleicht hat jemand schon meinen Fehler gefunden und kann mir helfen.
Falls ich irgendwelche wichtigen Infos vergessen habe bitte melden

großes Dankeschön schonmal
Gast #1957393
Lesenswert?
• ▲
▼
Nabend,

Karl heinz Buchegger schrieb:
> Mit 99% Sicherheit darin, dass dein µC nicht mit der Taktfrequenz
> arbeitet, die du bei F_CPU angegeben hast.

sehe ich auch so, obwohl...

dave0815 schrieb:
> Die berechnete Baudrate habe ich über ein Display ausgeben lassen, die
> stimmt.

...

dave0815 schrieb:
> hoffentlich ist es nur das.
> Ich such gleich mal im User Manual wie ich den Oszillator auswähl.


...es fehlen wohl noch einige Grundlagen. Zum Glück gibt es kein 
Tutorial in diesem Forum ;-)

MfG
Gast #1957400
Lesenswert?
• ▲
▼
Ich hab's mal im Manual nachgeschlagen und überprüft.

Die Fuses sind soweit ich beurteilen kann in Ordnung.
Es ist "external high freq. Crystal" für mein 16MHz Quarz ausgewählt.
Zusätzlich ist das CKOPT gesetzt.
Angehängte Dateien:
Gast #1957593
Lesenswert?
• ▲
▼
>  UCSR1C = (0<<USBS)|(2<<UCSZ0);

Wer solche Abkürzungen benutzt sollte sich nicht wundern
wenn das in die Hose geht. So sieht das besser aus:

UCSR1C = (0<<USBS1) | (1<<UCSZ11) (1<<UCSZ10);

oder

UCSR1C = (0<<USBS1)|(3<<UCSZ10);

Du hast deinen UART auf 7Bit gestellt.
Gast #1957617
Lesenswert?
• ▲
▼
wow, danke für die vielen Tipps.

Es war doch tatsächlich die falsche Anzahl Datenbits eingestellt.

Ich muss ehrlich gestehen ich hab die Initialisierung größtenteils aus 
dem UserManual abgetippt und da muss mir dann ein Fehler unterlaufen 
sein.

Ich versteh auch jetzt erst die Schreibweise wie man die Bits setzt. Aus 
den Abkürzungen im Manual wurde ich nicht schlau.

Auf jeden Fall bedank ich mich bei allen die mein Problem durchgelesen 
haben und vor allem beim holger der den Fehler entdeckt hat.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.