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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren