Forum: Compiler & IDEs Probleme mit ATMega128 UART


von dave0815 (Gast)


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

von Sauger (Gast)


Lesenswert?

Moin,

dave0815 schrieb:
> Ich hab versucht den zu deaktivieren, leider zeigt mir aber AVR Studio
> nur die Fuses von einem ATMega32 an.

dann stell im AVRStudio den richtigen Prozessortyp ein.
im Programmer Dialog -> Reiter Main oben
MfG

von dave0815 (Gast)


Lesenswert?

danke für den Tipp,
hat leider nicht geholfen, weil der Kompatibilitätsmodus schon 
deaktiviert war.

Hat jemand noch eine andere Idee woran es liegen könnte?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

dave0815 schrieb:

> hat leider nicht geholfen, weil der Kompatibilitätsmodus schon
> deaktiviert war.

Der berechtigte Hinweis von Sauger bezieht sich auf "Fuses von einem 
ATMega32" in Beitrag "Probleme mit ATMega128 UART" und ist 
damit noch nicht beantwortet.

von Karl H. (kbuchegg)


Lesenswert?

dave0815 schrieb:
> danke für den Tipp,
> hat leider nicht geholfen, weil der Kompatibilitätsmodus schon
> deaktiviert war.
>
> Hat jemand noch eine andere Idee woran es liegen könnte?

Mit 99% Sicherheit darin, dass dein µC nicht mit der Taktfrequenz 
arbeitet, die du bei F_CPU angegeben hast.

von dave0815 (Gast)


Lesenswert?

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

danke

von Sauger (Gast)


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

von dave0815 (Gast)


Angehängte Dateien:

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.

von Sauger (Gast)


Lesenswert?

und wenn du uns jetzt noch sagst wie F_CPU und BAUD aussehen, lässt sich 
das Geheimnis lüften.

von Karl H. (kbuchegg)


Lesenswert?

dave0815 schrieb:
> 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.

Und, hast du auch überprüft, ob der aktiv ist?
http://www.mikrocontroller.net/articles/AVR_Checkliste#UART.2FUSART

von holger (Gast)


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.

von dave0815 (Gast)


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.

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.